From 51f8794aa659310dd61186f2285f3998c721f5b4 Mon Sep 17 00:00:00 2001 From: Alex <33497058+bexsoft@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:07:49 -0600 Subject: [PATCH] Release v1.6.3 (#3408) --- CHANGELOG.md | 6 + go.mod | 2 +- web-app/build/scripts/pdf.worker.min.mjs | 56971 ++++++++++++++++++++- 3 files changed, 56977 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a97252f290..567e5b4a4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ # Changelog +## Release v1.6.3 + +Additional Changes: + +- Updated go.mod version + ## Release v1.6.2 Bug Fix: diff --git a/go.mod b/go.mod index 4f5ff9a624..8c1753d614 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/minio/console -go 1.22.5 +go 1.22 require ( github.com/blang/semver/v4 v4.0.0 diff --git a/web-app/build/scripts/pdf.worker.min.mjs b/web-app/build/scripts/pdf.worker.min.mjs index 4f33c537b0..40161952bb 100644 --- a/web-app/build/scripts/pdf.worker.min.mjs +++ b/web-app/build/scripts/pdf.worker.min.mjs @@ -18,4 +18,56973 @@ * * @licend The above is the entire license notice for the * JavaScript code in this page - */var e={d:(t,i)=>{for(var a in i)e.o(i,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:i[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},__webpack_exports__ = globalThis.pdfjsWorker = {};e.d(__webpack_exports__,{WorkerMessageHandler:()=>WorkerMessageHandler});const t=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),i=[1,0,0,1,0,0],a=[.001,0,0,.001,0,0],s=1.35,r=.35,n=.25925925925925924,g=1,o=2,c=4,C=8,h=16,l=64,Q=256,E="pdfjs_internal_editor_",u=3,d=9,f=13,p=15,m={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},y=0,w=4,D=1,b=2,F=3,S=1,k=2,R=3,N=4,G=5,x=6,U=7,M=8,L=9,H=10,J=11,Y=12,v=13,K=14,T=15,q=16,O=17,W=20,j="Group",X="R",Z=1,V=2,z=4,_=16,$=32,AA=128,eA=512,tA=1,iA=2,aA=4096,sA=8192,rA=32768,nA=65536,gA=131072,oA=1048576,IA=2097152,cA=8388608,CA=16777216,hA=1,BA=2,lA=3,QA=4,EA=5,uA={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},dA={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},fA={O:"PageOpen",C:"PageClose"},pA={ERRORS:0,WARNINGS:1,INFOS:5},mA={NONE:0,BINARY:1},yA=1,wA=2,DA=3,bA=4,FA=5,SA=6,kA=7,RA=8,NA=9,GA=10,xA=11,UA=12,MA=13,LA=14,HA=15,JA=16,YA=17,vA=18,KA=19,TA=20,qA=21,OA=22,PA=23,WA=24,jA=25,XA=26,ZA=27,VA=28,zA=29,_A=30,$A=31,Ae=32,ee=33,te=34,ie=35,ae=36,se=37,re=38,ne=39,ge=40,oe=41,Ie=42,ce=43,Ce=44,he=45,Be=46,le=47,Qe=48,Ee=49,ue=50,de=51,fe=52,pe=53,me=54,ye=55,we=56,De=57,be=58,Fe=59,Se=60,ke=61,Re=62,Ne=63,Ge=64,xe=65,Ue=66,Me=67,Le=68,He=69,Je=70,Ye=71,ve=72,Ke=73,Te=74,qe=75,Oe=76,Pe=77,We=80,je=81,Xe=83,Ze=84,Ve=85,ze=86,_e=87,$e=88,At=89,et=90,tt=91,it=1,at=2;let st=pA.WARNINGS;function getVerbosityLevel(){return st}function info(e){st>=pA.INFOS&&console.log(`Info: ${e}`)}function warn(e){st>=pA.WARNINGS&&console.log(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,i=null){if(!e)return null;try{if(i&&"string"==typeof e){if(i.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\./g);t?.length>=2&&(e=`http://${e}`)}if(i.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const a=t?new URL(e,t):new URL(e);if(function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(a))return a}catch{}return null}function shadow(e,t,i,a=!1){Object.defineProperty(e,t,{value:i,enumerable:!a,configurable:!0,writable:!1});return i}const rt=function BaseExceptionClosure(){function BaseException(e,t){this.constructor===BaseException&&unreachable("Cannot initialize BaseException.");this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends rt{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends rt{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends rt{constructor(e){super(e,"InvalidPDFException")}}class MissingPDFException extends rt{constructor(e){super(e,"MissingPDFException")}}class UnexpectedResponseException extends rt{constructor(e,t){super(e,"UnexpectedResponseException");this.status=t}}class FormatError extends rt{constructor(e){super(e,"FormatError")}}class AbortException extends rt{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,i=8192;if(t>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}class FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get platform(){return"undefined"!=typeof navigator&&"string"==typeof navigator?.platform?shadow(this,"platform",{isMac:navigator.platform.includes("Mac")}):shadow(this,"platform",{isMac:!1})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const nt=Array.from(Array(256).keys(),(e=>e.toString(16).padStart(2,"0")));class Util{static makeHexColor(e,t,i){return`#${nt[e]}${nt[t]}${nt[i]}`}static scaleMinMax(e,t){let i;if(e[0]){if(e[0]<0){i=t[0];t[0]=t[2];t[2]=i}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){i=t[1];t[1]=t[3];t[3]=i}t[1]*=e[3];t[3]*=e[3]}else{i=t[0];t[0]=t[1];t[1]=i;i=t[2];t[2]=t[3];t[3]=i;if(e[1]<0){i=t[1];t[1]=t[3];t[3]=i}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){i=t[0];t[0]=t[2];t[2]=i}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t){return[e[0]*t[0]+e[1]*t[2]+t[4],e[0]*t[1]+e[1]*t[3]+t[5]]}static applyInverseTransform(e,t){const i=t[0]*t[3]-t[1]*t[2];return[(e[0]*t[3]-e[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,(-e[0]*t[1]+e[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i]}static getAxialAlignedBoundingBox(e,t){const i=this.applyTransform(e,t),a=this.applyTransform(e.slice(2,4),t),s=this.applyTransform([e[0],e[3]],t),r=this.applyTransform([e[2],e[1]],t);return[Math.min(i[0],a[0],s[0],r[0]),Math.min(i[1],a[1],s[1],r[1]),Math.max(i[0],a[0],s[0],r[0]),Math.max(i[1],a[1],s[1],r[1])]}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e){const t=[e[0],e[2],e[1],e[3]],i=e[0]*t[0]+e[1]*t[2],a=e[0]*t[1]+e[1]*t[3],s=e[2]*t[0]+e[3]*t[2],r=e[2]*t[1]+e[3]*t[3],n=(i+r)/2,g=Math.sqrt((i+r)**2-4*(i*r-s*a))/2,o=n+g||1,c=n-g||1;return[Math.sqrt(o),Math.sqrt(c)]}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const i=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),a=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(i>a)return null;const s=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),r=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return s>r?null:[i,s,a,r]}static#A(e,t,i,a,s,r,n,g,o,c){if(o<=0||o>=1)return;const C=1-o,h=o*o,l=h*o,Q=C*(C*(C*e+3*o*t)+3*h*i)+l*a,E=C*(C*(C*s+3*o*r)+3*h*n)+l*g;c[0]=Math.min(c[0],Q);c[1]=Math.min(c[1],E);c[2]=Math.max(c[2],Q);c[3]=Math.max(c[3],E)}static#e(e,t,i,a,s,r,n,g,o,c,C,h){if(Math.abs(o)<1e-12){Math.abs(c)>=1e-12&&this.#A(e,t,i,a,s,r,n,g,-C/c,h);return}const l=c**2-4*C*o;if(l<0)return;const Q=Math.sqrt(l),E=2*o;this.#A(e,t,i,a,s,r,n,g,(-c+Q)/E,h);this.#A(e,t,i,a,s,r,n,g,(-c-Q)/E,h)}static bezierBoundingBox(e,t,i,a,s,r,n,g,o){if(o){o[0]=Math.min(o[0],e,n);o[1]=Math.min(o[1],t,g);o[2]=Math.max(o[2],e,n);o[3]=Math.max(o[3],t,g)}else o=[Math.min(e,n),Math.min(t,g),Math.max(e,n),Math.max(t,g)];this.#e(e,i,s,n,t,a,r,g,3*(3*(i-s)-e+n),6*(e-2*i+s),3*(i-e),o);this.#e(e,i,s,n,t,a,r,g,3*(3*(a-r)-t+g),6*(t-2*a+r),3*(a-t),o);return o}}const gt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e){if(e[0]>="ï"){let t;if("þ"===e[0]&&"ÿ"===e[1]){t="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){t="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8");if(t)try{const i=new TextDecoder(t,{fatal:!0}),a=stringToBytes(e),s=i.decode(a);return s.includes("")?s.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g,""):s}catch(e){warn(`stringToPDFString: "${e}".`)}}const t=[];for(let i=0,a=e.length;i{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:i=!1}){const a=new Dict(e),s=new Map;for(const e of t)if(e instanceof Dict)for(const[t,a]of Object.entries(e._map)){let e=s.get(t);if(void 0===e){e=[];s.set(t,e)}else if(!(i&&a instanceof Dict))continue;e.push(a)}for(const[t,i]of s){if(1===i.length||!(i[0]instanceof Dict)){a._map[t]=i[0];continue}const s=new Dict(e);for(const e of i)for(const[t,i]of Object.entries(e._map))void 0===s._map[t]&&(s._map[t]=i);s.size>0&&(a._map[t]=s)}s.clear();return a.size>0?a:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=wt[e];if(t)return t;const i=/^(\d+)R(\d*)$/.exec(e);return i&&"0"!==i[1]?wt[e]=new Ref(parseInt(i[1]),i[2]?parseInt(i[2]):0):null}static get(e,t){const i=0===t?`${e}R`:`${e}R${t}`;return wt[i]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{constructor(){this.constructor===BaseStream&&unreachable("Cannot initialize BaseStream.")}get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,i=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return null}}const bt=/^[1-9]\.\d$/;function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends rt{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends rt{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends rt{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends rt{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let i=0;for(let a=0;a0,"The number should be a positive integer.");const i=[];let a;for(;e>=1e3;){e-=1e3;i.push("M")}a=e/100|0;e%=100;i.push(Ft[a]);a=e/10|0;e%=10;i.push(Ft[10+a]);i.push(Ft[20+e]);const s=i.join("");return t?s.toLowerCase():s}function log2(e){return e<=0?0:Math.ceil(Math.log2(e))}function readInt8(e,t){return e[t]<<24>>24}function readUint16(e,t){return e[t]<<8|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every((e=>"number"==typeof e))}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\[(\d+)\]$/;return e.split(".").map((e=>{const i=e.match(t);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:e,pos:0}}))}function escapePDFName(e){const t=[];let i=0;for(let a=0,s=e.length;a126||35===s||40===s||41===s||60===s||62===s||91===s||93===s||123===s||125===s||47===s||37===s){i"\n"===e?"\\n":"\r"===e?"\\r":`\\${e}`))}function _collectJS(e,t,i,a){if(!e)return;let s=null;if(e instanceof Ref){if(a.has(e))return;s=e;a.put(s);e=t.fetch(e)}if(Array.isArray(e))for(const s of e)_collectJS(s,t,i,a);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let a;t instanceof BaseStream?a=t.getString():"string"==typeof t&&(a=t);a&&=stringToPDFString(a).replaceAll("\0","");a&&i.push(a)}_collectJS(e.getRaw("Next"),t,i,a)}s&&a.remove(s)}function collectActions(e,t,i){const a=Object.create(null),s=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(s)for(let t=s.length-1;t>=0;t--){const r=s[t];if(r instanceof Dict)for(const t of r.getKeys()){const s=i[t];if(!s)continue;const n=[];_collectJS(r.getRaw(t),e,n,new RefSet);n.length>0&&(a[s]=n)}}if(t.has("A")){const i=[];_collectJS(t.get("A"),e,i,new RefSet);i.length>0&&(a.Action=i)}return objectSize(a)>0?a:null}const St={60:"<",62:">",38:"&",34:""",39:"'"};function*codePointIter(e){for(let t=0,i=e.length;t55295&&(i<57344||i>65533)&&t++;yield i}}function encodeToXmlString(e){const t=[];let i=0;for(let a=0,s=e.length;a55295&&(s<57344||s>65533)&&a++;i=a+1}}if(0===t.length)return e;i: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:i,fontWeight:a,italicAngle:s}=e;if(!validateFontName(i,!0))return!1;const r=a?a.toString():"";e.fontWeight=t.has(r)?r:"400";const n=parseFloat(s);e.italicAngle=isNaN(n)||n<-90||n>90?"14":s.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec(e);if(t?.[2]){const e=t[2];let i=!1;"true"===t[3]&&"app.launchURL"===t[1]&&(i=!0);return{url:e,newWindow:i}}return null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[i,a]of e){if(!i.startsWith(E))continue;let e=t.get(a.pageIndex);if(!e){e=[];t.set(a.pageIndex,e)}e.push(a)}return t.size>0?t:null}function isAscii(e){return/^[\x00-\x7F]*$/.test(e)}function stringToUTF16HexString(e){const t=[];for(let i=0,a=e.length;i>8&255).toString(16).padStart(2,"0"),(255&a).toString(16).padStart(2,"0"))}return t.join("")}function stringToUTF16String(e,t=!1){const i=[];t&&i.push("þÿ");for(let t=0,a=e.length;t>8&255),String.fromCharCode(255&a))}return i.join("")}function getRotationMatrix(e,t,i){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,i];case 270:return[0,-1,1,0,0,i];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class Stream extends BaseStream{constructor(e,t,i,a){super();this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+i||this.bytes.length;this.dict=a}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e)return t.subarray(i,a);let s=i+e;s>a&&(s=a);this.pos=s;return t.subarray(i,s)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,i=null){return new Stream(this.bytes.buffer,e,t,i)}}class StringStream extends Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{constructor(e,t,i){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this._loadedChunks=new Set;this.numChunks=Math.ceil(e/t);this.manager=i;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=i;ethis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const i=Math.floor(e/this.chunkSize);if(i>this.numChunks)return;const a=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let s=i;s=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,i=this.pos,a=this.end;if(!e){a>this.progressiveDataLength&&this.ensureRange(i,a);return t.subarray(i,a)}let s=i+e;s>a&&(s=a);s>this.progressiveDataLength&&this.ensureRange(i,s);this.pos=s;return t.subarray(i,s)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,i=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),i=Math.floor((this.end-1)/e)+1,a=[];for(let e=t;e{const readChunk=({value:r,done:n})=>{try{if(n){const t=arrayBuffersToBytes(a);a=null;e(t);return}s+=r.byteLength;i.isStreamingSupported&&this.onProgress({loaded:s});a.push(r);i.read().then(readChunk,t)}catch(e){t(e)}};i.read().then(readChunk,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(const t of e)this.stream.hasChunk(t)||i.add(t);if(0===i.size)return Promise.resolve();const a=Promise.withResolvers();this._promisesByRequest.set(t,a);const s=[];for(const e of i){let i=this._requestsByChunk.get(e);if(!i){i=[];this._requestsByChunk.set(e,i);s.push(e)}i.push(t)}if(s.length>0){const e=this.groupChunks(s);for(const t of e){const e=t.beginChunk*this.chunkSize,i=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,i).catch(a.reject)}}return a.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const i=this.getBeginChunk(e),a=this.getEndChunk(t),s=[];for(let e=i;e=0&&a+1!==r){t.push({beginChunk:i,endChunk:a+1});i=r}s+1===e.length&&t.push({beginChunk:i,endChunk:r+1});a=r}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,i=void 0===e.begin,a=i?this.progressiveDataLength:e.begin,s=a+t.byteLength,r=Math.floor(a/this.chunkSize),n=s0||g.push(i)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(n);Number.isInteger(e)&&this._requestChunks([e])}for(const e of g){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}class ColorSpace{constructor(e,t){this.constructor===ColorSpace&&unreachable("Cannot initialize ColorSpace.");this.name=e;this.numComps=t}getRgb(e,t){const i=new Uint8ClampedArray(3);this.getRgbItem(e,t,i,0);return i}getRgbItem(e,t,i,a){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,i,a,s,r,n){unreachable("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,i,a,s,r,n,g,o){const c=t*i;let C=null;const h=1<h&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=n<=8?new Uint8Array(h):new Uint16Array(h);for(let e=0;e=.99554525?1:this.#l(0,1,1.055*e**(1/2.4)-.055)}#l(e,t,i){return Math.max(e,Math.min(t,i))}#Q(e){return e<0?-this.#Q(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#I}#E(e,t,i){if(0===e[0]&&0===e[1]&&0===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[2];return}const a=this.#Q(0),s=(1-a)/(1-this.#Q(e[0])),r=1-s,n=(1-a)/(1-this.#Q(e[1])),g=1-n,o=(1-a)/(1-this.#Q(e[2])),c=1-o;i[0]=t[0]*s+r;i[1]=t[1]*n+g;i[2]=t[2]*o+c}#u(e,t,i){if(1===e[0]&&1===e[2]){i[0]=t[0];i[1]=t[1];i[2]=t[2];return}const a=i;this.#c(CalRGBCS.#i,t,a);const s=CalRGBCS.#n;this.#C(e,a,s);this.#c(CalRGBCS.#a,s,i)}#d(e,t,i){const a=i;this.#c(CalRGBCS.#i,t,a);const s=CalRGBCS.#n;this.#h(e,a,s);this.#c(CalRGBCS.#a,s,i)}#t(e,t,i,a,s){const r=this.#l(0,1,e[t]*s),n=this.#l(0,1,e[t+1]*s),g=this.#l(0,1,e[t+2]*s),o=1===r?1:r**this.GR,c=1===n?1:n**this.GG,C=1===g?1:g**this.GB,h=this.MXA*o+this.MXB*c+this.MXC*C,l=this.MYA*o+this.MYB*c+this.MYC*C,Q=this.MZA*o+this.MZB*c+this.MZC*C,E=CalRGBCS.#g;E[0]=h;E[1]=l;E[2]=Q;const u=CalRGBCS.#o;this.#u(this.whitePoint,E,u);const d=CalRGBCS.#g;this.#E(this.blackPoint,u,d);const f=CalRGBCS.#o;this.#d(CalRGBCS.#r,d,f);const p=CalRGBCS.#g;this.#c(CalRGBCS.#s,f,p);i[a]=255*this.#B(p[0]);i[a+1]=255*this.#B(p[1]);i[a+2]=255*this.#B(p[2])}getRgbItem(e,t,i,a){this.#t(e,t,i,a,1)}getRgbBuffer(e,t,i,a,s,r,n){const g=1/((1<this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#f(e){return e>=6/29?e**3:108/841*(e-4/29)}#p(e,t,i,a){return i+e*(a-i)/t}#t(e,t,i,a,s){let r=e[t],n=e[t+1],g=e[t+2];if(!1!==i){r=this.#p(r,i,0,100);n=this.#p(n,i,this.amin,this.amax);g=this.#p(g,i,this.bmin,this.bmax)}n>this.amax?n=this.amax:nthis.bmax?g=this.bmax:g>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,i){let a=0;for(let s=i;s>=0;s--){a+=e[s]+t[s];e[s]=255&a;a>>=8}}function incHex(e,t){let i=1;for(let a=t;a>=0&&i>0;a--){i+=e[a];e[a]=255&i;i>>=8}}const kt=16;class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const i=this.readByte();if(i<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&i);t=t<<7|127&i}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let i;const a=this.tmpBuf;let s=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");i=!(128&e);a[s++]=127&e}while(!i);let r=t,n=0,g=0;for(;r>=0;){for(;g<8&&a.length>0;){n|=a[--s]<>=8;g-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const i=1&e[t]?255:0;let a=0;for(let s=0;s<=t;s++){a=(1&a)<<8|e[s];e[s]=a>>1^i}}readString(){const e=this.readNumber(),t=new Array(e);for(let i=0;i=0;){const e=l>>5;if(7===e){switch(31&l){case 0:a.readString();break;case 1:r=a.readString()}continue}const i=!!(16&l),s=15&l;if(s+1>kt)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const Q=1,E=a.readNumber();switch(e){case 0:a.readHex(n,s);a.readHexNumber(g,s);addHex(g,n,s);t.addCodespaceRange(s+1,hexToInt(n,s),hexToInt(g,s));for(let e=1;es&&(a=s)}else{for(;!this.eof;)this.readBlock(t);a=this.bufferLength}this.pos=a;return this.buffer.subarray(i,a)}async getImageData(e,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(e,t);const i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(e,t,i=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const i=e+t;for(;this.bufferLength<=i&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){let i=0;for(const t of e)i+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(i);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let i;try{i=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const a=this.bufferLength,s=a+i.length;this.ensureBuffer(s).set(i,a);this.bufferLength=s}getBaseStreams(){const e=[];for(const t of this.streams){const i=t.getBaseStreams();i&&e.push(...i)}return e.length>0?e:null}}class Ascii85Stream extends DecodeStream{constructor(e,t){t&&(t*=.8);super(t);this.str=e;this.dict=e.dict;this.input=new Uint8Array(5)}readBlock(){const e=this.str;let t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();if(-1===t||126===t){this.eof=!0;return}const i=this.bufferLength;let a,s;if(122===t){a=this.ensureBuffer(i+4);for(s=0;s<4;++s)a[i+s]=0;this.bufferLength+=4}else{const r=this.input;r[0]=t;for(s=1;s<5;++s){t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();r[s]=t;if(-1===t||126===t)break}a=this.ensureBuffer(i+s-1);this.bufferLength+=s-1;if(s<5){for(;s<5;++s)r[s]=117;this.eof=!0}let n=0;for(s=0;s<5;++s)n=85*n+(r[s]-33);for(s=3;s>=0;--s){a[i+s]=255&n;n>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.str=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,i=this.ensureBuffer(this.bufferLength+t);let a=this.bufferLength,s=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(s<0)s=e;else{i[a++]=s<<4|e;s=-1}}if(s>=0&&this.eof){i[a++]=s<<4;s=-1}this.firstDigit=s;this.bufferLength=a}}const Nt=-1,Gt=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],xt=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Ut=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],Mt=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],Lt=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],Ht=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if(!e||"function"!=typeof e.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let i;for(;0===(i=this._lookBits(12));)this._eatBits(1);1===i&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,i=this.columns;let a,s,r,n,g;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let r,g,o;if(this.nextLine2D){for(n=0;t[n]=64);do{g+=o=this._getWhiteCode()}while(o>=64)}else{do{r+=o=this._getWhiteCode()}while(o>=64);do{g+=o=this._getBlackCode()}while(o>=64)}this._addPixels(t[this.codingPos]+r,s);t[this.codingPos]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]0?--a:++a;for(;e[a]<=t[this.codingPos]&&e[a]=64);else do{r+=o=this._getWhiteCode()}while(o>=64);this._addPixels(t[this.codingPos]+r,s);s^=1}}let c=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){r=this._lookBits(12);if(this.eoline)for(;r!==Nt&&1!==r;){this._eatBits(1);r=this._lookBits(12)}else for(;0===r;){this._eatBits(1);r=this._lookBits(12)}if(1===r){this._eatBits(12);c=!0}else r===Nt&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&c&&this.byteAlign){r=this._lookBits(12);if(1===r){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(n=0;n<4;++n){r=this._lookBits(12);1!==r&&info("bad rtc code: "+r);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){r=this._lookBits(13);if(r===Nt){this.eof=!0;return-1}if(r>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&r)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>=8){g=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]r){g<<=r;1&this.codingPos||(g|=255>>8-r);this.outputBits-=r;r=0}else{g<<=this.outputBits;1&this.codingPos||(g|=255>>8-this.outputBits);r-=this.outputBits;this.outputBits=0;if(t[this.codingPos]0){g<<=r;r=0}}}while(r)}this.black&&(g^=255);return g}_addPixels(e,t){const i=this.codingLine;let a=this.codingPos;if(e>i[a]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&a^t&&++a;i[a]=e}this.codingPos=a}_addPixelsNeg(e,t){const i=this.codingLine;let a=this.codingPos;if(e>i[a]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&a^t&&++a;i[a]=e}else if(e0&&e=s){const t=i[e-s];if(t[0]===a){this._eatBits(a);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Gt[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Gt);if(e[0]&&e[2])return e[1]}info("Bad two dim code");return Nt}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===Nt)return 1;e=t>>5==0?xt[t]:Ut[t>>3];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Ut);if(e[0])return e[1];e=this._findTableCode(11,12,xt);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===Nt)return 1;t=e>>7==0?Mt[e]:e>>9==0&&e>>7!=0?Lt[(e>>1)-64]:Ht[e>>7];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,Ht);if(e[0])return e[1];e=this._findTableCode(7,12,Lt,64);if(e[0])return e[1];e=this._findTableCode(10,13,Mt);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;i instanceof Dict||(i=Dict.empty);const a={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(a,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}}const Jt=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Yt=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),vt=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),Kt=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],Tt=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict;const i=e.getByte(),a=e.getByte();if(-1===i||-1===a)throw new FormatError(`Invalid header in flate stream: ${i}, ${a}`);if(8!=(15&i))throw new FormatError(`Unknown compression method in flate stream: ${i}, ${a}`);if(((i<<8)+a)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${i}, ${a}`);if(32&a)throw new FormatError(`FDICT bit set in flate stream: ${i}, ${a}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const i=await this.asyncGetBytes();return i?.subarray(0,e)||this.getBytes(e)}async asyncGetBytes(){this.str.reset();const e=this.str.getBytes();try{const{readable:t,writable:i}=new DecompressionStream("deflate"),a=i.getWriter();a.write(e);a.close();const s=[];let r=0;for await(const e of t){s.push(e);r+=e.byteLength}const n=new Uint8Array(r);let g=0;for(const e of s){n.set(e,g);g+=e.byteLength}return n}catch{this.str=new Stream(e,2,e.length,this.str.dict);this.reset();return null}}get isAsync(){return!0}getBits(e){const t=this.str;let i,a=this.codeSize,s=this.codeBuf;for(;a>e;this.codeSize=a-=e;return i}getCode(e){const t=this.str,i=e[0],a=e[1];let s,r=this.codeSize,n=this.codeBuf;for(;r>16,c=65535&g;if(o<1||r>o;this.codeSize=r-o;return c}generateHuffmanTable(e){const t=e.length;let i,a=0;for(i=0;ia&&(a=e[i]);const s=1<>=1}for(i=e;i>=1;if(0===t){let t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}let i=t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}i|=t<<8;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}let s=t;if(-1===(t=a.getByte())){this.#m("Bad block header in flate stream");return}s|=t<<8;if(s!==(65535&~i)&&(0!==i||0!==s))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const r=this.bufferLength,n=r+i;e=this.ensureBuffer(n);this.bufferLength=n;if(0===i)-1===a.peekByte()&&(this.eof=!0);else{const t=a.getBytes(i);e.set(t,r);t.length0;)C[g++]=Q}s=this.generateHuffmanTable(C.subarray(0,e));r=this.generateHuffmanTable(C.subarray(e,c))}}e=this.buffer;let n=e?e.length:0,g=this.bufferLength;for(;;){let t=this.getCode(s);if(t<256){if(g+1>=n){e=this.ensureBuffer(g+1);n=e.length}e[g++]=t;continue}if(256===t){this.bufferLength=g;return}t-=257;t=Yt[t];let a=t>>16;a>0&&(a=this.getBits(a));i=(65535&t)+a;t=this.getCode(r);t=vt[t];a=t>>16;a>0&&(a=this.getBits(a));const o=(65535&t)+a;if(g+i>=n){e=this.ensureBuffer(g+i);n=e.length}for(let t=0;t>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let i=e[t]>>1,a=1&e[t];const s=qt[i],r=s.qe;let n,g=this.a-r;if(this.chigh>15&1;this.clow=this.clow<<1&65535;this.ct--}while(0==(32768&g));this.a=g;e[t]=i<<1|a;return n}}class Jbig2Error extends rt{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,i){this.data=e;this.start=t;this.end=i}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",new ContextCache)}}const Ot=2**31-1,Pt=-(2**31);function decodeInteger(e,t,i){const a=e.getContexts(t);let s=1;function readBits(e){let t=0;for(let r=0;r>>0}const r=readBits(1),n=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let g;0===r?g=n:n>0&&(g=-n);return g>=Pt&&g<=Ot?g:null}function decodeIAID(e,t,i){const a=e.getContexts("IAID");let s=1;for(let e=0;e=F&&M=S){K=K<<1&d;for(u=0;u=0&&H=0){J=G[L][H];J&&(K|=J<=e?c<<=1:c=c<<1|w[g][o]}for(Q=0;Q=m||o<0||o>=p?c<<=1:c=c<<1|a[g][o]}const E=D.readBit(b,c);t[n]=E}}return w}function decodeTextRegion(e,t,i,a,s,r,n,g,o,c,C,h,l,Q,E,u,d,f,p){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const m=[];let y,w;for(y=0;y1&&(s=e?p.readBits(f):decodeInteger(b,"IAIT",D));const r=n*F+s,S=e?Q.symbolIDTable.decode(p):decodeIAID(b,D,o),k=t&&(e?p.readBit():decodeInteger(b,"IARI",D));let R=g[S],N=R[0].length,G=R.length;if(k){const e=decodeInteger(b,"IARDW",D),t=decodeInteger(b,"IARDH",D);N+=e;G+=t;R=decodeRefinement(N,G,E,R,(e>>1)+decodeInteger(b,"IARDX",D),(t>>1)+decodeInteger(b,"IARDY",D),!1,u,d)}let x=0;c?1&h?x=G-1:a+=G-1:h>1?a+=N-1:x=N-1;const U=r-(1&h?0:G-1),M=a-(2&h?N-1:0);let L,H,J;if(c)for(L=0;L>5&7;const o=[31&n];let c=t+6;if(7===n){g=536870911&readUint32(e,c-1);c+=3;let t=g+7>>3;o[0]=e[c++];for(;--t>0;)o.push(e[c++])}else if(5===n||6===n)throw new Jbig2Error("invalid referred-to flags");i.retainBits=o;let C=4;i.number<=256?C=1:i.number<=65536&&(C=2);const h=[];let l,Q;for(l=0;l>>24&255;r[3]=t.height>>16&255;r[4]=t.height>>8&255;r[5]=255&t.height;for(l=c,Q=e.length;l>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;c+=2;if(!e.huffman){o=0===e.template?4:1;n=[];for(g=0;g>2&3;C.stripSize=1<>4&3;C.transposed=!!(64&h);C.combinationOperator=h>>7&3;C.defaultPixelValue=h>>9&1;C.dsOffset=h<<17>>27;C.refinementTemplate=h>>15&1;if(C.huffman){const e=readUint16(a,c);c+=2;C.huffmanFS=3&e;C.huffmanDS=e>>2&3;C.huffmanDT=e>>4&3;C.huffmanRefinementDW=e>>6&3;C.huffmanRefinementDH=e>>8&3;C.huffmanRefinementDX=e>>10&3;C.huffmanRefinementDY=e>>12&3;C.huffmanRefinementSizeSelector=!!(16384&e)}if(C.refinement&&!C.refinementTemplate){n=[];for(g=0;g<2;g++){n.push({x:readInt8(a,c),y:readInt8(a,c+1)});c+=2}C.refinementAt=n}C.numberOfSymbolInstances=readUint32(a,c);c+=4;r=[C,i.referredTo,a,c,s];break;case 16:const l={},Q=a[c++];l.mmr=!!(1&Q);l.template=Q>>1&3;l.patternWidth=a[c++];l.patternHeight=a[c++];l.maxPatternIndex=readUint32(a,c);c+=4;r=[l,i.number,a,c,s];break;case 22:case 23:const E={};E.info=readRegionSegmentInformation(a,c);c+=zt;const u=a[c++];E.mmr=!!(1&u);E.template=u>>1&3;E.enableSkip=!!(8&u);E.combinationOperator=u>>4&7;E.defaultPixelValue=u>>7&1;E.gridWidth=readUint32(a,c);c+=4;E.gridHeight=readUint32(a,c);c+=4;E.gridOffsetX=4294967295&readUint32(a,c);c+=4;E.gridOffsetY=4294967295&readUint32(a,c);c+=4;E.gridVectorX=readUint16(a,c);c+=2;E.gridVectorY=readUint16(a,c);c+=2;r=[E,i.referredTo,a,c,s];break;case 38:case 39:const d={};d.info=readRegionSegmentInformation(a,c);c+=zt;const f=a[c++];d.mmr=!!(1&f);d.template=f>>1&3;d.prediction=!!(8&f);if(!d.mmr){o=0===d.template?4:1;n=[];for(g=0;g>2&1;p.combinationOperator=m>>3&3;p.requiresBuffer=!!(32&m);p.combinationOperatorOverride=!!(64&m);r=[p];break;case 49:case 50:case 51:case 62:break;case 53:r=[i.number,a,c,s];break;default:throw new Jbig2Error(`segment type ${i.typeName}(${i.type}) is not implemented`)}const C="on"+i.typeName;C in t&&t[C].apply(t,r)}function processSegments(e,t){for(let i=0,a=e.length;i>3,i=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&i.fill(255);this.buffer=i}drawBitmap(e,t){const i=this.currentPageInfo,a=e.width,s=e.height,r=i.width+7>>3,n=i.combinationOperatorOverride?e.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(7&e.x);let c,C,h,l,Q=e.y*r+(e.x>>3);switch(n){case 0:for(c=0;c>=1;if(!h){h=128;l++}}Q+=r}break;case 2:for(c=0;c>=1;if(!h){h=128;l++}}Q+=r}break;default:throw new Jbig2Error(`operator ${n} is not supported`)}}onImmediateGenericRegion(e,t,i,a){const s=e.info,r=new DecodingContext(t,i,a),n=decodeBitmap(e.mmr,s.width,s.height,e.template,e.prediction,null,e.at,r);this.drawBitmap(s,n)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,i,a,s,r){let n,g;if(e.huffman){n=function getSymbolDictionaryHuffmanTables(e,t,i){let a,s,r,n,g=0;switch(e.huffmanDHSelector){case 0:case 1:a=getStandardTable(e.huffmanDHSelector+4);break;case 3:a=getCustomHuffmanTable(g,t,i);g++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:s=getStandardTable(e.huffmanDWSelector+2);break;case 3:s=getCustomHuffmanTable(g,t,i);g++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){r=getCustomHuffmanTable(g,t,i);g++}else r=getStandardTable(1);n=e.aggregationInstancesSelector?getCustomHuffmanTable(g,t,i):getStandardTable(1);return{tableDeltaHeight:a,tableDeltaWidth:s,tableBitmapSize:r,tableAggregateInstances:n}}(e,i,this.customTables);g=new Reader(a,s,r)}let o=this.symbols;o||(this.symbols=o={});const c=[];for(const e of i){const t=o[e];t&&c.push(...t)}const C=new DecodingContext(a,s,r);o[t]=function decodeSymbolDictionary(e,t,i,a,s,r,n,g,o,c,C,h){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const l=[];let Q=0,E=log2(i.length+a);const u=C.decoder,d=C.contextCache;let f,p;if(e){f=getStandardTable(1);p=[];E=Math.max(E,1)}for(;l.length1)m=decodeTextRegion(e,t,a,Q,0,s,1,i.concat(l),E,0,0,1,0,r,o,c,C,0,h);else{const e=decodeIAID(d,u,E),t=decodeInteger(d,"IARDX",u),s=decodeInteger(d,"IARDY",u);m=decodeRefinement(a,Q,o,e=32){let i,a,n;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");a=s.readBits(2)+3;i=r[e-1].prefixLength;break;case 33:a=s.readBits(3)+3;i=0;break;case 34:a=s.readBits(7)+11;i=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(n=0;n=0;d--){R=e?decodeMMRBitmap(k,o,c,!0):decodeBitmap(!1,o,c,i,!1,null,F,E);S[d]=R}for(N=0;N=0;f--){x^=S[f][N][G];U|=x<>8;H=h+N*l-G*Q>>8;if(L>=0&&L+w<=a&&H>=0&&H+D<=s)for(d=0;d=s)){Y=u[t];J=M[d];for(f=0;f=0&&e>1&7),o=1+(a>>4&7),c=[];let C,h,l=s;do{C=n.readBits(g);h=n.readBits(o);c.push(new HuffmanLine([l,C,h,0]));l+=1<>t&1;if(t<=0)this.children[i]=new HuffmanTreeNode(e);else{let a=this.children[i];a||(this.children[i]=a=new HuffmanTreeNode(null));a.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new HuffmanTreeNode(null);for(let t=0,i=e.length;t0&&this.rootNode.buildTree(i,i.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let i=0;for(let a=0;a=this.end)throw new Jbig2Error("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,i=0;for(t=e-1;t>=0;t--)i|=this.readBit()<=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,i){let a=0;for(let s=0,r=t.length;s>i&1;i--}}if(a&&!g){const e=5;for(let t=0;t>2,o=new Uint32Array(e.buffer,t,g);if(FeatureTest.isLittleEndian){for(;n>>24|t<<8|4278190080;i[a+2]=t>>>16|s<<16|4278190080;i[a+3]=s>>>8|4278190080}for(let t=4*n,s=e.length;t>>8|255;i[a+2]=t<<16|s>>>16|255;i[a+3]=s<<8|255}for(let t=4*n,s=e.length;t>3,h=7&a,l=e.length;i=new Uint32Array(i.buffer);let Q=0;for(let a=0;a0&&!e[r-1];)r--;const n=[{children:[],index:0}];let g,o=n[0];for(i=0;i0;)o=n.pop();o.index++;n.push(o);for(;n.length<=i;){n.push(g={children:[],index:0});o.children[o.index]=g.children;o=g}s++}if(i+10){E--;return Q>>E&1}Q=e[t++];if(255===Q){const a=e[t++];if(a){if(220===a&&c){const a=readUint16(e,t+=2);t+=2;if(a>0&&a!==i.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",a)}else if(217===a){if(c){const e=p*(8===i.precision?8:0);if(e>0&&Math.round(i.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(Q<<8|a).toString(16)}`)}}E=7;return Q>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<0){u--;return}let i=r;const a=n;for(;i<=a;){const a=decodeHuffman(e.huffmanTableAC),s=15&a,r=a>>4;if(0===s){if(r<15){u=receive(r)+(1<>4;if(0===s)if(c<15){u=receive(c)+(1<>4;if(0===a){if(r<15)break;s+=16;continue}s+=r;const n=$t[s];e.blockData[t+n]=receiveAndExtend(a);s++}};let k,R=0;const N=1===m?a[0].blocksPerLine*a[0].blocksPerColumn:C*i.mcusPerColumn;let G,x;for(;R<=N;){const i=s?Math.min(N-R,s):N;if(i>0){for(w=0;w0?"unexpected":"excessive"} MCU data, current marker is: ${k.invalid}`);t=k.offset}if(!(k.marker>=65488&&k.marker<=65495))break;t+=2}return t-l}function quantizeAndInverse(e,t,i){const a=e.quantizationTable,s=e.blockData;let r,n,g,o,c,C,h,l,Q,E,u,d,f,p,m,y,w;if(!a)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){Q=s[t+e];E=s[t+e+1];u=s[t+e+2];d=s[t+e+3];f=s[t+e+4];p=s[t+e+5];m=s[t+e+6];y=s[t+e+7];Q*=a[e];if(0!=(E|u|d|f|p|m|y)){E*=a[e+1];u*=a[e+2];d*=a[e+3];f*=a[e+4];p*=a[e+5];m*=a[e+6];y*=a[e+7];r=ri*Q+128>>8;n=ri*f+128>>8;g=u;o=m;c=ni*(E-y)+128>>8;l=ni*(E+y)+128>>8;C=d<<4;h=p<<4;r=r+n+1>>1;n=r-n;w=g*si+o*ai+128>>8;g=g*ai-o*si+128>>8;o=w;c=c+h+1>>1;h=c-h;l=l+C+1>>1;C=l-C;r=r+o+1>>1;o=r-o;n=n+g+1>>1;g=n-g;w=c*ii+l*ti+2048>>12;c=c*ti-l*ii+2048>>12;l=w;w=C*ei+h*Ai+2048>>12;C=C*Ai-h*ei+2048>>12;h=w;i[e]=r+l;i[e+7]=r-l;i[e+1]=n+h;i[e+6]=n-h;i[e+2]=g+C;i[e+5]=g-C;i[e+3]=o+c;i[e+4]=o-c}else{w=ri*Q+512>>10;i[e]=w;i[e+1]=w;i[e+2]=w;i[e+3]=w;i[e+4]=w;i[e+5]=w;i[e+6]=w;i[e+7]=w}}for(let e=0;e<8;++e){Q=i[e];E=i[e+8];u=i[e+16];d=i[e+24];f=i[e+32];p=i[e+40];m=i[e+48];y=i[e+56];if(0!=(E|u|d|f|p|m|y)){r=ri*Q+2048>>12;n=ri*f+2048>>12;g=u;o=m;c=ni*(E-y)+2048>>12;l=ni*(E+y)+2048>>12;C=d;h=p;r=4112+(r+n+1>>1);n=r-n;w=g*si+o*ai+2048>>12;g=g*ai-o*si+2048>>12;o=w;c=c+h+1>>1;h=c-h;l=l+C+1>>1;C=l-C;r=r+o+1>>1;o=r-o;n=n+g+1>>1;g=n-g;w=c*ii+l*ti+2048>>12;c=c*ti-l*ii+2048>>12;l=w;w=C*ei+h*Ai+2048>>12;C=C*Ai-h*ei+2048>>12;h=w;Q=r+l;y=r-l;E=n+h;m=n-h;u=g+C;p=g-C;d=o+c;f=o-c;Q<16?Q=0:Q>=4080?Q=255:Q>>=4;E<16?E=0:E>=4080?E=255:E>>=4;u<16?u=0:u>=4080?u=255:u>>=4;d<16?d=0:d>=4080?d=255:d>>=4;f<16?f=0:f>=4080?f=255:f>>=4;p<16?p=0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;y<16?y=0:y>=4080?y=255:y>>=4;s[t+e]=Q;s[t+e+8]=E;s[t+e+16]=u;s[t+e+24]=d;s[t+e+32]=f;s[t+e+40]=p;s[t+e+48]=m;s[t+e+56]=y}else{w=ri*Q+8192>>14;w=w<-2040?0:w>=2024?255:w+2056>>4;s[t+e]=w;s[t+e+8]=w;s[t+e+16]=w;s[t+e+24]=w;s[t+e+32]=w;s[t+e+40]=w;s[t+e+48]=w;s[t+e+56]=w}}}function buildComponentData(e,t){const i=t.blocksPerLine,a=t.blocksPerColumn,s=new Int16Array(64);for(let e=0;e=a)return null;const r=readUint16(e,t);if(r>=65472&&r<=65534)return{invalid:null,marker:r,offset:t};let n=readUint16(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=a)return null;n=readUint16(e,s)}return{invalid:r.toString(16),marker:n,offset:s}}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}parse(e,{dnlScanLines:t=null}={}){function readDataBlock(){const t=readUint16(e,s);s+=2;let i=s+t-2;const a=findNextFileMarker(e,i,s);if(a?.invalid){warn("readDataBlock - incorrect length, current marker is: "+a.invalid);i=a.offset}const r=e.subarray(s,i);s+=r.length;return r}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),i=Math.ceil(e.scanLines/8/e.maxV);for(const a of e.components){const s=Math.ceil(Math.ceil(e.samplesPerLine/8)*a.h/e.maxH),r=Math.ceil(Math.ceil(e.scanLines/8)*a.v/e.maxV),n=t*a.h,g=64*(i*a.v)*(n+1);a.blockData=new Int16Array(g);a.blocksPerLine=s;a.blocksPerColumn=r}e.mcusPerLine=t;e.mcusPerColumn=i}let i,a,s=0,r=null,n=null,g=0;const o=[],c=[],C=[];let h=readUint16(e,s);s+=2;if(65496!==h)throw new JpegError("SOI not found");h=readUint16(e,s);s+=2;A:for(;65497!==h;){let l,Q,E;switch(h){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const u=readDataBlock();65504===h&&74===u[0]&&70===u[1]&&73===u[2]&&70===u[3]&&0===u[4]&&(r={version:{major:u[5],minor:u[6]},densityUnits:u[7],xDensity:u[8]<<8|u[9],yDensity:u[10]<<8|u[11],thumbWidth:u[12],thumbHeight:u[13],thumbData:u.subarray(14,14+3*u[12]*u[13])});65518===h&&65===u[0]&&100===u[1]&&111===u[2]&&98===u[3]&&101===u[4]&&(n={version:u[5]<<8|u[6],flags0:u[7]<<8|u[8],flags1:u[9]<<8|u[10],transformCode:u[11]});break;case 65499:const d=readUint16(e,s);s+=2;const f=d+s-2;let p;for(;s>4==0)for(Q=0;Q<64;Q++){p=$t[Q];i[p]=e[s++]}else{if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(Q=0;Q<64;Q++){p=$t[Q];i[p]=readUint16(e,s);s+=2}}o[15&t]=i}break;case 65472:case 65473:case 65474:if(i)throw new JpegError("Only single frame JPEGs supported");s+=2;i={};i.extended=65473===h;i.progressive=65474===h;i.precision=e[s++];const m=readUint16(e,s);s+=2;i.scanLines=t||m;i.samplesPerLine=readUint16(e,s);s+=2;i.components=[];i.componentIds={};const y=e[s++];let w=0,D=0;for(l=0;l>4,r=15&e[s+1];w>4==0?C:c)[15&t]=buildHuffmanTable(i,r)}break;case 65501:s+=2;a=readUint16(e,s);s+=2;break;case 65498:const F=1==++g&&!t;s+=2;const S=e[s++],k=[];for(l=0;l>4];r.huffmanTableAC=c[15&n];k.push(r)}const R=e[s++],N=e[s++],G=e[s++];try{const t=decodeScan(e,s,i,k,a,R,N,G>>4,15&G,F);s+=t}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break A}throw t}break;case 65500:s+=4;break;case 65535:255!==e[s]&&s--;break;default:const x=findNextFileMarker(e,s-2,s-3);if(x?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+x.invalid);s=x.offset;break}if(!x||s>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new JpegError("JpegImage.parse - unknown marker: "+h.toString(16))}h=readUint16(e,s);s+=2}if(!i)throw new JpegError("JpegImage.parse - no frame data found.");this.width=i.samplesPerLine;this.height=i.scanLines;this.jfif=r;this.adobe=n;this.components=[];for(const e of i.components){const t=o[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/i.maxH,scaleY:e.v/i.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t,i=!1){const a=this.width/e,s=this.height/t;let r,n,g,o,c,C,h,l,Q,E,u,d=0;const f=this.components.length,p=e*t*f,m=new Uint8ClampedArray(p),y=new Uint32Array(e),w=4294967288;let D;for(h=0;h>8)+b[Q+1];return m}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,i,a;for(let s=0,r=e.length;s4)throw new JpegError("Unsupported color mode");const r=this._getLinearizedBlockData(e,t,s);if(1===this.numComponents&&(i||a)){const e=r.length*(i?4:3),t=new Uint8ClampedArray(e);let a=0;if(i)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let i=0,a=e.length;i0&&(e=e.subarray(t));break}const t={decodeTransform:void 0,colorTransform:void 0},i=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(i)){const e=this.dict.get("BPC","BitsPerComponent")||8,a=i.length,s=new Int32Array(a);let r=!1;const n=(1<{t=e;i=a}));a.decode=function(e,{numComponents:t=4,isIndexedColormap:i=!1,smaskInData:s=!1}){const r=e.length,n=a._malloc(r);a.HEAPU8.set(e,n);const g=a._jp2_decode(n,r,t>0?t:0,!!i,!!s);a._free(n);if(g){const{errorMessages:e}=a;if(e){delete a.errorMessages;return e}return"Unknown error"}const{imageData:o}=a;a.imageData=null;return o};var s,r=Object.assign({},a),n="./this.program",g="";"undefined"!=typeof document&&document.currentScript&&(g=document.currentScript.src);gi&&(g=gi);g=g.startsWith("blob:")?"":g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1);var o,c,C,h,l,Q=a.print||console.log.bind(console),E=a.printErr||console.error.bind(console);Object.assign(a,r);r=null;a.arguments&&a.arguments;a.thisProgram&&(n=a.thisProgram);a.quit&&a.quit;a.wasmBinary&&(o=a.wasmBinary);function tryParseAsDataURI(e){if(isDataURI(e))return function intArrayFromBase64(e){for(var t=atob(e),i=new Uint8Array(t.length),a=0;ae.startsWith(D);function instantiateSync(e,t){var i,a=function getBinarySync(e){if(e==u&&o)return new Uint8Array(o);var t=tryParseAsDataURI(e);if(t)return t;if(s)return s(e);throw'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)'}(e);i=new WebAssembly.Module(a);return[new WebAssembly.Instance(i,t),i]}var callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(a)};a.noExitRuntime;var b,growMemory=e=>{var t=(e-c.buffer.byteLength+65535)/65536;try{c.grow(t);updateMemoryViews();return 1}catch(e){}},F={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var t in F)void 0===F[t]?delete e[t]:e[t]=F[t];var i=[];for(var t in e)i.push(`${t}=${e[t]}`);getEnvStrings.strings=i}return getEnvStrings.strings},S=[null,[],[]],k="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,UTF8ArrayToString=(e,t,i)=>{for(var a=t+i,s=t;e[s]&&!(s>=a);)++s;if(s-t>16&&e.buffer&&k)return k.decode(e.subarray(t,s));for(var r="";t>10,56320|1023&c)}}else r+=String.fromCharCode((31&n)<<6|g)}else r+=String.fromCharCode(n)}return r},printChar=(e,t)=>{var i=S[e];if(0===t||10===t){(1===e?Q:E)(UTF8ArrayToString(i,0));i.length=0}else i.push(t)},UTF8ToString=(e,t)=>e?UTF8ArrayToString(h,e,t):"",R={c:(e,t,i)=>h.copyWithin(e,t,t+i),g:function _copy_pixels_1(e,t){e>>=2;const i=a.imageData=new Uint8ClampedArray(t),s=a.HEAP32.subarray(e,e+t);i.set(s)},f:function _copy_pixels_3(e,t,i,s){e>>=2;t>>=2;i>>=2;const r=a.imageData=new Uint8ClampedArray(3*s),n=a.HEAP32.subarray(e,e+s),g=a.HEAP32.subarray(t,t+s),o=a.HEAP32.subarray(i,i+s);for(let e=0;e>=2;t>>=2;i>>=2;s>>=2;const n=a.imageData=new Uint8ClampedArray(4*r),g=a.HEAP32.subarray(e,e+r),o=a.HEAP32.subarray(t,t+r),c=a.HEAP32.subarray(i,i+r),C=a.HEAP32.subarray(s,s+r);for(let e=0;e{var t=h.length,i=2147483648;if((e>>>=0)>i)return!1;for(var a,s,r=1;r<=4;r*=2){var n=t*(1+.2/r);n=Math.min(n,e+100663296);var g=Math.min(i,(a=Math.max(e,n))+((s=65536)-a%s)%s);if(growMemory(g))return!0}return!1},l:(e,t)=>{var i=0;getEnvStrings().forEach(((a,s)=>{var r=t+i;l[e+4*s>>2]=r;((e,t)=>{for(var i=0;i{var i=getEnvStrings();l[e>>2]=i.length;var a=0;i.forEach((e=>a+=e.length+1));l[t>>2]=a;return 0},n:e=>52,j:function _fd_seek(e,t,i,a,s){return 70},b:(e,t,i,a)=>{for(var s=0,r=0;r>2],g=l[t+4>>2];t+=8;for(var o=0;o>2]=s;return 0},o:function _gray_to_rgba(e,t){e>>=2;const i=a.imageData=new Uint8ClampedArray(4*t),s=a.HEAP32.subarray(e,e+t);for(let e=0;e>=2;t>>=2;const s=a.imageData=new Uint8ClampedArray(4*i),r=a.HEAP32.subarray(e,e+i),n=a.HEAP32.subarray(t,t+i);for(let e=0;e>=2;t>>=2;i>>=2;const r=a.imageData=new Uint8ClampedArray(4*s),n=a.HEAP32.subarray(e,e+s),g=a.HEAP32.subarray(t,t+s),o=a.HEAP32.subarray(i,i+s);for(let e=0;e0)){!function preRun(){if(a.preRun){"function"==typeof a.preRun&&(a.preRun=[a.preRun]);for(;a.preRun.length;)e=a.preRun.shift(),d.unshift(e)}var e;callRuntimeCallbacks(d)}();if(!(m>0))if(a.setStatus){a.setStatus("Running...");setTimeout((function(){setTimeout((function(){a.setStatus("")}),1);doRun()}),1)}else doRun()}function doRun(){if(!b){b=!0;a.calledRun=!0;!function initRuntime(){callRuntimeCallbacks(f)}();t(a);a.onRuntimeInitialized&&a.onRuntimeInitialized();!function postRun(){if(a.postRun){"function"==typeof a.postRun&&(a.postRun=[a.postRun]);for(;a.postRun.length;)e=a.postRun.shift(),p.unshift(e)}var e;callRuntimeCallbacks(p)}()}}}if(a.preInit){"function"==typeof a.preInit&&(a.preInit=[a.preInit]);for(;a.preInit.length>0;)a.preInit.pop()()}run();return a});const Ii=oi;class JpxError extends rt{constructor(e){super(e,"JpxError")}}class JpxImage{static#y=null;static decode(e,t){t||={};this.#y||=Ii({warn});const i=this.#y.decode(e,t);if("string"==typeof i)throw new JpxError(i);return i}static cleanup(){this.#y=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const i=t;t=e.getByte();if(65361===(i<<8|t)){e.skip(4);const t=e.getInt32()>>>0,i=e.getInt32()>>>0,a=e.getInt32()>>>0,s=e.getInt32()>>>0;e.skip(16);return{width:t-a,height:i-s,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}class JpxStream extends DecodeStream{constructor(e,t,i){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=i}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(e){this.decodeImage(null,e)}decodeImage(e,t){if(this.eof)return this.buffer;e||=this.bytes;this.buffer=JpxImage.decode(e,t);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}class LZWStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;const a=4096,s={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(a),dictionaryLengths:new Uint16Array(a),dictionaryPrevCodes:new Uint16Array(a),currentSequence:new Uint8Array(a),currentSequenceLength:0};for(let e=0;e<256;++e){s.dictionaryValues[e]=e;s.dictionaryLengths[e]=1}this.lzwState=s}readBits(e){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(e<256){l[0]=e;Q=1}else{if(!(e>=258)){if(256===e){C=9;n=258;Q=0;continue}this.eof=!0;delete this.lzwState;break}if(e=0;t--){l[t]=g[i];i=c[i]}}else l[Q++]=l[0]}if(s){c[n]=h;o[n]=o[h]+1;g[n]=l[0];n++;C=n+r&n+r-1?C:0|Math.min(Math.log(n+r)/.6931471805599453+1,12)}h=e;E+=Q;if(a15))throw new FormatError(`Unsupported predictor: ${a}`);this.readBlock=2===a?this.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;const s=this.colors=i.get("Colors")||1,r=this.bits=i.get("BPC","BitsPerComponent")||8,n=this.columns=i.get("Columns")||1;this.pixBytes=s*r+7>>3;this.rowBytes=n*s*r+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+e),a=this.bits,s=this.colors,r=this.str.getBytes(e);this.eof=!r.length;if(this.eof)return;let n,g=0,o=0,c=0,C=0,h=t;if(1===a&&1===s)for(n=0;n>1;e^=e>>2;e^=e>>4;g=(1&e)<<7;i[h++]=e}else if(8===a){for(n=0;n>8&255;i[h++]=255&e}}else{const e=new Uint8Array(s+1),h=(1<>c-a)&h;c-=a;o=o<=8){i[Q++]=o>>C-8&255;C-=8}}C>0&&(i[Q++]=(o<<8-C)+(g&(1<<8-C)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),a=this.str.getBytes(e);this.eof=!a.length;if(this.eof)return;const s=this.bufferLength,r=this.ensureBuffer(s+e);let n=r.subarray(s-e,s);0===n.length&&(n=new Uint8Array(e));let g,o,c,C=s;switch(i){case 0:for(g=0;g>1)+a[g];for(;g>1)+a[g]&255;C++}break;case 4:for(g=0;g0){const e=this.str.getBytes(a);t.set(e,i);i+=a}}else{a=257-a;const s=e[1];t=this.ensureBuffer(i+a+1);for(let e=0;e>")&&this.buf1!==pt;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===pt)break;a.set(t,this.getObj(e))}if(this.buf1===pt){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(a,e):a;this.shift();return a;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,i=e.pos;let a,s,r=0;for(;-1!==(a=e.getByte());)if(0===r)r=69===a?1:0;else if(1===r)r=73===a?2:0;else if(32===a||10===a||13===a){s=e.pos;const i=e.peekBytes(15),n=i.length;if(0===n)break;for(let e=0;e127))){r=0;break}}if(2!==r)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const g=new Lexer(new Stream(i.slice()),t);g._hexStringWarn=()=>{};let o=0;for(;;){const e=g.getObj();if(e===pt){r=0;break}if(e instanceof Cmd){const i=t[e.cmd];if(!i){r=0;break}if(i.variableArgs?o<=i.numArgs:o===i.numArgs)break;o=0}else o++}if(2===r)break}else r=0;if(-1===a){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(s){warn('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-s))}}let n=4;e.skip(-n);a=e.peekByte();e.skip(n);isWhiteSpace(a)||n--;return e.pos-n-i}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let i,a,s=!1;for(;-1!==(i=e.getByte());)if(255===i){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:s=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=e.getUint16();a>2?e.skip(a-2):e.skip(-2)}if(s)break}const r=e.pos-t;if(-1===i){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let i;for(;-1!==(i=e.getByte());)if(126===i){const t=e.pos;i=e.peekByte();for(;isWhiteSpace(i);){e.skip();i=e.peekByte()}if(62===i){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const a=e.pos-t;if(-1===i){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-a);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return a}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let i;for(;-1!==(i=e.getByte())&&62!==i;);const a=e.pos-t;if(-1===i){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-a);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return a}inlineStreamSkipEI(e){let t,i=0;for(;-1!==(t=e.getByte());)if(0===i)i=69===t?1:0;else if(1===i)i=73===t?2:0;else if(2===i)break}makeInlineImage(e){const t=this.lexer,i=t.stream,a=Object.create(null);let s;for(;!isCmd(this.buf1,"ID")&&this.buf1!==pt;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===pt)break;a[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(s=i.pos-t.beginInlineImagePos);const r=this.xref.fetchIfRef(a.F||a.Filter);let n;if(r instanceof Name)n=r.name;else if(Array.isArray(r)){const e=this.xref.fetchIfRef(r[0]);e instanceof Name&&(n=e.name)}const g=i.pos;let o,c;switch(n){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}if(o<1e3&&s>0){const e=i.pos;i.pos=t.beginInlineImagePos;c=function getInlineImageCacheKey(e){const t=[],i=e.length;let a=0;for(;a=a){let a=!1;for(const e of s){const t=e.length;let s=0;for(;s=r){a=!0;break}if(s>=t){if(isWhiteSpace(n[o+g+s])){info(`Found "${bytesToString([...i,...e])}" when searching for endstream command.`);a=!0}break}}if(a){t.pos+=o;return t.pos-e}}o++}t.pos+=g}return-1}makeStream(e,t){const i=this.lexer;let a=i.stream;i.skipToNextLine();const s=a.pos-1;let r=e.get("Length");if(!Number.isInteger(r)){info(`Bad length "${r&&r.toString()}" in stream.`);r=0}a.pos=s+r;i.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{r=this.#w(s);if(r<0)throw new FormatError("Missing endstream command.");i.nextChar();this.shift();this.shift()}this.shift();a=a.makeSubStream(s,r,e);t&&(a=t.createStream(a,r));a=this.filter(a,e,r);a.dict=e;return a}filter(e,t,i){let a=t.get("F","Filter"),s=t.get("DP","DecodeParms");if(a instanceof Name){Array.isArray(s)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,a.name,i,s)}let r=i;if(Array.isArray(a)){const t=a,i=s;for(let n=0,g=t.length;n=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,i=0,a=1;if(45===e){a=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){i=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let s=e-48,r=0,n=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const a=e-48;if(t)r=10*r+a;else{0!==i&&(i*=10);s=10*s+a}}else if(46===e){if(0!==i)break;i=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){n=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==i&&(s/=i);t&&(s*=10**(n*r));return a*s}getString(){let e=1,t=!1;const i=this.strBuf;i.length=0;let a=this.nextChar();for(;;){let s=!1;switch(0|a){case-1:warn("Unterminated string");t=!0;break;case 40:++e;i.push("(");break;case 41:if(0==--e){this.nextChar();t=!0}else i.push(")");break;case 92:a=this.nextChar();switch(a){case-1:warn("Unterminated string");t=!0;break;case 110:i.push("\n");break;case 114:i.push("\r");break;case 116:i.push("\t");break;case 98:i.push("\b");break;case 102:i.push("\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&a;a=this.nextChar();s=!0;if(a>=48&&a<=55){e=(e<<3)+(15&a);a=this.nextChar();if(a>=48&&a<=55){s=!1;e=(e<<3)+(15&a)}}i.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(a))}break;default:i.push(String.fromCharCode(a))}if(t)break;s||(a=this.nextChar())}return i.join("")}getName(){let e,t;const i=this.strBuf;i.length=0;for(;(e=this.nextChar())>=0&&!ci[e];)if(35===e){e=this.nextChar();if(ci[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");i.push("#");break}const a=toHexDigit(e);if(-1!==a){t=e;e=this.nextChar();const s=toHexDigit(e);if(-1===s){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);i.push("#",String.fromCharCode(t));if(ci[e])break;i.push(String.fromCharCode(e));continue}i.push(String.fromCharCode(a<<4|s))}else i.push("#",String.fromCharCode(e))}else i.push(String.fromCharCode(e));i.length>127&&warn(`Name token is longer than allowed by the spec: ${i.length}`);return Name.get(i.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t,i,a=this.currentChar,s=!0;this._hexStringNumWarn=0;for(;;){if(a<0){warn("Unterminated hex string");break}if(62===a){this.nextChar();break}if(1!==ci[a]){if(s){t=toHexDigit(a);if(-1===t){this._hexStringWarn(a);a=this.nextChar();continue}}else{i=toHexDigit(a);if(-1===i){this._hexStringWarn(a);a=this.nextChar();continue}e.push(String.fromCharCode(t<<4|i))}s=!s;a=this.nextChar()}else a=this.nextChar()}return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return pt;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==ci[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(i)}}const a=this.knownCommands;let s=void 0!==a?.[i];for(;(t=this.nextChar())>=0&&!ci[t];){const e=i+String.fromCharCode(t);if(s&&void 0===a[e])break;if(128===i.length)throw new FormatError(`Command token too long: ${i.length}`);i=e;s=void 0!==a?.[i]}if("true"===i)return!0;if("false"===i)return!1;if("null"===i)return null;"BI"===i&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(i)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,i=!1){const a=e.get(t);if(Number.isInteger(a)&&(i?a>=0:a>0))return a;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),i=t.getObj(),a=t.getObj(),s=t.getObj(),r=t.getObj();let n,g;if(!(Number.isInteger(i)&&Number.isInteger(a)&&isCmd(s,"obj")&&r instanceof Dict&&"number"==typeof(n=r.get("Linearized"))&&n>0))return null;if((g=getInt(r,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:g,hints:function getHints(e){const t=e.get("H");let i;if(Array.isArray(t)&&(2===(i=t.length)||4===i)){for(let e=0;e0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(r),objectNumberFirst:getInt(r,"O"),endFirst:getInt(r,"E"),numPages:getInt(r,"N"),mainXRefEntriesOffset:getInt(r,"T"),pageFirst:r.has("P")?getInt(r,"P",!0):0}}}const Ci=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],hi=2**24-1;class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,i){this.codespaceRanges[e-1].push(t,i);this.numCodespaceRanges++}mapCidRange(e,t,i){if(t-e>hi)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=i++}mapBfRange(e,t,i){if(t-e>hi)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const a=i.length-1;for(;e<=t;){this._map[e++]=i;const t=i.charCodeAt(a)+1;t>255?i=i.substring(0,a-1)+String.fromCharCode(i.charCodeAt(a-1)+1)+"\0":i=i.substring(0,a)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,i){if(t-e>hi)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const a=i.length;let s=0;for(;e<=t&&s>>0;const n=s[r];for(let e=0,t=n.length;e=t&&a<=s){i.charcode=a;i.length=r+1;return}}}i.charcode=0;i.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let i=0,a=t.length;i=s&&e<=r)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,i){unreachable("should not call mapCidRange")}mapBfRange(e,t,i){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,i){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let i=0;i>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let i=t.getObj();if(i===pt)break;if(isCmd(i,"endbfchar"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=i;e.mapOne(a,s)}}function parseBfRange(e,t){for(;;){let i=t.getObj();if(i===pt)break;if(isCmd(i,"endbfrange"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=strToInt(i);i=t.getObj();if(Number.isInteger(i)||"string"==typeof i){const t=Number.isInteger(i)?String.fromCharCode(i):i;e.mapBfRange(a,s,t)}else{if(!isCmd(i,"["))break;{i=t.getObj();const r=[];for(;!isCmd(i,"]")&&i!==pt;){r.push(i);i=t.getObj()}e.mapBfRangeToArray(a,s,r)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let i=t.getObj();if(i===pt)break;if(isCmd(i,"endcidchar"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectInt(i);const s=i;e.mapOne(a,s)}}function parseCidRange(e,t){for(;;){let i=t.getObj();if(i===pt)break;if(isCmd(i,"endcidrange"))return;expectString(i);const a=strToInt(i);i=t.getObj();expectString(i);const s=strToInt(i);i=t.getObj();expectInt(i);const r=i;e.mapCidRange(a,s,r)}}function parseCodespaceRange(e,t){for(;;){let i=t.getObj();if(i===pt)break;if(isCmd(i,"endcodespacerange"))return;if("string"!=typeof i)break;const a=strToInt(i);i=t.getObj();if("string"!=typeof i)break;const s=strToInt(i);e.addCodespaceRange(i.length,a,s)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const i=t.getObj();Number.isInteger(i)&&(e.vertical=!!i)}function parseCMapName(e,t){const i=t.getObj();i instanceof Name&&(e.name=i.name)}async function parseCMap(e,t,i,a){let s,r;A:for(;;)try{const i=t.getObj();if(i===pt)break;if(i instanceof Name){"WMode"===i.name?parseWMode(e,t):"CMapName"===i.name&&parseCMapName(e,t);s=i}else if(i instanceof Cmd)switch(i.cmd){case"endcmap":break A;case"usecmap":s instanceof Name&&(r=s.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!a&&r&&(a=r);return a?extendCMap(e,i,a):e}async function extendCMap(e,t,i){e.useCMap=await createBuiltInCMap(i,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let i=0;iextendCMap(s,t,e)));if(a===mA.NONE){const e=new Lexer(new Stream(i));return parseCMap(s,e,t,null)}throw new Error(`Invalid CMap "compressionType" value: ${a}`)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:i}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){const a=await parseCMap(new CMap,new Lexer(e),t,i);return a.isIdentityCMap?createBuiltInCMap(a.name,t):a}throw new Error("Encoding required.")}}const Bi=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],li=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Qi=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Ei=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],ui=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],di=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],pi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],mi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],yi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return pi;case"StandardEncoding":return fi;case"MacRomanEncoding":return di;case"SymbolSetEncoding":return mi;case"ZapfDingbatsEncoding":return yi;case"ExpertEncoding":return Ei;case"MacExpertEncoding":return ui;default:return null}}const wi=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Di=391,bi=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Fi=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,i){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!i}parse(){const e=this.properties,t=new CFF;this.cff=t;const i=this.parseHeader(),a=this.parseIndex(i.endPos),s=this.parseIndex(a.endPos),r=this.parseIndex(s.endPos),n=this.parseIndex(r.endPos),g=this.parseDict(s.obj.get(0)),o=this.createDict(CFFTopDict,g,t.strings);t.header=i.obj;t.names=this.parseNameIndex(a.obj);t.strings=this.parseStringIndex(r.obj);t.topDict=o;t.globalSubrIndex=n.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=o.hasName("ROS");const c=o.getByName("CharStrings"),C=this.parseIndex(c).obj,h=o.getByName("FontMatrix");h&&(e.fontMatrix=h);const l=o.getByName("FontBBox");if(l){e.ascent=Math.max(l[3],l[1]);e.descent=Math.min(l[1],l[3]);e.ascentScaled=!0}let Q,E;if(t.isCIDFont){const e=this.parseIndex(o.getByName("FDArray")).obj;for(let i=0,a=e.count;i=t)throw new FormatError("Invalid CFF header");if(0!==i){info("cff data is shifted");e=e.subarray(i);this.bytes=e}const a=e[0],s=e[1],r=e[2],n=e[3];return{obj:new CFFHeader(a,s,r,n),endPos:r}}parseDict(e){let t=0;function parseOperand(){let i=e[t++];if(30===i)return function parseFloatOperand(){let i="";const a=15,s=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],r=e.length;for(;t>4,g=15&r;if(n===a)break;i+=s[n];if(g===a)break;i+=s[g]}return parseFloat(i)}();if(28===i){i=e[t++];i=(i<<24|e[t++]<<16)>>16;return i}if(29===i){i=e[t++];i=i<<8|e[t++];i=i<<8|e[t++];i=i<<8|e[t++];return i}if(i>=32&&i<=246)return i-139;if(i>=247&&i<=250)return 256*(i-247)+e[t++]+108;if(i>=251&&i<=254)return-256*(i-251)-e[t++]-108;warn('CFFParser_parseDict: "'+i+'" is a reserved command.');return NaN}let i=[];const a=[];t=0;const s=e.length;for(;t10)return!1;let s=e.stackSize;const r=e.stack;let n=t.length;for(let g=0;g>16;g+=2;s++}else if(14===o){if(s>=4){s-=4;if(this.seacAnalysisEnabled){e.seac=r.slice(s,s+4);return!1}}c=bi[o]}else if(o>=32&&o<=246){r[s]=o-139;s++}else if(o>=247&&o<=254){r[s]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108;g++;s++}else if(255===o){r[s]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536;g+=4;s++}else if(19===o||20===o){e.hints+=s>>1;if(0===e.hints){t.copyWithin(g-1,g,-1);g-=1;n-=1;continue}g+=e.hints+7>>3;s%=2;c=bi[o]}else{if(10===o||29===o){const t=10===o?i:a;if(!t){c=bi[o];warn("Missing subrsIndex for "+c.id);return!1}let n=32768;t.count<1240?n=107:t.count<33900&&(n=1131);const g=r[--s]+n;if(g<0||g>=t.count||isNaN(g)){c=bi[o];warn("Out of bounds subrIndex for "+c.id);return!1}e.stackSize=s;e.callDepth++;if(!this.parseCharString(e,t.get(g),i,a))return!1;e.callDepth--;s=e.stackSize;continue}if(11===o){e.stackSize=s;return!0}if(0===o&&g===t.length){t[g-1]=14;c=bi[14]}else{if(9===o){t.copyWithin(g-1,g,-1);g-=1;n-=1;continue}c=bi[o]}}if(c){if(c.stem){e.hints+=s>>1;if(3===o||23===o)e.hasVStems=!0;else if(e.hasVStems&&(1===o||18===o)){warn("CFF stem hints are in wrong order");t[g-1]=1===o?3:23}}if("min"in c&&!e.undefStack&&s=2&&c.stem?s%=2:s>1&&warn("Found too many parameters for stack-clearing command");s>0&&(e.width=r[s-1])}if("stackDelta"in c){"stackFn"in c&&c.stackFn(r,s);s+=c.stackDelta}else if(c.stackClearing)s=0;else if(c.resetStack){s=0;e.undefStack=!1}else if(c.undefStack){s=0;e.undefStack=!0;e.firstStackClearing=!1}}}n=s.length){warn("Invalid fd index for glyph index.");h=!1}if(h){Q=s[e].privateDict;l=Q.subrsIndex}}else t&&(l=t);h&&(h=this.parseCharString(C,o,l,i));if(null!==C.width){const e=Q.getByName("nominalWidthX");g[c]=e+C.width}else{const e=Q.getByName("defaultWidthX");g[c]=e}null!==C.seac&&(n[c]=C.seac);h||e.set(c,new Uint8Array([14]))}return{charStrings:e,seacs:n,widths:g}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const i=t[0],a=t[1];if(0===i||a>=this.bytes.length){this.emptyPrivateDictionary(e);return}const s=a+i,r=this.bytes.subarray(a,s),n=this.parseDict(r),g=this.createDict(CFFPrivateDict,n,e.strings);e.privateDict=g;0===g.getByName("ExpansionFactor")&&g.setByName("ExpansionFactor",.06);if(!g.getByName("Subrs"))return;const o=g.getByName("Subrs"),c=a+o;if(0===o||c>=this.bytes.length){this.emptyPrivateDictionary(e);return}const C=this.parseIndex(c);g.subrsIndex=C.obj}parseCharsets(e,t,i,a){if(0===e)return new CFFCharset(!0,Ri.ISO_ADOBE,Bi);if(1===e)return new CFFCharset(!0,Ri.EXPERT,li);if(2===e)return new CFFCharset(!0,Ri.EXPERT_SUBSET,Qi);const s=this.bytes,r=e,n=s[e++],g=[a?0:".notdef"];let o,c,C;t-=1;switch(n){case 0:for(C=0;C=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,i,a){this.major=e;this.minor=t;this.hdrSize=i;this.offSize=a}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?wi[e]:e-Di<=this.strings.length?this.strings[e-Di]:wi[0]}getSID(e){let t=wi.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Di:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const i of t)if(isNaN(i)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const i=this.types[e];"num"!==i&&"sid"!==i&&"offset"!==i||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const i of e){const e=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[e]=i[1];t.nameToKeyMap[i[1]]=e;t.types[e]=i[2];t.defaults[e]=i[3];t.opcodes[e]=Array.isArray(i[0])?i[0]:[i[0]];t.order.push(e)}return t}}const Si=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Si))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const ki=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(ki))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Ri={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,i,a){this.predefined=e;this.format=t;this.charset=i;this.raw=a}}class CFFEncoding{constructor(e,t,i,a){this.predefined=e;this.format=t;this.encoding=i;this.raw=a}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,i){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const a=i.data,s=this.offsets[e];for(let e=0,i=t.length;e>24&255;a[n]=c>>16&255;a[g]=c>>8&255;a[o]=255&c}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},i=this.compileHeader(e.header);t.add(i);const a=this.compileNameIndex(e.names);t.add(a);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const i of e.fdArray){let e=t.slice(0);i.hasName("FontMatrix")&&(e=Util.transform(e,i.getByName("FontMatrix")));i.setByName("FontMatrix",e)}}const s=e.topDict.getByName("XUID");s?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let r=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(r.output);const n=r.trackers[0],g=this.compileStringIndex(e.strings.strings);t.add(g);const o=this.compileIndex(e.globalSubrIndex);t.add(o);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)n.setEntryLocation("Encoding",[e.encoding.format],t);else{const i=this.compileEncoding(e.encoding);n.setEntryLocation("Encoding",[t.length],t);t.add(i)}const c=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);n.setEntryLocation("charset",[t.length],t);t.add(c);const C=this.compileCharStrings(e.charStrings);n.setEntryLocation("CharStrings",[t.length],t);t.add(C);if(e.isCIDFont){n.setEntryLocation("FDSelect",[t.length],t);const i=this.compileFDSelect(e.fdSelect);t.add(i);r=this.compileTopDicts(e.fdArray,t.length,!0);n.setEntryLocation("FDArray",[t.length],t);t.add(r.output);const a=r.trackers;this.compilePrivateDicts(e.fdArray,a,t)}this.compilePrivateDicts([e.topDict],[n],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const i=CFFCompiler.EncodeFloatRegExp.exec(t);if(i){const a=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(e*a)/a).toString()}let a,s,r="";for(a=0,s=t.length;a=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const i of e){const e=Math.min(i.length,127);let a=new Array(e);for(let t=0;t"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");a[t]=e}a=a.join("");""===a&&(a="Bad_Font_Name");t.add(stringToBytes(a))}return this.compileIndex(t)}compileTopDicts(e,t,i){const a=[];let s=new CFFIndex;for(const r of e){if(i){r.removeByName("CIDFontVersion");r.removeByName("CIDFontRevision");r.removeByName("CIDFontType");r.removeByName("CIDCount");r.removeByName("UIDBase")}const e=new CFFOffsetTracker,n=this.compileDict(r,e);a.push(e);s.add(n);e.offset(t)}s=this.compileIndex(s,a);return{trackers:a,output:s}}compilePrivateDicts(e,t,i){for(let a=0,s=e.length;a>8&255,255&r]);else{s=new Uint8Array(1+2*r);s[0]=0;let t=0;const a=e.charset.length;let n=!1;for(let r=1;r>8&255;s[r+1]=255&g}}return this.compileTypedArray(s)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let i,a;switch(t){case 0:i=new Uint8Array(1+e.fdSelect.length);i[0]=t;for(a=0;a>8&255,255&s,r];for(a=1;a>8&255,255&a,t);r=t}}const g=(n.length-3)/3;n[1]=g>>8&255;n[2]=255&g;n.push(a>>8&255,255&a);i=new Uint8Array(n)}return this.compileTypedArray(i)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const i=e.objects,a=i.length;if(0===a)return[0,0];const s=[a>>8&255,255&a];let r,n,g=1;for(r=0;r>8&255,255&o):3===n?s.push(o>>16&255,o>>8&255,255&o):s.push(o>>>24&255,o>>16&255,o>>8&255,255&o);i[r]&&(o+=i[r].length)}for(r=0;r=5&&t<=7))return-1;a=e.substring(1)}if(a===a.toUpperCase()){i=parseInt(a,16);if(i>=0)return i}}return-1}const Mi=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const i=Mi[t];for(let a=0,s=i.length;a=i[a]&&e<=i[a+1])return t}for(let t=0,i=Mi.length;t=i[a]&&e<=i[a+1])return t}return-1}const Hi=new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$","u"),Ji=new Map;const Yi=!0,vi=1,Ki=2,Ti=4,qi=32,Oi=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const i=getUnicodeForGlyph(e,t);if(-1!==i)for(const e in t)if(t[e]===i)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,i){const a=Object.create(null);let s,r,n;const g=!!(e.flags&Ti);if(e.isInternalFont){n=t;for(r=0;r=0?s:0}}else if(e.baseEncodingName){n=getEncoding(e.baseEncodingName);for(r=0;r=0?s:0}}else if(g)for(r in t)a[r]=t[r];else{n=fi;for(r=0;r=0?s:0}}const o=e.differences;let c;if(o)for(r in o){const e=o[r];s=i.indexOf(e);if(-1===s){c||(c=Ni());const t=recoverGlyphName(e,c);t!==e&&(s=i.indexOf(t))}a[r]=s>=0?s:0}return a}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\s/g,"")}const Pi=getLookupTableFactory((function(e){e["Times-Roman"]="Times-Roman";e.Helvetica="Helvetica";e.Courier="Courier";e.Symbol="Symbol";e["Times-Bold"]="Times-Bold";e["Helvetica-Bold"]="Helvetica-Bold";e["Courier-Bold"]="Courier-Bold";e.ZapfDingbats="ZapfDingbats";e["Times-Italic"]="Times-Italic";e["Helvetica-Oblique"]="Helvetica-Oblique";e["Courier-Oblique"]="Courier-Oblique";e["Times-BoldItalic"]="Times-BoldItalic";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e["Courier-BoldOblique"]="Courier-BoldOblique";e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Oblique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-Italic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique";e["Arial-BoldMT-Bold"]="Helvetica-Bold";e["Arial-ItalicMT-Italic"]="Helvetica-Oblique";e.ArialUnicodeMS="Helvetica";e["ArialUnicodeMS-Bold"]="Helvetica-Bold";e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique";e["ArialUnicodeMS-Italic"]="Helvetica-Oblique";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Oblique";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e.CourierNewPSMT="Courier";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldItalic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-Italic"]="Times-Italic"})),Wi=getLookupTableFactory((function(e){e.Courier="FoxitFixed.pfb";e["Courier-Bold"]="FoxitFixedBold.pfb";e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb";e["Courier-Oblique"]="FoxitFixedItalic.pfb";e.Helvetica="LiberationSans-Regular.ttf";e["Helvetica-Bold"]="LiberationSans-Bold.ttf";e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf";e["Helvetica-Oblique"]="LiberationSans-Italic.ttf";e["Times-Roman"]="FoxitSerif.pfb";e["Times-Bold"]="FoxitSerifBold.pfb";e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb";e["Times-Italic"]="FoxitSerifItalic.pfb";e.Symbol="FoxitSymbol.pfb";e.ZapfDingbats="FoxitDingbats.pfb";e["LiberationSans-Regular"]="LiberationSans-Regular.ttf";e["LiberationSans-Bold"]="LiberationSans-Bold.ttf";e["LiberationSans-Italic"]="LiberationSans-Italic.ttf";e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"})),ji=getLookupTableFactory((function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helvetica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.Impact="Helvetica";e["ItcSymbol-Bold"]="Helvetica-Bold";e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique";e["ItcSymbol-Book"]="Helvetica";e["ItcSymbol-BookItalic"]="Helvetica-Oblique";e["ItcSymbol-Medium"]="Helvetica";e["ItcSymbol-MediumItalic"]="Helvetica-Oblique";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSans-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["MS-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["MS-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS PMincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica"})),Xi=getLookupTableFactory((function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfield=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Serif"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e.LiberationSerif=!0;e["Liberation Serif"]=!0;e["Linux Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0})),Zi=getLookupTableFactory((function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0;e.Wingdings=!0;e["Wingdings-Bold"]=!0;e["Wingdings-Regular"]=!0})),Vi=getLookupTableFactory((function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[179]=8220;e[180]=8221;e[181]=8216;e[182]=8217;e[200]=193;e[203]=205;e[207]=211;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[226]=352;e[227]=353;e[228]=381;e[229]=382;e[233]=221;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[267]=282;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[283]=344;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[672]=1488;e[673]=1489;e[674]=1490;e[675]=1491;e[676]=1492;e[677]=1493;e[678]=1494;e[679]=1495;e[680]=1496;e[681]=1497;e[682]=1498;e[683]=1499;e[684]=1500;e[685]=1501;e[686]=1502;e[687]=1503;e[688]=1504;e[689]=1505;e[690]=1506;e[691]=1507;e[692]=1508;e[693]=1509;e[694]=1510;e[695]=1511;e[696]=1512;e[697]=1513;e[698]=1514;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377})),zi=getLookupTableFactory((function(e){e[227]=322;e[264]=261;e[291]=346})),_i=getLookupTableFactory((function(e){e[1]=32;e[4]=65;e[5]=192;e[6]=193;e[9]=196;e[17]=66;e[18]=67;e[21]=268;e[24]=68;e[28]=69;e[29]=200;e[30]=201;e[32]=282;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[48]=204;e[49]=205;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[76]=210;e[80]=214;e[87]=80;e[89]=81;e[90]=82;e[92]=344;e[94]=83;e[97]=352;e[100]=84;e[104]=85;e[109]=220;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[124]=221;e[127]=90;e[129]=381;e[258]=97;e[259]=224;e[260]=225;e[263]=228;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[275]=269;e[282]=100;e[286]=101;e[287]=232;e[288]=233;e[290]=283;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[350]=236;e[351]=237;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[382]=242;e[383]=243;e[386]=246;e[393]=112;e[395]=113;e[396]=114;e[398]=345;e[400]=115;e[401]=347;e[403]=353;e[410]=116;e[437]=117;e[442]=252;e[448]=118;e[449]=119;e[454]=120;e[455]=121;e[457]=253;e[460]=122;e[462]=382;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=41;e[896]=91;e[897]=93;e[923]=64;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45}));function getStandardFontName(e){const t=normalizeFontName(e);return Pi()[t]}function isKnownFontName(e){const t=normalizeFontName(e);return!!(Pi()[t]||ji()[t]||Xi()[t]||Zi()[t])}class ToUnicodeMap{constructor(e=[]){this._map=e}get length(){return this._map.length}forEach(e){for(const t in this._map)e(t,this._map[t].charCodeAt(0))}has(e){return void 0!==this._map[e]}get(e){return this._map[e]}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const i in t)if(t[i]===e)return 0|i;return-1}amend(e){for(const t in e)this._map[t]=e[t]}}class IdentityToUnicodeMap{constructor(e,t){this.firstChar=e;this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(e){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const i=new CFFParser(e,t,Yi);this.cff=i.parse();this.cff.duplicateFirstGlyph();const a=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=a.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:i,cMap:a}=t,s=e.charset.charset;let r,n;if(t.composite){let t,g;if(i?.length>0){t=Object.create(null);for(let e=0,a=i.length;e=0){const a=i[t];a&&(s[e]=a)}}s.length>0&&(this.properties.builtInEncoding=s)}}function getUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function getUint16(e,t){return e[t]<<8|e[t+1]}function getInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function getInt8(e,t){return e[t]<<24>>24}function getFloat214(e,t){return getInt16(e,t)/16384}function getSubroutineBias(e){const t=e.length;let i=32768;t<1240?i=107:t<33900&&(i=1131);return i}function parseCmap(e,t,i){const a=1===getUint16(e,t+2)?getUint32(e,t+8):getUint32(e,t+16),s=getUint16(e,t+a);let r,n,g;if(4===s){getUint16(e,t+a+2);const i=getUint16(e,t+a+6)>>1;n=t+a+14;r=[];for(g=0;g>1;i0;)C.push({flags:r})}for(i=0;i>1;p=!0;break;case 4:n+=s.pop();moveTo(r,n);p=!0;break;case 5:for(;s.length>0;){r+=s.shift();n+=s.shift();lineTo(r,n)}break;case 6:for(;s.length>0;){r+=s.shift();lineTo(r,n);if(0===s.length)break;n+=s.shift();lineTo(r,n)}break;case 7:for(;s.length>0;){n+=s.shift();lineTo(r,n);if(0===s.length)break;r+=s.shift();lineTo(r,n)}break;case 8:for(;s.length>0;){c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}break;case 10:d=s.pop();f=null;if(i.isCFFCIDFont){const e=i.fdSelect.getFDIndex(a);if(e>=0&&eMath.abs(n-t)?r+=s.shift():n+=s.shift();bezierCurveTo(c,h,C,l,r,n);break;default:throw new FormatError(`unknown operator: 12 ${m}`)}break;case 14:if(s.length>=4){const e=s.pop(),a=s.pop();n=s.pop();r=s.pop();t.add(Qt);t.add(dt,[r,n]);let g=lookupCmap(i.cmap,String.fromCharCode(i.glyphNameMap[fi[e]]));compileCharString(i.glyphs[g.glyphId],t,i,g.glyphId);t.add(lt);g=lookupCmap(i.cmap,String.fromCharCode(i.glyphNameMap[fi[a]]));compileCharString(i.glyphs[g.glyphId],t,i,g.glyphId)}return;case 19:case 20:g+=s.length>>1;o+=g+7>>3;p=!0;break;case 21:n+=s.pop();r+=s.pop();moveTo(r,n);p=!0;break;case 22:r+=s.pop();moveTo(r,n);p=!0;break;case 24:for(;s.length>2;){c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}r+=s.shift();n+=s.shift();lineTo(r,n);break;case 25:for(;s.length>6;){r+=s.shift();n+=s.shift();lineTo(r,n)}c=r+s.shift();h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+s.shift();bezierCurveTo(c,h,C,l,r,n);break;case 26:s.length%2&&(r+=s.shift());for(;s.length>0;){c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C;n=l+s.shift();bezierCurveTo(c,h,C,l,r,n)}break;case 27:s.length%2&&(n+=s.shift());for(;s.length>0;){c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l;bezierCurveTo(c,h,C,l,r,n)}break;case 28:s.push((e[o]<<24|e[o+1]<<16)>>16);o+=2;break;case 29:d=s.pop()+i.gsubrsBias;f=i.gsubrs[d];f&&parse(f);break;case 30:for(;s.length>0;){c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n);if(0===s.length)break;c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();n=l+s.shift();r=C+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n)}break;case 31:for(;s.length>0;){c=r+s.shift();h=n;C=c+s.shift();l=h+s.shift();n=l+s.shift();r=C+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n);if(0===s.length)break;c=r;h=n+s.shift();C=c+s.shift();l=h+s.shift();r=C+s.shift();n=l+(1===s.length?s.shift():0);bezierCurveTo(c,h,C,l,r,n)}break;default:if(m<32)throw new FormatError(`unknown operator: ${m}`);if(m<247)s.push(m-139);else if(m<251)s.push(256*(m-247)+e[o++]+108);else if(m<255)s.push(256*-(m-251)-e[o++]-108);else{s.push((e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3])/65536);o+=4}}p&&(s.length=0)}}(e)}const $i=[];class Commands{cmds=[];add(e,t){if(t)if(isNumberArray(t,null))this.cmds.push(e,...t);else{warn(`Commands.add - "${e}" has at least one non-number arg: "${t}".`);const i=t.map((e=>"number"==typeof e?e:0));this.cmds.push(e,...i)}else this.cmds.push(e)}}class CompiledFont{constructor(e){this.constructor===CompiledFont&&unreachable("Cannot initialize CompiledFont.");this.fontMatrix=e;this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(e){const{charCode:t,glyphId:i}=lookupCmap(this.cmap,e);let a,s=this.compiledGlyphs[i];if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(e){s=$i;a=e}this.compiledGlyphs[i]=s}this.compiledCharCodeToGlyphId[t]??=i;if(a)throw a;return s}compileGlyph(e,t){if(!e||0===e.length||14===e[0])return $i;let i=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(t);if(e>=0&&e2*getUint16(e,t)}const r=[];let n=s(t,0);for(let i=a;ie+(t.getSize()+3&-4)),0)}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),i=e>131070,a=i?4:2,s=new DataView(new ArrayBuffer((this.glyphs.length+1)*a));i?s.setUint32(0,0):s.setUint16(0,0);let r=0,n=0;for(const e of this.glyphs){r+=e.write(r,t);r=r+3&-4;n+=a;i?s.setUint32(n,r):s.setUint16(n,r>>1)}return{isLocationLong:i,loca:new Uint8Array(s.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,i=this.glyphs.length;te+t.getSize()),0);return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const i=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const i of this.composites)e+=i.write(e,t);return e-i}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const i of this.composites)i.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:i,xMax:a,yMax:s}){this.numberOfContours=e;this.xMin=t;this.yMin=i;this.xMax=a;this.yMax=s}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t;this.yCoordinates=i;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,i){const a=[];for(let s=0;s255?e+=2:g>0&&(e+=1);t=r;g=Math.abs(n-i);g>255?e+=2:g>0&&(e+=1);i=n}}return e}write(e,t){const i=e,a=[],s=[],r=[];let n=0,g=0;for(const i of this.contours){for(let e=0,t=i.xCoordinates.length;e=0?18:2;a.push(e)}else a.push(c)}n=o;const C=i.yCoordinates[e];c=C-g;if(0===c){t|=32;s.push(0)}else{const e=Math.abs(c);if(e<=255){t|=c>=0?36:4;s.push(e)}else s.push(c)}g=C;r.push(t)}t.setUint16(e,a.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const i of r)t.setUint8(e++,i);for(let i=0,s=a.length;i=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const i=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-i}scale(e,t){}}function writeInt16(e,t,i){e[t]=i>>8&255;e[t+1]=255&i}function writeInt32(e,t,i){e[t]=i>>24&255;e[t+1]=i>>16&255;e[t+2]=i>>8&255;e[t+3]=255&i}function writeData(e,t,i){if(i instanceof Uint8Array)e.set(i,t);else if("string"==typeof i)for(let a=0,s=i.length;ai;){i<<=1;a++}const s=i*t;return{range:s,entry:a,rangeShift:t*e-s}}toArray(){let e=this.sfnt;const t=this.tables,i=Object.keys(t);i.sort();const a=i.length;let s,r,n,g,o,c=12+16*a;const C=[c];for(s=0;s>>0;C.push(c)}const h=new Uint8Array(c);for(s=0;s>>0}writeInt32(h,c+4,e);writeInt32(h,c+8,C[s]);writeInt32(h,c+12,t[o].length);c+=16}return h}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}const ta=[4],ia=[5],aa=[6],sa=[7],ra=[8],na=[12,35],ga=[14],oa=[21],Ia=[22],ca=[30],Ca=[31];class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,i){const a=e.length;let s,r,n,g=!1;for(let o=0;oa)return!0;const s=a-e;for(let e=s;e>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);i?this.stack.splice(s,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,i){if(i>=e.length)return new Uint8Array(0);let a,s,r=0|t;for(a=0;a>8;r=52845*(t+r)+22719&65535}return g}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,i){if(t){const t=e.getBytes(),i=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(i?decrypt(t,55665,4):function decryptAscii(e,t,i){let a=0|t;const s=e.length,r=new Uint8Array(s>>>1);let n,g;for(n=0,g=0;n>8;a=52845*(e+a)+22719&65535}}return r.slice(i,g)}(t,55665,4))}this.seacAnalysisEnabled=!!i;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let i="";do{i+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return i}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,i=[],a=[],s=Object.create(null);s.lenIV=4;const r={subrs:[],charstrings:[],properties:{privateData:s}};let n,g,o,c;for(;null!==(n=this.getToken());)if("/"===n){n=this.getToken();switch(n){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){n=this.getToken();if(null===n||"end"===n)break;if("/"!==n)continue;const e=this.getToken();g=this.readInt();this.getToken();o=g>0?t.getBytes(g):new Uint8Array(0);c=r.properties.privateData.lenIV;const i=this.readCharStrings(o,c);this.nextChar();n=this.getToken();"noaccess"===n?this.getToken():"/"===n&&this.prevChar();a.push({glyph:e,encoded:i})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();g=this.readInt();this.getToken();o=g>0?t.getBytes(g):new Uint8Array(0);c=r.properties.privateData.lenIV;const a=this.readCharStrings(o,c);this.nextChar();n=this.getToken();"noaccess"===n&&this.getToken();i[e]=a}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":r.properties.privateData[n]=this.readNumberArray();break;case"StdHW":case"StdVW":r.properties.privateData[n]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":r.properties.privateData[n]=this.readNumber();break;case"ExpansionFactor":r.properties.privateData[n]=this.readNumber()||.06;break;case"ForceBold":r.properties.privateData[n]=this.readBoolean()}}for(const{encoded:t,glyph:s}of a){const a=new Type1CharString,n=a.convert(t,i,this.seacAnalysisEnabled);let g=a.output;n&&(g=[14]);const o={glyphName:s,charstring:g,width:a.width,lsb:a.lsb,seac:a.seac};".notdef"===s?r.charstrings.unshift(o):r.charstrings.push(o);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(s);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=a.width)}}return r}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const i=this.readNumberArray();e.fontMatrix=i;break;case"Encoding":const a=this.getToken();let s;if(/^\d+$/.test(a)){s=[];const e=0|parseInt(a,10);this.getToken();for(let i=0;i=s){n+=i;for(;n=0&&(a[e]=s)}}return type1FontGlyphMapping(e,a,i)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];for(let i=0,a=e.length;i0;e--)t[e]-=t[e-1];Q.setByName(e,t)}r.topDict.privateDict=Q;const u=new CFFIndex;for(C=0,h=a.length;C0&&e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,i,a,s,r,n,g,o){this.originalCharCode=e;this.fontChar=t;this.unicode=i;this.accent=a;this.width=s;this.vmetric=r;this.operatorListId=n;this.isSpace=g;this.isInFont=o}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=Ji.get(e);if(t)return t;const i=e.match(Hi),a={isWhitespace:!!i?.[1],isZeroWidthDiacritic:!!i?.[2],isInvisibleFormatMark:!!i?.[3]};Ji.set(e,a);return a}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,i){e[t+1]=i;e[t]=i>>>8}function signedInt16(e,t){const i=(e<<8)+t;return 32768&i?i-65536:i}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:i,composite:a}){let s,r;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))s=a?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))s=a?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))s=a?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(a){s="CIDFontType0";r="CIDFontType0C"}else{s="MMType1"===t?"MMType1":"Type1";r="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");s=t;r=i}return[s,r]}function applyStandardFontGlyphMap(e,t){for(const i in t)e[+i]=t[i]}function buildToFontChar(e,t,i){const a=[];let s;for(let i=0,r=e.length;iC){o++;if(o>=ha.length){warn("Ran out of space in font private use area.");break}c=ha[o][0];C=ha[o][1]}const E=c++;0===Q&&(Q=i);let u=a.get(l);"string"==typeof u&&(u=u.codePointAt(0));if(u&&!(h=u,ha[0][0]<=h&&h<=ha[0][1]||ha[1][0]<=h&&h<=ha[1][1])&&!g.has(Q)){r.set(u,Q);g.add(Q)}s[E]=Q;n[l]=E}var h;return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:r,nextAvailableFontCharCode:c}}function createCmapTable(e,t,i){const a=function getRanges(e,t,i){const a=[];for(const t in e)e[t]>=i||a.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,s]of t)s>=i||a.push({fontCharCode:e,glyphId:s});0===a.length&&a.push({fontCharCode:0,glyphId:0});a.sort((function fontGetRangesSort(e,t){return e.fontCharCode-t.fontCharCode}));const s=[],r=a.length;for(let e=0;e65535?2:1;let r,n,g,o,c="\0\0"+string16(s)+"\0\0"+string32(4+8*s);for(r=a.length-1;r>=0&&!(a[r][0]<=65535);--r);const C=r+1;a[r][0]<65535&&65535===a[r][1]&&(a[r][1]=65534);const h=a[r][1]<65535?1:0,l=C+h,Q=OpenTypeFileBuilder.getSearchParams(l,2);let E,u,d,f,p="",m="",y="",w="",D="",b=0;for(r=0,n=C;r0){m+="ÿÿ";p+="ÿÿ";y+="\0";w+="\0\0"}const F="\0\0"+string16(2*l)+string16(Q.range)+string16(Q.entry)+string16(Q.rangeShift)+m+"\0\0"+p+y+w+D;let S="",k="";if(s>1){c+="\0\0\n"+string32(4+8*s+4+F.length);S="";for(r=0,n=a.length;re||!g)&&(g=e);o 123 are reserved for internal usage");n|=1<65535&&(o=65535)}else{g=0;o=255}const C=e.bbox||[0,0,0,0],h=i.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:h/Ba,Q=i.ascent||Math.round(l*(e.ascent||C[3]));let E=i.descent||Math.round(l*(e.descent||C[1]));E>0&&e.descent>0&&C[1]<0&&(E=-E);const u=i.yMax||Q,d=-i.yMin||-E;return"\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0"+String.fromCharCode(e.fixedPitch?9:0)+"\0\0\0\0\0\0"+string32(a)+string32(s)+string32(r)+string32(n)+"*21*"+string16(e.italicAngle?1:0)+string16(g||e.firstChar)+string16(o||e.lastChar)+string16(Q)+string16(E)+"\0d"+string16(u)+string16(d)+"\0\0\0\0\0\0\0\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(g||e.firstChar)+"\0"}function createPostTable(e){return"\0\0\0"+string32(Math.floor(65536*e.italicAngle))+"\0\0\0\0"+string32(e.fixedPitch?1:0)+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const i=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],a=[];let s,r,n,g,o;for(s=0,r=i.length;s0;if((n||g)&&"CIDFontType2"===i&&this.cidEncoding.startsWith("Identity-")){const i=e.cidToGidMap,a=[];applyStandardFontGlyphMap(a,Vi());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(a,zi()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(a,_i());if(i){for(const e in a){const t=a[e];void 0!==i[t]&&(a[+e]=i[t])}i.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const s=a[e];void 0===i[s]&&(a[+e]=t)}))}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){a[+e]=t}));this.toFontChar=a;this.toUnicode=new ToUnicodeMap(a)}else if(/Symbol/i.test(a))this.toFontChar=buildToFontChar(mi,Ni(),this.differences);else if(/Dingbats/i.test(a))this.toFontChar=buildToFontChar(yi,Gi(),this.differences);else if(n){const e=buildToFontChar(this.defaultEncoding,Ni(),this.differences);"CIDFontType2"!==i||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(t,i){e[+t]=i}));this.toFontChar=e}else{const e=Ni(),i=[];this.toUnicode.forEach(((t,a)=>{if(!this.composite){const i=getUnicodeForGlyph(this.differences[t]||this.defaultEncoding[t],e);-1!==i&&(a=i)}i[+t]=a}));this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(i,Vi());this.toFontChar=i}amendFallbackToUnicode(e);this.loadedName=a.split("-",1)[0]}checkAndRepair(e,t,i){const a=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const i=Object.create(null);i["OS/2"]=null;i.cmap=null;i.head=null;i.hhea=null;i.hmtx=null;i.maxp=null;i.name=null;i.post=null;for(let s=0;s>>0,a=e.getInt32()>>>0,s=e.getInt32()>>>0,r=e.pos;e.pos=e.start||0;e.skip(a);const n=e.getBytes(s);e.pos=r;if("head"===t){n[8]=n[9]=n[10]=n[11]=0;n[17]|=32}return{tag:t,checksum:i,length:s,offset:a,data:n}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,i,a,s,r){const n={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||i>e.length||i-t<=12)return n;const g=e.subarray(t,i),o=signedInt16(g[2],g[3]),c=signedInt16(g[4],g[5]),C=signedInt16(g[6],g[7]),h=signedInt16(g[8],g[9]);if(o>C){writeSignedInt16(g,2,C);writeSignedInt16(g,6,o)}if(c>h){writeSignedInt16(g,4,h);writeSignedInt16(g,8,c)}const l=signedInt16(g[0],g[1]);if(l<0){if(l<-1)return n;a.set(g,s);n.length=g.length;return n}let Q,E=10,u=0;for(Q=0;Qg.length)return n;if(!r&&f>0){a.set(g.subarray(0,d),s);a.set([0,0],s+d);a.set(g.subarray(p,y),s+d+2);y-=f;g.length-y>3&&(y=y+3&-4);n.length=y;return n}if(g.length-y>3){y=y+3&-4;a.set(g.subarray(0,y),s);n.length=y;return n}a.set(g,s);n.length=g.length;return n}function readNameTable(e){const i=(t.start||0)+e.offset;t.pos=i;const a=[[],[]],s=[],r=e.length,n=i+r;if(0!==t.getUint16()||r<6)return[a,s];const g=t.getUint16(),o=t.getUint16();let c,C;for(c=0;cn)continue;t.pos=r;const g=e.name;if(e.encoding){let i="";for(let a=0,s=e.length;a0&&(c+=e-1)}}else{if(d||p){warn("TT: nested FDEFs not allowed");u=!0}d=!0;h=c;n=l.pop();t.functionsDefined[n]={data:o,i:c}}else if(!d&&!p){n=l.at(-1);if(isNaN(n))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[n]=!0;if(n in t.functionsStackDeltas){const e=l.length+t.functionsStackDeltas[n];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}l.length=e}else if(n in t.functionsDefined&&!E.includes(n)){Q.push({data:o,i:c,stackTop:l.length-1});E.push(n);g=t.functionsDefined[n];if(!g){warn("TT: CALL non-existent function");t.hintsValid=!1;return}o=g.data;c=g.i}}}if(!d&&!p){let t=0;e<=142?t=s[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){a=l.pop();isNaN(a)||(t=2*-a)}for(;t<0&&l.length>0;){l.pop();t++}for(;t>0;){l.push(NaN);t--}}}t.tooComplexToFollowFunctions=u;const m=[o];c>o.length&&m.push(new Uint8Array(c-o.length));if(h>C){warn("TT: complementing a missing function tail");m.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let i,a,s=0;for(i=0,a=t.length;i>>0,r=[];for(let t=0;t>>0);const n={ttcTag:t,majorVersion:i,minorVersion:a,numFonts:s,offsetTable:r};switch(i){case 1:return n;case 2:n.dsigTag=e.getInt32()>>>0;n.dsigLength=e.getInt32()>>>0;n.dsigOffset=e.getInt32()>>>0;return n}throw new FormatError(`Invalid TrueType Collection majorVersion: ${i}.`)}(e),s=t.split("+");let r;for(let n=0;n0||!(i.cMap instanceof IdentityCMap));if("OTTO"===r.version&&!t||!n.head||!n.hhea||!n.maxp||!n.post){o=new Stream(n["CFF "].data);g=new CFFFont(o,i);adjustWidths(i);return this.convert(e,g,i)}delete n.glyf;delete n.loca;delete n.fpgm;delete n.prep;delete n["cvt "];this.isOpenType=!0}if(!n.maxp)throw new FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+n.maxp.offset;let C=t.getInt32();const h=t.getUint16();if(65536!==C&&20480!==C){if(6===n.maxp.length)C=20480;else{if(!(n.maxp.length>=32))throw new FormatError('"maxp" table has a wrong version number');C=65536}!function writeUint32(e,t,i){e[t+3]=255&i;e[t+2]=i>>>8;e[t+1]=i>>>16;e[t]=i>>>24}(n.maxp.data,0,C)}if(i.scaleFactors?.length===h&&c){const{scaleFactors:e}=i,t=int16(n.head.data[50],n.head.data[51]),a=new GlyfTable({glyfTable:n.glyf.data,isGlyphLocationsLong:t,locaTable:n.loca.data,numGlyphs:h});a.scale(e);const{glyf:s,loca:r,isLocationLong:g}=a.write();n.glyf.data=s;n.loca.data=r;if(g!==!!t){n.head.data[50]=0;n.head.data[51]=g?1:0}const o=n.hmtx.data;for(let t=0;t>8&255;o[i+1]=255&a;writeSignedInt16(o,i+2,Math.round(e[t]*signedInt16(o[i+2],o[i+3])))}}let l=h+1,Q=!0;if(l>65535){Q=!1;l=h;warn("Not enough space in glyfs to duplicate first glyph.")}let E=0,u=0;if(C>=65536&&n.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){n.maxp.data[14]=0;n.maxp.data[15]=2}t.pos+=4;E=t.getUint16();t.pos+=4;u=t.getUint16()}n.maxp.data[4]=l>>8;n.maxp.data[5]=255&l;const d=function sanitizeTTPrograms(e,t,i,a){const s={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,s);t&&sanitizeTTProgram(t,s);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let i=0,a=e.functionsUsed.length;it){warn("TT: invalid function id: "+i);e.hintsValid=!1;return}if(e.functionsUsed[i]&&!e.functionsDefined[i]){warn("TT: undefined function: "+i);e.hintsValid=!1;return}}}(s,a);if(i&&1&i.length){const e=new Uint8Array(i.length+1);e.set(i.data);i.data=e}return s.hintsValid}(n.fpgm,n.prep,n["cvt "],E);if(!d){delete n.fpgm;delete n.prep;delete n["cvt "]}!function sanitizeMetrics(e,t,i,a,s,r){if(!t){i&&(i.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const n=e.getUint16();e.pos+=8;e.pos+=2;let g=e.getUint16();if(0!==n){if(!(2&int16(a.data[44],a.data[45]))){t.data[22]=0;t.data[23]=0}}if(g>s){info(`The numOfMetrics (${g}) should not be greater than the numGlyphs (${s}).`);g=s;t.data[34]=(65280&g)>>8;t.data[35]=255&g}const o=s-g-(i.length-4*g>>1);if(o>0){const e=new Uint8Array(i.length+2*o);e.set(i.data);if(r){e[i.length]=i.data[2];e[i.length+1]=i.data[3]}i.data=e}}(t,n.hhea,n.hmtx,n.head,l,Q);if(!n.head)throw new FormatError('Required "head" table is not found');!function sanitizeHead(e,t,i){const a=e.data,s=function int32(e,t,i,a){return(e<<24)+(t<<16)+(i<<8)+a}(a[0],a[1],a[2],a[3]);if(s>>16!=1){info("Attempting to fix invalid version in head table: "+s);a[0]=0;a[1]=1;a[2]=0;a[3]=0}const r=int16(a[50],a[51]);if(r<0||r>1){info("Attempting to fix invalid indexToLocFormat in head table: "+r);const e=t+1;if(i===e<<1){a[50]=0;a[51]=0}else{if(i!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+r);a[50]=0;a[51]=1}}}(n.head,h,c?n.loca.length:0);let f=Object.create(null);if(c){const e=int16(n.head.data[50],n.head.data[51]),t=function sanitizeGlyphLocations(e,t,i,a,s,r,n){let g,o,c;if(a){g=4;o=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};c=function fontItemEncodeLong(e,t,i){e[t]=i>>>24&255;e[t+1]=i>>16&255;e[t+2]=i>>8&255;e[t+3]=255&i}}else{g=2;o=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};c=function fontItemEncode(e,t,i){e[t]=i>>9&255;e[t+1]=i>>1&255}}const C=r?i+1:i,h=g*(1+C),l=new Uint8Array(h);l.set(e.data.subarray(0,h));e.data=l;const Q=t.data,E=Q.length,u=new Uint8Array(E);let d,f;const p=[];for(d=0,f=0;dE&&(e=E);p.push({index:d,offset:e,endOffset:0})}p.sort(((e,t)=>e.offset-t.offset));for(d=0;de.index-t.index));for(d=0;dn&&(n=e.sizeOfInstructions);w+=t;c(l,f,w)}if(0===w){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(d=0,f=g;di+w)t.data=u.subarray(0,i+w);else{t.data=new Uint8Array(i+w);t.data.set(u.subarray(0,w))}t.data.set(u.subarray(0,i),w);c(e.data,l.length-g,w+i)}else t.data=u.subarray(0,w);return{missingGlyphs:y,maxSizeOfInstructions:n}}(n.loca,n.glyf,h,e,d,Q,u);f=t.missingGlyphs;if(C>=65536&&n.maxp.length>=32){n.maxp.data[26]=t.maxSizeOfInstructions>>8;n.maxp.data[27]=255&t.maxSizeOfInstructions}}if(!n.hhea)throw new FormatError('Required "hhea" table is not found');if(0===n.hhea.data[10]&&0===n.hhea.data[11]){n.hhea.data[10]=255;n.hhea.data[11]=255}const p={unitsPerEm:int16(n.head.data[18],n.head.data[19]),yMax:signedInt16(n.head.data[42],n.head.data[43]),yMin:signedInt16(n.head.data[38],n.head.data[39]),ascent:signedInt16(n.hhea.data[4],n.hhea.data[5]),descent:signedInt16(n.hhea.data[6],n.hhea.data[7]),lineGap:signedInt16(n.hhea.data[8],n.hhea.data[9])};this.ascent=p.ascent/p.unitsPerEm;this.descent=p.descent/p.unitsPerEm;this.lineGap=p.lineGap/p.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;n.post&&function readPostScriptTable(e,i,a){const s=(t.start||0)+e.offset;t.pos=s;const r=s+e.length,n=t.getInt32();t.skip(28);let g,o,c=!0;switch(n){case 65536:g=Oi;break;case 131072:const e=t.getUint16();if(e!==a){c=!1;break}const s=[];for(o=0;o=32768){c=!1;break}s.push(e)}if(!c)break;const C=[],h=[];for(;t.pos65535)throw new FormatError("Max size of CID is 65,535");let s=-1;t?s=a:void 0!==e[a]&&(s=e[a]);s>=0&&s>>0;let C=!1;if(g?.platformId!==s||g?.encodingId!==r){if(0!==s||0!==r&&1!==r&&3!==r)if(1===s&&0===r)C=!0;else if(3!==s||1!==r||!a&&g){if(i&&3===s&&0===r){C=!0;let i=!0;if(e>3;e.push(a);i=Math.max(a,i)}const a=[];for(let e=0;e<=i;e++)a.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let i=0;i<256;i++)if(0===e[i]){t.pos=a[0].idRangePos+2*i;Q=t.getUint16();h.push({charCode:i,glyphId:Q})}else{const s=a[e[i]];for(l=0;l>1;t.skip(6);const i=[];let a;for(a=0;a>1)-(e-a);s.offsetIndex=n;g=Math.max(g,n+s.end-s.start+1)}else s.offsetIndex=-1}const o=[];for(l=0;l>>0;for(l=0;l>>0,i=t.getInt32()>>>0;let a=t.getInt32()>>>0;for(let t=e;t<=i;t++)h.push({charCode:t,glyphId:a++})}}}h.sort((function(e,t){return e.charCode-t.charCode}));for(let e=1;e=61440&&t<=61695&&(t&=255);m[t]=e.glyphId}else for(const e of r)m[e.charCode]=e.glyphId;if(i.glyphNames&&(g.length||this.differences.length))for(let e=0;e<256;++e){if(!o&&void 0!==m[e])continue;const t=this.differences[e]||g[e];if(!t)continue;const a=i.glyphNames.indexOf(t);a>0&&hasGlyph(a)&&(m[e]=a)}}0===m.length&&(m[0]=0);let y=l-1;Q||(y=0);if(!i.cssFontInfo){const e=adjustMapping(m,hasGlyph,y,this.toUnicode);this.toFontChar=e.toFontChar;n.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,l)};n["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const i=t.getUint16();t.skip(60);const a=t.getUint16();if(i<4&&768&a)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(n["OS/2"],t)||(n["OS/2"]={tag:"OS/2",data:createOS2Table(i,e.charCodeToGlyphId,p)})}if(!c)try{o=new Stream(n["CFF "].data);g=new CFFParser(o,i,Yi).parse();g.duplicateFirstGlyph();const e=new CFFCompiler(g);n["CFF "].data=e.compile()}catch{warn("Failed to compile font "+i.loadedName)}if(n.name){const[t,a]=readNameTable(n.name);n.name.data=createNameTable(e,t);this.psName=t[0][6]||null;i.composite||function adjustTrueTypeToUnicode(e,t,i){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===i.length)return;if(e.defaultEncoding===pi)return;for(const e of i)if(!isWinNameRecord(e))return;const a=pi,s=[],r=Ni();for(const e in a){const t=a[e];if(""===t)continue;const i=r[t];void 0!==i&&(s[e]=String.fromCharCode(i))}s.length>0&&e.toUnicode.amend(s)}(i,this.isSymbolicFont,a)}else n.name={tag:"name",data:createNameTable(this.name)};const w=new OpenTypeFileBuilder(r.version);for(const e in n)w.addTable(e,n[e].data);return w.toArray()}convert(e,t,i){i.fixedPitch=!1;i.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const i=[],a=Ni();for(const s in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[s]))continue;const r=getUnicodeForGlyph(t[s],a);-1!==r&&(i[s]=String.fromCharCode(r))}i.length>0&&e.toUnicode.amend(i)}(i,i.builtInEncoding);let s=1;t instanceof CFFFont&&(s=t.numGlyphs-1);const r=t.getGlyphMapping(i);let n=null,g=r,o=null;if(!i.cssFontInfo){n=adjustMapping(r,t.hasGlyphId.bind(t),s,this.toUnicode);this.toFontChar=n.toFontChar;g=n.charCodeToGlyphId;o=n.toUnicodeExtraMap}const c=t.numGlyphs;function getCharCodes(e,t){let i=null;for(const a in e)t===e[a]&&(i||=[]).push(0|a);return i}function createCharCode(e,t){for(const i in e)if(t===e[i])return 0|i;n.charCodeToGlyphId[n.nextAvailableFontCharCode]=t;return n.nextAvailableFontCharCode++}const C=t.seacs;if(n&&C?.length){const e=i.fontMatrix||a,s=t.getCharset(),g=Object.create(null);for(let t in C){t|=0;const i=C[t],a=fi[i[2]],o=fi[i[3]],c=s.indexOf(a),h=s.indexOf(o);if(c<0||h<0)continue;const l={x:i[0]*e[0]+i[1]*e[2]+e[4],y:i[0]*e[1]+i[1]*e[3]+e[5]},Q=getCharCodes(r,t);if(Q)for(const e of Q){const t=n.charCodeToGlyphId,i=createCharCode(t,c),a=createCharCode(t,h);g[e]={baseFontCharCode:i,accentFontCharCode:a,accentOffset:l}}}i.seacMap=g}const h=i.fontMatrix?1/Math.max(...i.fontMatrix.slice(0,4).map(Math.abs)):1e3,l=new OpenTypeFileBuilder("OTTO");l.addTable("CFF ",t.data);l.addTable("OS/2",createOS2Table(i,g));l.addTable("cmap",createCmapTable(g,o,c));l.addTable("head","\0\0\0\0\0\0\0\0\0\0_<õ\0\0"+safeString16(h)+"\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0"+safeString16(i.descent)+"ÿ"+safeString16(i.ascent)+string16(i.italicAngle?2:0)+"\0\0\0\0\0\0\0");l.addTable("hhea","\0\0\0"+safeString16(i.ascent)+safeString16(i.descent)+"\0\0ÿÿ\0\0\0\0\0\0"+safeString16(i.capHeight)+safeString16(Math.tan(i.italicAngle)*i.xHeight)+"\0\0\0\0\0\0\0\0\0\0\0\0"+string16(c));l.addTable("hmtx",function fontFieldsHmtx(){const e=t.charstrings,i=t.cff?t.cff.widths:null;let a="\0\0\0\0";for(let t=1,s=c;t=65520&&e<=65535?0:e>=62976&&e<=63743?xi()[e]||e:173===e?45:e}(i)}this.isType3Font&&(s=i);let C=null;if(this.seacMap?.[e]){c=!0;const t=this.seacMap[e];i=t.baseFontCharCode;C={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let h="";"number"==typeof i&&(i<=1114111?h=String.fromCodePoint(i):warn(`charToGlyph - invalid fontCharCode: ${i}`));r=new fonts_Glyph(e,h,o,C,a,g,s,t,c);return this._glyphCache[e]=r}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const i=Object.create(null),a=e.length;let s=0;for(;st.length%2==1,a=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let s=0,r=e.length;s55295&&(r<57344||r>65533)&&s++;if(this.toUnicode){const e=a(r);if(-1!==e){if(hasCurrentBufErrors()){t.push(i.join(""));i.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)i.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(i.join(""));i.length=0}i.push(String.fromCodePoint(r))}t.push(i.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(e=!1){return{error:this.error}}}const Ea=2,ua=3,da=4,fa=5,pa=6,ma=7;class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}static parseShading(e,t,i,a,s){const r=e instanceof BaseStream?e.dict:e,n=r.get("ShadingType");try{switch(n){case Ea:case ua:return new RadialAxialShading(r,t,i,a,s);case da:case fa:case pa:case ma:return new MeshShading(e,t,i,a,s);default:throw new FormatError("Unsupported ShadingType: "+n)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;constructor(){this.constructor===BaseShading&&unreachable("Cannot initialize BaseShading.")}getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,i,a,s){super();this.shadingType=e.get("ShadingType");let r=0;this.shadingType===Ea?r=4:this.shadingType===ua&&(r=6);this.coordsArr=e.getArray("Coords");if(!isNumberArray(this.coordsArr,r))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const n=ColorSpace.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:i,pdfFunctionFactory:a,localColorSpaceCache:s});this.bbox=lookupNormalRect(e.getArray("BBox"),null);let g=0,o=1;const c=e.getArray("Domain");isNumberArray(c,2)&&([g,o]=c);let C=!1,h=!1;const l=e.getArray("Extend");(function isBooleanArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every((e=>"boolean"==typeof e))})(l,2)&&([C,h]=l);if(!(this.shadingType!==ua||C&&h)){const[e,t,i,a,s,r]=this.coordsArr,n=Math.hypot(e-a,t-s);i<=r+n&&r<=i+n&&warn("Unsupported radial gradient.")}this.extendStart=C;this.extendEnd=h;const Q=e.getRaw("Function"),E=a.createFromArray(Q),u=(o-g)/840,d=this.colorStops=[];if(g>=o||u<=0){info("Bad shading domain.");return}const f=new Float32Array(n.numComps),p=new Float32Array(1);let m,y=0;p[0]=g;E(p,0,f,0);let w=n.getRgb(f,0);const D=Util.makeHexColor(w[0],w[1],w[2]);d.push([0,D]);let b=1;p[0]=g+u;E(p,0,f,0);let F=n.getRgb(f,0),S=F[0]-w[0]+1,k=F[1]-w[1]+1,R=F[2]-w[2]+1,N=F[0]-w[0]-1,G=F[1]-w[1]-1,x=F[2]-w[2]-1;for(let e=2;e<840;e++){p[0]=g+e*u;E(p,0,f,0);m=n.getRgb(f,0);const t=e-y;S=Math.min(S,(m[0]-w[0]+1)/t);k=Math.min(k,(m[1]-w[1]+1)/t);R=Math.min(R,(m[2]-w[2]+1)/t);N=Math.max(N,(m[0]-w[0]-1)/t);G=Math.max(G,(m[1]-w[1]-1)/t);x=Math.max(x,(m[2]-w[2]-1)/t);if(!(N<=S&&G<=k&&x<=R)){const e=Util.makeHexColor(F[0],F[1],F[2]);d.push([b/840,e]);S=m[0]-F[0]+1;k=m[1]-F[1]+1;R=m[2]-F[2]+1;N=m[0]-F[0]-1;G=m[1]-F[1]-1;x=m[2]-F[2]-1;y=b;w=F}b=e;F=m}const U=Util.makeHexColor(F[0],F[1],F[2]);d.push([1,U]);let M="transparent";if(e.has("Background")){m=n.getRgb(e.get("Background"),0);M=Util.makeHexColor(m[0],m[1],m[2])}if(!C){d.unshift([0,M]);d[1][0]+=BaseShading.SMALL_NUMBER}if(!h){d.at(-1)[0]-=BaseShading.SMALL_NUMBER;d.push([1,M])}this.colorStops=d}getIR(){const{coordsArr:e,shadingType:t}=this;let i,a,s,r,n;if(t===Ea){a=[e[0],e[1]];s=[e[2],e[3]];r=null;n=null;i="axial"}else if(t===ua){a=[e[0],e[1]];s=[e[3],e[4]];r=e[2];n=e[5];i="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",i,this.bbox,this.colorStops,a,s,r,n]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const i=t.numComps;this.tmpCompsBuf=new Float32Array(i);const a=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(a):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){let t=this.buffer,i=this.bufferLength;if(32===e){if(0===i)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();const e=this.stream.getByte();this.buffer=e&(1<>i)>>>0}if(8===e&&0===i)return this.stream.getByte();for(;i>i}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const e=this.context.bitsPerCoordinate,t=this.readBits(e),i=this.readBits(e),a=this.context.decode,s=e<32?1/((1<r?r:e;t=t>n?n:t;i=ie*s[t])):i;let n,g=-2;const o=[];for(const[e,t]of a.map(((e,t)=>[e,t])).sort((([e],[t])=>e-t)))if(-1!==e)if(e===g+1){n.push(r[t]);g+=1}else{g=e;n=[r[t]];o.push(e,n)}return o}(e),i=new Dict(null);i.set("BaseFont",Name.get(e));i.set("Type",Name.get("Font"));i.set("Subtype",Name.get("CIDFontType2"));i.set("Encoding",Name.get("Identity-H"));i.set("CIDToGIDMap",Name.get("Identity"));i.set("W",t);i.set("FirstChar",t[0]);i.set("LastChar",t.at(-2)+t.at(-1).length-1);const a=new Dict(null);i.set("FontDescriptor",a);const s=new Dict(null);s.set("Ordering","Identity");s.set("Registry","Adobe");s.set("Supplement",0);i.set("CIDSystemInfo",s);return i}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(cs.LBRACE);this.parseBlock();this.expect(cs.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(cs.NUMBER))this.operators.push(this.prev.value);else if(this.accept(cs.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(cs.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(cs.RBRACE);if(this.accept(cs.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(cs.LBRACE))throw new FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const i=this.operators.length;this.parseBlock();this.expect(cs.RBRACE);this.expect(cs.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=i;this.operators[e+1]="jz"}}}}const cs={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{static get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return PostScriptToken.opCache[e]||=new PostScriptToken(cs.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(cs.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(cs.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(cs.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new PostScriptToken(cs.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return pt;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(cs.NUMBER,this.getNumber());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const i=this.strBuf;i.length=0;i[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)i.push(String.fromCharCode(t));const a=i.join("");switch(a.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(a)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const i=parseFloat(t.join(""));if(isNaN(i))throw new FormatError(`Invalid floating point number: ${i}`);return i}}class BaseLocalCache{constructor(e){this.constructor===BaseLocalCache&&unreachable("Cannot initialize BaseLocalCache.");this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,i){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,i){if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,i){if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,i){if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,i)}else this._imageMap.has(e)||this._imageMap.set(e,i)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,i){if(!t)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,i)}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#D=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#b(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#F(){return!(this._imageCache.size+e)):null}class PDFFunction{static getSampleArray(e,t,i,a){let s,r,n=1;for(s=0,r=e.length;s>o)*C;c&=(1<i?e=i:e0&&(l=r[h-1]);let Q=a[1];h>1,c=s.length>>1,C=new PostScriptEvaluator(g),h=Object.create(null);let l=8192;const Q=new Float32Array(c);return function constructPostScriptFn(e,t,i,a){let s,n,g="";const E=Q;for(s=0;se&&(n=e)}d[s]=n}if(l>0){l--;h[g]=d}i.set(d,a)}}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let i=t.length-e,a=e-1;a>=0;a--,i++)t.push(t[i])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const i=this.stack,a=i.length-e,s=i.length-1,r=a+(t-Math.floor(t/e)*e);for(let e=a,t=s;e0?t.push(n<>g);break;case"ceiling":n=t.pop();t.push(Math.ceil(n));break;case"copy":n=t.pop();t.copy(n);break;case"cos":n=t.pop();t.push(Math.cos(n%360/180*Math.PI));break;case"cvi":n=0|t.pop();t.push(n);break;case"cvr":break;case"div":g=t.pop();n=t.pop();t.push(n/g);break;case"dup":t.copy(1);break;case"eq":g=t.pop();n=t.pop();t.push(n===g);break;case"exch":t.roll(2,1);break;case"exp":g=t.pop();n=t.pop();t.push(n**g);break;case"false":t.push(!1);break;case"floor":n=t.pop();t.push(Math.floor(n));break;case"ge":g=t.pop();n=t.pop();t.push(n>=g);break;case"gt":g=t.pop();n=t.pop();t.push(n>g);break;case"idiv":g=t.pop();n=t.pop();t.push(n/g|0);break;case"index":n=t.pop();t.index(n);break;case"le":g=t.pop();n=t.pop();t.push(n<=g);break;case"ln":n=t.pop();t.push(Math.log(n));break;case"log":n=t.pop();t.push(Math.log10(n));break;case"lt":g=t.pop();n=t.pop();t.push(n=t?new AstLiteral(t):e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,i){const a=[],s=[],r=t.length>>1,n=i.length>>1;let g,o,c,C,h,l,Q,E,u=0;for(let e=0;et.min){g.unshift("Math.max(",r,", ");g.push(")")}if(n4){a=!0;t=0}else{a=!1;t=1}const o=[];for(r=0;r=0&&"ET"===ls[e];--e)ls[e]="EN";for(let e=r+1;e0&&(t=ls[r-1]);let i=h;e+1E&&isOdd(E)&&(d=E)}for(E=u;E>=d;--E){let e=-1;for(r=0,n=o.length;r=0){reverseValues(Bs,e,r);e=-1}}else e<0&&(e=r);e>=0&&reverseValues(Bs,e,o.length)}for(r=0,n=Bs.length;r"!==e||(Bs[r]="")}return createBidiText(Bs.join(""),a)}const Qs={style:"normal",weight:"normal"},Es={style:"normal",weight:"bold"},us={style:"italic",weight:"normal"},ds={style:"italic",weight:"bold"},fs=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:Qs,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:Es,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:us,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:ds,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:Qs,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:Es,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:us,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:ds,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:Qs,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:Es,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:us,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:ds,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:Qs,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:Es,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:us,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:ds,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:Qs,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:Es,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:us,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:ds,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:Qs}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),ps=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter((e=>!t.has(e.toLowerCase()))).join(" ")}function generateFont({alias:e,local:t,path:i,fallback:a,style:s,ultimate:r},n,g,o=!0,c=!0,C=""){const h={style:null,ultimate:null};if(t){const e=C?` ${C}`:"";for(const i of t)n.push(`local(${i}${e})`)}if(e){const t=fs.get(e),r=C||function getStyleToAppend(e){switch(e){case Es:return"Bold";case us:return"Italic";case ds:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(s);Object.assign(h,generateFont(t,n,g,o&&!a,c&&!i,r))}s&&(h.style=s);r&&(h.ultimate=r);if(o&&a){const e=fs.get(a),{ultimate:t}=generateFont(e,n,g,o,c&&!i,C);h.ultimate||=t}c&&i&&g&&n.push(`url(${g}${i})`);return h}function getFontSubstitution(e,t,i,a,s,r){if(a.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==r&&"Type1"!==r||!/^[A-Z]{6}\+/.test(a)||(a=a.slice(7));const n=a=normalizeFontName(a);let g=e.get(n);if(g)return g;let o=fs.get(a);if(!o)for(const[e,t]of ps)if(a.startsWith(e)){a=`${t}${a.substring(e.length)}`;o=fs.get(a);break}let c=!1;if(!o){o=fs.get(s);c=!0}const C=`${t.getDocId()}_s${t.createFontId()}`;if(!o){if(!validateFontName(a)){warn(`Cannot substitute the font because of its name: ${a}`);e.set(n,null);return null}const t=/bold/gi.test(a),i=/oblique|italic/gi.test(a),s=t&&i&&ds||t&&Es||i&&us||Qs;g={css:`"${getFamilyName(a)}",${C}`,guessFallback:!0,loadedName:C,baseFontName:a,src:`local(${a})`,style:s};e.set(n,g);return g}const h=[];c&&validateFontName(a)&&h.push(`local(${a})`);const{style:l,ultimate:Q}=generateFont(o,h,i),E=null===Q,u=E?"":`,${Q}`;g={css:`"${getFamilyName(a)}",${C}${u}`,guessFallback:E,loadedName:C,baseFontName:a,src:h.join(","),style:l};e.set(n,g);return g}class ImageResizer{constructor(e,t){this._imgData=e;this._isMask=t}static needsToBeResized(e,t){if(e<=this._goodSquareLength&&t<=this._goodSquareLength)return!1;const{MAX_DIM:i}=this;if(e>i||t>i)return!0;const a=e*t;if(this._hasMaxArea)return a>this.MAX_AREA;if(a(this.MAX_AREA=this._goodSquareLength**2)}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(ImageResizer._goodSquareLength,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setMaxArea(e){this._hasMaxArea||(this.MAX_AREA=e>>2)}static _areGoodDims(e,t){try{const i=new OffscreenCanvas(e,t),a=i.getContext("2d");a.fillRect(0,0,1,1);const s=a.getImageData(0,0,1,1).data[3];i.width=i.height=1;return 0!==s}catch{return!1}}static _guessMax(e,t,i,a){for(;e+i+1>3,n=i+3&-4;if(i!==n){const e=new Uint8Array(n*t);let a=0;for(let r=0,g=t*i;r>>8;t[i++]=255&s}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();i=t.byteLength}const a=i>>2,s=i-4*a,r=new Uint32Array(t.buffer,0,a);let n=0,g=0,o=this.h1,c=this.h2;const C=3432918353,h=461845907,l=11601,Q=13715;for(let e=0;e>>17;n=n*h&ys|n*Q&ws;o^=n;o=o<<13|o>>>19;o=5*o+3864292196}else{g=r[e];g=g*C&ys|g*l&ws;g=g<<15|g>>>17;g=g*h&ys|g*Q&ws;c^=g;c=c<<13|c>>>19;c=5*c+3864292196}n=0;switch(s){case 3:n^=t[4*a+2]<<16;case 2:n^=t[4*a+1]<<8;case 1:n^=t[4*a];n=n*C&ys|n*l&ws;n=n<<15|n>>>17;n=n*h&ys|n*Q&ws;1&a?o^=n:c^=n}this.h1=o;this.h2=c}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&ys|36045*e&ws;t=4283543511*t&ys|(2950163797*(t<<16|e>>>16)&ys)>>>16;e^=t>>>1;e=444984403*e&ys|60499*e&ws;t=3301882366*t&ys|(3120437893*(t<<16|e>>>16)&ys)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function addState(e,t,i,a,s){let r=e;for(let e=0,i=t.length-1;e1e3){c=Math.max(c,l);Q+=h+2;l=0;h=0}C.push({transform:t,x:l,y:Q,w:i.width,h:i.height});l+=i.width+2;h=Math.max(h,i.height)}const E=Math.max(c,l)+1,u=Q+h+1,d=new Uint8Array(E*u*4),f=E<<2;for(let e=0;e=0;){t[r-4]=t[r];t[r-3]=t[r+1];t[r-2]=t[r+2];t[r-1]=t[r+3];t[r+i]=t[r+i-4];t[r+i+1]=t[r+i-3];t[r+i+2]=t[r+i-2];t[r+i+3]=t[r+i-1];r-=f}}const p={width:E,height:u};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(E,u);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(d.buffer),E,u),0,0);p.bitmap=e.transferToImageBitmap();p.data=null}else{p.kind=F;p.data=d}i.splice(r,4*o,_e);a.splice(r,4*o,[p,C]);return r+1}));addState(Ds,[GA,UA,Xe,xA],null,(function iterateImageMaskGroup(e,t){const i=e.fnArray,a=(t-(e.iCurr-3))%4;switch(a){case 0:return i[t]===GA;case 1:return i[t]===UA;case 2:return i[t]===Xe;case 3:return i[t]===xA}throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`)}),(function foundImageMaskGroup(e,t){const i=e.fnArray,a=e.argsArray,s=e.iCurr,r=s-3,n=s-2,g=s-1;let o=Math.floor((t-r)/4);if(o<10)return t-(t-r)%4;let c,C,h=!1;const l=a[g][0],Q=a[n][0],E=a[n][1],u=a[n][2],d=a[n][3];if(E===u){h=!0;c=n+4;let e=g+4;for(let t=1;t=4&&i[r-4]===i[n]&&i[r-3]===i[g]&&i[r-2]===i[o]&&i[r-1]===i[c]&&a[r-4][0]===C&&a[r-4][1]===h){l++;Q-=5}let E=Q+4;for(let e=1;e=i)break}a=(a||Ds)[e[t]];if(a&&!Array.isArray(a)){r.iCurr=t;t++;if(!a.checkFn||(0,a.checkFn)(r)){s=a;a=null}else a=null}else t++}this.state=a;this.match=s;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&Q?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(e){this.optimizer.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===xA||e===Ae))&&this.flush()}addImageOps(e,t,i){void 0!==i&&this.addOp(Je,["OC",i]);this.addOp(e,t);void 0!==i&&this.addOp(Ye,[])}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(yA,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,i=e.length;ta&&(e=a);return e}function resizeImageMask(e,t,i,a,s,r){const n=s*r;let g;g=t<=8?new Uint8Array(n):t<=16?new Uint16Array(n):new Uint32Array(n);const o=i/s,c=a/r;let C,h,l,Q,E=0;const u=new Uint16Array(s),d=i;for(C=0;C0&&Number.isInteger(i.height)&&i.height>0&&(i.width!==l||i.height!==Q)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");l=i.width;Q=i.height}if(l<1||Q<1)throw new FormatError(`Invalid image width: ${l} or height: ${Q}`);this.width=l;this.height=Q;this.interpolate=c.get("I","Interpolate");this.imageMask=c.get("IM","ImageMask")||!1;this.matte=c.get("Matte")||!1;let E=i.bitsPerComponent;if(!E){E=c.get("BPC","BitsPerComponent");if(!E){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);E=1}}this.bpc=E;if(!this.imageMask){let s=c.getRaw("CS")||c.getRaw("ColorSpace");const r=!!s;if(r)this.jpxDecoderOptions?.smaskInData&&(s=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)s=Name.get("DeviceRGBA");else switch(i.numComps){case 1:s=Name.get("DeviceGray");break;case 3:s=Name.get("DeviceRGB");break;case 4:s=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${i.numComps} color components not supported.`)}this.colorSpace=ColorSpace.parse({cs:s,xref:e,resources:a?t:null,pdfFunctionFactory:g,localColorSpaceCache:o});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=r?this.numComp:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=c.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,E)||n&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<>3)*i,g=e.byteLength;let o,c;if(!a||s&&!(n===g))if(s){o=new Uint8Array(n);o.set(e);o.fill(255,g)}else o=new Uint8Array(e);else o=e;if(s)for(c=0;c>7&1;n[l+1]=h>>6&1;n[l+2]=h>>5&1;n[l+3]=h>>4&1;n[l+4]=h>>3&1;n[l+5]=h>>2&1;n[l+6]=h>>1&1;n[l+7]=1&h;l+=8}if(l>=1}}}}else{let i=0;h=0;for(l=0,C=r;l>a;s<0?s=0:s>c&&(s=c);n[l]=s;h&=(1<n[a+1]){t=255;break}}g[C]=t}}}if(g)for(C=0,l=3,h=t*a;C>3,C=t&&ImageResizer.needsToBeResized(i,a);if("DeviceRGBA"===this.colorSpace.name){s.kind=F;const e=s.data=await this.getImageBytes(g*n*4,{});return t?C?ImageResizer.createImage(s,!1):this.createBitmap(F,i,a,e):s}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===o?e=D:"DeviceRGB"!==this.colorSpace.name||8!==o||this.needsDecode||(e=b);if(e&&!this.smask&&!this.mask&&i===n&&a===g){const r=await this.getImageBytes(g*c,{});if(t)return C?ImageResizer.createImage({data:r,kind:e,width:i,height:a,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,n,g,r);s.kind=e;s.data=r;if(this.needsDecode){assert(e===D,"PDFImage.createImageData: The image must be grayscale.");const t=s.data;for(let e=0,i=t.length;e>3,n=await this.getImageBytes(a*r,{internal:!0}),g=this.getComponents(n);let o,c;if(1===s){c=i*a;if(this.needsDecode)for(o=0;o0&&t.args[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checkedh){const e="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors){warn(e);return}throw new Error(e)}let l;g.has("OC")&&(l=await this.parseMarkedContentProps(g.get("OC"),e));let Q,E;if(g.get("IM","ImageMask")||!1){const e=g.get("I","Interpolate"),i=c+7>>3,n=t.getBytes(i*C),h=g.getArray("D","Decode");if(this.parsingType3Font){Q=PDFImage.createRawMask({imgArray:n,width:c,height:C,imageIsFromDecodeStream:t instanceof DecodeStream,inverseDecode:h?.[0]>0,interpolate:e});Q.cached=!!s;E=[Q];a.addImageOps(Xe,E,l);if(s){const e={fn:Xe,args:E,optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}Q=await PDFImage.createMask({imgArray:n,width:c,height:C,imageIsFromDecodeStream:t instanceof DecodeStream,inverseDecode:h?.[0]>0,interpolate:e,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported});if(Q.isSingleOpaquePixel){a.addImageOps(et,[],l);if(s){const e={fn:et,args:[],optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}const u=`mask_${this.idFactory.createObjId()}`;a.addDependency(u);Q.dataLen=Q.bitmap?Q.width*Q.height*4:Q.data.length;this._sendImgData(u,Q);E=[{data:u,width:Q.width,height:Q.height,interpolate:Q.interpolate,count:1}];a.addImageOps(Xe,E,l);if(s){const e={objId:u,fn:Xe,args:E,optionalContent:l};r.set(s,o,e);o&&this._regionalImageCache.set(null,o,e)}return}if(i&&c+C<200&&!g.has("SMask")&&!g.has("Mask")){try{const s=new PDFImage({xref:this.xref,res:e,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:n});Q=await s.createImageData(!0,!1);a.isOffscreenCanvasSupported=this.options.isOffscreenCanvasSupported;a.addImageOps(ze,[Q],l)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!this.options.ignoreErrors)throw new Error(t);warn(t)}return}let u=`img_${this.idFactory.createObjId()}`,d=!1;if(this.parsingType3Font)u=`${this.idFactory.getDocId()}_type3_${u}`;else if(s&&o){d=this.globalImageCache.shouldCache(o,this.pageIndex);if(d){assert(!i,"Cannot cache an inline image globally.");u=`${this.idFactory.getDocId()}_${u}`}}a.addDependency(u);E=[u,c,C];a.addImageOps(Ve,E,l);if(d){if(this.globalImageCache.hasDecodeFailed(o)){this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0});this._sendImgData(u,null,d);return}if(c*C>25e4||g.has("SMask")||g.has("Mask")){const e=await this.handler.sendWithPromise("commonobj",[u,"CopyLocalImage",{imageRef:o}]);if(e){this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0});this.globalImageCache.addByteSize(o,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:n}).then((async e=>{Q=await e.createImageData(!1,this.options.isOffscreenCanvasSupported);Q.dataLen=Q.bitmap?Q.width*Q.height*4:Q.data.length;Q.ref=o;d&&this.globalImageCache.addByteSize(o,Q.dataLen);return this._sendImgData(u,Q,d)})).catch((e=>{warn(`Unable to decode image "${u}": "${e}".`);o&&this.globalImageCache.addDecodeFailed(o);return this._sendImgData(u,null,d)}));if(s){const e={objId:u,fn:Ve,args:E,optionalContent:l};r.set(s,o,e);if(o){this._regionalImageCache.set(null,o,e);d&&this.globalImageCache.setData(o,{objId:u,fn:Ve,args:E,optionalContent:l,byteSize:0})}}}handleSMask(e,t,i,a,s,r){const n=e.get("G"),g={subtype:e.get("S").name,backdrop:e.get("BC")},o=e.get("TR");if(isPDFFunction(o)){const e=this._pdfFunctionFactory.create(o),t=new Uint8Array(256),i=new Float32Array(1);for(let a=0;a<256;a++){i[0]=a/255;e(i,0,i,0);t[a]=255*i[0]|0}g.transferMap=t}return this.buildFormXObject(t,n,g,i,a,s.state.clone(),r)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const i=[];let a=0,s=0;for(const e of t){const t=this.xref.fetchIfRef(e);a++;if(isName(t,"Identity")){i.push(null);continue}if(!isPDFFunction(t))return null;const r=this._pdfFunctionFactory.create(t),n=new Uint8Array(256),g=new Float32Array(1);for(let e=0;e<256;e++){g[0]=e/255;r(g,0,g,0);n[e]=255*g[0]|0}i.push(n);s++}return 1!==a&&4!==a||0===s?null:i}handleTilingType(e,t,i,a,s,r,n,g){const o=new OperatorList,c=Dict.merge({xref:this.xref,dictArray:[s.get("Resources"),i]});return this.getOperatorList({stream:a,task:n,resources:c,operatorList:o}).then((function(){const i=o.getIR(),a=getTilingPatternIR(i,s,t);r.addDependencies(o.dependencies);r.addOp(e,a);s.objId&&g.set(null,s.objId,{operatorListIR:i,dict:s})})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}}))}async handleSetFont(e,t,i,a,s,r,n=null,g=null){const o=t?.[0]instanceof Name?t[0].name:null;let c=await this.loadFont(o,i,e,n,g);if(c.font.isType3Font)try{await c.loadType3Data(this,e,s);a.addDependencies(c.type3Dependencies)}catch(e){c=new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Type3 font load error: ${e}`),dict:c.font,evaluatorOptions:this.options})}r.font=c.font;c.send(this.handler);return c.loadedName}handleText(e,t){const i=t.font,a=i.charsToGlyphs(e);if(i.data){(!!(t.textRenderingMode&w)||"Pattern"===t.fillColorSpace.name||i.disableFontFace||this.options.disableFontFace)&&PartialEvaluator.buildFontPaths(i,a,this.handler,this.options)}return a}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:i,cacheKey:a,task:s,stateManager:r,localGStateCache:n,localColorSpaceCache:g}){const o=t.objId;let c=!0;const C=[];let h=Promise.resolve();for(const a of t.getKeys()){const n=t.get(a);switch(a){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":C.push([a,n]);break;case"Font":c=!1;h=h.then((()=>this.handleSetFont(e,null,n[0],i,s,r.state).then((function(e){i.addDependency(e);C.push([a,[e,n[1]]])}))));break;case"BM":C.push([a,normalizeBlendMode(n)]);break;case"SMask":if(isName(n,"None")){C.push([a,!1]);break}if(n instanceof Dict){c=!1;h=h.then((()=>this.handleSMask(n,e,i,s,r,g)));C.push([a,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(n);C.push([a,t]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+a);break;default:info("Unknown graphic state operator "+a)}}await h;C.length>0&&i.addOp(NA,[C]);c&&n.set(a,o,C)}loadFont(e,t,i,a=null,s=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t,evaluatorOptions:this.options});let r;if(t)t instanceof Ref&&(r=t);else{const t=i.get("Font");t&&(r=t.getRaw(e))}if(r){if(this.type3FontRefs?.has(r))return errorFont();if(this.fontCache.has(r))return this.fontCache.get(r);try{t=this.xref.fetchIfRef(r)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=a||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:n,resolve:g}=Promise.withResolvers();let o;try{o=this.preEvaluateFont(t);o.cssFontInfo=s}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:c,hash:C}=o,h=r instanceof Ref;let l;if(C&&c instanceof Dict){const e=c.fontAliases||=Object.create(null);if(e[C]){const t=e[C].aliasRef;if(h&&t&&this.fontCache.has(t)){this.fontCache.putAlias(r,t);return this.fontCache.get(r)}}else e[C]={fontID:this.idFactory.createFontId()};h&&(e[C].aliasRef=r);l=e[C].fontID}else l=this.idFactory.createFontId();assert(l?.startsWith("f"),'The "fontID" must be (correctly) defined.');if(h)this.fontCache.put(r,n);else{t.cacheKey=`cacheKey_${l}`;this.fontCache.put(t.cacheKey,n)}t.loadedName=`${this.idFactory.getDocId()}_${l}`;this.translateFont(o).then((e=>{g(new TranslatedFont({loadedName:t.loadedName,font:e,dict:t,evaluatorOptions:this.options}))})).catch((e=>{warn(`loadFont - translateFont failed: "${e}".`);g(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e instanceof Error?e.message:e),dict:t,evaluatorOptions:this.options}))}));return n}buildPath(e,t,i,a=!1){const s=e.length-1;i||(i=[]);if(s<0||e.fnArray[s]!==tt){if(a){warn(`Encountered path operator "${t}" inside of a text object.`);e.addOp(GA,null)}let s;switch(t){case KA:const e=i[0]+i[2],t=i[1]+i[3];s=[Math.min(i[0],e),Math.min(i[1],t),Math.max(i[0],e),Math.max(i[1],t)];break;case MA:case LA:s=[i[0],i[1],i[0],i[1]];break;default:s=[1/0,1/0,-1/0,-1/0]}e.addOp(tt,[[t],i,s]);a&&e.addOp(xA,null)}else{const a=e.argsArray[s];a[0].push(t);a[1].push(...i);const r=a[2];switch(t){case KA:const e=i[0]+i[2],t=i[1]+i[3];r[0]=Math.min(r[0],i[0],e);r[1]=Math.min(r[1],i[1],t);r[2]=Math.max(r[2],i[0],e);r[3]=Math.max(r[3],i[1],t);break;case MA:case LA:r[0]=Math.min(r[0],i[0]);r[1]=Math.min(r[1],i[1]);r[2]=Math.max(r[2],i[0]);r[3]=Math.max(r[3],i[1])}}}parseColorSpace({cs:e,resources:t,localColorSpaceCache:i}){return ColorSpace.parseAsync({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch((e=>{if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}))}parseShading({shading:e,resources:t,localColorSpaceCache:i,localShadingPatternCache:a}){let s,r=a.get(e);if(r)return r;try{s=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,i).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);a.set(e,null);return null}throw t}r=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(r=`${this.idFactory.getDocId()}_type3_${r}`);a.set(e,r);this.parsingType3Font?this.handler.send("commonobj",[r,"Pattern",s]):this.handler.send("obj",[r,this.pageIndex,"Pattern",s]);return r}handleColorN(e,t,i,a,s,r,n,g,o,c){const C=i.pop();if(C instanceof Name){const h=s.getRaw(C.name),l=h instanceof Ref&&o.getByRef(h);if(l)try{const s=a.base?a.base.getRgb(i,0):null,r=getTilingPatternIR(l.operatorListIR,l.dict,s);e.addOp(t,r);return}catch{}const Q=this.xref.fetchIfRef(h);if(Q){const s=Q instanceof BaseStream?Q.dict:Q,C=s.get("PatternType");if(C===Fs){const g=a.base?a.base.getRgb(i,0):null;return this.handleTilingType(t,g,r,Q,s,e,n,o)}if(C===Ss){const i=s.get("Shading"),a=this.parseShading({shading:i,resources:r,localColorSpaceCache:g,localShadingPatternCache:c});if(a){const i=lookupMatrix(s.getArray("Matrix"),null);e.addOp(t,["Shading",a,i])}return}throw new FormatError(`Unknown PatternType: ${C}`)}}throw new FormatError(`Unknown PatternName: ${C}`)}_parseVisibilityExpression(e,t,i){if(++t>10){warn("Visibility expression is too deeply nested");return}const a=e.length,s=this.xref.fetchIfRef(e[0]);if(!(a<2)&&s instanceof Name){switch(s.name){case"And":case"Or":case"Not":i.push(s.name);break;default:warn(`Invalid operator ${s.name} in visibility expression`);return}for(let s=1;s0)return{type:"OCMD",expression:t}}const t=i.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const i of t)e.push(i.toString());else e.push(t.objId);return{type:a,ids:e,policy:i.get("P")instanceof Name?i.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:a,id:t.toString()}}return null}getOperatorList({stream:e,task:t,resources:i,operatorList:a,initialState:s=null,fallbackFontDict:r=null}){i||=Dict.empty;s||=new EvalState;if(!a)throw new Error('getOperatorList: missing "operatorList" parameter');const n=this,g=this.xref;let o=!1;const c=new LocalImageCache,C=new LocalColorSpaceCache,h=new LocalGStateCache,l=new LocalTilingPatternCache,Q=new Map,E=i.get("XObject")||Dict.empty,u=i.get("Pattern")||Dict.empty,d=new StateManager(s),f=new EvaluatorPreprocessor(e,g,d),p=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0,t=f.savedStatesDepth;e0&&a.addOp(NA,[t]);e=null;continue}}next(new Promise((function(e,s){if(!S)throw new FormatError("GState must be referred to by name.");const r=i.get("ExtGState");if(!(r instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const g=r.get(F);if(!(g instanceof Dict))throw new FormatError("GState should be a dictionary.");n.setGState({resources:i,gState:g,operatorList:a,cacheKey:F,task:t,stateManager:d,localGStateCache:h,localColorSpaceCache:C}).then(e,s)})).catch((function(e){if(!(e instanceof AbortException)){if(!n.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}})));return;case MA:case LA:case HA:case JA:case YA:case vA:case KA:n.buildPath(a,s,e,o);continue;case Me:case Le:case ve:case Ke:continue;case Je:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);a.addOp(Je,["OC",null]);continue}if("OC"===e[0].name){next(n.parseMarkedContentProps(e[1],i).then((e=>{a.addOp(Je,["OC",e])})).catch((e=>{if(!(e instanceof AbortException)){if(!n.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);a.addOp(Je,["OC",null])}})));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(w=0,D=e.length;w{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}}))}getTextContent({stream:e,task:t,resources:s,stateManager:r=null,includeMarkedContent:n=!1,sink:g,seenStyles:o=new Set,viewBox:c,lang:C=null,markedContentData:h=null,disableNormalization:l=!1,keepWhiteSpace:Q=!1}){s||=Dict.empty;r||=new StateManager(new TextState);n&&(h||={level:0});const E={items:[],styles:Object.create(null),lang:C},u={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},d=[" "," "];let f=0;function saveLastChar(e){const t=(f+1)%2,i=" "!==d[f]&&" "===d[t];d[f]=e;f=t;return!Q&&i}function shouldAddWhitepsace(){return!Q&&" "!==d[f]&&" "===d[(f+1)%2]}function resetLastChars(){d[0]=d[1]=" ";f=0}const p=this,m=this.xref,y=[];let w=null;const D=new LocalImageCache,b=new LocalGStateCache,F=new EvaluatorPreprocessor(e,m,r);let S;function pushWhitespace({width:e=0,height:t=0,transform:i=u.prevTransform,fontName:a=u.fontName}){E.items.push({str:" ",dir:"ltr",width:e,height:t,transform:i,fontName:a,hasEOL:!1})}function getCurrentTextTransform(){const e=S.font,t=[S.fontSize*S.textHScale,0,0,S.fontSize,0,S.textRise];if(e.isType3Font&&(S.fontSize<=1||e.isCharBBox)&&!isArrayEqual(S.fontMatrix,a)){const i=e.bbox[3]-e.bbox[1];i>0&&(t[3]*=i*S.fontMatrix[3])}return Util.transform(S.ctm,Util.transform(S.textMatrix,t))}function ensureTextContentItem(){if(u.initialized)return u;const{font:e,loadedName:t}=S;if(!o.has(t)){o.add(t);E.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(p.options.fontExtraProperties&&e.systemFontInfo){const i=E.styles[t];i.fontSubstitution=e.systemFontInfo.css;i.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}u.fontName=t;const i=u.transform=getCurrentTextTransform();if(e.vertical){u.width=u.totalWidth=Math.hypot(i[0],i[1]);u.height=u.totalHeight=0;u.vertical=!0}else{u.width=u.totalWidth=0;u.height=u.totalHeight=Math.hypot(i[2],i[3]);u.vertical=!1}const a=Math.hypot(S.textLineMatrix[0],S.textLineMatrix[1]),s=Math.hypot(S.ctm[0],S.ctm[1]);u.textAdvanceScale=s*a;const{fontSize:r}=S;u.trackingSpaceMin=.102*r;u.notASpace=.03*r;u.negativeSpaceMax=-.2*r;u.spaceInFlowMin=.102*r;u.spaceInFlowMax=.6*r;u.hasEOL=!1;u.initialized=!0;return u}function updateAdvanceScale(){if(!u.initialized)return;const e=Math.hypot(S.textLineMatrix[0],S.textLineMatrix[1]),t=Math.hypot(S.ctm[0],S.ctm[1])*e;if(t!==u.textAdvanceScale){if(u.vertical){u.totalHeight+=u.height*u.textAdvanceScale;u.height=0}else{u.totalWidth+=u.width*u.textAdvanceScale;u.width=0}u.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");l||(t=function normalizeUnicode(e){if(!ot){ot=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;It=new Map([["ſt","ſt"]])}return e.replaceAll(ot,((e,t,i)=>t?t.normalize("NFKC"):It.get(i)))}(t));const i=bidi(t,-1,e.vertical);return{str:i.str,dir:i.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,i){const r=await p.loadFont(e,i,s);if(r.font.isType3Font)try{await r.loadType3Data(p,s,t)}catch{}S.loadedName=r.loadedName;S.font=r.font;S.fontMatrix=r.font.fontMatrix||a}function applyInverseRotation(e,t,i){const a=Math.hypot(i[0],i[1]);return[(i[0]*e+i[1]*t)/a,(i[2]*e+i[3]*t)/a]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let i=t[4],a=t[5];if(S.font?.vertical){if(ic[2]||a+ec[3])return!1}else if(i+ec[2]||ac[3])return!1;if(!S.font||!u.prevTransform)return!0;let s=u.prevTransform[4],r=u.prevTransform[5];if(s===i&&r===a)return!0;let n=-1;t[0]&&0===t[1]&&0===t[2]?n=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(n=t[1]>0?90:270);switch(n){case 0:break;case 90:[i,a]=[a,i];[s,r]=[r,s];break;case 180:[i,a,s,r]=[-i,-a,-s,-r];break;case 270:[i,a]=[-a,-i];[s,r]=[-r,-s];break;default:[i,a]=applyInverseRotation(i,a,t);[s,r]=applyInverseRotation(s,r,u.prevTransform)}if(S.font.vertical){const e=(r-a)/u.textAdvanceScale,t=i-s,n=Math.sign(u.height);if(e.5*u.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>u.width){appendEOL();return!0}e<=n*u.notASpace&&resetLastChars();if(e<=n*u.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else u.height+=e;else if(!addFakeSpaces(e,u.prevTransform,n))if(0===u.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else u.height+=e;Math.abs(t)>.25*u.width&&flushTextContentItem();return!0}const g=(i-s)/u.textAdvanceScale,o=a-r,C=Math.sign(u.width);if(g.5*u.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(o)>u.height){appendEOL();return!0}g<=C*u.notASpace&&resetLastChars();if(g<=C*u.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(g)})}else u.width+=g;else if(!addFakeSpaces(g,u.prevTransform,C))if(0===u.str.length){resetLastChars();pushWhitespace({width:Math.abs(g)})}else u.width+=g;Math.abs(o)>.25*u.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){const i=S.font;if(!e){const e=S.charSpacing+t;e&&(i.vertical?S.translateTextMatrix(0,-e):S.translateTextMatrix(e*S.textHScale,0));Q&&compareWithLastPosition(0);return}const a=i.charsToGlyphs(e),s=S.fontMatrix[0]*S.fontSize;for(let e=0,r=a.length;e0){const e=y.join("");y.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case Ce:if(!r.state.font){p.ensureStateFont(r.state);continue}buildTextContentItem({chars:f[0],extraSpacing:0});break;case Be:if(!r.state.font){p.ensureStateFont(r.state);continue}S.carriageReturn();buildTextContentItem({chars:f[0],extraSpacing:0});break;case le:if(!r.state.font){p.ensureStateFont(r.state);continue}S.wordSpacing=f[0];S.charSpacing=f[1];S.carriageReturn();buildTextContentItem({chars:f[2],extraSpacing:0});break;case Ue:flushTextContentItem();w||(w=s.get("XObject")||Dict.empty);var G=f[0]instanceof Name,x=f[0].name;if(G&&D.getByName(x))break;next(new Promise((function(e,i){if(!G)throw new FormatError("XObject must be referred to by name.");let a=w.getRaw(x);if(a instanceof Ref){if(D.getByRef(a)){e();return}if(p.globalImageCache.getData(a,p.pageIndex)){e();return}a=m.fetch(a)}if(!(a instanceof BaseStream))throw new FormatError("XObject should be a stream");const E=a.dict.get("Subtype");if(!(E instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==E.name){D.set(x,a.dict.objId,!0);e();return}const u=r.state.clone(),d=new StateManager(u),f=lookupMatrix(a.dict.getArray("Matrix"),null);f&&d.transform(f);enqueueChunk();const y={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;g.enqueue(e,t)},get desiredSize(){return g.desiredSize},get ready(){return g.ready}};p.getTextContent({stream:a,task:t,resources:a.dict.get("Resources")||s,stateManager:d,includeMarkedContent:n,sink:y,seenStyles:o,viewBox:c,lang:C,markedContentData:h,disableNormalization:l,keepWhiteSpace:Q}).then((function(){y.enqueueInvoked||D.set(x,a.dict.objId,!0);e()}),i)})).catch((function(e){if(!(e instanceof AbortException)){if(!p.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}})));return;case NA:G=f[0]instanceof Name;x=f[0].name;if(G&&b.getByName(x))break;next(new Promise((function(e,t){if(!G)throw new FormatError("GState must be referred to by name.");const i=s.get("ExtGState");if(!(i instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const a=i.get(x);if(!(a instanceof Dict))throw new FormatError("GState should be a dictionary.");const r=a.get("Font");if(r){flushTextContentItem();S.fontName=null;S.fontSize=r[1];handleSetFont(null,r[0]).then(e,t)}else{b.set(x,a.objId,!0);e()}})).catch((function(e){if(!(e instanceof AbortException)){if(!p.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}})));return;case He:flushTextContentItem();if(n){h.level++;E.items.push({type:"beginMarkedContent",tag:f[0]instanceof Name?f[0].name:null})}break;case Je:flushTextContentItem();if(n){h.level++;let e=null;f[1]instanceof Dict&&(e=f[1].get("MCID"));E.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${p.idFactory.getPageObjId()}_mc${e}`:null,tag:f[0]instanceof Name?f[0].name:null})}break;case Ye:flushTextContentItem();if(n){if(0===h.level)break;h.level--;E.items.push({type:"endMarkedContent"})}break;case xA:!e||e.font===S.font&&e.fontSize===S.fontSize&&e.fontName===S.fontName||flushTextContentItem()}if(E.items.length>=g.desiredSize){d=!0;break}}if(d)next(ks);else{flushTextContentItem();enqueueChunk();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${t.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}}))}async extractDataStructures(e,t){const i=this.xref;let a;const s=this.readToUnicode(t.toUnicode);if(t.composite){const i=e.get("CIDSystemInfo");i instanceof Dict&&(t.cidSystemInfo={registry:stringToPDFString(i.get("Registry")),ordering:stringToPDFString(i.get("Ordering")),supplement:i.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(a=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const r=[];let n,g=null;if(e.has("Encoding")){n=e.get("Encoding");if(n instanceof Dict){g=n.get("BaseEncoding");g=g instanceof Name?g.name:null;if(n.has("Differences")){const e=n.get("Differences");let t=0;for(const a of e){const e=i.fetchIfRef(a);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in 'Differences' array: ${e}`);r[t++]=e.name}}}}else if(n instanceof Name)g=n.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==g&&"MacExpertEncoding"!==g&&"WinAnsiEncoding"!==g&&(g=null)}const o=!t.file||t.isInternalFont,c=Zi()[t.name];g&&o&&c&&(g=null);if(g)t.defaultEncoding=getEncoding(g);else{const e=!!(t.flags&Ti),i=!!(t.flags&qi);n=fi;"TrueType"!==t.type||i||(n=pi);if(e||c){n=di;o&&(/Symbol/i.test(t.name)?n=mi:/Dingbats/i.test(t.name)?n=yi:/Wingdings/i.test(t.name)&&(n=pi))}t.defaultEncoding=n}t.differences=r;t.baseEncodingName=g;t.hasEncoding=!!g||r.length>0;t.dict=e;t.toUnicode=await s;const C=await this.buildToUnicode(t);t.toUnicode=C;a&&(t.cidToGidMap=this.readCidToGidMap(a,C));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const i=[],a=e.defaultEncoding.slice(),s=e.baseEncodingName,r=e.differences;for(const e in r){const t=r[e];".notdef"!==t&&(a[e]=t)}const n=Ni();for(const r in a){let g=a[r];if(""===g)continue;let o=n[g];if(void 0!==o){i[r]=String.fromCharCode(o);continue}let c=0;switch(g[0]){case"G":3===g.length&&(c=parseInt(g.substring(1),16));break;case"g":5===g.length&&(c=parseInt(g.substring(1),16));break;case"C":case"c":if(g.length>=3&&g.length<=4){const i=g.substring(1);if(t){c=parseInt(i,16);break}c=+i;if(Number.isNaN(c)&&Number.isInteger(parseInt(i,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":o=getUnicodeForGlyph(g,n);-1!==o&&(c=o);break;default:switch(g){case"f_h":case"f_t":case"T_h":i[r]=g.replaceAll("_","");continue}}if(c>0&&c<=1114111&&Number.isInteger(c)){if(s&&c===+r){const e=getEncoding(s);if(e&&(g=e[r])){i[r]=String.fromCharCode(n[g]);continue}}i[r]=String.fromCodePoint(c)}}return i}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:i}=e.cidSystemInfo,a=Name.get(`${t}-${i}-UCS2`),s=await CMapFactory.create({encoding:a,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),r=[],n=[];e.cMap.forEach((function(e,t){if(t>65535)throw new FormatError("Max size of CID is 65,535");const i=s.lookup(t);if(i){n.length=0;for(let e=0,t=i.length;e>1;(0!==s||t.has(r))&&(i[r]=s)}return i}extractWidths(e,t,i){const a=this.xref;let s=[],r=0;const n=[];let g;if(i.composite){const t=e.get("DW");r="number"==typeof t?Math.ceil(t):1e3;const o=e.get("W");if(Array.isArray(o))for(let e=0,t=o.length;e{const t=o.get(e),s=new OperatorList;return a.getOperatorList({stream:t,task:i,resources:c,operatorList:s}).then((()=>{s.fnArray[0]===Ee&&this._removeType3ColorOperators(s,E);C[e]=s.getIR();for(const e of s.dependencies)n.add(e)})).catch((function(t){warn(`Type3 font resource "${e}" is not available.`);const i=new OperatorList;C[e]=i.getIR()}))}));this.type3Loaded=g.then((()=>{r.charProcOperatorList=C;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}}));return this.type3Loaded}_removeType3ColorOperators(e,t=NaN){const i=Util.normalizeRect(e.argsArray[0].slice(2)),a=i[2]-i[0],s=i[3]-i[1],r=Math.hypot(a,s);if(0===a||0===s){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(r/t)>=10){this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]);this._bbox[0]=Math.min(this._bbox[0],i[0]);this._bbox[1]=Math.min(this._bbox[1],i[1]);this._bbox[2]=Math.max(this._bbox[2],i[2]);this._bbox[3]=Math.max(this._bbox[3],i[3])}let n=0,g=e.length;for(;n=MA&&r<=VA;if(s.variableArgs)g>n&&info(`Command ${a}: expected [0, ${n}] args, but received ${g} args.`);else{if(g!==n){const e=this.nonProcessedArgs;for(;g>n;){e.push(t.shift());g--}for(;gEvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(r,t);e.fn=r;e.args=t;return!0}if(i===pt)return!1;if(null!==i){null===t&&(t=[]);t.push(i);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case GA:this.stateManager.save();break;case xA:this.stateManager.restore();break;case UA:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:i,args:a}=e;switch(0|i){case se:const[e,i]=a;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i);break;case Fe:ColorSpace.singletons.rgb.getRgbItem(a,0,t.fontColor,0);break;case De:ColorSpace.singletons.gray.getRgbItem(a,0,t.fontColor,0);break;case ke:ColorSpace.singletons.cmyk.getRgbItem(a,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,i){super(e);this.stream=e;this.evaluatorOptions=t;this.xref=i;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpace.singletons.gray},i=!1;const a=[];try{for(;;){e.args.length=0;if(i||!this.read(e))break;const{fn:s,args:r}=e;switch(0|s){case GA:a.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case xA:t=a.pop()||t;break;case Ie:t.scaleFactor*=Math.hypot(r[0],r[1]);break;case se:const[e,s]=r;e instanceof Name&&(t.fontName=e.name);"number"==typeof s&&s>0&&(t.fontSize=s*t.scaleFactor);break;case de:t.fillColorSpace=ColorSpace.parse({cs:r[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case me:t.fillColorSpace.getRgbItem(r,0,t.fontColor,0);break;case Fe:ColorSpace.singletons.rgb.getRgbItem(r,0,t.fontColor,0);break;case De:ColorSpace.singletons.gray.getRgbItem(r,0,t.fontColor,0);break;case ke:ColorSpace.singletons.cmyk.getRgbItem(r,0,t.fontColor,0);break;case Ce:case he:case Be:case le:i=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,(e=>numberToString(e/255))).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const i=new OffscreenCanvas(1,1);this.ctxMeasure=i.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.set("Type",Name.get("FontDescriptor"));e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.set("FontStretch",Name.get("Normal"));e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("CIDFontType0"));e.set("CIDToGIDMap",Name.get("Identity"));e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],i=[...this.widths.entries()].sort();let a=null,s=null;for(const[e,r]of i)if(a)if(e===a+s.length)s.push(r);else{t.push(a,s);a=e;s=[r]}else{a=e;s=[r]}a&&t.push(a,s);e.set("W",t);const r=new Dict(this.xref);r.set("Ordering","Identity");r.set("Registry","Adobe");r.set("Supplement",0);e.set("CIDSystemInfo",r);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type0"));e.set("Encoding",Name.get("Identity-H"));e.set("DescendantFonts",[this.descendantFontRef]);e.set("ToUnicode",Name.get("Identity-H"));return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const i of e.split(/\r\n?|\n/))for(const e of i.split("")){const i=e.charCodeAt(0);if(this.widths.has(i))continue;const a=t.measureText(e),s=Math.ceil(a.width);this.widths.set(i,s);this.firstChar=Math.min(i,this.firstChar);this.lastChar=Math.max(i,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[a,n,g,o]=e;let c=g-a,C=o-n;t%180!=0&&([c,C]=[C,c]);const h=s*i;return{coords:[0,C+r*i-h],bbox:[0,0,c,C],matrix:0!==t?getRotationMatrix(t,C,h):void 0}}createAppearance(e,t,i,a,n,g){const o=this._createContext(),c=[];let C=-1/0;for(const t of e.split(/\r\n?|\n/)){c.push(t);const e=o.measureText(t).width;C=Math.max(C,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let i=this.widths.get(e);if(void 0===i){const a=o.measureText(t);i=Math.ceil(a.width);this.widths.set(e,i);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}C*=a/1e3;const[h,l,Q,E]=t;let u=Q-h,d=E-l;i%180!=0&&([u,d]=[d,u]);let f=1;C>u&&(f=u/C);let p=1;const m=s*a,y=r*a,w=m*c.length;w>d&&(p=d/w);const D=a*Math.min(f,p),b=["q",`0 0 ${numberToString(u)} ${numberToString(d)} re W n`,"BT",`1 0 0 1 0 ${numberToString(d+y)} Tm 0 Tc ${getPdfColor(n,!0)}`,`/${this.fontName.name} ${numberToString(D)} Tf`],{resources:F}=this;if(1!==(g="number"==typeof g&&g>=0&&g<=1?g:1)){b.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",g);t.set("CA",g);t.set("Type",Name.get("ExtGState"));e.set("R0",t);F.set("ExtGState",e)}const S=numberToString(m);for(const e of c)b.push(`0 -${S} Td <${stringToUTF16HexString(e)}> Tj`);b.push("ET","Q");const k=b.join("\n"),R=new Dict(this.xref);R.set("Subtype",Name.get("Form"));R.set("Type",Name.get("XObject"));R.set("BBox",[0,0,u,d]);R.set("Length",k.length);R.set("Resources",F);if(i){const e=getRotationMatrix(i,u,d);R.set("Matrix",e)}const N=new StringStream(k);N.dict=R;return N}}class NameOrNumberTree{constructor(e,t,i){this.constructor===NameOrNumberTree&&unreachable("Cannot initialize NameOrNumberTree.");this.root=e;this.xref=t;this._type=i}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,i=new RefSet;i.put(this.root);const a=[this.root];for(;a.length>0;){const s=t.fetchIfRef(a.shift());if(!(s instanceof Dict))continue;if(s.has("Kids")){const e=s.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(i.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);a.push(t);i.put(t)}continue}const r=s.get(this._type);if(Array.isArray(r))for(let i=0,a=r.length;i10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const s=i.get("Kids");if(!Array.isArray(s))return null;let r=0,n=s.length-1;for(;r<=n;){const a=r+n>>1,g=t.fetchIfRef(s[a]),o=g.get("Limits");if(et.fetchIfRef(o[1]))){i=g;break}r=a+1}}if(r>n)return null}const s=i.get(this._type);if(Array.isArray(s)){let i=0,a=s.length-2;for(;i<=a;){const r=i+a>>1,n=r+(1&r),g=t.fetchIfRef(s[n]);if(eg))return t.fetchIfRef(s[n+1]);i=n+2}}}return null}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){ya=Object.create(null)}();!function clearPrimitiveCaches(){mt=Object.create(null);yt=Object.create(null);wt=Object.create(null)}();!function clearUnicodeCaches(){Ji.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){return e instanceof Dict?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}class FileSpec{#S=!1;constructor(e,t,i=!1){if(e instanceof Dict){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related file specifications are not supported");i||(e.has("EF")?this.#S=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){let e="";const t=pickPlatformItem(this.root);t&&"string"==typeof t&&(e=stringToPDFString(t).replaceAll("\\\\","\\").replaceAll("\\/","/").replaceAll("\\","/"));return shadow(this,"filename",e||"unnamed")}get content(){if(!this.#S)return null;this._contentRef||=pickPlatformItem(this.root?.get("EF"));let e=null;if(this._contentRef){const t=this.xref.fetchIfRef(this._contentRef);t instanceof BaseStream?e=t.getBytes():warn("Embedded file specification points to non-existing/invalid content")}else warn("Embedded file specification does not have any content");return e}get description(){let e="";const t=this.root?.get("Desc");t&&"string"==typeof t&&(e=stringToPDFString(t));return shadow(this,"description",e)}get serializable(){return{rawFilename:this.filename,filename:(e=this.filename,e.substring(e.lastIndexOf("/")+1)),content:this.content,description:this.description};var e}}const Rs=0,Ns=-2,Gs=-3,xs=-4,Us=-5,Ms=-6,Ls=-9;function isWhitespace(e,t){const i=e[t];return" "===i||"\n"===i||"\r"===i||"\t"===i}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const i=[];let a=t;function skipWs(){for(;a"!==e[a]&&"/"!==e[a];)++a;const s=e.substring(t,a);skipWs();for(;a"!==e[a]&&"/"!==e[a]&&"?"!==e[a];){skipWs();let t="",s="";for(;a"!==e[i]&&"?"!==e[i]&&"/"!==e[i];)++i;const a=e.substring(t,i);!function skipWs(){for(;i"!==e[i+1]);)++i;return{name:a,value:e.substring(s,i),parsed:i-t}}parseXml(e){let t=0;for(;t",i);if(t<0){this.onError(Ls);return}this.onEndElement(e.substring(i,t));i=t+1;break;case"?":++i;const a=this._parseProcessingInstruction(e,i);if("?>"!==e.substring(i+a.parsed,i+a.parsed+2)){this.onError(Gs);return}this.onPi(a.name,a.value);i+=a.parsed+2;break;case"!":if("--"===e.substring(i+1,i+3)){t=e.indexOf("--\x3e",i+3);if(t<0){this.onError(Us);return}this.onComment(e.substring(i+3,t));i=t+3}else if("[CDATA["===e.substring(i+1,i+8)){t=e.indexOf("]]>",i+8);if(t<0){this.onError(Ns);return}this.onCdata(e.substring(i+8,t));i=t+3}else{if("DOCTYPE"!==e.substring(i+1,i+8)){this.onError(Ms);return}{const a=e.indexOf("[",i+8);let s=!1;t=e.indexOf(">",i+8);if(t<0){this.onError(xs);return}if(a>0&&t>a){t=e.indexOf("]>",i+8);if(t<0){this.onError(xs);return}s=!0}const r=e.substring(i+8,t+(s?1:0));this.onDoctype(r);i=t+(s?2:1)}}break;default:const s=this._parseContent(e,i);if(null===s){this.onError(Ms);return}let r=!1;if("/>"===e.substring(i+s.parsed,i+s.parsed+2))r=!0;else if(">"!==e.substring(i+s.parsed,i+s.parsed+1)){this.onError(Ls);return}this.onBeginElement(s.name,s.attributes,r);i+=s.parsed+(r?2:1)}}else{for(;i0}searchNode(e,t){if(t>=e.length)return this;const i=e[t];if(i.name.startsWith("#")&&t0){a.push([s,0]);s=s.childNodes[0]}else{if(0===a.length)return null;for(;0!==a.length;){const[e,t]=a.pop(),i=t+1;if(i");for(const t of this.childNodes)t.dump(e);e.push(``)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=Rs;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=Rs;this.parseXml(e);if(this._errorCode!==Rs)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,i=e.length;t\\376\\377([^<]+)/g,(function(e,t){const i=t.replaceAll(/\\([0-3])([0-7])([0-7])/g,(function(e,t,i,a){return String.fromCharCode(64*t+8*i+1*a)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error(`_repair: ${t} isn't defined.`)})),a=[">"];for(let e=0,t=i.length;e=32&&t<127&&60!==t&&62!==t&&38!==t?a.push(String.fromCharCode(t)):a.push("&#x"+(65536+t).toString(16).substring(1)+";")}return a.join("")}))}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,i=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,i.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}class DecryptStream extends DecodeStream{constructor(e,t,i){super(t);this.str=e;this.dict=e.dict;this.decrypt=i;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(!e||0===e.length){this.eof=!0;return}this.nextChunk=this.str.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const i=this.bufferLength,a=i+e.length;this.ensureBuffer(a).set(e,i);this.bufferLength=a}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),i=e.length;for(let e=0;e<256;++e)t[e]=e;for(let a=0,s=0;a<256;++a){const r=t[a];s=s+r+e[a%i]&255;t[a]=t[s];t[s]=r}this.s=t}encryptBlock(e){let t=this.a,i=this.b;const a=this.s,s=e.length,r=new Uint8Array(s);for(let n=0;n>5&255;C[h++]=s>>13&255;C[h++]=s>>21&255;C[h++]=s>>>29&255;C[h++]=0;C[h++]=0;C[h++]=0;const E=new Int32Array(16);for(h=0;h>>32-g)|0;s=r}r=r+s|0;n=n+c|0;g=g+Q|0;o=o+u|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&g,g>>8&255,g>>16&255,g>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255])}}();class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}or(e){this.high|=e.high;this.low|=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}shiftLeft(e){if(e>=32){this.high=this.low<>>32-e;this.low<<=e}}rotateRight(e){let t,i;if(32&e){i=this.low;t=this.high}else{t=this.low;i=this.high}e&=31;this.low=t>>>e|i<<32-e;this.high=i>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let i=(this.high>>>0)+(e.high>>>0);t>4294967295&&(i+=1);this.low=0|t;this.high=0|i}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const Js=function calculateSHA256Closure(){function rotr(e,t){return e>>>t|e<<32-t}function ch(e,t,i){return e&t^~e&i}function maj(e,t,i){return e&t^e&i^t&i}function sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}const e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function hash(t,i,a){let s=1779033703,r=3144134277,n=1013904242,g=2773480762,o=1359893119,c=2600822924,C=528734635,h=1541459225;const l=64*Math.ceil((a+9)/64),Q=new Uint8Array(l);let E,u;for(E=0;E>>29&255;Q[E++]=a>>21&255;Q[E++]=a>>13&255;Q[E++]=a>>5&255;Q[E++]=a<<3&255;const f=new Uint32Array(64);for(E=0;E>>10)+f[u-7]+littleSigma(f[u-15])+f[u-16]|0;let t,i,a=s,l=r,d=n,m=g,y=o,w=c,D=C,b=h;for(u=0;u<64;++u){t=b+sigmaPrime(y)+ch(y,w,D)+e[u]+f[u];i=sigma(a)+maj(a,l,d);b=D;D=w;w=y;y=m+t|0;m=d;d=l;l=a;a=t+i|0}s=s+a|0;r=r+l|0;n=n+d|0;g=g+m|0;o=o+y|0;c=c+w|0;C=C+D|0;h=h+b|0}var p;return new Uint8Array([s>>24&255,s>>16&255,s>>8&255,255&s,r>>24&255,r>>16&255,r>>8&255,255&r,n>>24&255,n>>16&255,n>>8&255,255&n,g>>24&255,g>>16&255,g>>8&255,255&g,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,C>>24&255,C>>16&255,C>>8&255,255&C,h>>24&255,h>>16&255,h>>8&255,255&h])}}(),Ys=function calculateSHA512Closure(){function ch(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.not();s.and(a);e.xor(s)}function maj(e,t,i,a,s){e.assign(t);e.and(i);s.assign(t);s.and(a);e.xor(s);s.assign(i);s.and(a);e.xor(s)}function sigma(e,t,i){e.assign(t);e.rotateRight(28);i.assign(t);i.rotateRight(34);e.xor(i);i.assign(t);i.rotateRight(39);e.xor(i)}function sigmaPrime(e,t,i){e.assign(t);e.rotateRight(14);i.assign(t);i.rotateRight(18);e.xor(i);i.assign(t);i.rotateRight(41);e.xor(i)}function littleSigma(e,t,i){e.assign(t);e.rotateRight(1);i.assign(t);i.rotateRight(8);e.xor(i);i.assign(t);i.shiftRight(7);e.xor(i)}function littleSigmaPrime(e,t,i){e.assign(t);e.rotateRight(19);i.assign(t);i.rotateRight(61);e.xor(i);i.assign(t);i.shiftRight(6);e.xor(i)}const e=[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)];return function hash(t,i,a,s=!1){let r,n,g,o,c,C,h,l;if(s){r=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);g=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);C=new Word64(2394180231,1750603025);h=new Word64(3675008525,1694076839);l=new Word64(1203062813,3204075428)}else{r=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);g=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);C=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);l=new Word64(1541459225,327033209)}const Q=128*Math.ceil((a+17)/128),E=new Uint8Array(Q);let u,d;for(u=0;u>>29&255;E[u++]=a>>21&255;E[u++]=a>>13&255;E[u++]=a>>5&255;E[u++]=a<<3&255;const p=new Array(80);for(u=0;u<80;u++)p[u]=new Word64(0,0);let m=new Word64(0,0),y=new Word64(0,0),w=new Word64(0,0),D=new Word64(0,0),b=new Word64(0,0),F=new Word64(0,0),S=new Word64(0,0),k=new Word64(0,0);const R=new Word64(0,0),N=new Word64(0,0),G=new Word64(0,0),x=new Word64(0,0);let U,M;for(u=0;u=1;--e){i=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=i;i=r[14];a=r[10];r[14]=r[6];r[10]=r[2];r[6]=i;r[2]=a;i=r[15];a=r[11];s=r[7];r[15]=r[3];r[11]=i;r[7]=a;r[3]=s;for(let e=0;e<16;++e)r[e]=this._inv_s[r[e]];for(let i=0,a=16*e;i<16;++i,++a)r[i]^=t[a];for(let e=0;e<16;e+=4){const t=this._mix[r[e]],a=this._mix[r[e+1]],s=this._mix[r[e+2]],n=this._mix[r[e+3]];i=t^a>>>8^a<<24^s>>>16^s<<16^n>>>24^n<<8;r[e]=i>>>24&255;r[e+1]=i>>16&255;r[e+2]=i>>8&255;r[e+3]=255&i}}i=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=i;i=r[14];a=r[10];r[14]=r[6];r[10]=r[2];r[6]=i;r[2]=a;i=r[15];a=r[11];s=r[7];r[15]=r[3];r[11]=i;r[7]=a;r[3]=s;for(let e=0;e<16;++e){r[e]=this._inv_s[r[e]];r[e]^=t[e]}return r}_encrypt(e,t){const i=this._s;let a,s,r;const n=new Uint8Array(16);n.set(e);for(let e=0;e<16;++e)n[e]^=t[e];for(let e=1;e=a;--i)if(e[i]!==t){t=0;break}g-=t;r[r.length-1]=e.subarray(0,16-t)}}const o=new Uint8Array(g);for(let e=0,t=0,i=r.length;e=256&&(g=255&(27^g))}for(let t=0;t<4;++t){i[e]=a^=i[e-32];e++;i[e]=s^=i[e-32];e++;i[e]=r^=i[e-32];e++;i[e]=n^=i[e-32];e++}}return i}}class PDF17{checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);return isArrayEqual(Js(s,0,s.length),a)}checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);return isArrayEqual(Js(a,0,a.length),i)}getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);const r=Js(s,0,s.length);return new AES256Cipher(r).decryptBlock(a,!1,new Uint8Array(16))}getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);const s=Js(a,0,a.length);return new AES256Cipher(s).decryptBlock(i,!1,new Uint8Array(16))}}class PDF20{_hash(e,t,i){let a=Js(t,0,t.length).subarray(0,32),s=[0],r=0;for(;r<64||s.at(-1)>r-32;){const t=e.length+a.length+i.length,c=new Uint8Array(t);let C=0;c.set(e,C);C+=e.length;c.set(a,C);C+=a.length;c.set(i,C);const h=new Uint8Array(64*t);for(let e=0,i=0;e<64;e++,i+=t)h.set(c,i);s=new AES128Cipher(a.subarray(0,16)).encrypt(h,a.subarray(16,32));const l=s.slice(0,16).reduce(((e,t)=>e+t),0)%3;0===l?a=Js(s,0,s.length):1===l?a=(n=s,g=0,o=s.length,Ys(n,g,o,!0)):2===l&&(a=Ys(s,0,s.length));r++}var n,g,o;return a.subarray(0,32)}checkOwnerPassword(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);return isArrayEqual(this._hash(e,s,i),a)}checkUserPassword(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);return isArrayEqual(this._hash(e,a,[]),i)}getOwnerKey(e,t,i,a){const s=new Uint8Array(e.length+56);s.set(e,0);s.set(t,e.length);s.set(i,e.length+t.length);const r=this._hash(e,s,i);return new AES256Cipher(r).decryptBlock(a,!1,new Uint8Array(16))}getUserKey(e,t,i){const a=new Uint8Array(e.length+8);a.set(e,0);a.set(t,e.length);const s=this._hash(e,a,[]);return new AES256Cipher(s).decryptBlock(i,!1,new Uint8Array(16))}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}createStream(e,t){const i=new this.StreamCipherConstructor;return new DecryptStream(e,t,(function cipherTransformDecryptStream(e,t){return i.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let i=stringToBytes(e);i=t.decryptBlock(i,!0);return bytesToString(i)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const i=16-e.length%16;e+=String.fromCharCode(i).repeat(i);const a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(let e=0;e<16;e++)a[e]=Math.floor(256*Math.random());let s=stringToBytes(e);s=t.encrypt(s,a);const r=new Uint8Array(16+s.length);r.set(a);r.set(s,16);return bytesToString(r)}let i=stringToBytes(e);i=t.encrypt(i);return bytesToString(i)}}class CipherTransformFactory{static#k=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);#R(e,t,i,a,s,r,n,g,o,c,C,h){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const l=6===e?new PDF20:new PDF17;return l.checkUserPassword(t,g,n)?l.getUserKey(t,o,C):t.length&&l.checkOwnerPassword(t,a,r,i)?l.getOwnerKey(t,s,r,c):null}#N(e,t,i,a,s,r,n,g){const o=40+i.length+e.length,c=new Uint8Array(o);let C,h,l=0;if(t){h=Math.min(32,t.length);for(;l>8&255;c[l++]=s>>16&255;c[l++]=s>>>24&255;for(C=0,h=e.length;C=4&&!g){c[l++]=255;c[l++]=255;c[l++]=255;c[l++]=255}let Q=Hs(c,0,l);const E=n>>3;if(r>=3)for(C=0;C<50;++C)Q=Hs(Q,0,E);const u=Q.subarray(0,E);let d,f;if(r>=3){for(l=0;l<32;++l)c[l]=CipherTransformFactory.#k[l];for(C=0,h=e.length;C>3;if(i>=3)for(g=0;g<50;++g)o=Hs(o,0,o.length);let C,h;if(i>=3){h=t;const e=new Uint8Array(c);for(g=19;g>=0;g--){for(let t=0;t>8&255;s[n++]=e>>16&255;s[n++]=255&t;s[n++]=t>>8&255;if(a){s[n++]=115;s[n++]=65;s[n++]=108;s[n++]=84}return Hs(s,0,n).subarray(0,Math.min(i.length+5,16))}#U(e,t,i,a,s){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const r=this,n=e.get(t.name),g=n?.get("CFM");if(!g||"None"===g.name)return function(){return new NullCipher};if("V2"===g.name)return function(){return new ARCFourCipher(r.#x(i,a,s,!1))};if("AESV2"===g.name)return function(){return new AES128Cipher(r.#x(i,a,s,!0))};if("AESV3"===g.name)return function(){return new AES256Cipher(s)};throw new FormatError("Unknown crypto method")}constructor(e,t,i){const a=e.get("Filter");if(!isName(a,"Standard"))throw new FormatError("unknown encryption method");this.filterName=a.name;this.dict=e;const s=e.get("V");if(!Number.isInteger(s)||1!==s&&2!==s&&4!==s&&5!==s)throw new FormatError("unsupported encryption algorithm");this.algorithm=s;let r=e.get("Length");if(!r)if(s<=3)r=40;else{const t=e.get("CF"),i=e.get("StmF");if(t instanceof Dict&&i instanceof Name){t.suppressEncryption=!0;const e=t.get(i.name);r=e?.get("Length")||128;r<40&&(r<<=3)}}if(!Number.isInteger(r)||r<40||r%8!=0)throw new FormatError("invalid key length");const n=stringToBytes(e.get("O")),g=stringToBytes(e.get("U")),o=n.subarray(0,32),c=g.subarray(0,32),C=e.get("P"),h=e.get("R"),l=(4===s||5===s)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=l;const Q=stringToBytes(t);let E,u;if(i){if(6===h)try{i=utf8StringToString(i)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}E=stringToBytes(i)}if(5!==s)u=this.#N(Q,E,o,c,C,h,r,l);else{const t=n.subarray(32,40),i=n.subarray(40,48),a=g.subarray(0,48),s=g.subarray(32,40),r=g.subarray(40,48),C=stringToBytes(e.get("OE")),l=stringToBytes(e.get("UE")),Q=stringToBytes(e.get("Perms"));u=this.#R(h,E,o,t,i,a,c,s,r,C,l,Q)}if(!u&&!i)throw new PasswordException("No password given",it);if(!u&&i){const e=this.#G(E,o,h,r);u=this.#N(Q,e,o,c,C,h,r,l)}if(!u)throw new PasswordException("Incorrect Password",at);this.encryptionKey=u;if(s>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#U(this.cf,this.strf,e,t,this.encryptionKey),this.#U(this.cf,this.stmf,e,t,this.encryptionKey));const i=this.#x(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(i)};return new CipherTransform(cipherConstructor,cipherConstructor)}}async function writeObject(e,t,i,{encrypt:a=null}){const s=a?.createCipherTransform(e.num,e.gen);i.push(`${e.num} ${e.gen} obj\n`);t instanceof Dict?await writeDict(t,i,s):t instanceof BaseStream?await writeStream(t,i,s):(Array.isArray(t)||ArrayBuffer.isView(t))&&await writeArray(t,i,s);i.push("\nendobj\n")}async function writeDict(e,t,i){t.push("<<");for(const a of e.getKeys()){t.push(` /${escapePDFName(a)} `);await writeValue(e.getRaw(a),t,i)}t.push(">>")}async function writeStream(e,t,i){let a=e.getBytes();const{dict:s}=e,[r,n]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),g=isName(Array.isArray(r)?await s.xref.fetchIfRefAsync(r[0]):r,"FlateDecode");if(a.length>=256||g)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();t.write(a);t.close();const i=await new Response(e.readable).arrayBuffer();a=new Uint8Array(i);let o,c;if(r){if(!g){o=Array.isArray(r)?[Name.get("FlateDecode"),...r]:[Name.get("FlateDecode"),r];n&&(c=Array.isArray(n)?[null,...n]:[null,n])}}else o=Name.get("FlateDecode");o&&s.set("Filter",o);c&&s.set("DecodeParms",c)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let o=bytesToString(a);i&&(o=i.encryptString(o));s.set("Length",o.length);await writeDict(s,t,i);t.push(" stream\n",o,"\nendstream")}async function writeArray(e,t,i){t.push("[");let a=!0;for(const s of e){a?a=!1:t.push(" ");await writeValue(s,t,i)}t.push("]")}async function writeValue(e,t,i){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await writeArray(e,t,i);else if("string"==typeof e){i&&(e=i.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(numberToString(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,i):e instanceof BaseStream?await writeStream(e,t,i):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,i,a){for(let s=t+i-1;s>i-1;s--){a[s]=255&e;e>>=8}return i+t}function writeString(e,t,i){for(let a=0,s=e.length;a1&&(r=i.documentElement.searchNode([s.at(-1)],0));r?r.childNodes=Array.isArray(a)?a.map((e=>new SimpleDOMNode("value",e))):[new SimpleDOMNode("#text",a)]:warn(`Node not found for path: ${t}`)}const a=[];i.documentElement.dump(a);return a.join("")}(a.fetchIfRef(t).getString(),i)}const s=a.encrypt;if(s){e=s.createCipherTransform(t.num,t.gen).encryptString(e)}const r=`${t.num} ${t.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n`+e+"\nendstream\nendobj\n";i.push({ref:t,data:r})}function getIndexes(e){const t=[];for(const{ref:i}of e)i.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(i.num,1);return t}function computeIDs(e,t,i){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const a=function computeMD5(e,t){const i=Math.floor(Date.now()/1e3),a=t.filename||"",s=[i.toString(),a,e.toString()];let r=s.reduce(((e,t)=>e+t.length),0);for(const e of Object.values(t.info)){s.push(e);r+=e.length}const n=new Uint8Array(r);let g=0;for(const e of s){writeString(e,g,n);g+=e.length}return bytesToString(Hs(n))}(e,t);i.set("ID",[t.fileIds[0],a])}}async function incrementalUpdate({originalData:e,xrefInfo:t,newRefs:i,xref:a=null,hasXfa:s=!1,xfaDatasetsRef:r=null,hasXfaDatasetsEntry:n=!1,needAppearances:g,acroFormRef:o=null,acroForm:c=null,xfaData:C=null,useXrefStream:h=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:i,hasXfa:a,hasXfaDatasetsEntry:s,xfaDatasetsRef:r,needAppearances:n,newRefs:g}){!a||s||r||warn("XFA - Cannot save it");if(!n&&(!a||!r||s))return;const o=t.clone();if(a&&!s){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,r);o.set("XFA",e)}n&&o.set("NeedAppearances",!0);const c=[];await writeObject(i,o,c,e);g.push({ref:i,data:c.join("")})}({xref:a,acroForm:c,acroFormRef:o,hasXfa:s,hasXfaDatasetsEntry:n,xfaDatasetsRef:r,needAppearances:g,newRefs:i});s&&updateXFA({xfaData:C,xfaDatasetsRef:r,newRefs:i,xref:a});const l=[];let Q=e.length;const E=e.at(-1);if(10!==E&&13!==E){l.push("\n");Q+=1}const u=function getTrailerDict(e,t,i){const a=new Dict(null);a.set("Prev",e.startXRef);const s=e.newRef;if(i){t.push({ref:s,data:""});a.set("Size",s.num+1);a.set("Type",Name.get("XRef"))}else a.set("Size",s.num);null!==e.rootRef&&a.set("Root",e.rootRef);null!==e.infoRef&&a.set("Info",e.infoRef);null!==e.encryptRef&&a.set("Encrypt",e.encryptRef);return a}(t,i,h);i=i.sort(((e,t)=>e.ref.num-t.ref.num));for(const{data:e}of i)null!==e&&l.push(e);await(h?async function getXRefStreamTable(e,t,i,a,s){const r=[];let n=0,g=0;for(const{ref:e,data:a}of i){let i;n=Math.max(n,t);if(null!==a){i=Math.min(e.gen,65535);r.push([1,t,i]);t+=a.length}else{i=Math.min(e.gen+1,65535);r.push([0,0,i])}g=Math.max(g,i)}a.set("Index",getIndexes(i));const o=[1,getSizeInBytes(n),getSizeInBytes(g)];a.set("W",o);computeIDs(t,e,a);const c=o.reduce(((e,t)=>e+t),0),C=new Uint8Array(c*r.length),h=new Stream(C);h.dict=a;let l=0;for(const[e,t,i]of r){l=writeInt(e,o[0],l,C);l=writeInt(t,o[1],l,C);l=writeInt(i,o[2],l,C)}await writeObject(e.newRef,h,s,{});s.push("startxref\n",t.toString(),"\n%%EOF\n")}(t,Q,i,u,l):async function getXRefTable(e,t,i,a,s){s.push("xref\n");const r=getIndexes(i);let n=0;for(const{ref:e,data:a}of i){if(e.num===r[n]){s.push(`${r[n]} ${r[n+1]}\n`);n+=2}if(null!==a){s.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\r\n`);t+=a.length}else s.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\r\n`)}computeIDs(t,e,a);s.push("trailer\n");await writeDict(a,s);s.push("\nstartxref\n",t.toString(),"\n%%EOF\n")}(t,Q,i,u,l));const d=l.reduce(((e,t)=>e+t.length),e.length),f=new Uint8Array(d);f.set(e);let p=e.length;for(const e of l){writeString(e,p,f);p+=e.length}return f}const vs=1,Ks=2,Ts=3,qs=4,Os=5;class StructTreeRoot{constructor(e,t){this.dict=e;this.ref=t instanceof Ref?t:null;this.roleMap=new Map;this.structParentIds=null}init(){this.readRoleMap()}#M(e,t,i){if(!(e instanceof Ref)||t<0)return;this.structParentIds||=new RefSetCache;let a=this.structParentIds.get(e);if(!a){a=[];this.structParentIds.put(e,a)}a.push([t,i])}addAnnotationIdToPage(e,t){this.#M(e,t,qs)}readRoleMap(){const e=this.dict.get("RoleMap");e instanceof Dict&&e.forEach(((e,t)=>{t instanceof Name&&this.roleMap.set(e,t.name)}))}static async canCreateStructureTree({catalogRef:e,pdfManager:t,newAnnotationsByPage:i}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let a=0,s=!0;for(const[e,r]of i){const{ref:i}=await t.getPage(e);if(!(i instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);s=!0;break}for(const e of r)if(e.accessibilityData?.type){e.parentTreeId=a++;s=!1}}if(s){for(const e of i.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:e,xref:t,catalogRef:i,pdfManager:a,newRefs:s}){const r=a.catalog.cloneDict(),n=new RefSetCache;n.put(i,r);const g=t.getNewTemporaryRef();r.set("StructTreeRoot",g);const o=new Dict(t);o.set("Type",Name.get("StructTreeRoot"));const c=t.getNewTemporaryRef();o.set("ParentTree",c);const C=[];o.set("K",C);n.put(g,o);const h=new Dict(t),l=[];h.set("Nums",l);const Q=await this.#L({newAnnotationsByPage:e,structTreeRootRef:g,kids:C,nums:l,xref:t,pdfManager:a,cache:n});o.set("ParentTreeNextKey",Q);n.put(c,h);const E=[];for(const[e,i]of n.items()){E.length=0;await writeObject(e,i,E,t);s.push({ref:e,data:E.join("")})}}async canUpdateStructTree({pdfManager:e,xref:t,newAnnotationsByPage:i}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const s=this.dict.get("ParentTree");if(!(s instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn't a dict.");return!1}const r=s.get("Nums");if(!Array.isArray(r)){warn("Cannot update the struct tree: nums isn't an array.");return!1}const n=new NumberTree(s,t);for(const t of i.keys()){const{pageDict:i}=await e.getPage(t);if(!i.has("StructParents"))continue;const a=i.get("StructParents");if(!Number.isInteger(a)||!Array.isArray(n.get(a))){warn(`Cannot save the struct tree: page ${t} has a wrong id.`);return!1}}let g=!0;for(const[t,s]of i){const{pageDict:i}=await e.getPage(t);StructTreeRoot.#H({elements:s,xref:this.dict.xref,pageDict:i,numberTree:n});for(const e of s)if(e.accessibilityData?.type){e.parentTreeId=a++;g=!1}}if(g){for(const e of i.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,newRefs:i}){const a=this.dict.xref,s=this.dict.clone(),r=this.ref,n=new RefSetCache;n.put(r,s);let g,o=s.getRaw("ParentTree");if(o instanceof Ref)g=a.fetch(o);else{g=o;o=a.getNewTemporaryRef();s.set("ParentTree",o)}g=g.clone();n.put(o,g);let c=g.getRaw("Nums"),C=null;if(c instanceof Ref){C=c;c=a.fetch(C)}c=c.slice();C||g.set("Nums",c);const h=await StructTreeRoot.#L({newAnnotationsByPage:e,structTreeRootRef:r,kids:null,nums:c,xref:a,pdfManager:t,cache:n});s.set("ParentTreeNextKey",h);C&&n.put(C,c);const l=[];for(const[e,t]of n.items()){l.length=0;await writeObject(e,t,l,a);i.push({ref:e,data:l.join("")})}}static async#L({newAnnotationsByPage:e,structTreeRootRef:t,kids:i,nums:a,xref:s,pdfManager:r,cache:n}){const g=Name.get("OBJR");let o=-1/0;for(const[c,C]of e){const{ref:e}=await r.getPage(c),h=e instanceof Ref;for(const{accessibilityData:r,ref:c,parentTreeId:l,structTreeParent:Q}of C){if(!r?.type)continue;const{type:C,title:E,lang:u,alt:d,expanded:f,actualText:p}=r;o=Math.max(o,l);const m=s.getNewTemporaryRef(),y=new Dict(s);y.set("S",Name.get(C));E&&y.set("T",E);u&&y.set("Lang",u);d&&y.set("Alt",d);f&&y.set("E",f);p&&y.set("ActualText",p);await this.#J({structTreeParent:Q,tagDict:y,newTagRef:m,structTreeRootRef:t,fallbackKids:i,xref:s,cache:n});const w=new Dict(s);y.set("K",w);w.set("Type",g);h&&w.set("Pg",e);w.set("Obj",c);n.put(m,y);a.push(l,m)}}return o+1}static#H({elements:e,xref:t,pageDict:i,numberTree:a}){const s=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let i=s.get(e);if(!i){i=[];s.set(e,i)}i.push(t)}const r=i.get("StructParents");if(!Number.isInteger(r))return;const n=a.get(r),updateElement=(e,i,a)=>{const r=s.get(e);if(r){const e=i.getRaw("P"),s=t.fetchIfRef(e);if(e instanceof Ref&&s instanceof Dict){const e={ref:a,dict:i};for(const t of r)t.structTreeParent=e}return!0}return!1};for(const e of n){if(!(e instanceof Ref))continue;const i=t.fetch(e),a=i.get("K");if(Number.isInteger(a))updateElement(a,i,e);else if(Array.isArray(a))for(let s of a){s=t.fetchIfRef(s);if(Number.isInteger(s)&&updateElement(s,i,e))break;if(!(s instanceof Dict))continue;if(!isName(s.get("Type"),"MCR"))break;const a=s.get("MCID");if(Number.isInteger(a)&&updateElement(a,i,e))break}}}static async#J({structTreeParent:e,tagDict:t,newTagRef:i,structTreeRootRef:a,fallbackKids:s,xref:r,cache:n}){let g,o=null;if(e){({ref:o}=e);g=e.dict.getRaw("P")||a}else g=a;t.set("P",g);const c=r.fetchIfRef(g);if(!c){s.push(i);return}let C=n.get(g);if(!C){C=c.clone();n.put(g,C)}const h=C.getRaw("K");let l=h instanceof Ref?n.get(h):null;if(!l){l=r.fetchIfRef(h);l=Array.isArray(l)?l.slice():[h];const e=r.getNewTemporaryRef();C.set("K",e);n.put(e,l)}const Q=l.indexOf(o);l.splice(Q>=0?Q+1:l.length,0,i)}}class StructElementNode{constructor(e,t){this.tree=e;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:i}=this.tree;return i.roleMap.has(t)?i.roleMap.get(t):t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const i=this.dict.get("K");if(Array.isArray(i))for(const t of i){const i=this.parseKid(e,t);i&&this.kids.push(i)}else{const t=this.parseKid(e,i);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:vs,mcid:t,pageObjId:e});let i=null;t instanceof Ref?i=this.dict.xref.fetch(t):t instanceof Dict&&(i=t);if(!i)return null;const a=i.getRaw("Pg");a instanceof Ref&&(e=a.toString());const s=i.get("Type")instanceof Name?i.get("Type").name:null;if("MCR"===s){if(this.tree.pageDict.objId!==e)return null;const t=i.getRaw("Stm");return new StructElement({type:Ks,refObjId:t instanceof Ref?t.toString():null,pageObjId:e,mcid:i.get("MCID")})}if("OBJR"===s){if(this.tree.pageDict.objId!==e)return null;const t=i.getRaw("Obj");return new StructElement({type:Ts,refObjId:t instanceof Ref?t.toString():null,pageObjId:e})}return new StructElement({type:Os,dict:i})}}class StructElement{constructor({type:e,dict:t=null,mcid:i=null,pageObjId:a=null,refObjId:s=null}){this.type=e;this.dict=t;this.mcid=i;this.pageObjId=a;this.refObjId=s;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.rootDict=e?e.dict:null;this.pageDict=t;this.nodes=[]}parse(e){if(!this.root||!this.rootDict)return;const t=this.rootDict.get("ParentTree");if(!t)return;const i=this.pageDict.get("StructParents"),a=e instanceof Ref&&this.root.structParentIds?.get(e);if(!Number.isInteger(i)&&!a)return;const s=new Map,r=new NumberTree(t,this.rootDict.xref);if(Number.isInteger(i)){const e=r.get(i);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.rootDict.xref.fetch(t),s)}if(a)for(const[e,t]of a){const i=r.get(e);if(i){const e=this.addNode(this.rootDict.xref.fetchIfRef(i),s);1===e?.kids?.length&&e.kids[0].type===Ts&&(e.kids[0].type=t)}}}addNode(e,t,i=0){if(i>40){warn("StructTree MAX_DEPTH reached.");return null}if(t.has(e))return t.get(e);const a=new StructElementNode(this,e);t.set(e,a);const s=e.get("P");if(!s||isName(s.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,a)||t.delete(e);return a}const r=this.addNode(s,t,i+1);if(!r)return a;let n=!1;for(const t of r.kids)if(t.type===Os&&t.dict===e){t.parentNode=a;n=!0}n||t.delete(e);return a}addTopLevelNode(e,t){const i=this.rootDict.get("K");if(!i)return!1;if(i instanceof Dict){if(i.objId!==e.objId)return!1;this.nodes[0]=t;return!0}if(!Array.isArray(i))return!0;let a=!1;for(let s=0;s40){warn("StructTree too deep to be fully serialized.");return}const a=Object.create(null);a.role=e.role;a.children=[];t.children.push(a);const s=e.dict.get("Alt");"string"==typeof s&&(a.alt=stringToPDFString(s));const r=e.dict.get("Lang");"string"==typeof r&&(a.lang=stringToPDFString(r));for(const t of e.kids){const e=t.type===Os?t.parentNode:null;e?nodeToSerializable(e,a,i+1):t.type===vs||t.type===Ks?a.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===Ts?a.children.push({type:"object",id:t.refObjId}):t.type===qs&&a.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}function isValidExplicitDest(e){if(!Array.isArray(e)||e.length<2)return!1;const[t,i,...a]=e;if(!(t instanceof Ref||Number.isInteger(t)))return!1;if(!(i instanceof Name))return!1;let s=!0;switch(i.name){case"XYZ":if(3!==a.length)return!1;break;case"Fit":case"FitB":return 0===a.length;case"FitH":case"FitBH":case"FitV":case"FitBV":if(1!==a.length)return!1;break;case"FitR":if(4!==a.length)return!1;s=!1;break;default:return!1}for(const e of a)if(!("number"==typeof e||s&&null===e))return!1;return!0}function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return isValidExplicitDest(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t);if(isValidExplicitDest(t))return JSON.stringify(t)}return null}class Catalog{constructor(e,t){this.pdfManager=e;this.xref=t;this._catDict=t.getCatalogObj();if(!(this._catDict instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict;this._actualNumPages=null;this.fontCache=new RefSetCache;this.builtInCMapCache=new Map;this.standardFontDataCache=new Map;this.globalImageCache=new GlobalImageCache;this.pageKidsCountCache=new RefSetCache;this.pageIndexCache=new RefSetCache;this.nonBlendModesSet=new RefSet;this.systemFontCache=new Map}cloneDict(){return this._catDict.clone()}get version(){const e=this._catDict.get("Version");if(e instanceof Name){if(bt.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this._catDict.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this._catDict.get("NeedsRendering");return shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this._catDict.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this._catDict.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this._catDict.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this._catDict.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const i=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(i instanceof BaseStream&&i.dict instanceof Dict){const e=i.dict.get("Type"),a=i.dict.get("Subtype");if(isName(e,"Metadata")&&isName(a,"XML")){const e=stringToUTF8String(i.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}_readMarkInfo(){const e=this._catDict.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const i in t){const a=e.get(i);"boolean"==typeof a&&(t[i]=a)}return t}get structTreeRoot(){let e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}_readStructTreeRoot(){const e=this._catDict.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const i=new StructTreeRoot(t,e);i.init();return i}get toplevelPagesDict(){const e=this._catDict.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}_readDocumentOutline(){let e=this._catDict.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},i=[{obj:e,parent:t}],a=new RefSet;a.put(e);const s=this.xref,r=new Uint8ClampedArray(3);for(;i.length>0;){const t=i.shift(),n=s.fetchIfRef(t.obj);if(null===n)continue;n.has("Title")||warn("Invalid outline item encountered.");const g={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:n,resultObj:g,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const o=n.get("Title"),c=n.get("F")||0,C=n.getArray("C"),h=n.get("Count");let l=r;!isNumberArray(C,3)||0===C[0]&&0===C[1]&&0===C[2]||(l=ColorSpace.singletons.rgb.getRgb(C,0));const Q={action:g.action,attachment:g.attachment,dest:g.dest,url:g.url,unsafeUrl:g.unsafeUrl,newWindow:g.newWindow,setOCGState:g.setOCGState,title:"string"==typeof o?stringToPDFString(o):"",color:l,count:Number.isInteger(h)?h:void 0,bold:!!(2&c),italic:!!(1&c),items:[]};t.parent.items.push(Q);e=n.getRaw("First");if(e instanceof Ref&&!a.has(e)){i.push({obj:e,parent:Q});a.put(e)}e=n.getRaw("Next");if(e instanceof Ref&&!a.has(e)){i.push({obj:e,parent:t.parent});a.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this._readPermissions()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}_readPermissions(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const i=[];for(const e in m){const a=m[e];t&a&&i.push(a)}return i}get optionalContentConfig(){let e=null;try{const t=this._catDict.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const i=t.get("D");if(!i)return shadow(this,"optionalContentConfig",null);const a=t.get("OCGs");if(!Array.isArray(a))return shadow(this,"optionalContentConfig",null);const s=[],r=new RefSet;for(const e of a)if(e instanceof Ref&&!r.has(e)){r.put(e);s.push(this.#Y(e))}e=this.#v(i,r);e.groups=s}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#Y(e){const t=this.xref.fetch(e),i={id:e.toString(),name:null,intent:null,usage:{print:null,view:null}},a=t.get("Name");"string"==typeof a&&(i.name=stringToPDFString(a));let s=t.getArray("Intent");Array.isArray(s)||(s=[s]);s.every((e=>e instanceof Name))&&(i.intent=s.map((e=>e.name)));const r=t.get("Usage");if(!(r instanceof Dict))return i;const n=i.usage,g=r.get("Print");if(g instanceof Dict){const e=g.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":n.print={printState:e.name}}}const o=r.get("View");if(o instanceof Dict){const e=o.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":n.view={viewState:e.name}}}return i}#v(e,t){function parseOnOff(e){const i=[];if(Array.isArray(e))for(const a of e)a instanceof Ref&&t.has(a)&&i.push(a.toString());return i}function parseOrder(e,i=0){if(!Array.isArray(e))return null;const s=[];for(const r of e){if(r instanceof Ref&&t.has(r)){a.put(r);s.push(r.toString());continue}const e=parseNestedOrder(r,i);e&&s.push(e)}if(i>0)return s;const r=[];for(const e of t)a.has(e)||r.push(e.toString());r.length&&s.push({name:null,order:r});return s}function parseNestedOrder(e,t){if(++t>s){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const a=i.fetchIfRef(e);if(!Array.isArray(a))return null;const r=i.fetchIfRef(a[0]);if("string"!=typeof r)return null;const n=parseOrder(a.slice(1),t);return n&&n.length?{name:stringToPDFString(r),order:n}:null}const i=this.xref,a=new RefSet,s=10;return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:null}}setActualNumPages(e=null){this._actualNumPages=e}get hasActualNumPages(){return null!==this._actualNumPages}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){const e=this._readDests(),t=Object.create(null);if(e instanceof NameTree)for(const[i,a]of e.getAll()){const e=fetchDest(a);e&&(t[stringToPDFString(i)]=e)}else e instanceof Dict&&e.forEach((function(e,i){const a=fetchDest(i);a&&(t[e]=a)}));return shadow(this,"destinations",t)}getDestination(e){const t=this._readDests();if(t instanceof NameTree){const i=fetchDest(t.get(e));if(i)return i;const a=this.destinations[e];if(a){warn(`Found "${e}" at an incorrect position in the NameTree.`);return a}}else if(t instanceof Dict){const i=fetchDest(t.get(e));if(i)return i}return null}_readDests(){const e=this._catDict.get("Names");return e?.has("Dests")?new NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}get pageLabels(){let e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}_readPageLabels(){const e=this._catDict.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let i=null,a="";const s=new NumberTree(e,this.xref).getAll();let r="",n=1;for(let e=0,g=this.numPages;e=1))throw new FormatError("Invalid start in PageLabel dictionary.");n=e}else n=1}switch(i){case"D":r=n;break;case"R":case"r":r=toRomanNumerals(n,"r"===i);break;case"A":case"a":const e=26,t="a"===i?97:65,a=n-1;r=String.fromCharCode(t+a%e).repeat(Math.floor(a/e)+1);break;default:if(i)throw new FormatError(`Invalid style "${i}" in PageLabel dictionary.`);r=""}t[e]=a+r;n++}return t}get pageLayout(){const e=this._catDict.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this._catDict.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this._catDict.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const i of e.getKeys()){const a=e.get(i);let s;switch(i){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof a&&(s=a);break;case"NonFullScreenPageMode":if(a instanceof Name)switch(a.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":s=a.name;break;default:s="UseNone"}break;case"Direction":if(a instanceof Name)switch(a.name){case"L2R":case"R2L":s=a.name;break;default:s="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(a instanceof Name)switch(a.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":s=a.name;break;default:s="CropBox"}break;case"PrintScaling":if(a instanceof Name)switch(a.name){case"None":case"AppDefault":s=a.name;break;default:s="AppDefault"}break;case"Duplex":if(a instanceof Name)switch(a.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":s=a.name;break;default:s="None"}break;case"PrintPageRange":if(Array.isArray(a)&&a.length%2==0){a.every(((e,t,i)=>Number.isInteger(e)&&e>0&&(0===t||e>=i[t-1])&&e<=this.numPages))&&(s=a)}break;case"NumCopies":Number.isInteger(a)&&a>0&&(s=a);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${i}.`);continue}if(void 0!==s){t||(t=Object.create(null));t[i]=s}else warn(`Bad value, for key "${i}", in ViewerPreferences: ${a}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this._catDict.get("OpenAction"),t=Object.create(null);if(e instanceof Dict){const i=new Dict(this.xref);i.set("A",e);const a={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:i,resultObj:a});Array.isArray(a.dest)?t.dest=a.dest:a.action&&(t.action=a.action)}else Array.isArray(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments(){const e=this._catDict.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const i=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,a]of i.getAll()){const i=new FileSpec(a,this.xref);t||(t=Object.create(null));t[stringToPDFString(e)]=i.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this._catDict.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const i=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,a]of i.getAll()){t||(t=new Dict(this.xref));t.set(stringToPDFString(e),a)}}return shadow(this,"xfaImages",t)}_collectJavaScript(){const e=this._catDict.get("Names");let t=null;function appendIfJavaScriptDict(e,i){if(!(i instanceof Dict))return;if(!isName(i.get("S"),"JavaScript"))return;let a=i.get("JS");if(a instanceof BaseStream)a=a.getString();else if("string"!=typeof a)return;a=stringToPDFString(a).replaceAll("\0","");a&&(t||=new Map).set(e,a)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,i]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e),i)}const i=this._catDict.get("OpenAction");i&&appendIfJavaScriptDict("OpenAction",i);return t}get jsActions(){const e=this._collectJavaScript();let t=collectActions(this.xref,this._catDict,dA);if(e){t||=Object.create(null);for(const[i,a]of e)i in t?t[i].push(a):t[i]=[a]}return shadow(this,"jsActions",t)}async fontFallback(e,t){const i=await Promise.all(this.fontCache);for(const a of i)if(a.loadedName===e){a.fallback(t);return}}async cleanup(e=!1){clearGlobalCaches();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.nonBlendModesSet.clear();const t=await Promise.all(this.fontCache);for(const{dict:e}of t)delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],i=new RefSet,a=this._catDict.getRaw("Pages");a instanceof Ref&&i.put(a);const s=this.xref,r=this.pageKidsCountCache,n=this.pageIndexCache;let g=0;for(;t.length;){const a=t.pop();if(a instanceof Ref){const o=r.get(a);if(o>=0&&g+o<=e){g+=o;continue}if(i.has(a))throw new FormatError("Pages tree contains circular reference.");i.put(a);const c=await s.fetchAsync(a);if(c instanceof Dict){let t=c.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!c.has("Kids")){r.has(a)||r.put(a,1);n.has(a)||n.put(a,g);if(g===e)return[c,a];g++;continue}}t.push(c);continue}if(!(a instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:o}=a;let c=a.getRaw("Count");c instanceof Ref&&(c=await s.fetchAsync(c));if(Number.isInteger(c)&&c>=0){o&&!r.has(o)&&r.put(o,c);if(g+c<=e){g+=c;continue}}let C=a.getRaw("Kids");C instanceof Ref&&(C=await s.fetchAsync(C));if(!Array.isArray(C)){let t=a.getRaw("Type");t instanceof Ref&&(t=await s.fetchAsync(t));if(isName(t,"Page")||!a.has("Kids")){if(g===e)return[a,null];g++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=C.length-1;e>=0;e--)t.push(C[e])}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,i=[{currentNode:this.toplevelPagesDict,posInKids:0}],a=new RefSet,s=this._catDict.getRaw("Pages");s instanceof Ref&&a.put(s);const r=new Map,n=this.xref,g=this.pageIndexCache;let o=0;function addPageDict(e,t){t&&!g.has(t)&&g.put(t,o);r.set(o++,[e,t])}function addPageError(i){if(i instanceof XRefEntryException&&!e)throw i;if(e&&t&&0===o){warn(`getAllPageDicts - Skipping invalid first page: "${i}".`);i=Dict.empty}r.set(o++,[i,null])}for(;i.length>0;){const e=i.at(-1),{currentNode:t,posInKids:s}=e;let r=t.getRaw("Kids");if(r instanceof Ref)try{r=await n.fetchAsync(r)}catch(e){addPageError(e);break}if(!Array.isArray(r)){addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(s>=r.length){i.pop();continue}const g=r[s];let o;if(g instanceof Ref){if(a.has(g)){addPageError(new FormatError("Pages tree contains circular reference."));break}a.put(g);try{o=await n.fetchAsync(g)}catch(e){addPageError(e);break}}else o=g;if(!(o instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let c=o.getRaw("Type");if(c instanceof Ref)try{c=await n.fetchAsync(c)}catch(e){addPageError(e);break}isName(c,"Page")||!o.has("Kids")?addPageDict(o,g instanceof Ref?g:null):i.push({currentNode:o,posInKids:0});e.posInKids++}return r}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const i=this.xref;let a=0;const next=t=>function pagesBeforeRef(t){let a,s=0;return i.fetchAsync(t).then((function(i){if(isRefsEqual(t,e)&&!isDict(i,"Page")&&!(i instanceof Dict&&!i.has("Type")&&i.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!i)return null;if(!(i instanceof Dict))throw new FormatError("Node must be a dictionary.");a=i.getRaw("Parent");return i.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const r=[];let n=!1;for(const a of e){if(!(a instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(a,t)){n=!0;break}r.push(i.fetchAsync(a).then((function(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?s+=e.get("Count"):s++})))}if(!n)throw new FormatError("Kid reference not found in parent's kids.");return Promise.all(r).then((function(){return[s,a]}))}))}(t).then((t=>{if(!t){this.pageIndexCache.put(e,a);return a}const[i,s]=t;a+=i;return next(s)}));return next(e)}get baseUrl(){const e=this._catDict.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:i=null,docAttachments:a=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let s,r,n=e.get("A");if(!(n instanceof Dict))if(e.has("Dest"))n=e.get("Dest");else{n=e.get("AA");n instanceof Dict&&(n.has("D")?n=n.get("D"):n.has("U")&&(n=n.get("U")))}if(n instanceof Dict){const e=n.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const i=e.name;switch(i){case"ResetForm":const e=n.get("Flags"),g=0==(1&("number"==typeof e?e:0)),o=[],c=[];for(const e of n.get("Fields")||[])e instanceof Ref?c.push(e.toString()):"string"==typeof e&&o.push(stringToPDFString(e));t.resetForm={fields:o,refs:c,include:g};break;case"URI":s=n.get("URI");s instanceof Name&&(s="/"+s.name);break;case"GoTo":r=n.get("D");break;case"Launch":case"GoToR":const C=n.get("F");if(C instanceof Dict){const e=new FileSpec(C,null,!0),{rawFilename:t}=e.serializable;s=t}else"string"==typeof C&&(s=C);const h=fetchRemoteDest(n);h&&"string"==typeof s&&(s=s.split("#",1)[0]+"#"+h);const l=n.get("NewWindow");"boolean"==typeof l&&(t.newWindow=l);break;case"GoToE":const Q=n.get("T");let E;if(a&&Q instanceof Dict){const e=Q.get("R"),t=Q.get("N");isName(e,"C")&&"string"==typeof t&&(E=a[stringToPDFString(t)])}if(E){t.attachment=E;const e=fetchRemoteDest(n);e&&(t.attachmentDest=e)}else warn('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const u=n.get("N");u instanceof Name&&(t.action=u.name);break;case"SetOCGState":const d=n.get("State"),f=n.get("PreserveRB");if(!Array.isArray(d)||0===d.length)break;const p=[];for(const e of d)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":p.push(e.name)}else e instanceof Ref&&p.push(e.toString());if(p.length!==d.length)break;t.setOCGState={state:p,preserveRB:"boolean"!=typeof f||f};break;case"JavaScript":const m=n.get("JS");let y;m instanceof BaseStream?y=m.getString():"string"==typeof m&&(y=m);const w=y&&recoverJsURL(stringToPDFString(y));if(w){s=w.url;t.newWindow=w.newWindow;break}default:if("JavaScript"===i||"SubmitForm"===i)break;warn(`parseDestDictionary - unsupported action: "${i}".`)}}else e.has("Dest")&&(r=e.get("Dest"));if("string"==typeof s){const e=createValidAbsoluteUrl(s,i,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=s}if(r){r instanceof Name&&(r=r.name);"string"==typeof r?t.dest=stringToPDFString(r):isValidExplicitDest(r)&&(t.dest=r)}}}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const a of e)((i=a)instanceof Ref||i instanceof Dict||i instanceof BaseStream||Array.isArray(i))&&t.push(a);var i}class ObjectLoader{constructor(e,t,i){this.dict=e;this.keys=t;this.xref=i;this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;const{keys:e,dict:t}=this;this.refSet=new RefSet;const i=[];for(const a of e){const e=t.getRaw(a);void 0!==e&&i.push(e)}return this._walk(i)}async _walk(e){const t=[],i=[];for(;e.length;){let a=e.pop();if(a instanceof Ref){if(this.refSet.has(a))continue;try{this.refSet.put(a);a=this.xref.fetch(a)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader._walk - requesting all data: "${e}".`);this.refSet=null;const{manager:t}=this.xref.stream;return t.requestAllChunks()}t.push(a);i.push({begin:e.begin,end:e.end})}}if(a instanceof BaseStream){const e=a.getBaseStreams();if(e){let s=!1;for(const t of e)if(!t.isDataLoaded){s=!0;i.push({begin:t.start,end:t.end})}s&&t.push(a)}}addChildren(a,e)}if(i.length){await this.xref.stream.manager.requestRanges(i);for(const e of t)e instanceof Ref&&this.refSet.remove(e);return this._walk(t)}this.refSet=null}}const Ws=Symbol(),js=Symbol(),Xs=Symbol(),Zs=Symbol(),Vs=Symbol(),zs=Symbol(),_s=Symbol(),$s=Symbol(),Ar=Symbol(),er=Symbol("content"),tr=Symbol("data"),ir=Symbol(),ar=Symbol("extra"),sr=Symbol(),rr=Symbol(),nr=Symbol(),gr=Symbol(),or=Symbol(),Ir=Symbol(),cr=Symbol(),Cr=Symbol(),hr=Symbol(),lr=Symbol(),Qr=Symbol(),Er=Symbol(),ur=Symbol(),dr=Symbol(),fr=Symbol(),pr=Symbol(),mr=Symbol(),yr=Symbol(),wr=Symbol(),Dr=Symbol(),br=Symbol(),Fr=Symbol(),Sr=Symbol(),kr=Symbol(),Rr=Symbol(),Nr=Symbol(),Gr=Symbol(),xr=Symbol(),Ur=Symbol(),Mr=Symbol(),Lr=Symbol(),Hr=Symbol(),Jr=Symbol("namespaceId"),Yr=Symbol("nodeName"),vr=Symbol(),Kr=Symbol(),Tr=Symbol(),qr=Symbol(),Or=Symbol(),Pr=Symbol(),Wr=Symbol(),jr=Symbol(),Xr=Symbol("root"),Zr=Symbol(),Vr=Symbol(),zr=Symbol(),_r=Symbol(),$r=Symbol(),An=Symbol(),en=Symbol(),tn=Symbol(),an=Symbol(),sn=Symbol(),rn=Symbol(),nn=Symbol("uid"),gn=Symbol(),on={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},In={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},cn=/([+-]?\d+\.?\d*)(.*)/;function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:i}){if(!e)return t;e=e.trim();const a=parseInt(e,10);return!isNaN(a)&&i(a)?a:t}function getFloat({data:e,defaultValue:t,validate:i}){if(!e)return t;e=e.trim();const a=parseFloat(e);return!isNaN(a)&&i(a)?a:t}function getKeyword({data:e,defaultValue:t,validate:i}){return e&&i(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const i=e.trim().match(cn);if(!i)return getMeasurement(t);const[,a,s]=i,r=parseFloat(a);if(isNaN(r))return getMeasurement(t);if(0===r)return 0;const n=In[s];return n?n(r):r}function getRatio(e){if(!e)return{num:1,den:1};const t=e.trim().split(/\s*:\s*/).map((e=>parseFloat(e))).filter((e=>!isNaN(e)));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[i,a]=t;return{num:i,den:a}}function getRelevant(e){return e?e.trim().split(/\s+/).map((e=>({excluded:"-"===e[0],viewname:e.substring(1)}))):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,i,a){this.success=e;this.html=t;this.bbox=i;this.breakNode=a}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const i=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,i)}addPdfFont(e){const t=e.cssFontInfo,i=t.fontFamily;let a=this.fonts.get(i);if(!a){a=Object.create(null);this.fonts.set(i,a);this.defaultFont||(this.defaultFont=a)}let s="";const r=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?s=r>=700?"bolditalic":"italic":r>=700&&(s="bold");if(!s){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(s="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(s+="italic")}s||(s="regular");a[s]=e}getDefault(){return this.defaultFont}find(e,t=!0){let i=this.fonts.get(e)||this.cache.get(e);if(i)return i;const a=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let s=e.replaceAll(a,"");i=this.fonts.get(s);if(i){this.cache.set(e,i);return i}s=s.toLowerCase();const r=[];for(const[e,t]of this.fonts.entries())e.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(t);if(0===r.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(e);if(0===r.length){s=s.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(t)}if(0===r.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(a,"").toLowerCase().startsWith(s)&&r.push(e);if(r.length>=1){1!==r.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,r[0]);return r[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,i,a){this.lineHeight=i;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(a);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const s=a.find(e.typeface);if(s){this.pdfFont=selectFont(e,s);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(a))}else[this.pdfFont,this.xfaFont]=this.defaultFont(a)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,i,a){this.fontFinder=a;this.stack=[new FontInfo(e,t,i,a)]}pushData(e,t,i){const a=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=a.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=a.paraMargin[e]);const s=new FontInfo(e,t,i||a.lineHeight,this.fontFinder);s.pdfFont||(s.pdfFont=a.pdfFont);this.stack.push(s)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,i,a){this.glyphs=[];this.fontSelector=new FontSelector(e,t,i,a);this.extraHeight=0}pushData(e,t,i){this.fontSelector.pushData(e,t,i)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),i=t.xfaFont.size;if(t.pdfFont){const a=t.xfaFont.letterSpacing,s=t.pdfFont,r=s.lineHeight||1.2,n=t.lineHeight||Math.max(1.2,r)*i,g=r-(void 0===s.lineGap?.2:s.lineGap),o=Math.max(1,g)*i,c=i/1e3,C=s.defaultWidth||s.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\u2029\n]/)){const e=s.encodeString(t).join(""),i=s.charsToGlyphs(e);for(const e of i){const t=e.width||C;this.glyphs.push([t*c+a,n,o,e.unicode,!1])}this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\u2029\n]/)){for(const e of t.split(""))this.glyphs.push([i,1.2*i,i,e,!1]);this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,i=0,a=0,s=0,r=0,n=0,g=!1,o=!0;for(let c=0,C=this.glyphs.length;ce){a=Math.max(a,r);r=0;s+=n;n=d;t=-1;i=0;g=!0;o=!1}else{n=Math.max(d,n);i=r;r+=C;t=c}else if(r+C>e){s+=n;n=d;if(-1!==t){c=t;a=Math.max(a,i);r=0;t=-1;i=0}else{a=Math.max(a,r);r=C}g=!0;o=!1}else{r+=C;n=Math.max(d,n)}}a=Math.max(a,r);s+=n+this.extraHeight;return{width:1.02*a,height:s,isBroken:g}}}const Cn=/^[^.[]+/,hn=/^[^\]]+/,Bn={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},ln=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[Er]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),Qn=new WeakMap;function parseExpression(e,t,i=!0){let a=e.match(Cn);if(!a)return null;let[s]=a;const r=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:Bn.dot}];let n=s.length;for(;n0&&C.push(e)}if(0!==C.length||g||0!==o)e=isFinite(c)?C.filter((e=>ce[c])):C.flat();else{const i=t[pr]();if(!(t=i))return null;o=-1;e=[t]}}return 0===e.length?null:e}function createDataNode(e,t,i){const a=parseExpression(i);if(!a)return null;if(a.some((e=>e.operator===Bn.dotDot)))return null;const s=ln.get(a[0].name);let r=0;if(s){e=s(e,t);r=1}else e=t||e;for(let t=a.length;re[en]())).join("")}get[dn](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,dn,e._attributes)}[Nr](e){let t=this;for(;t;){if(t===e)return!0;t=t[pr]()}return!1}[pr](){return this[Rn]}[fr](){return this[pr]()}[Er](e=null){return e?this[e]:this[fn]}[ir](){const e=Object.create(null);this[er]&&(e.$content=this[er]);for(const t of Object.getOwnPropertyNames(this)){const i=this[t];null!==i&&(i instanceof XFAObject?e[t]=i[ir]():i instanceof XFAObjectArray?i.isEmpty()||(e[t]=i.dump()):e[t]=i)}return e}[rn](){return null}[an](){return HTMLResult.EMPTY}*[ur](){for(const e of this[Er]())yield e}*[wn](e,t){for(const i of this[ur]())if(!e||t===e.has(i[Yr])){const e=this[or](),t=i[an](e);t.success||(this[ar].failingNode=i);yield t}}[rr](){return null}[js](e,t){this[ar].children.push(e)}[or](){}[Zs]({filter:e=null,include:t=!0}){if(this[ar].generator){const e=this[or](),t=this[ar].failingNode[an](e);if(!t.success)return t;t.html&&this[js](t.html,t.bbox);delete this[ar].failingNode}else this[ar].generator=this[wn](e,t);for(;;){const e=this[ar].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[js](t.html,t.bbox)}this[ar].generator=null;return HTMLResult.EMPTY}[_r](e){this[Gn]=new Set(Object.keys(e))}[bn](e){const t=this[dn],i=this[Gn];return[...e].filter((e=>t.has(e)&&!i.has(e)))}[Zr](e,t=new Set){for(const i of this[fn])i[Nn](e,t)}[Nn](e,t){const i=this[Dn](e,t);i?this[En](i,e,t):this[Zr](e,t)}[Dn](e,t){const{use:i,usehref:a}=this;if(!i&&!a)return null;let s=null,r=null,n=null,g=i;if(a){g=a;a.startsWith("#som(")&&a.endsWith(")")?r=a.slice(5,-1):a.startsWith(".#som(")&&a.endsWith(")")?r=a.slice(6,-1):a.startsWith("#")?n=a.slice(1):a.startsWith(".#")&&(n=a.slice(2))}else i.startsWith("#")?n=i.slice(1):r=i;this.use=this.usehref="";if(n)s=e.get(n);else{s=searchNode(e.get(Xr),this,r,!0,!1);s&&(s=s[0])}if(!s){warn(`XFA - Invalid prototype reference: ${g}.`);return null}if(s[Yr]!==this[Yr]){warn(`XFA - Incompatible prototype: ${s[Yr]} !== ${this[Yr]}.`);return null}if(t.has(s)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(s);const o=s[Dn](e,t);o&&s[En](o,e,t);s[Zr](e,t);t.delete(s);return s}[En](e,t,i){if(i.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[er]&&e[er]&&(this[er]=e[er]);new Set(i).add(e);for(const t of this[bn](e[Gn])){this[t]=e[t];this[Gn]&&this[Gn].add(t)}for(const a of Object.getOwnPropertyNames(this)){if(this[dn].has(a))continue;const s=this[a],r=e[a];if(s instanceof XFAObjectArray){for(const e of s[fn])e[Nn](t,i);for(let a=s[fn].length,n=r[fn].length;aXFAObject[pn](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[$s](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[nn]=`${e[Yr]}${Un++}`;e[fn]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[dn].has(t)){e[t]=XFAObject[pn](this[t]);continue}const i=this[t];e[t]=i instanceof XFAObjectArray?new XFAObjectArray(i[Sn]):null}for(const t of this[fn]){const i=t[Yr],a=t[$s]();e[fn].push(a);a[Rn]=e;null===e[i]?e[i]=a:e[i][fn].push(a)}return e}[Er](e=null){return e?this[fn].filter((t=>t[Yr]===e)):this[fn]}[Ir](e){return this[e]}[cr](e,t,i=!0){return Array.from(this[Cr](e,t,i))}*[Cr](e,t,i=!0){if("parent"!==e){for(const i of this[fn]){i[Yr]===e&&(yield i);i.name===e&&(yield i);(t||i[Mr]())&&(yield*i[Cr](e,t,!1))}i&&this[dn].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[Rn]}}class XFAObjectArray{constructor(e=1/0){this[Sn]=e;this[fn]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[fn].length<=this[Sn]){this[fn].push(e);return!0}warn(`XFA - node "${e[Yr]}" accepts no more than ${this[Sn]} children`);return!1}isEmpty(){return 0===this[fn].length}dump(){return 1===this[fn].length?this[fn][0][ir]():this[fn].map((e=>e[ir]()))}[$s](){const e=new XFAObjectArray(this[Sn]);e[fn]=this[fn].map((e=>e[$s]()));return e}get children(){return this[fn]}clear(){this[fn].length=0}}class XFAAttribute{constructor(e,t,i){this[Rn]=e;this[Yr]=t;this[er]=i;this[Ar]=!1;this[nn]="attribute"+Un++}[pr](){return this[Rn]}[Rr](){return!0}[hr](){return this[er].trim()}[$r](e){e=e.value||"";this[er]=e.toString()}[en](){return this[er]}[Nr](e){return this[Rn]===e||this[Rn][Nr](e)}}class XmlObject extends XFAObject{constructor(e,t,i={}){super(e,t);this[er]="";this[mn]=null;if("#text"!==t){const e=new Map;this[un]=e;for(const[t,a]of Object.entries(i))e.set(t,new XFAAttribute(this,t,a));if(i.hasOwnProperty(vr)){const e=i[vr].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[mn]=!1:"dataValue"===e&&(this[mn]=!0))}}this[Ar]=!1}[sn](e){const t=this[Yr];if("#text"===t){e.push(encodeToXmlString(this[er]));return}const i=utf8StringToString(t),a=this[Jr]===Mn?"xfa:":"";e.push(`<${a}${i}`);for(const[t,i]of this[un].entries()){const a=utf8StringToString(t);e.push(` ${a}="${encodeToXmlString(i[er])}"`)}null!==this[mn]&&(this[mn]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"'));if(this[er]||0!==this[fn].length){e.push(">");if(this[er])"string"==typeof this[er]?e.push(encodeToXmlString(this[er])):this[er][sn](e);else for(const t of this[fn])t[sn](e);e.push(``)}else e.push("/>")}[Kr](e){if(this[er]){const e=new XmlObject(this[Jr],"#text");this[Xs](e);e[er]=this[er];this[er]=""}this[Xs](e);return!0}[qr](e){this[er]+=e}[sr](){if(this[er]&&this[fn].length>0){const e=new XmlObject(this[Jr],"#text");this[Xs](e);e[er]=this[er];delete this[er]}}[an](){return"#text"===this[Yr]?HTMLResult.success({name:"#text",value:this[er]}):HTMLResult.EMPTY}[Er](e=null){return e?this[fn].filter((t=>t[Yr]===e)):this[fn]}[gr](){return this[un]}[Ir](e){const t=this[un].get(e);return void 0!==t?t:this[Er](e)}*[Cr](e,t){const i=this[un].get(e);i&&(yield i);for(const i of this[fn]){i[Yr]===e&&(yield i);t&&(yield*i[Cr](e,t))}}*[nr](e,t){const i=this[un].get(e);!i||t&&i[Ar]||(yield i);for(const i of this[fn])yield*i[nr](e,t)}*[Qr](e,t,i){for(const a of this[fn]){a[Yr]!==e||i&&a[Ar]||(yield a);t&&(yield*a[Qr](e,t,i))}}[Rr](){return null===this[mn]?0===this[fn].length||this[fn][0][Jr]===on.xhtml.id:this[mn]}[hr](){return null===this[mn]?0===this[fn].length?this[er].trim():this[fn][0][Jr]===on.xhtml.id?this[fn][0][en]().trim():null:this[er].trim()}[$r](e){e=e.value||"";this[er]=e.toString()}[ir](e=!1){const t=Object.create(null);e&&(t.$ns=this[Jr]);this[er]&&(t.$content=this[er]);t.$name=this[Yr];t.children=[];for(const i of this[fn])t.children.push(i[ir](e));t.attributes=Object.create(null);for(const[e,i]of this[un])t.attributes[e]=i[er];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[er]=""}[qr](e){this[er]+=e}[sr](){}}class OptionObject extends ContentObject{constructor(e,t,i){super(e,t);this[kn]=i}[sr](){this[er]=getKeyword({data:this[er],defaultValue:this[kn][0],validate:e=>this[kn].includes(e)})}[Vs](e){super[Vs](e);delete this[kn]}}class StringObject extends ContentObject{[sr](){this[er]=this[er].trim()}}class IntegerObject extends ContentObject{constructor(e,t,i,a){super(e,t);this[yn]=i;this[xn]=a}[sr](){this[er]=getInteger({data:this[er],defaultValue:this[yn],validate:this[xn]})}[Vs](e){super[Vs](e);delete this[yn];delete this[xn]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1===e))}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,(e=>0===e))}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const Ln={anchorType(e,t){const i=e[fr]();if(i&&(!i.layout||"position"===i.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const i=e[fr]();let a=e.w;const s=e.h;if(i.layout?.includes("row")){const t=i[ar],s=e.colSpan;let r;if(-1===s){r=t.columnWidths.slice(t.currentColumn).reduce(((e,t)=>e+t),0);t.currentColumn=0}else{r=t.columnWidths.slice(t.currentColumn,t.currentColumn+s).reduce(((e,t)=>e+t),0);t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(r)||(a=e.w=r)}t.width=""!==a?measureToString(a):"auto";t.height=""!==s?measureToString(s):"auto"},position(e,t){const i=e[fr]();if(!i?.layout||"position"===i.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[Yr])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[rn]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[fr]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,i,a,s,r){const n=new TextMeasure(t,i,a,s);"string"==typeof e?n.addString(e):e[Or](n);return n.compute(r)}function layoutNode(e,t){let i=null,a=null,s=!1;if((!e.w||!e.h)&&e.value){let r=0,n=0;if(e.margin){r=e.margin.leftInset+e.margin.rightInset;n=e.margin.topInset+e.margin.bottomInset}let g=null,o=null;if(e.para){o=Object.create(null);g=""===e.para.lineHeight?null:e.para.lineHeight;o.top=""===e.para.spaceAbove?0:e.para.spaceAbove;o.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;o.left=""===e.para.marginLeft?0:e.para.marginLeft;o.right=""===e.para.marginRight?0:e.para.marginRight}let c=e.font;if(!c){const t=e[mr]();let i=e[pr]();for(;i&&i!==t;){if(i.font){c=i.font;break}i=i[pr]()}}const C=(e.w||t.width)-r,h=e[yr].fontFinder;if(e.value.exData&&e.value.exData[er]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[er],c,o,g,h,C);a=t.width;i=t.height;s=t.isBroken}else{const t=e.value[en]();if(t){const e=layoutText(t,c,o,g,h,C);a=e.width;i=e.height;s=e.isBroken}}null===a||e.w||(a+=r);null===i||e.h||(i+=n)}return{w:a,h:i,isBroken:s}}function computeBbox(e,t,i){let a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!i)return null;let s=e.w;if(""===s){if(0===e.maxW){const t=e[fr]();s="position"===t.layout&&""!==t.w?0:e.minW}else s=Math.min(e.maxW,i.width);t.attributes.style.width=measureToString(s)}let r=e.h;if(""===r){if(0===e.maxH){const t=e[fr]();r="position"===t.layout&&""!==t.h?0:e.minH}else r=Math.min(e.maxH,i.height);t.attributes.style.height=measureToString(r)}a=[e.x,e.y,s,r]}return a}function fixDimensions(e){const t=e[fr]();if(t.layout?.includes("row")){const i=t[ar],a=e.colSpan;let s;s=-1===a?i.columnWidths.slice(i.currentColumn).reduce(((e,t)=>e+t),0):i.columnWidths.slice(i.currentColumn,i.currentColumn+a).reduce(((e,t)=>e+t),0);isNaN(s)||(e.w=s)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce(((e,t)=>e+t),0))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const i=Object.create(null);for(const a of t){const t=e[a];if(null!==t)if(Ln.hasOwnProperty(a))Ln[a](e,i);else if(t instanceof XFAObject){const e=t[rn]();e?Object.assign(i,e):warn(`(DEBUG) - XFA - style for ${a} not implemented yet`)}}return i}function createWrapper(e,t){const{attributes:i}=t,{style:a}=i,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};i.class.push("xfaWrapped");if(e.border){const{widths:i,insets:r}=e.border[ar];let n,g,o=r[0],c=r[3];const C=r[0]+r[2],h=r[1]+r[3];switch(e.border.hand){case"even":o-=i[0]/2;c-=i[3]/2;n=`calc(100% + ${(i[1]+i[3])/2-h}px)`;g=`calc(100% + ${(i[0]+i[2])/2-C}px)`;break;case"left":o-=i[0];c-=i[3];n=`calc(100% + ${i[1]+i[3]-h}px)`;g=`calc(100% + ${i[0]+i[2]-C}px)`;break;case"right":n=h?`calc(100% - ${h}px)`:"100%";g=C?`calc(100% - ${C}px)`:"100%"}const l=["xfaBorder"];isPrintOnly(e.border)&&l.push("xfaPrintOnly");const Q={name:"div",attributes:{class:l,style:{top:`${o}px`,left:`${c}px`,width:n,height:g}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==a[e]){Q.attributes.style[e]=a[e];delete a[e]}s.children.push(Q,t)}else s.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==a[e]){s.attributes.style[e]=a[e];delete a[e]}s.attributes.style.position="absolute"===a.position?"absolute":"relative";delete a.position;if(a.alignSelf){s.attributes.style.alignSelf=a.alignSelf;delete a.alignSelf}return s}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const i="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),a=getMeasurement(e[i],"0px");e[i]=a-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[mr]()[ar].paraStack;return t.length?t.at(-1):null}function setPara(e,t,i){if(i.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const a=getCurrentPara(e);if(a){const e=i.attributes.style;e.display="flex";e.flexDirection="column";switch(a.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=a[rn]();for(const[i,a]of Object.entries(t))i in e||(e[i]=a)}}}function setFontFamily(e,t,i,a){if(!i){delete a.fontFamily;return}const s=stripQuotes(e.typeface);a.fontFamily=`"${s}"`;const r=i.find(s);if(r){const{fontFamily:i}=r.regular.cssFontInfo;i!==s&&(a.fontFamily=`"${i}"`);const n=getCurrentPara(t);if(n&&""!==n.lineHeight)return;if(a.lineHeight)return;const g=selectFont(e,r);g&&(a.lineHeight=Math.max(1.2,g.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[ar])return null;const t={name:"div",attributes:e[ar].attributes,children:e[ar].children};if(e[ar].failingNode){const i=e[ar].failingNode[rr]();i&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[i])):t.children.push(i))}return 0===t.children.length?null:t}function addHTML(e,t,i){const a=e[ar],s=a.availableSpace,[r,n,g,o]=i;switch(e.layout){case"position":a.width=Math.max(a.width,r+g);a.height=Math.max(a.height,n+o);a.children.push(t);break;case"lr-tb":case"rl-tb":if(!a.line||1===a.attempt){a.line=createLine(e,[]);a.children.push(a.line);a.numberInLine=0}a.numberInLine+=1;a.line.children.push(t);if(0===a.attempt){a.currentWidth+=g;a.height=Math.max(a.height,a.prevHeight+o)}else{a.currentWidth=g;a.prevHeight=a.height;a.height+=o;a.attempt=0}a.width=Math.max(a.width,a.currentWidth);break;case"rl-row":case"row":{a.children.push(t);a.width+=g;a.height=Math.max(a.height,o);const e=measureToString(a.height);for(const t of a.children)t.attributes.style.height=e;break}case"table":case"tb":a.width=Math.min(s.width,Math.max(a.width,g));a.height+=o;a.children.push(t)}}function getAvailableSpace(e){const t=e[ar].availableSpace,i=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[ar].attempt?{width:t.width-a-e[ar].currentWidth,height:t.height-i-e[ar].prevHeight}:{width:t.width-a,height:t.height-i-e[ar].height};case"rl-row":case"row":return{width:e[ar].columnWidths.slice(e[ar].currentColumn).reduce(((e,t)=>e+t)),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-i-e[ar].height};default:return t}}function checkDimensions(e,t){if(null===e[mr]()[ar].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const i=e[fr](),a=i[ar]?.attempt||0,[,s,r,n]=function getTransformedBBox(e){let t,i,a=""===e.w?NaN:e.w,s=""===e.h?NaN:e.h,[r,n]=[0,0];switch(e.anchorType||""){case"bottomCenter":[r,n]=[a/2,s];break;case"bottomLeft":[r,n]=[0,s];break;case"bottomRight":[r,n]=[a,s];break;case"middleCenter":[r,n]=[a/2,s/2];break;case"middleLeft":[r,n]=[0,s/2];break;case"middleRight":[r,n]=[a,s/2];break;case"topCenter":[r,n]=[a/2,0];break;case"topRight":[r,n]=[a,0]}switch(e.rotate||0){case 0:[t,i]=[-r,-n];break;case 90:[t,i]=[-n,r];[a,s]=[s,-a];break;case 180:[t,i]=[r,n];[a,s]=[-a,-s];break;case 270:[t,i]=[n,-r];[a,s]=[-s,a]}return[e.x+t+Math.min(0,a),e.y+i+Math.min(0,s),Math.abs(a),Math.abs(s)]}(e);switch(i.layout){case"lr-tb":case"rl-tb":return 0===a?e[mr]()[ar].noLayoutFailure?""!==e.w?Math.round(r-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(n-t.height)>2)&&(""!==e.w?Math.round(r-t.width)<=2||0===i[ar].numberInLine&&t.height>2:t.width>2):!!e[mr]()[ar].noLayoutFailure||!(""!==e.h&&Math.round(n-t.height)>2)&&((""===e.w||Math.round(r-t.width)<=2||!i[Ur]())&&t.height>2);case"table":case"tb":return!!e[mr]()[ar].noLayoutFailure||(""===e.h||e[xr]()?(""===e.w||Math.round(r-t.width)<=2||!i[Ur]())&&t.height>2:Math.round(n-t.height)<=2);case"position":if(e[mr]()[ar].noLayoutFailure)return!0;if(""===e.h||Math.round(n+s-t.height)<=2)return!0;return n+s>e[mr]()[ar].currentContentArea.h;case"rl-row":case"row":return!!e[mr]()[ar].noLayoutFailure||(""===e.h||Math.round(n-t.height)<=2);default:return!0}}const Hn=on.template.id,Jn="http://www.w3.org/2000/svg",Yn=/^H(\d+)$/,vn=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),Kn=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[lr]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[Xs](t);e.value=t}e.value[$r](t)}function*getContainedChildren(e){for(const t of e[Er]())t instanceof SubformSet?yield*t[ur]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[An]=e[pr]()[An];return}if(e[An])return;let t=null;for(const i of e.traversal[Er]())if("next"===i.operation){t=i;break}if(!t||!t.ref){e[An]=e[pr]()[An];return}const i=e[mr]();e[An]=++i[An];const a=i[Vr](t.ref,e);if(!a)return;e=a[0]}}function applyAssist(e,t){const i=e.assist;if(i){const e=i[an]();e&&(t.title=e);const a=i.role.match(Yn);if(a){const e="heading",i=a[1];t.role=e;t["aria-level"]=i}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const i=e[pr]();"row"===i.layout&&(t.role="TH"===i.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[er]?t.speak[er]:t.toolTip?t.toolTip[er]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[mr]();if(null===t[ar].firstUnsplittable){t[ar].firstUnsplittable=e;t[ar].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[mr]();t[ar].firstUnsplittable===e&&(t[ar].noLayoutFailure=!1)}function handleBreak(e){if(e[ar])return!1;e[ar]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[mr]();let i=null;if(e.target){i=t[Vr](e.target,e[pr]());if(!i)return!1;i=i[0]}const{currentPageArea:a,currentContentArea:s}=t[ar];if("pageArea"===e.targetType){i instanceof PageArea||(i=null);if(e.startNew){e[ar].target=i||a;return!0}if(i&&i!==a){e[ar].target=i;return!0}return!1}i instanceof ContentArea||(i=null);const r=i&&i[pr]();let n,g=r;if(e.startNew)if(i){const e=r.contentArea.children,t=e.indexOf(s),a=e.indexOf(i);-1!==t&&te;a[ar].noLayoutFailure=!0;const n=t[an](i);e[js](n.html,n.bbox);a[ar].noLayoutFailure=s;t[fr]=r}class AppearanceFilter extends StringObject{constructor(e){super(Hn,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(Hn,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[an](){const e=this.edge||new Edge({}),t=e[rn](),i=Object.create(null);"visible"===this.fill?.presence?Object.assign(i,this.fill[rn]()):i.fill="transparent";i.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);i.stroke=t.color;let a;const s={xmlns:Jn,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)a={name:"ellipse",attributes:{xmlns:Jn,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:i}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,r=this.sweepAngle>180?1:0,[n,g,o,c]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];a={name:"path",attributes:{xmlns:Jn,d:`M ${n} ${g} A 50 50 0 ${r} 0 ${o} ${c}`,vectorEffect:"non-scaling-stroke",style:i}};Object.assign(s,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const r={name:"svg",children:[a],attributes:s};if(hasMargin(this[pr]()[pr]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[r]});r.attributes.style.position="absolute";return HTMLResult.success(r)}}class Area extends XFAObject{constructor(e){super(Hn,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[ur](){yield*getContainedChildren(this)}[Mr](){return!0}[kr](){return!0}[js](e,t){const[i,a,s,r]=t;this[ar].width=Math.max(this[ar].width,i+s);this[ar].height=Math.max(this[ar].height,a+r);this[ar].children.push(e)}[or](){return this[ar].availableSpace}[an](e){const t=toStyle(this,"position"),i={style:t,id:this[nn],class:["xfaArea"]};isPrintOnly(this)&&i.class.push("xfaPrintOnly");this.name&&(i.xfaName=this.name);const a=[];this[ar]={children:a,width:0,height:0,availableSpace:e};const s=this[Zs]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!s.success){if(s.isBreak())return s;delete this[ar];return HTMLResult.FAILURE}t.width=measureToString(this[ar].width);t.height=measureToString(this[ar].height);const r={name:"div",attributes:i,children:a},n=[this.x,this.y,this[ar].width,this[ar].height];delete this[ar];return HTMLResult.success(r,n)}}class Assist extends XFAObject{constructor(e){super(Hn,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[an](){return this.toolTip?.[er]||null}}class Barcode extends XFAObject{constructor(e){super(Hn,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(Hn,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(Hn,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(Hn,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(Hn,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[an](e){return valueToHtml(1===this[er]?"1":"0")}}class Border extends XFAObject{constructor(e){super(Hn,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[lr](){if(!this[ar]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let i=e.length;i<4;i++)e.push(t)}const t=e.map((e=>e.thickness)),i=[0,0,0,0];if(this.margin){i[0]=this.margin.topInset;i[1]=this.margin.rightInset;i[2]=this.margin.bottomInset;i[3]=this.margin.leftInset}this[ar]={widths:t,insets:i,edges:e}}return this[ar]}[rn](){const{edges:e}=this[lr](),t=e.map((e=>{const t=e[rn]();t.color||="#000000";return t})),i=Object.create(null);this.margin&&Object.assign(i,this.margin[rn]());"visible"===this.fill?.presence&&Object.assign(i,this.fill[rn]());if(this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[rn]()));if(2===e.length||3===e.length){const t=e.at(-1);for(let i=e.length;i<4;i++)e.push(t)}i.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden":i.borderStyle="";break;case"inactive":i.borderStyle="none";break;default:i.borderStyle=t.map((e=>e.style)).join(" ")}i.borderWidth=t.map((e=>e.width)).join(" ");i.borderColor=t.map((e=>e.color)).join(" ");return i}}class Break extends XFAObject{constructor(e){super(Hn,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(Hn,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(Hn,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[an](e){this[ar]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(Hn,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[an](e){const t=this[pr]()[pr](),i={name:"button",attributes:{id:this[nn],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[er]);if(!t)continue;const a=fixURL(t.url);a&&i.children.push({name:"a",attributes:{id:"link"+this[nn],href:a,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(i)}}class Calculate extends XFAObject{constructor(e){super(Hn,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(Hn,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[$r](e){_setValue(this,e)}[lr](e){if(!this[ar]){let{width:t,height:i}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":i=this.reserve<=0?i:this.reserve}this[ar]=layoutNode(this,{width:t,height:i})}return this[ar]}[an](e){if(!this.value)return HTMLResult.EMPTY;this[Wr]();const t=this.value[an](e).html;if(!t){this[Pr]();return HTMLResult.EMPTY}const i=this.reserve;if(this.reserve<=0){const{w:t,h:i}=this[lr](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=i}}const a=[];"string"==typeof t?a.push({name:"#text",value:t}):a.push(t);const s=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(s.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(s.height=measureToString(this.reserve))}setPara(this,null,t);this[Pr]();this.reserve=i;return HTMLResult.success({name:"div",attributes:{style:s,class:["xfaCaption"]},children:a})}}class Certificate extends StringObject{constructor(e){super(Hn,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(Hn,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(Hn,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[an](e){const t=toStyle("margin"),i=measureToString(this.size);t.width=t.height=i;let a,s,r;const n=this[pr]()[pr](),g=n.items.children.length&&n.items.children[0][an]().html||[],o={on:(void 0!==g[0]?g[0]:"on").toString(),off:(void 0!==g[1]?g[1]:"off").toString()},c=(n.value?.[en]()||"off")===o.on||void 0,C=n[fr](),h=n[nn];let l;if(C instanceof ExclGroup){r=C[nn];a="radio";s="xfaRadio";l=C[tr]?.[nn]||C[nn]}else{a="checkbox";s="xfaCheckbox";l=n[tr]?.[nn]||n[nn]}const Q={name:"input",attributes:{class:[s],style:t,fieldId:h,dataId:l,type:a,checked:c,xfaOn:o.on,xfaOff:o.off,"aria-label":ariaLabel(n),"aria-required":!1}};r&&(Q.attributes.name=r);if(isRequired(n)){Q.attributes["aria-required"]=!0;Q.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[Q]})}}class ChoiceList extends XFAObject{constructor(e){super(Hn,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[an](e){const t=toStyle(this,"border","margin"),i=this[pr]()[pr](),a={fontSize:`calc(${i.font?.size||10}px * var(--scale-factor))`},s=[];if(i.items.children.length>0){const e=i.items;let t=0,r=0;if(2===e.children.length){t=e.children[0].save;r=1-t}const n=e.children[t][an]().html,g=e.children[r][an]().html;let o=!1;const c=i.value?.[en]()||"";for(let e=0,t=n.length;eMath.min(Math.max(0,parseInt(e.trim(),10)),255))).map((e=>isNaN(e)?0:e));if(r.length<3)return{r:i,g:a,b:s};[i,a,s]=r;return{r:i,g:a,b:s}}(e.value):"";this.extras=null}[wr](){return!1}[rn](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(Hn,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(Hn,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(Hn,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[an](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},i=["xfaContentarea"];isPrintOnly(this)&&i.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:i,id:this[nn]}})}}class Corner extends XFAObject{constructor(e){super(Hn,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(Hn,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=this[er].trim();this[er]=e?new Date(e):null}[an](e){return valueToHtml(this[er]?this[er].toString():"")}}class DateTime extends ContentObject{constructor(e){super(Hn,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=this[er].trim();this[er]=e?new Date(e):null}[an](e){return valueToHtml(this[er]?this[er].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(Hn,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[an](e){const t=toStyle(this,"border","font","margin"),i=this[pr]()[pr](),a={name:"input",attributes:{type:"text",fieldId:i[nn],dataId:i[tr]?.[nn]||i[nn],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(i),"aria-required":!1}};if(isRequired(i)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Decimal extends ContentObject{constructor(e){super(Hn,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=parseFloat(this[er].trim());this[er]=isNaN(e)?null:e}[an](e){return valueToHtml(null!==this[er]?this[er].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(Hn,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(Hn,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(Hn,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(Hn,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(Hn,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[$r](e){_setValue(this,e)}[an](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Wr]();const t=this.w,i=this.h,{w:a,h:s,isBroken:r}=layoutNode(this,e);if(a&&""===this.w){if(r&&this[fr]()[Ur]()){this[Pr]();return HTMLResult.FAILURE}this.w=a}s&&""===this.h&&(this.h=s);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=i;this[Pr]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const n=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,n);if(n.margin){n.padding=n.margin;delete n.margin}const g=["xfaDraw"];this.font&&g.push("xfaFont");isPrintOnly(this)&&g.push("xfaPrintOnly");const o={style:n,id:this[nn],class:g};this.name&&(o.xfaName=this.name);const c={name:"div",attributes:o,children:[]};applyAssist(this,o);const C=computeBbox(this,c,e),h=this.value?this.value[an](e).html:null;if(null===h){this.w=t;this.h=i;this[Pr]();return HTMLResult.success(createWrapper(this,c),C)}c.children.push(h);setPara(this,n,h);this.w=t;this.h=i;this[Pr]();return HTMLResult.success(createWrapper(this,c),C)}}class Edge extends XFAObject{constructor(e){super(Hn,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[rn]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(Hn,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(Hn,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(Hn,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(Hn,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(Hn,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(Hn,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(Hn,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(Hn,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(Hn,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Sr](){return"text/html"===this.contentType}[Kr](e){if("text/html"===this.contentType&&e[Jr]===on.xhtml.id){this[er]=e;return!0}if("text/xml"===this.contentType){this[er]=e;return!0}return!1}[an](e){return"text/html"===this.contentType&&this[er]?this[er][an](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(Hn,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(Hn,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[kr](){return!0}[wr](){return!0}[$r](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[Xs](e);t.value=e}t.value[$r](e)}}[Ur](){return this.layout.endsWith("-tb")&&0===this[ar].attempt&&this[ar].numberInLine>0||this[pr]()[Ur]()}[xr](){const e=this[fr]();if(!e[xr]())return!1;if(void 0!==this[ar]._isSplittable)return this[ar]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ar]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[ar].numberInLine)return!1;this[ar]._isSplittable=!0;return!0}[rr](){return flushHTML(this)}[js](e,t){addHTML(this,e,t)}[or](){return getAvailableSpace(this)}[an](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],i={id:this[nn],class:[]};setAccess(this,i.class);this[ar]||(this[ar]=Object.create(null));Object.assign(this[ar],{children:t,attributes:i,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const a=this[xr]();a||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["field"]);if(this.layout.includes("row")){const e=this[fr]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ar].columnWidths=e;this[ar].currentColumn=0}}const r=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),n=["xfaExclgroup"],g=layoutClass(this);g&&n.push(g);isPrintOnly(this)&&n.push("xfaPrintOnly");i.style=r;i.class=n;this.name&&(i.xfaName=this.name);this[Wr]();const o="lr-tb"===this.layout||"rl-tb"===this.layout,c=o?2:1;for(;this[ar].attempte>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[kr](){return!0}[$r](e){_setValue(this,e)}[an](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[yr]=this[yr];this[Xs](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[Xs](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[ar];this[Wr]();const t=this.caption?this.caption[an](e).html:null,i=this.w,a=this.h;let s=0,r=0;if(this.margin){s=this.margin.leftInset+this.margin.rightInset;r=this.margin.topInset+this.margin.bottomInset}let n=null;if(""===this.w||""===this.h){let t=null,i=null,a=0,g=0;if(this.ui.checkButton)a=g=this.ui.checkButton.size;else{const{w:t,h:i}=layoutNode(this,e);if(null!==t){a=t;g=i}else g=function fonts_getMetrics(e,t=!1){let i=null;if(e){const t=stripQuotes(e.typeface),a=e[yr].fontFinder.find(t);i=selectFont(e,a)}if(!i)return{lineHeight:12,lineGap:2,lineNoGap:10};const a=e.size||10,s=i.lineHeight?Math.max(t?0:1.2,i.lineHeight):1.2,r=void 0===i.lineGap?.2:i.lineGap;return{lineHeight:s*a,lineGap:r*a,lineNoGap:Math.max(1,s-r)*a}}(this.font,!0).lineNoGap}n=getBorderDims(this.ui[lr]());a+=n.w;g+=n.h;if(this.caption){const{w:s,h:r,isBroken:n}=this.caption[lr](e);if(n&&this[fr]()[Ur]()){this[Pr]();return HTMLResult.FAILURE}t=s;i=r;switch(this.caption.placement){case"left":case"right":case"inline":t+=a;break;case"top":case"bottom":i+=g}}else{t=a;i=g}if(t&&""===this.w){t+=s;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(Hn,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=parseFloat(this[er].trim());this[er]=isNaN(e)?null:e}[an](e){return valueToHtml(null!==this[er]?this[er].toString():"")}}class template_Font extends XFAObject{constructor(e){super(Hn,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[Vs](e){super[Vs](e);this[yr].usedTypefaces.add(this.typeface)}[rn](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[yr].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(Hn,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(Hn,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(Hn,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(Hn,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[an](){if(this.contentType&&!vn.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[yr].images&&this[yr].images.get(this.href);if(!e&&(this.href||!this[er]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=stringToBytes(atob(this[er])));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,i]of Kn)if(e.length>t.length&&t.every(((t,i)=>t===e[i]))){this.contentType=i;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let i;switch(this.aspect){case"fit":case"actual":break;case"height":i={height:"100%",objectFit:"fill"};break;case"none":i={width:"100%",height:"100%",objectFit:"fill"};break;case"width":i={width:"100%",objectFit:"fill"}}const a=this[pr]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:i,src:URL.createObjectURL(t),alt:a?ariaLabel(a[pr]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(Hn,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[an](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(Hn,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=parseInt(this[er].trim(),10);this[er]=isNaN(e)?null:e}[an](e){return valueToHtml(null!==this[er]?this[er].toString():"")}}class Issuers extends XFAObject{constructor(e){super(Hn,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(Hn,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[an](){const e=[];for(const t of this[Er]())e.push(t[en]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(Hn,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(Hn,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(Hn,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[an](){const e=this[pr]()[pr](),t=this.edge||new Edge({}),i=t[rn](),a=Object.create(null),s="visible"===t.presence?t.thickness:0;a.strokeWidth=measureToString(s);a.stroke=i.color;let r,n,g,o,c="100%",C="100%";if(e.w<=s){[r,n,g,o]=["50%",0,"50%","100%"];c=a.strokeWidth}else if(e.h<=s){[r,n,g,o]=[0,"50%","100%","50%"];C=a.strokeWidth}else"\\"===this.slope?[r,n,g,o]=[0,0,"100%","100%"]:[r,n,g,o]=[0,"100%","100%",0];const h={name:"svg",children:[{name:"line",attributes:{xmlns:Jn,x1:r,y1:n,x2:g,y2:o,style:a}}],attributes:{xmlns:Jn,width:c,height:C,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[h]});h.attributes.style.position="absolute";return HTMLResult.success(h)}}class Linear extends XFAObject{constructor(e){super(Hn,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](e){e=e?e[rn]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[rn]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(Hn,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[sr](){this[er]=getStringOption(this[er],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(Hn,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(Hn,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[rn](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(Hn,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(Hn,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const i=e.trim().split(/\s*,\s*/).map((e=>getMeasurement(e,"-1")));if(i.length<4||i[2]<0||i[3]<0)return{x:t,y:t,width:t,height:t};const[a,s,r,n]=i;return{x:a,y:s,width:r,height:n}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(Hn,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(Hn,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[an](e){const t=toStyle(this,"border","font","margin"),i=this[pr]()[pr](),a={name:"input",attributes:{type:"text",fieldId:i[nn],dataId:i[tr]?.[nn]||i[nn],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(i),"aria-required":!1}};if(isRequired(i)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Occur extends XFAObject{constructor(e){super(Hn,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Vs](){const e=this[pr](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Lr](){if(!this[ar]){this[ar]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[ar].numberOfUsee.oddOrEven===t&&e.pagePosition===i));if(a)return a;a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===i));if(a)return a;a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition));return a||this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(Hn,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\s+/).map(((e,t)=>t%2==1?getMeasurement(e):e));this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[rn](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[rn]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(Hn,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(Hn,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](e){e=e?e[rn]():"#FFFFFF";const t=this.color?this.color[rn]():"#000000",i="repeating-linear-gradient",a=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${i}(to top,${a}) ${i}(to right,${a})`;case"crossDiagonal":return`${i}(45deg,${a}) ${i}(-45deg,${a})`;case"diagonalLeft":return`${i}(45deg,${a})`;case"diagonalRight":return`${i}(-45deg,${a})`;case"horizontal":return`${i}(to top,${a})`;case"vertical":return`${i}(to right,${a})`}return""}}class Picture extends StringObject{constructor(e){super(Hn,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(Hn,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(Hn,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](e){e=e?e[rn]():"#FFFFFF";const t=this.color?this.color[rn]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(Hn,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(Hn,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(Hn,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[an](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[rn](),i=Object.create(null);"visible"===this.fill?.presence?Object.assign(i,this.fill[rn]()):i.fill="transparent";i.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);i.stroke=t.color;const a=(this.corner.children.length?this.corner.children[0]:new Corner({}))[rn](),s={name:"svg",children:[{name:"rect",attributes:{xmlns:Jn,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:i}}],attributes:{xmlns:Jn,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[pr]()[pr]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[s]});s.attributes.style.position="absolute";return HTMLResult.success(s)}}class RefElement extends StringObject{constructor(e){super(Hn,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(Hn,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(Hn,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(Hn,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(Hn,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(Hn,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(Hn,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[rn](e){return e?e[rn]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(Hn,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(Hn,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[rn](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(Hn,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\s+/).map((e=>"-1"===e?-1:getMeasurement(e)));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[fr](){const e=this[pr]();return e instanceof SubformSet?e[fr]():e}[kr](){return!0}[Ur](){return this.layout.endsWith("-tb")&&0===this[ar].attempt&&this[ar].numberInLine>0||this[pr]()[Ur]()}*[ur](){yield*getContainedChildren(this)}[rr](){return flushHTML(this)}[js](e,t){addHTML(this,e,t)}[or](){return getAvailableSpace(this)}[xr](){const e=this[fr]();if(!e[xr]())return!1;if(void 0!==this[ar]._isSplittable)return this[ar]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ar]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[ar]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[ar].numberInLine)return!1;this[ar]._isSplittable=!0;return!0}[an](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[yr]=this[yr];this[Xs](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[yr]=this[yr];this[Xs](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[yr]=this[yr];this[Xs](e);this.overflow.push(e)}this[jr](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[ar]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],i={id:this[nn],class:[]};setAccess(this,i.class);this[ar]||(this[ar]=Object.create(null));Object.assign(this[ar],{children:t,line:null,attributes:i,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const a=this[mr](),s=a[ar].noLayoutFailure,r=this[xr]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const n=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[fr]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ar].columnWidths=e;this[ar].currentColumn=0}}const g=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),o=["xfaSubform"],c=layoutClass(this);c&&o.push(c);i.style=g;i.class=o;this.name&&(i.xfaName=this.name);if(this.overflow){const t=this.overflow[lr]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Wr]();const C="lr-tb"===this.layout||"rl-tb"===this.layout,h=C?2:1;for(;this[ar].attempt=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[ar].afterBreakAfter=p;return HTMLResult.breakNode(e)}}delete this[ar];return p}}class SubformSet extends XFAObject{constructor(e){super(Hn,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[ur](){yield*getContainedChildren(this)}[fr](){let e=this[pr]();for(;!(e instanceof Subform);)e=e[pr]();return e}[kr](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(Hn,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){this[er]=new Map(this[er].split(this.delimiter).map((e=>{(e=e.split("=",2))[0]=e[0].trim();return e})))}}class SubjectDNs extends XFAObject{constructor(e){super(Hn,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(Hn,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(Hn,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[sr](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[An]=5e3}[xr](){return!0}[Vr](e,t){return e.startsWith("#")?[this[Dr].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[tn](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[ar]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[zs]();const t=e.pageSet.pageArea.children,i={name:"div",children:[]};let a=null,s=null,r=null;if(e.breakBefore.children.length>=1){s=e.breakBefore.children[0];r=s.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){s=e.subform.children[0].breakBefore.children[0];r=s.target}else if(e.break?.beforeTarget){s=e.break;r=s.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){s=e.subform.children[0].break;r=s.beforeTarget}if(s){const e=this[Vr](r,s[pr]());if(e instanceof PageArea){a=e;s[ar]={}}}a||(a=t[0]);a[ar]={numberOfUse:1};const n=a[pr]();n[ar]={numberOfUse:1,pageIndex:n.pageArea.children.indexOf(a),pageSetIndex:0};let g,o=null,c=null,C=!0,h=0,l=0;for(;;){if(C)h=0;else{i.children.pop();if(3==++h){warn("XFA - Something goes wrong: please file a bug.");return i}}g=null;this[ar].currentPageArea=a;const t=a[an]().html;i.children.push(t);if(o){this[ar].noLayoutFailure=!0;t.children.push(o[an](a[ar].space).html);o=null}if(c){this[ar].noLayoutFailure=!0;t.children.push(c[an](a[ar].space).html);c=null}const s=a.contentArea.children,r=t.children.filter((e=>e.attributes.class.includes("xfaContentarea")));C=!1;this[ar].firstUnsplittable=null;this[ar].noLayoutFailure=!1;const flush=t=>{const i=e[rr]();if(i){C||=i.children?.length>0;r[t].children.push(i)}};for(let t=l,a=s.length;t0;r[t].children.push(h.html)}else!C&&i.children.length>1&&i.children.pop();return i}if(h.isBreak()){const e=h.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){o=this[Vr](e.leader,e[pr]());o=o?o[0]:null}if(e.trailer){c=this[Vr](e.trailer,e[pr]());c=c?c[0]:null}if("pageArea"===e.targetType){g=e[ar].target;t=1/0}else if(e[ar].target){g=e[ar].target;l=e[ar].index+1;t=1/0}else t=e[ar].index}else if(this[ar].overflowNode){const e=this[ar].overflowNode;this[ar].overflowNode=null;const i=e[lr](),a=i.target;i.addLeader=null!==i.leader;i.addTrailer=null!==i.trailer;flush(t);const r=t;t=1/0;if(a instanceof PageArea)g=a;else if(a instanceof ContentArea){const e=s.indexOf(a);if(-1!==e)e>r?t=e-1:l=e;else{g=a[pr]();l=g.contentArea.children.indexOf(a)}}}else flush(t)}this[ar].pageNumber+=1;g&&(g[Lr]()?g[ar].numberOfUse+=1:g=null);a=g||a[dr]();yield null}}}class Text extends ContentObject{constructor(e){super(Hn,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[Ws](){return!0}[Kr](e){if(e[Jr]===on.xhtml.id){this[er]=e;return!0}warn(`XFA - Invalid content in Text: ${e[Yr]}.`);return!1}[qr](e){this[er]instanceof XFAObject||super[qr](e)}[sr](){"string"==typeof this[er]&&(this[er]=this[er].replaceAll("\r\n","\n"))}[lr](){return"string"==typeof this[er]?this[er].split(/[\u2029\u2028\n]/).reduce(((e,t)=>{t&&e.push(t);return e}),[]).join("\n"):this[er][en]()}[an](e){if("string"==typeof this[er]){const e=valueToHtml(this[er]).html;if(this[er].includes("\u2029")){e.name="div";e.children=[];this[er].split("\u2029").map((e=>e.split(/[\u2028\n]/).reduce(((e,t)=>{e.push({name:"span",value:t},{name:"br"});return e}),[]))).forEach((t=>{e.children.push({name:"p",children:t})}))}else if(/[\u2028\n]/.test(this[er])){e.name="div";e.children=[];this[er].split(/[\u2028\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))}return HTMLResult.success(e)}return this[er][an](e)}}class TextEdit extends XFAObject{constructor(e){super(Hn,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[an](e){const t=toStyle(this,"border","font","margin");let i;const a=this[pr]()[pr]();""===this.multiLine&&(this.multiLine=a instanceof Draw?1:0);i=1===this.multiLine?{name:"textarea",attributes:{dataId:a[tr]?.[nn]||a[nn],fieldId:a[nn],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:a[tr]?.[nn]||a[nn],fieldId:a[nn],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){i.attributes["aria-required"]=!0;i.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}}class Time extends StringObject{constructor(e){super(Hn,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[sr](){const e=this[er].trim();this[er]=e?new Date(e):null}[an](e){return valueToHtml(this[er]?this[er].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(Hn,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(Hn,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(Hn,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(Hn,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Mr](){return!1}}class Ui extends XFAObject{constructor(e){super(Hn,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[lr](){if(void 0===this[ar]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[ar]=t;return t}}this[ar]=null}return this[ar]}[an](e){const t=this[lr]();return t?t[an](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(Hn,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(Hn,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[$r](e){const t=this[pr]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[Xs](this.image)}this.image[er]=e[er];return}const i=e[Yr];if(null===this[i]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[jr](t)}}this[e[Yr]]=e;this[Xs](e)}else this[i][er]=e[er]}[en](){if(this.exData)return"string"==typeof this.exData[er]?this.exData[er].trim():this.exData[er][en]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[er]||"").toString().trim()}return null}[an](e){for(const t of Object.getOwnPropertyNames(this)){const i=this[t];if(i instanceof XFAObject)return i[an](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(Hn,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Mr](){return!0}}class TemplateNamespace{static[gn](e,t){if(TemplateNamespace.hasOwnProperty(e)){const i=TemplateNamespace[e](t);i[_r](t);return i}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const Tn=on.datasets.id;function createText(e){const t=new Text({});t[er]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(on.datasets.id,"data");this.emptyMerge=0===this.data[Er]().length;this.root.form=this.form=e.template[$s]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,i){e[tr]=t;if(e[wr]())if(t[Rr]()){const i=t[hr]();e[$r](createText(i))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const i=t[Er]().map((e=>e[er].trim())).join("\n");e[$r](createText(i))}else this._isConsumeData()&&warn("XFA - Nodes haven't the same type.");else!t[Rr]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,i,a){if(!e)return null;let s,r;for(let a=0;a<3;a++){s=i[Qr](e,!1,!0);for(;;){r=s.next().value;if(!r)break;if(t===r[Rr]())return r}if(i[Jr]===on.datasets.id&&"data"===i[Yr])break;i=i[pr]()}if(!a)return null;s=this.data[Qr](e,!0,!1);r=s.next().value;if(r)return r;s=this.data[nr](e,!0);r=s.next().value;return r?.[Rr]()?r:null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:i,target:a,connection:s}of e.setProperty.children){if(s)continue;if(!i)continue;const r=searchNode(this.root,t,i,!1,!1);if(!r){warn(`XFA - Invalid reference: ${i}.`);continue}const[n]=r;if(!n[Nr](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const g=searchNode(this.root,e,a,!1,!1);if(!g){warn(`XFA - Invalid target: ${a}.`);continue}const[o]=g;if(!o[Nr](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const c=o[pr]();if(o instanceof SetProperty||c instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(o instanceof BindItems||c instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const C=n[en](),h=o[Yr];if(o instanceof XFAAttribute){const e=Object.create(null);e[h]=C;const t=Reflect.construct(Object.getPrototypeOf(c).constructor,[e]);c[h]=t[h]}else if(o.hasOwnProperty(er)){o[tr]=n;o[er]=C;o[sr]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[jr](t);e.items.clear();const i=new Items({}),a=new Items({});e[Xs](i);e.items.push(i);e[Xs](a);e.items.push(a);for(const{ref:s,labelRef:r,valueRef:n,connection:g}of e.bindItems.children){if(g)continue;if(!s)continue;const e=searchNode(this.root,t,s,!1,!1);if(e)for(const t of e){if(!t[Nr](this.datasets)){warn(`XFA - Invalid ref (${s}): must be a datasets child.`);continue}const e=searchNode(this.root,t,r,!0,!1);if(!e){warn(`XFA - Invalid label: ${r}.`);continue}const[g]=e;if(!g[Nr](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const o=searchNode(this.root,t,n,!0,!1);if(!o){warn(`XFA - Invalid value: ${n}.`);continue}const[c]=o;if(!c[Nr](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const C=createText(g[en]()),h=createText(c[en]());i[Xs](C);i.text.push(C);a[Xs](h);a.text.push(h)}else warn(`XFA - Invalid reference: ${s}.`)}}_bindOccurrences(e,t,i){let a;if(t.length>1){a=e[$s]();a[jr](a.occur);a.occur=null}this._bindValue(e,t[0],i);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const s=e[pr](),r=e[Yr],n=s[br](e);for(let e=1,g=t.length;et.name===e.name)).length:i[a].children.length;const r=i[br](e)+1,n=t.initial-s;if(n){const t=e[$s]();t[jr](t.occur);t.occur=null;i[a].push(t);i[Fr](r,t);for(let e=1;e0)this._bindOccurrences(a,[e[0]],null);else if(this.emptyMerge){const e=t[Jr]===Tn?-1:t[Jr],i=a[tr]=new XmlObject(e,a.name||"root");t[Xs](i);this._bindElement(a,i)}continue}if(!a[kr]())continue;let e=!1,s=null,r=null,n=null;if(a.bind){switch(a.bind.match){case"none":this._setAndBind(a,t);continue;case"global":e=!0;break;case"dataRef":if(!a.bind.ref){warn(`XFA - ref is empty in node ${a[Yr]}.`);this._setAndBind(a,t);continue}r=a.bind.ref}a.bind.picture&&(s=a.bind.picture[er])}const[g,o]=this._getOccurInfo(a);if(r){n=searchNode(this.root,t,r,!0,!1);if(null===n){n=createDataNode(this.data,t,r);if(!n)continue;this._isConsumeData()&&(n[Ar]=!0);this._setAndBind(a,n);continue}this._isConsumeData()&&(n=n.filter((e=>!e[Ar])));n.length>o?n=n.slice(0,o):0===n.length&&(n=null);n&&this._isConsumeData()&&n.forEach((e=>{e[Ar]=!0}))}else{if(!a.name){this._setAndBind(a,t);continue}if(this._isConsumeData()){const i=[];for(;i.length0?i:null}else{n=t[Qr](a.name,!1,this.emptyMerge).next().value;if(!n){if(0===g){i.push(a);continue}const e=t[Jr]===Tn?-1:t[Jr];n=a[tr]=new XmlObject(e,a.name);this.emptyMerge&&(n[Ar]=!0);t[Xs](n);this._setAndBind(a,n);continue}this.emptyMerge&&(n[Ar]=!0);n=[n]}}n?this._bindOccurrences(a,n,s):g>0?this._setAndBind(a,t):i.push(a)}i.forEach((e=>e[pr]()[jr](e)))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[Er]()]];for(;t.length>0;){const i=t.at(-1),[a,s]=i;if(a+1===s.length){t.pop();continue}const r=s[++i[0]],n=e.get(r[nn]);if(n)r[$r](n);else{const t=r[gr]();for(const i of t.values()){const t=e.get(i[nn]);if(t){i[$r](t);break}}}const g=r[Er]();g.length>0&&t.push([-1,g])}const i=[''];if(this.dataset)for(const e of this.dataset[Er]())"data"!==e[Yr]&&e[sn](i);this.data[sn](i);i.push("");return i.join("")}}const qn=on.config.id;class Acrobat extends XFAObject{constructor(e){super(qn,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(qn,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(qn,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(qn,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(qn,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(qn,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(qn,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(qn,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class Agent extends XFAObject{constructor(e){super(qn,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(qn,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(qn,"amd")}}class config_Area extends XFAObject{constructor(e){super(qn,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(qn,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(qn,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(qn,"base")}}class BatchOutput extends XFAObject{constructor(e){super(qn,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(qn,"behaviorOverride")}[sr](){this[er]=new Map(this[er].trim().split(/\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class Cache extends XFAObject{constructor(e){super(qn,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(qn,"change")}}class Common extends XFAObject{constructor(e){super(qn,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(qn,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(qn,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(qn,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(qn,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(qn,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(qn,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(qn,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(qn,"copies",1,(e=>e>=1))}}class Creator extends StringObject{constructor(e){super(qn,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(qn,"currentPage",0,(e=>e>=0))}}class Data extends XFAObject{constructor(e){super(qn,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(qn,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(qn,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(qn,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(qn,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(qn,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(qn,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(qn,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(qn,"embed")}}class config_Encrypt extends Option01{constructor(e){super(qn,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(qn,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(qn,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(qn,"enforce")}}class Equate extends XFAObject{constructor(e){super(qn,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(qn,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,i=this._unicodeRange;for(let a of i.split(",").map((e=>e.trim())).filter((e=>!!e))){a=a.split("-",2).map((e=>{const i=e.match(t);return i?parseInt(i[1],16):0}));1===a.length&&a.push(a[0]);e.push(a)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(qn,"exclude")}[sr](){this[er]=this[er].trim().split(/\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class ExcludeNS extends StringObject{constructor(e){super(qn,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(qn,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(qn,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(qn,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(qn,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(qn,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(qn,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(qn,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(qn,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(qn,"interactive")}}class Jog extends OptionObject{constructor(e){super(qn,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(qn,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(qn,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(qn,"level",0,(e=>e>0))}}class Linearized extends Option01{constructor(e){super(qn,"linearized")}}class Locale extends StringObject{constructor(e){super(qn,"locale")}}class LocaleSet extends StringObject{constructor(e){super(qn,"localeSet")}}class Log extends XFAObject{constructor(e){super(qn,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(qn,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(qn,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(qn,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(qn,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(qn,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(qn,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(qn,"msgId",1,(e=>e>=1))}}class NameAttr extends StringObject{constructor(e){super(qn,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(qn,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(qn,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class OpenAction extends XFAObject{constructor(e){super(qn,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(qn,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(qn,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(qn,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(qn,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(qn,"packets")}[sr](){"*"!==this[er]&&(this[er]=this[er].trim().split(/\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includes(e))))}}class PageOffset extends XFAObject{constructor(e){super(qn,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(qn,"pageRange")}[sr](){const e=this[er].trim().split(/\s+/).map((e=>parseInt(e,10))),t=[];for(let i=0,a=e.length;i!1))}}class Pcl extends XFAObject{constructor(e){super(qn,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(qn,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(qn,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(qn,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(qn,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(qn,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(qn,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(qn,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(qn,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(qn,"print")}}class PrintHighQuality extends Option01{constructor(e){super(qn,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(qn,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(qn,"printerName")}}class Producer extends StringObject{constructor(e){super(qn,"producer")}}class Ps extends XFAObject{constructor(e){super(qn,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(qn,"range")}[sr](){this[er]=this[er].trim().split(/\s*,\s*/,2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>{1===e.length&&e.push(e[0]);return e}))}}class Record extends ContentObject{constructor(e){super(qn,"record")}[sr](){this[er]=this[er].trim();const e=parseInt(this[er],10);!isNaN(e)&&e>=0&&(this[er]=e)}}class Relevant extends ContentObject{constructor(e){super(qn,"relevant")}[sr](){this[er]=this[er].trim().split(/\s+/)}}class Rename extends ContentObject{constructor(e){super(qn,"rename")}[sr](){this[er]=this[er].trim();(this[er].toLowerCase().startsWith("xml")||new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*","u").test(this[er]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(qn,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(qn,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(qn,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(qn,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(qn,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(qn,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(qn,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(qn,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(qn,"startPage",0,(e=>!0))}}class SubmitFormat extends OptionObject{constructor(e){super(qn,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(qn,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(qn,"subsetBelow",100,(e=>e>=0&&e<=100))}}class SuppressBanner extends Option01{constructor(e){super(qn,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(qn,"tagged")}}class config_Template extends XFAObject{constructor(e){super(qn,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(qn,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(qn,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(qn,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(qn,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(qn,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(qn,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(qn,"uri")}}class config_Validate extends OptionObject{constructor(e){super(qn,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(qn,"validateApprovalSignatures")}[sr](){this[er]=this[er].trim().split(/\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class ValidationMessaging extends OptionObject{constructor(e){super(qn,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(qn,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(qn,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(qn,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(qn,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(qn,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(qn,"window")}[sr](){const e=this[er].trim().split(/\s*,\s*/,2).map((e=>parseInt(e,10)));if(e.some((e=>isNaN(e))))this[er]=[0,0];else{1===e.length&&e.push(e[0]);this[er]=e}}}class Xdc extends XFAObject{constructor(e){super(qn,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(qn,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(qn,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(qn,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[gn](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const On=on.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(On,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(On,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(On,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(On,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(On,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(On,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(On,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(On,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(On,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(On,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(On,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(On,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[gn](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const Pn=on.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(Pn,"data",e)}[Gr](){return!0}}class Datasets extends XFAObject{constructor(e){super(Pn,"datasets",!0);this.data=null;this.Signature=null}[Kr](e){const t=e[Yr];("data"===t&&e[Jr]===Pn||"Signature"===t&&e[Jr]===on.signature.id)&&(this[t]=e);this[Xs](e)}}class DatasetsNamespace{static[gn](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const Wn=on.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(Wn,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(Wn,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(Wn,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(Wn,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(Wn,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(Wn,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(Wn,"day")}}class DayNames extends XFAObject{constructor(e){super(Wn,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(Wn,"era")}}class EraNames extends XFAObject{constructor(e){super(Wn,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(Wn,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(Wn,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(Wn,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(Wn,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(Wn,"month")}}class MonthNames extends XFAObject{constructor(e){super(Wn,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(Wn,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(Wn,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(Wn,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(Wn,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(Wn,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(Wn,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(Wn,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(Wn,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[gn](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const jn=on.signature.id;class signature_Signature extends XFAObject{constructor(e){super(jn,"signature",!0)}}class SignatureNamespace{static[gn](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const Xn=on.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(Xn,"stylesheet",!0)}}class StylesheetNamespace{static[gn](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}static stylesheet(e){return new Stylesheet(e)}}const Zn=on.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(Zn,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[Tr](e){const t=on[e[Yr]];return t&&e[Jr]===t.id}}class XdpNamespace{static[gn](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}const Vn=on.xhtml.id,zn=Symbol(),_n=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),$n=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=getMeasurement(e)))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),Ag=/\s+/g,eg=/[\r\n]+/g,tg=/\r\n?/g;function mapStyle(e,t,i){const a=Object.create(null);if(!e)return a;const s=Object.create(null);for(const[t,i]of e.split(";").map((e=>e.split(":",2)))){const e=$n.get(t);if(""===e)continue;let r=i;e&&(r="string"==typeof e?e:e(i,s));t.endsWith("scale")?a.transform=a.transform?`${a[t]} ${r}`:r:a[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=r}a.fontFamily&&setFontFamily({typeface:a.fontFamily,weight:a.fontWeight||"normal",posture:a.fontStyle||"normal",size:s.fontSize||0},t,t[yr].fontFinder,a);if(i&&a.verticalAlign&&"0px"!==a.verticalAlign&&a.fontSize){const e=.583,t=.333,i=getMeasurement(a.fontSize);a.fontSize=measureToString(i*e);a.verticalAlign=measureToString(Math.sign(getMeasurement(a.verticalAlign))*i*t)}i&&a.fontSize&&(a.fontSize=`calc(${a.fontSize} * var(--scale-factor))`);fixTextIndent(a);return a}const ig=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(Vn,t);this[zn]=!1;this.style=e.style||""}[Vs](e){super[Vs](e);this.style=function checkStyle(e){return e.style?e.style.trim().split(/\s*;\s*/).filter((e=>!!e)).map((e=>e.split(/\s*:\s*/,2))).filter((([t,i])=>{"font-family"===t&&e[yr].usedTypefaces.add(i);return _n.has(t)})).map((e=>e.join(":"))).join(";"):""}(this)}[Ws](){return!ig.has(this[Yr])}[qr](e,t=!1){if(t)this[zn]=!0;else{e=e.replaceAll(eg,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(Ag," "))}e&&(this[er]+=e)}[Or](e,t=!0){const i=Object.create(null),a={top:NaN,bottom:NaN,left:NaN,right:NaN};let s=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":i.typeface=stripQuotes(t);break;case"font-size":i.size=getMeasurement(t);break;case"font-weight":i.weight=t;break;case"font-style":i.posture=t;break;case"letter-spacing":i.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \t/).map((e=>getMeasurement(e)));switch(e.length){case 1:a.top=a.bottom=a.left=a.right=e[0];break;case 2:a.top=a.bottom=e[0];a.left=a.right=e[1];break;case 3:a.top=e[0];a.bottom=e[2];a.left=a.right=e[1];break;case 4:a.top=e[0];a.left=e[1];a.bottom=e[2];a.right=e[3]}break;case"margin-top":a.top=getMeasurement(t);break;case"margin-bottom":a.bottom=getMeasurement(t);break;case"margin-left":a.left=getMeasurement(t);break;case"margin-right":a.right=getMeasurement(t);break;case"line-height":s=getMeasurement(t)}e.pushData(i,a,s);if(this[er])e.addString(this[er]);else for(const t of this[Er]())"#text"!==t[Yr]?t[Or](e):e.addString(t[er]);t&&e.popFont()}[an](e){const t=[];this[ar]={children:t};this[Zs]({});if(0===t.length&&!this[er])return HTMLResult.EMPTY;let i;i=this[zn]?this[er]?this[er].replaceAll(tg,"\n"):void 0:this[er]||void 0;return HTMLResult.success({name:this[Yr],attributes:{href:this.href,style:mapStyle(this.style,this,this[zn])},children:t,value:i})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[Or](e){e.pushFont({weight:"bold"});super[Or](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[an](e){const t=super[an](e),{html:i}=t;if(!i)return HTMLResult.EMPTY;i.name="div";i.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[en](){return"\n"}[Or](e){e.addString("\n")}[an](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[an](e){const t=[];this[ar]={children:t};this[Zs]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[er]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[Or](e){e.pushFont({posture:"italic"});super[Or](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[Or](e){super[Or](e,!1);e.addString("\n");e.addPara();e.popFont()}[en](){return this[pr]()[Er]().at(-1)===this?super[en]():super[en]()+"\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[gn](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const ag={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[gn](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[Dr]=e}[Kr](e){this.element=e;return!0}[sr](){super[sr]();if(this.element.template instanceof Template){this[Dr].set(Xr,this.element);this.element.template[Zr](this[Dr]);this.element.template[Dr]=this[Dr]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[Kr](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(on).map((({id:e})=>e)));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:i,namespace:a,prefixes:s}){const r=null!==a;if(r){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(a)}s&&this._addNamespacePrefix(s);if(i.hasOwnProperty(vr)){const e=ag.datasets,t=i[vr];let a=null;for(const[i,s]of Object.entries(t)){if(this._getNamespaceToUse(i)===e){a={xfa:s};break}}a?i[vr]=a:delete i[vr]}const n=this._getNamespaceToUse(e),g=n?.[gn](t,i)||new Empty;g[Gr]()&&this._nsAgnosticLevel++;(r||s||g[Gr]())&&(g[_s]={hasNamespace:r,prefixes:s,nsAgnostic:g[Gr]()});return g}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[i,{check:a}]of Object.entries(on))if(a(e)){t=ag[i];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:i}of e){const e=this._searchNamespace(i);let a=this._namespacePrefixes.get(t);if(!a){a=[];this._namespacePrefixes.set(t,a)}a.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:i,nsAgnostic:a}=e;t&&(this._currentNamespace=this._namespaceStack.pop());i&&i.forEach((({prefix:e})=>{this._namespacePrefixes.get(e).pop()}));a&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=Rs;this._whiteRegex=/^\s+$/;this._nbsps=/\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===Rs){this._current[sr]();return this._current.element}}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText||this._current[Ws]()?this._current[qr](e,this._richText):this._whiteRegex.test(e)||this._current[qr](e.trim())}onCdata(e){this._current[qr](e)}_mkAttributes(e,t){let i=null,a=null;const s=Object.create({});for(const{name:r,value:n}of e)if("xmlns"===r)i?warn(`XFA - multiple namespace definition in <${t}>`):i=n;else if(r.startsWith("xmlns:")){const e=r.substring(6);a||(a=[]);a.push({prefix:e,value:n})}else{const e=r.indexOf(":");if(-1===e)s[r]=n;else{let t=s[vr];t||(t=s[vr]=Object.create(null));const[i,a]=[r.slice(0,e),r.slice(e+1)];(t[i]||=Object.create(null))[a]=n}}return[i,a,s]}_getNameAndPrefix(e,t){const i=e.indexOf(":");return-1===i?[e,null]:[e.substring(i+1),t?"":e.substring(0,i)]}onBeginElement(e,t,i){const[a,s,r]=this._mkAttributes(t,e),[n,g]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),o=this._builder.build({nsPrefix:g,name:n,attributes:r,namespace:a,prefixes:s});o[yr]=this._globalData;if(i){o[sr]();this._current[Kr](o)&&o[zr](this._ids);o[Vs](this._builder)}else{this._stack.push(this._current);this._current=o}}onEndElement(e){const t=this._current;if(t[Sr]()&&"string"==typeof t[er]){const e=new XFAParser;e._globalData=this._globalData;const i=e.parse(t[er]);t[er]=null;t[Kr](i)}t[sr]();this._current=this._stack.pop();this._current[Kr](t)&&t[zr](this._ids);t[Vs](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[yr].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return this.root&&this.form}_createPagesHelper(){const e=this.form[tn]();return new Promise(((t,i)=>{const nextIteration=()=>{try{const i=e.next();i.done?t(i.value):setTimeout(nextIteration,0)}catch(e){i(e)}};setTimeout(nextIteration,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map((e=>{const{width:t,height:i}=e.attributes.style;return[0,0,parseInt(t),parseInt(i)]}))}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[yr].images=e}setFonts(e){this.form[yr].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[yr].usedTypefaces){e=stripQuotes(e);this.form[yr].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[yr].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[Yr])){const e=XhtmlNamespace.body({});e[Xs](t);t=e}const i=t[an]();if(!i.success)return null;const{html:a}=i,{attributes:s}=a;if(s){s.class&&(s.class=s.class.filter((e=>!e.startsWith("xfa"))));s.dir="auto"}return{html:a,str:t[en]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments")]).then((([t,i,a,s,r])=>({pdfManager:e,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:i,structTreeRoot:a,baseUrl:s,attachments:r})),(e=>{warn(`createGlobals: "${e}".`);return null}))}static async create(e,t,i,a,s,r){const n=s?await this._getPageIndex(e,t,i.pdfManager):null;return i.pdfManager.ensure(this,"_create",[e,t,i,a,s,n,r])}static _create(e,t,i,a,s=!1,r=null,n=null){const g=e.fetchIfRef(t);if(!(g instanceof Dict))return;const{acroForm:o,pdfManager:c}=i,C=t instanceof Ref?t.toString():`annot_${a.createObjId()}`;let h=g.get("Subtype");h=h instanceof Name?h.name:null;const l={xref:e,ref:t,dict:g,subtype:h,id:C,annotationGlobals:i,collectFields:s,needAppearances:!s&&!0===o.get("NeedAppearances"),pageIndex:r,evaluatorOptions:c.evaluatorOptions,pageRef:n};switch(h){case"Link":return new LinkAnnotation(l);case"Text":return new TextAnnotation(l);case"Widget":let e=getInheritableProperty({dict:g,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(l);case"Btn":return new ButtonWidgetAnnotation(l);case"Ch":return new ChoiceWidgetAnnotation(l);case"Sig":return new SignatureWidgetAnnotation(l)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(l);case"Popup":return new PopupAnnotation(l);case"FreeText":return new FreeTextAnnotation(l);case"Line":return new LineAnnotation(l);case"Square":return new SquareAnnotation(l);case"Circle":return new CircleAnnotation(l);case"PolyLine":return new PolylineAnnotation(l);case"Polygon":return new PolygonAnnotation(l);case"Caret":return new CaretAnnotation(l);case"Ink":return new InkAnnotation(l);case"Highlight":return new HighlightAnnotation(l);case"Underline":return new UnderlineAnnotation(l);case"Squiggly":return new SquigglyAnnotation(l);case"StrikeOut":return new StrikeOutAnnotation(l);case"Stamp":return new StampAnnotation(l);case"FileAttachment":return new FileAttachmentAnnotation(l);default:s||warn(h?`Unimplemented annotation type "${h}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(l)}}static async _getPageIndex(e,t,i){try{const a=await e.fetchIfRefAsync(t);if(!(a instanceof Dict))return-1;const s=a.getRaw("P");if(s instanceof Ref)try{return await i.ensureCatalog("getPageIndex",[s])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(a.has("Kids"))return-1;const r=await i.ensureDoc("numPages");for(let e=0;ee/255))}function getQuadPoints(e,t){const i=e.getArray("QuadPoints");if(!isNumberArray(i,null)||0===i.length||i.length%8>0)return null;const a=new Float32Array(i.length);for(let e=0,s=i.length;et[2]||Et[3]))return null;a.set([l,u,Q,u,l,E,Q,E],e)}return a}function getTransformMatrix(e,t,i){const[a,s,r,n]=Util.getAxialAlignedBoundingBox(t,i);if(a===r||s===n)return[1,0,0,1,e[0],e[1]];const g=(e[2]-e[0])/(r-a),o=(e[3]-e[1])/(n-s);return[g,0,0,o,e[0]-a*g,e[1]-s*o]}class Annotation{constructor(e){const{dict:t,xref:i,annotationGlobals:a}=e;this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const s=t.get("MK");this.setBorderAndBackgroundColors(s);this.setRotation(s,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const r=!!(this.flags&AA),n=!!(this.flags&eA);if(a.structTreeRoot){let i=t.get("StructParent");i=Number.isInteger(i)&&i>=0?i:-1;a.structTreeRoot.addAnnotationIdToPage(e.pageRef,i)}this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&_),noHTML:r&&n};if(e.collectFields){const a=t.get("Kids");if(Array.isArray(a)){const e=[];for(const t of a)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(i,t,uA);this.data.fieldName=this._constructFieldName(t);this.data.pageIndex=e.pageIndex}this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_isViewable(e){return!this._hasFlag(e,Z)&&!this._hasFlag(e,$)}_isPrintable(e){return this._hasFlag(e,z)&&!this._hasFlag(e,V)&&!this._hasFlag(e,Z)}mustBeViewed(e,t){const i=e?.get(this.data.id)?.noView;return void 0!==i?!i:this.viewable&&!this._hasFlag(this.flags,V)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:i}=e,a=getInheritableProperty({dict:t,key:"DA"})||i.acroForm.get("DA");this._defaultAppearance="string"==typeof a?a:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&Z&&"Annotation"!==this.constructor.name&&(this.flags^=Z)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const i=e[t];if(i instanceof Name)switch(i.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=i.name;continue}warn(`Ignoring invalid lineEnding: ${i}`)}}setRotation(e,t){this.rotation=0;let i=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(i)&&0!==i){i%=360;i<0&&(i+=360);i%90==0&&(this.rotation=i)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const i=t.get("N");if(i instanceof BaseStream){this.appearance=i;return}if(!(i instanceof Dict))return;const a=e.get("AS");if(!(a instanceof Name&&i.has(a.name)))return;const s=i.get(a.name);s instanceof BaseStream&&(this.appearance=s)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}loadResources(e,t){return t.dict.getAsync("Resources").then((t=>{if(!t)return;return new ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}async getOperatorList(e,t,a,s,r){const{hasOwnCanvas:n,id:g,rect:c}=this.data;let C=this.appearance;const h=!!(n&&a&o);if(h&&(c[0]===c[2]||c[1]===c[3])){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}if(!C){if(!h)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};C=new StringStream("");C.dict=new Dict}const l=C.dict,Q=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],C),E=lookupRect(l.getArray("BBox"),[0,0,1,1]),u=lookupMatrix(l.getArray("Matrix"),i),d=getTransformMatrix(c,E,u),f=new OperatorList;let p;this.oc&&(p=await e.parseMarkedContentProps(this.oc,null));void 0!==p&&f.addOp(Je,["OC",p]);f.addOp(We,[g,c,d,u,h]);await e.getOperatorList({stream:C,task:t,resources:Q,operatorList:f,fallbackFontDict:this._fallbackFontDict});f.addOp(je,[]);void 0!==p&&f.addOp(Ye,[]);this.reset();return{opList:f,separateForm:!1,separateCanvas:h}}async save(e,t,i){return null}get hasTextContent(){return!1}async extractTextContent(e,t,i){if(!this.appearance)return;const a=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),s=[],r=[];let n=null;const g={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){n||=t.transform.slice(-2);r.push(t.str);if(t.hasEOL){s.push(r.join("").trimEnd());r.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:a,includeMarkedContent:!0,keepWhiteSpace:!0,sink:g,viewBox:i});this.reset();r.length&&s.push(r.join("").trimEnd());if(s.length>1||s[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),i=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(n,t,i);this.data.textContent=s}}_transformPoint(e,t,i){const{rect:a}=this.data;t||=[0,0,1,1];i||=[1,0,0,1,0,0];const s=getTransformMatrix(a,t,i);s[4]-=a[0];s[5]-=a[1];e=Util.applyTransform(e,s);return Util.applyTransform(e,i)}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let i=e;const a=new RefSet;e.objId&&a.put(e.objId);for(;i.has("Parent");){i=i.get("Parent");if(!(i instanceof Dict)||i.objId&&a.has(i.objId))break;i.objId&&a.put(i.objId);i.has("T")&&t.unshift(stringToPDFString(i.get("T")))}return t.join(".")}}class AnnotationBorderStyle{constructor(){this.width=1;this.style=hA;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){const i=(t[2]-t[0])/2,a=(t[3]-t[1])/2;if(i>0&&a>0&&(e>i||e>a)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=hA;break;case"D":this.style=BA;break;case"B":this.style=lA;break;case"I":this.style=QA;break;case"U":this.style=EA}}setDashArray(e,t=!1){if(Array.isArray(e)){let i=!0,a=!0;for(const t of e){if(!(+t>=0)){i=!1;break}t>0&&(a=!1)}if(0===e.length||i&&!a){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const i=t.get("RT");this.data.replyType=i instanceof Name?i.name:X}let i=null;if(this.data.replyType===j){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;i=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;i=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=i instanceof Ref?i.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:i,fillColor:a,blendMode:s,strokeAlpha:r,fillAlpha:n,pointsCallback:g}){let o=Number.MAX_VALUE,c=Number.MAX_VALUE,C=Number.MIN_VALUE,h=Number.MIN_VALUE;const l=["q"];t&&l.push(t);i&&l.push(`${i[0]} ${i[1]} ${i[2]} RG`);a&&l.push(`${a[0]} ${a[1]} ${a[2]} rg`);let Q=this.data.quadPoints;Q||(Q=Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]));for(let e=0,t=Q.length;e"string"==typeof e)).map((e=>stringToPDFString(e))):e instanceof Name?stringToPDFString(e.name):"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,$)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(0===t)return i;return getRotationMatrix(t,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1])}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const i=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],s=0===t||180===t?`0 0 ${i} ${a} re`:`0 0 ${a} ${i} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${s} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${s} S `}return r}async getOperatorList(e,t,i,a,s){if(a&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,i,a,s);const r=await this._getAppearance(e,t,i,s);if(this.appearance&&null===r)return super.getOperatorList(e,t,i,a,s);const n=new OperatorList;if(!this._defaultAppearance||null===r)return{opList:n,separateForm:!1,separateCanvas:!1};const g=!!(this.data.hasOwnCanvas&&i&o),c=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],C=getTransformMatrix(this.data.rect,c,[1,0,0,1,0,0]);let h;this.oc&&(h=await e.parseMarkedContentProps(this.oc,null));void 0!==h&&n.addOp(Je,["OC",h]);n.addOp(We,[this.data.id,this.data.rect,C,this.getRotationMatrix(s),g]);const l=new StringStream(r);await e.getOperatorList({stream:l,task:t,resources:this._fieldResources.mergedResources,operatorList:n});n.addOp(je,[]);void 0!==h&&n.addOp(Ye,[]);return{opList:n,separateForm:!1,separateCanvas:g}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);this.borderColor&&t.set("BC",getPdfColorArray(this.borderColor));this.backgroundColor&&t.set("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}async save(e,t,a){const s=a?.get(this.data.id);let r=s?.value,n=s?.rotation;if(r===this.data.fieldValue||void 0===r){if(!this._hasValueFromXFA&&void 0===n)return null;r||=this.data.fieldValue}if(void 0===n&&!this._hasValueFromXFA&&Array.isArray(r)&&Array.isArray(this.data.fieldValue)&&r.length===this.data.fieldValue.length&&r.every(((e,t)=>e===this.data.fieldValue[t])))return null;void 0===n&&(n=this.rotation);let g=null;if(!this._needAppearances){g=await this._getAppearance(e,t,C,a);if(null===g)return null}let o=!1;if(g?.needAppearances){o=!0;g=null}const{xref:c}=e,h=c.fetchIfRef(this.ref);if(!(h instanceof Dict))return null;const l=new Dict(c);for(const e of h.getKeys())"AP"!==e&&l.set(e,h.getRaw(e));const Q={path:this.data.fieldName,value:r},encoder=e=>isAscii(e)?e:stringToUTF16String(e,!0);l.set("V",Array.isArray(r)?r.map(encoder):encoder(r));this.amendSavedDict(a,l);const E=this._getMKDict(n);E&&l.set("MK",E);const u=[],d=[{ref:this.ref,data:"",xfa:Q,needAppearances:o}];if(null!==g){const e=c.getNewTemporaryRef(),t=new Dict(c);l.set("AP",t);t.set("N",e);const s=this._getSaveFieldResources(c),r=new StringStream(g),n=r.dict=new Dict(c);n.set("Subtype",Name.get("Form"));n.set("Resources",s);n.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);const o=this.getRotationMatrix(a);o!==i&&n.set("Matrix",o);await writeObject(e,r,u,c);d.push({ref:e,data:u.join(""),xfa:null,needAppearances:!1});u.length=0}l.set("M",`D:${getModificationDate()}`);await writeObject(this.ref,l,u,c);d[0].data=u.join("");return d}async _getAppearance(e,t,i,a){if(this.hasFieldFlag(sA))return null;const s=a?.get(this.data.id);let r,g;if(s){r=s.formattedValue||s.value;g=s.rotation}if(void 0===g&&void 0===r&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const o=this.getBorderAndBackgroundAppearances(a);if(void 0===r){r=this.data.fieldValue;if(!r)return`/Tx BMC q ${o}Q EMC`}Array.isArray(r)&&1===r.length&&(r=r[0]);assert("string"==typeof r,"Expected `value` to be a string.");r=r.trim();if(this.data.combo){const e=this.data.options.find((({exportValue:e})=>r===e));r=e?.displayValue||r}if(""===r)return`/Tx BMC q ${o}Q EMC`;void 0===g&&(g=this.rotation);let c,h=-1;if(this.data.multiLine){c=r.split(/\r\n?|\n/).map((e=>e.normalize("NFC")));h=c.length}else c=[r.replace(/\r\n?|\n/,"").normalize("NFC")];let l=this.data.rect[3]-this.data.rect[1],Q=this.data.rect[2]-this.data.rect[0];90!==g&&270!==g||([Q,l]=[l,Q]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let E,u,d,f=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const p=[];let m=!1;for(const e of c){const t=f.encodeString(e);t.length>1&&(m=!0);p.push(t.join(""))}if(m&&i&C)return{needAppearances:!0};if(m&&this._isOffscreenCanvasSupported){const i=this.data.comb?"monospace":"sans-serif",a=new FakeUnicodeFont(e.xref,i),s=a.createFontResources(c.join("")),n=s.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const g=a.fontName.name;f=await WidgetAnnotation._getFontData(e,t,{fontName:g,fontSize:0},s);for(let e=0,t=p.length;e2)return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 ${numberToString(2)} ${numberToString(b)} Tm (${escapeString(p[0])}) Tj ET Q EMC`;return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 0 0 Tm ${this._renderText(p[0],f,u,Q,D,{shift:0},2,b)} ET Q EMC`}static async _getFontData(e,t,i,a){const s=new OperatorList,r={font:null,clone(){return this}},{fontName:n,fontSize:g}=i;await e.handleSetFont(a,[n&&Name.get(n),g],null,s,t,r,null);return r.font}_getTextWidth(e,t){return t.charsToGlyphs(e).reduce(((e,t)=>e+t.width),0)/1e3}_computeFontSize(e,t,i,a,r){let{fontSize:n}=this.data.defaultAppearanceData,g=(n||12)*s,o=Math.round(e/g);if(!n){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===r){const r=this._getTextWidth(i,a);n=roundWithTwoDigits(Math.min(e/s,r>t?t/r:1/0));o=1}else{const c=i.split(/\r\n?|\n/),C=[];for(const e of c){const t=a.encodeString(e).join(""),i=a.charsToGlyphs(t),s=a.getCharPositions(t);C.push({line:t,glyphs:i,positions:s})}const isTooBig=i=>{let s=0;for(const r of C){s+=this._splitLine(null,a,i,t,r).length*i;if(s>e)return!0}return!1};o=Math.max(o,r);for(;;){g=e/o;n=roundWithTwoDigits(g/s);if(!isTooBig(n))break;o++}}const{fontName:c,fontColor:C}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:i}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(i,!0)}`}({fontSize:n,fontName:c,fontColor:C})}return[this._defaultAppearance,n,e/o]}_renderText(e,t,i,a,s,r,n,g){let o;if(1===s){o=(a-this._getTextWidth(e,t)*i)/2}else if(2===s){o=a-this._getTextWidth(e,t)*i-n}else o=n;const c=numberToString(o-r.shift);r.shift=o;return`${c} ${g=numberToString(g)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:i,acroFormResources:a}=this._fieldResources,s=this.data.defaultAppearanceData?.fontName;if(!s)return t||Dict.empty;for(const e of[t,i])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(s))return e}if(a instanceof Dict){const i=a.get("Font");if(i instanceof Dict&&i.has(s)){const a=new Dict(e);a.set(s,i.getRaw(s));const r=new Dict(e);r.set("Font",a);return Dict.merge({xref:e,dictArray:[r,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=V;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let i=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(i)||i<0||i>2)&&(i=null);this.data.textAlignment=i;let a=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(a)||a<0)&&(a=0);this.data.maxLen=a;this.data.multiLine=this.hasFieldFlag(aA);this.data.comb=this.hasFieldFlag(CA)&&!this.hasFieldFlag(aA)&&!this.hasFieldFlag(sA)&&!this.hasFieldFlag(oA)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(cA)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,i,a,s,r,n,g,o,c,C){const h=s/this.data.maxLen,l=this.getBorderAndBackgroundAppearances(C),Q=[],E=t.getCharPositions(i);for(const[e,t]of E)Q.push(`(${escapeString(i.substring(e,t))}) Tj`);const u=Q.join(` ${numberToString(h)} 0 Td `);return`/Tx BMC q ${l}BT `+e+` 1 0 0 1 ${numberToString(n)} ${numberToString(g+o)} Tm ${u} ET Q EMC`}_getMultilineAppearance(e,t,i,a,s,r,n,g,o,c,C,h){const l=[],Q=s-2*g,E={shift:0};for(let e=0,r=t.length;ea){o.push(e.substring(l,i));l=i;Q=u;c=-1;h=-1}else{Q+=u;c=i;C=s;h=t}else if(Q+u>a)if(-1!==c){o.push(e.substring(l,C));l=C;t=h+1;c=-1;Q=0}else{o.push(e.substring(l,i));l=i;Q=u}else Q+=u}l"Off"!==e));r.length=0;r.push("Off",e)}r.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=r[1];const n=i.get(this.data.exportValue);this.checkedAppearance=n instanceof BaseStream?n:null;const g=i.get("Off");this.uncheckedAppearance=g instanceof BaseStream?g:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const i=t.get("V");i instanceof Name&&(this.data.fieldValue=this._decodeFormValue(i))}const i=e.dict.get("AP");if(!(i instanceof Dict))return;const a=i.get("N");if(!(a instanceof Dict))return;for(const e of a.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const s=a.get(this.data.buttonValue);this.checkedAppearance=s instanceof BaseStream?s:null;const r=a.get("Off");this.uncheckedAppearance=r instanceof BaseStream?r:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:i}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:i.baseUrl,docAttachments:i.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("ZapfDingbats"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("FallbackType"));e.set("Encoding",Name.get("ZapfDingbatsEncoding"));return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const a=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(a))for(let e=0,t=a.length;e=0&&t0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let i=e?.get(this.data.id)?.value;Array.isArray(i)||(i=[i]);const a=[],{options:s}=this.data;for(let e=0,t=0,r=s.length;ei){i=a;t=e}}[Q,E]=this._computeFontSize(e,c-4,t,l,-1)}const u=E*s,d=(u-E)/2,f=Math.floor(o/u);let p=0;if(h.length>0){const e=Math.min(...h),t=Math.max(...h);p=Math.max(0,t-f+1);p>e&&(p=e)}const m=Math.min(p+f+1,C),y=["/Tx BMC q",`1 1 ${c} ${o} re W n`];if(h.length){y.push("0.600006 0.756866 0.854904 rg");for(const e of h)p<=e&&ee.trimEnd()));const{coords:e,bbox:t,matrix:i}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,i)}if(this._isOffscreenCanvasSupported){const s=e.dict.get("CA"),r=new FakeUnicodeFont(i,"sans-serif");this.appearance=r.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,s);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,fontSize:r,rect:n,rotation:g,user:o,value:c}=e,C=new Dict(t);C.set("Type",Name.get("Annot"));C.set("Subtype",Name.get("FreeText"));C.set("CreationDate",`D:${getModificationDate()}`);C.set("Rect",n);const h=`/Helv ${r} Tf ${getPdfColor(s,!0)}`;C.set("DA",h);C.set("Contents",isAscii(c)?c:stringToUTF16String(c,!0));C.set("F",4);C.set("Border",[0,0,0]);C.set("Rotate",g);o&&C.set("T",isAscii(o)?o:stringToUTF16String(o,!0));if(i||a){const e=new Dict(t);C.set("AP",e);i?e.set("N",i):e.set("N",a)}return C}static async createNewAppearanceStream(e,t,i){const{baseFontRef:a,evaluator:r,task:n}=i,{color:g,fontSize:o,rect:c,rotation:C,value:h}=e,l=new Dict(t),Q=new Dict(t);if(a)Q.set("Helv",a);else{const e=new Dict(t);e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type1"));e.set("Encoding",Name.get("WinAnsiEncoding"));Q.set("Helv",e)}l.set("Font",Q);const E=await WidgetAnnotation._getFontData(r,n,{fontName:"Helv",fontSize:o},l),[u,d,f,p]=c;let m=f-u,y=p-d;C%180!=0&&([m,y]=[y,m]);const w=h.split("\n"),D=o/1e3;let b=-1/0;const F=[];for(let e of w){const t=E.encodeString(e);if(t.length>1)return null;e=t.join("");F.push(e);let i=0;const a=E.charsToGlyphs(e);for(const e of a)i+=e.width*D;b=Math.max(b,i)}let S=1;b>m&&(S=m/b);let k=1;const R=s*o,N=1*o,G=R*w.length;G>y&&(k=y/G);const x=o*Math.min(S,k);let U,M,L;switch(C){case 0:L=[1,0,0,1];M=[c[0],c[1],m,y];U=[c[0],c[3]-N];break;case 90:L=[0,1,-1,0];M=[c[1],-c[2],m,y];U=[c[1],-c[0]-N];break;case 180:L=[-1,0,0,-1];M=[-c[2],-c[3],m,y];U=[-c[2],-c[1]-N];break;case 270:L=[0,-1,1,0];M=[-c[3],c[0],m,y];U=[-c[3],c[2]-N]}const H=["q",`${L.join(" ")} 0 0 cm`,`${M.join(" ")} re W n`,"BT",`${getPdfColor(g,!0)}`,`0 Tc /Helv ${numberToString(x)} Tf`];H.push(`${U.join(" ")} Td (${escapeString(F[0])}) Tj`);const J=numberToString(R);for(let e=1,t=F.length;e{e.push(`${a[0]} ${a[1]} m`,`${a[2]} ${a[3]} l`,"S");return[t[0]-o,t[2]+o,t[7]-o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=G;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),s=getRgbColor(t.getArray("IC"),null),r=s?getPdfColorArray(s):null,n=r?a:null;if(0===this.borderStyle.width&&!r)return;this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:r,strokeAlpha:a,fillAlpha:n,pointsCallback:(e,t)=>{const i=t[4]+this.borderStyle.width/2,a=t[5]+this.borderStyle.width/2,s=t[6]-t[4]-this.borderStyle.width,n=t[3]-t[7]-this.borderStyle.width;e.push(`${i} ${a} ${s} ${n} re`);r?e.push("B"):e.push("S");return[t[0],t[2],t[7],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=x;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),s=getRgbColor(t.getArray("IC"),null),r=s?getPdfColorArray(s):null,n=r?a:null;if(0===this.borderStyle.width&&!r)return;const g=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:r,strokeAlpha:a,fillAlpha:n,pointsCallback:(e,t)=>{const i=t[0]+this.borderStyle.width/2,a=t[1]-this.borderStyle.width/2,s=t[6]-this.borderStyle.width/2,n=t[7]+this.borderStyle.width/2,o=i+(s-i)/2,c=a+(n-a)/2,C=(s-i)/2*g,h=(n-a)/2*g;e.push(`${o} ${n} m`,`${o+C} ${n} ${s} ${c+h} ${s} ${c} c`,`${s} ${c-h} ${o+C} ${a} ${o} ${a} c`,`${o-C} ${a} ${i} ${c-h} ${i} ${c} c`,`${i} ${c+h} ${o-C} ${n} ${o} ${n} c`,"h");r?e.push("B"):e.push("S");return[t[0],t[2],t[7],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=M;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings}const a=t.getArray("Vertices");if(!isNumberArray(a,null))return;const s=this.data.vertices=Float32Array.from(a);if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA"),r=this.borderStyle.width||1,n=2*r,g=[1/0,1/0,-1/0,-1/0];for(let e=0,t=s.length;e{for(let t=0,i=s.length;t{for(const t of this.data.inkLists){for(let i=0,a=t.length;ie.points)));h.set("F",4);h.set("Rotate",c);g&&h.set("IT",Name.get("InkHighlight"));const l=new Dict(t);h.set("BS",l);l.set("W",C);h.set("C",Array.from(s,(e=>e/255)));h.set("CA",r);const Q=new Dict(t);h.set("AP",Q);i?Q.set("N",i):Q.set("N",a);return h}static async createNewAppearanceStream(e,t,i){if(e.outlines)return this.createNewAppearanceStreamForHighlight(e,t,i);const{color:a,rect:s,paths:r,thickness:n,opacity:g}=e,o=[`${n} w 1 J 1 j`,`${getPdfColor(a,!1)}`];1!==g&&o.push("/R0 gs");const c=[];for(const{bezier:e}of r){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);if(2===e.length)c.push(`${numberToString(e[0])} ${numberToString(e[1])} l S`);else{for(let t=2,i=e.length;t{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}static createNewDict(e,t,{apRef:i,ap:a}){const{color:s,opacity:r,rect:n,rotation:g,user:o,quadPoints:c}=e,C=new Dict(t);C.set("Type",Name.get("Annot"));C.set("Subtype",Name.get("Highlight"));C.set("CreationDate",`D:${getModificationDate()}`);C.set("Rect",n);C.set("F",4);C.set("Border",[0,0,0]);C.set("Rotate",g);C.set("QuadPoints",c);C.set("C",Array.from(s,(e=>e/255)));C.set("CA",r);o&&C.set("T",isAscii(o)?o:stringToUTF16String(o,!0));if(i||a){const e=new Dict(t);C.set("AP",e);e.set("N",i||a)}return C}static async createNewAppearanceStream(e,t,i){const{color:a,rect:s,outlines:r,opacity:n}=e,g=[`${getPdfColor(a,!0)}`,"/R0 gs"],o=[];for(const e of r){o.length=0;o.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,i=e.length;t{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:i}=e;this.data.annotationType=J;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],a=t.get("CA");this._setDefaultAppearance({xref:i,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:a,pointsCallback:(e,t)=>{const i=(t[1]-t[5])/6;let a=i,s=t[4];const r=t[5],n=t[6];e.push(`${s} ${r+a} m`);do{s+=2;a=0===a?i:0;e.push(`${s} ${r+a} l`)}while(s{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[2],t[7],t[3]]}})}}else this.data.popupRef=null}}class StampAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.annotationType=v;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1}static async createImage(e,t){const{width:i,height:a}=e,s=new OffscreenCanvas(i,a),r=s.getContext("2d",{alpha:!0});r.drawImage(e,0,0);const n=r.getImageData(0,0,i,a).data,g=new Uint32Array(n.buffer),o=g.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>255!=(255&e));if(o){r.fillStyle="white";r.fillRect(0,0,i,a);r.drawImage(e,0,0)}const c=s.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),C=Name.get("XObject"),h=Name.get("Image"),l=new Dict(t);l.set("Type",C);l.set("Subtype",h);l.set("BitsPerComponent",8);l.set("ColorSpace",Name.get("DeviceRGB"));l.set("Filter",Name.get("DCTDecode"));l.set("BBox",[0,0,i,a]);l.set("Width",i);l.set("Height",a);let Q=null;if(o){const e=new Uint8Array(g.length);if(FeatureTest.isLittleEndian)for(let t=0,i=g.length;t>>24;else for(let t=0,i=g.length;t=0&&r<=1?r:null}}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const i=t.firstChild;return"value"===i?.nodeName?t.children.map((e=>decodeString(e.textContent))):decodeString(t.textContent)}}class XRef{#K=null;constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMap=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=this._newTemporaryRefNum;e0;){const[n,g]=r;if(!Number.isInteger(n)||!Number.isInteger(g))throw new FormatError(`Invalid XRef range fields: ${n}, ${g}`);if(!Number.isInteger(i)||!Number.isInteger(a)||!Number.isInteger(s))throw new FormatError(`Invalid XRef entry fields length: ${n}, ${g}`);for(let r=t.entryNum;r=e.length);){i+=String.fromCharCode(a);a=e[t]}return i}function skipUntil(e,t,i){const a=i.length,s=e.length;let r=0;for(;t=a)break;t++;r++}return r}const e=/\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g,t=/\b(startxref|\d+\s+\d+\s+obj)\b/g,i=/^(\d+)\s+(\d+)\s+obj\b/,a=new Uint8Array([116,114,97,105,108,101,114]),s=new Uint8Array([115,116,97,114,116,120,114,101,102]),r=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const n=this.stream;n.pos=0;const g=n.getBytes(),o=bytesToString(g),c=g.length;let C=n.start;const h=[],l=[];for(;C=c)break;Q=g[C]}while(10!==Q&&13!==Q);continue}const E=readToken(g,C);let u;if(E.startsWith("xref")&&(4===E.length||/\s/.test(E[4]))){C+=skipUntil(g,C,a);h.push(C);C+=skipUntil(g,C,s)}else if(u=i.exec(E)){const t=0|u[1],i=0|u[2],a=C+E.length;let s,h=!1;if(this.entries[t]){if(this.entries[t].gen===i)try{new Parser({lexer:new Lexer(n.makeSubStream(a))}).getObj();h=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${E}): "${e}".`):h=!0}}else h=!0;h&&(this.entries[t]={offset:C-n.start,gen:i,uncompressed:!0});e.lastIndex=a;const Q=e.exec(o);if(Q){s=e.lastIndex+1-C;if("endobj"!==Q[1]){warn(`indexObjects: Found "${Q[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);s-=Q[1].length+1}}else s=c-C;const d=g.subarray(C,C+s),f=skipUntil(d,0,r);if(f0?Math.max(...this._xrefStms):null)}getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is not a reference");const i=e.num,a=this._cacheMap.get(i);if(void 0!==a){a instanceof Dict&&!a.objId&&(a.objId=e.toString());return a}let s=this.getEntry(i);if(null===s){this._cacheMap.set(i,s);return s}if(this._pendingRefs.has(e)){this._pendingRefs.remove(e);warn(`Ignoring circular reference: ${e}.`);return ft}this._pendingRefs.put(e);try{s=s.uncompressed?this.fetchUncompressed(e,s,t):this.fetchCompressed(e,s,t);this._pendingRefs.remove(e)}catch(t){this._pendingRefs.remove(e);throw t}s instanceof Dict?s.objId=e.toString():s instanceof BaseStream&&(s.dict.objId=e.toString());return s}fetchUncompressed(e,t,i=!1){const a=e.gen;let s=e.num;if(t.gen!==a){const r=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this._getBoundingBox("MediaBox")||sg)}get cropBox(){return shadow(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let e=this.pageDict.get("UserUnit");("number"!=typeof e||e<=0)&&(e=1);return shadow(this,"userUnit",e)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const i=Util.intersect(e,t);if(i&&i[2]-i[0]>0&&i[3]-i[1]>0)return shadow(this,"view",i);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this._getInheritableProperty("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}_onSubStreamError(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}getContentStream(){return this.pdfManager.ensure(this,"content").then((e=>e instanceof BaseStream?e:Array.isArray(e)?new StreamsSequenceStream(e,this._onSubStreamError.bind(this)):new NullStream))}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}#T(e,t,i){for(const a of e)if(a.id){const e=Ref.fromString(a.id);if(!e){warn(`A non-linked annotation cannot be modified: ${a.id}`);continue}if(a.deleted){t.put(e,e);continue}i?.put(e);a.ref=e;delete a.id}}async saveNewAnnotations(e,t,i,a){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const s=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),r=new RefSetCache,n=new RefSet;this.#T(i,r,n);const g=this.pageDict,o=this.annotations.filter((e=>!(e instanceof Ref&&r.has(e)))),c=await AnnotationFactory.saveNewAnnotations(s,t,i,a);for(const{ref:e}of c.annotations)e instanceof Ref&&!n.has(e)&&o.push(e);const C=g.get("Annots");g.set("Annots",o);const h=[];await writeObject(this.ref,g,h,this.xref);C&&g.set("Annots",C);const l=c.dependencies;l.push({ref:this.ref,data:h.join("")},...c.annotations);for(const e of r)l.push({ref:e,data:null});return l}save(e,t,i){const a=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){const s=[];for(const r of e)r.mustBePrinted(i)&&s.push(r.save(a,t,i).catch((function(e){warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null})));return Promise.all(s).then((function(e){return e.filter((e=>!!e))}))}))}loadResources(e){this.resourcesPromise||=this.pdfManager.ensure(this,"resources");return this.resourcesPromise.then((()=>new ObjectLoader(this.resources,e,this.xref).load()))}getOperatorList({handler:e,sink:t,task:i,intent:a,cacheKey:s,annotationStorage:r=null}){const n=this.getContentStream(),C=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),Q=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),u=this.xfaFactory?null:getNewAnnotationsMap(r),d=u?.get(this.pageIndex);let f=Promise.resolve(null),p=null;if(d){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const a=new Set;for(const{bitmapId:e,bitmap:t}of d)!e||t||a.has(e)||a.add(e);const{isOffscreenCanvasSupported:s}=this.evaluatorOptions;if(a.size>0){const e=d.slice();for(const[t,i]of r)t.startsWith(E)&&i.bitmap&&a.has(i.bitmapId)&&e.push(i);t=AnnotationFactory.generateImages(e,this.xref,s)}else t=AnnotationFactory.generateImages(d,this.xref,s);p=new RefSet;this.#T(d,p,null);f=e.then((e=>e?AnnotationFactory.printNewAnnotations(e,Q,i,d,t):null))}const m=Promise.all([n,C]).then((([r])=>{const n=new OperatorList(a,t);e.send("StartRenderPage",{transparency:Q.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:s});return Q.getOperatorList({stream:r,task:i,resources:this.resources,operatorList:n}).then((function(){return n}))}));return Promise.all([m,this._parsedAnnotations,f]).then((function([e,t,s]){if(s){t=t.filter((e=>!(e.ref&&p.has(e.ref))));for(let e=0,i=s.length;ee.ref&&isRefsEqual(e.ref,a.refToReplace)));if(r>=0){t.splice(r,1,a);s.splice(e--,1);i--}}}t=t.concat(s)}if(0===t.length||a&l){e.flush(!0);return{length:e.totalLength}}const n=!!(a&h),C=!!(a&g),E=!!(a&o),u=!!(a&c),d=[];for(const e of t)(C||E&&e.mustBeViewed(r,n)||u&&e.mustBePrinted(r))&&d.push(e.getOperatorList(Q,i,a,n,r).catch((function(e){warn(`getOperatorList - ignoring annotation data during "${i.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}})));return Promise.all(d).then((function(t){let i=!1,a=!1;for(const{opList:s,separateForm:r,separateCanvas:n}of t){e.addOpList(s);i||=r;a||=n}e.flush(!0,{form:i,canvas:a});return{length:e.totalLength}}))}))}async extractTextContent({handler:e,task:t,includeMarkedContent:i,disableNormalization:a,sink:s}){const r=this.getContentStream(),n=this.loadResources(["ExtGState","Font","Properties","XObject"]),g=this.pdfManager.ensureCatalog("lang"),[o,,c]=await Promise.all([r,n,g]);return new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:o,task:t,resources:this.resources,includeMarkedContent:i,disableNormalization:a,sink:s,viewBox:this.view,lang:c})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;return(await this.pdfManager.ensure(this,"_parseStructTree",[e])).serializable}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,i){const a=await this._parsedAnnotations;if(0===a.length)return a;const s=[],r=[];let n;const C=!!(i&g),h=!!(i&o),l=!!(i&c);for(const i of a){const a=C||h&&i.viewable;(a||l&&i.printable)&&s.push(i.data);if(i.hasTextContent&&a){n||=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});r.push(i.extractTextContent(n,t,[-1/0,-1/0,1/0,1/0]).catch((function(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)})))}}await Promise.all(r);return s}get annotations(){const e=this._getInheritableProperty("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then((async e=>{if(0===e.length)return e;const t=await this.pdfManager.ensureDoc("annotationGlobals");if(!t)return[];const i=[];for(const a of e)i.push(AnnotationFactory.create(this.xref,a,t,this._localIdFactory,!1,this.ref).catch((function(e){warn(`_parsedAnnotations: "${e}".`);return null})));const a=[];let s,r;for(const e of await Promise.all(i))e&&(e instanceof WidgetAnnotation?(r||=[]).push(e):e instanceof PopupAnnotation?(s||=[]).push(e):a.push(e));r&&a.push(...r);s&&a.push(...s);return a})))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,fA))}}const rg=new Uint8Array([37,80,68,70,45]),ng=new Uint8Array([115,116,97,114,116,120,114,101,102]),gg=new Uint8Array([101,110,100,111,98,106]);function find(e,t,i=1024,a=!1){const s=t.length,r=e.peekBytes(i),n=r.length-s;if(n<=0)return!1;if(a){const i=s-1;let a=r.length-1;for(;a>=i;){let n=0;for(;n=s){e.pos+=a-i;return!0}a--}}else{let i=0;for(;i<=n;){let a=0;for(;a=s){e.pos+=i;return!0}i++}}return!1}class PDFDocument{constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);this._pagePromises=new Map;this._version=null;const i={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++i.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,gg)){e.skip(6);let i=e.peekByte();for(;isWhiteSpace(i);){e.pos++;i=e.peekByte()}t=e.pos-e.start}}else{const i=1024,a=ng.length;let s=!1,r=e.end;for(;!s&&r>0;){r-=i-a;r<0&&(r=0);e.pos=r;s=find(e,ng,i,!0)}if(s){e.skip(9);let i;do{i=e.getByte()}while(isWhiteSpace(i));let a="";for(;i>=32&&i<=57;){a+=String.fromCharCode(i);i=e.getByte()}t=parseInt(a,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,rg))return;e.moveStart();e.skip(rg.length);let t,i="";for(;(t=e.getByte())>32&&i.length<7;)i+=String.fromCharCode(t);bt.test(i)?this._version=i:warn(`Invalid PDF header version: ${i}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}_hasOnlyDocumentSignatures(e,t=0){return!!Array.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("_hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this._hasOnlyDocumentSignatures(e.get("Kids"),t)}const i=isName(e.get("FT"),"Sig"),a=e.get("Rect"),s=Array.isArray(a)&&a.every((e=>0===e));return i&&s}))}get _xfaStreams(){const e=this.catalog.acroForm;if(!e)return null;const t=e.get("XFA"),i={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof BaseStream&&!t.isEmpty){i["xdp:xdp"]=t;return i}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,a=t.length;e{h.set(e,t)}));const l=[];for(const[e,i]of h){const s=i.get("FontDescriptor");if(!(s instanceof Dict))continue;let r=s.get("FontFamily");r=r.replaceAll(/[ ]+(\d)/g,"$1");const n={fontFamily:r,fontWeight:s.get("FontWeight"),italicAngle:-s.get("ItalicAngle")};validateCSSFont(n)&&l.push(g.handleSetFont(a,[Name.get(e),1],null,o,t,C,null,n).catch((function(e){warn(`loadXfaFonts: "${e}".`);return null})))}await Promise.all(l);const Q=this.xfaFactory.setFonts(c);if(!Q)return;n.ignoreErrors=!0;l.length=0;c.length=0;const E=new Set;for(const e of Q)getXfaFontName(`${e}-Regular`)||E.add(e);E.size&&Q.push("PdfJS-Fallback");for(const e of Q)if(!E.has(e))for(const i of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const s=`${e}-${i.name}`,r=getXfaFontDict(s);l.push(g.handleSetFont(a,[Name.get(s),1],null,o,t,C,r,{fontFamily:e,fontWeight:i.fontWeight,italicAngle:i.italicAngle}).catch((function(e){warn(`loadXfaFonts: "${e}".`);return null})))}await Promise.all(l);this.xfaFactory.appendFonts(c,E)}async serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this._version}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return shadow(this,"formInfo",e);try{const i=t.get("Fields"),a=Array.isArray(i)&&i.length>0;e.hasFields=a;const s=t.get("XFA");e.hasXfa=Array.isArray(s)&&s.length>0||s instanceof BaseStream&&!s.isEmpty;const r=!!(1&t.get("SigFlags")),n=r&&this._hasOnlyDocumentSignatures(i);e.hasAcroForm=a&&!n;e.hasSignatures=r}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const e={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};let t;try{t=this.xref.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(t instanceof Dict))return shadow(this,"documentInfo",e);for(const i of t.getKeys()){const a=t.get(i);switch(i){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof a){e[i]=stringToPDFString(a);continue}break;case"Trapped":if(a instanceof Name){e[i]=a;continue}break;default:let t;switch(typeof a){case"string":t=stringToPDFString(a);break;case"number":case"boolean":t=a;break;default:a instanceof Name&&(t=a)}if(void 0===t){warn(`Bad value, for custom key "${i}", in Info: ${a}.`);continue}e.Custom||(e.Custom=Object.create(null));e.Custom[i]=t;continue}warn(`Bad value, for key "${i}", in Info: ${a}.`)}return shadow(this,"documentInfo",e)}get fingerprints(){function validate(e){return"string"==typeof e&&e.length>0&&"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"!==e}function hexString(e){const t=[];for(const i of e){const e=i.toString(16);t.push(e.padStart(2,"0"))}return t.join("")}const e=this.xref.trailer.get("ID");let t,i;if(Array.isArray(e)&&validate(e[0])){t=stringToBytes(e[0]);e[1]!==e[0]&&validate(e[1])&&(i=stringToBytes(e[1]))}else t=Hs(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[hexString(t),i?hexString(i):null])}async _getLinearizationPage(e){const{catalog:t,linearization:i,xref:a}=this,s=Ref.get(i.objectNumberFirst,0);try{const e=await a.fetchAsync(s);if(e instanceof Dict){let i=e.getRaw("Type");i instanceof Ref&&(i=await a.fetchAsync(i));if(isName(i,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(s)||t.pageKidsCountCache.put(s,1);t.pageIndexCache.has(s)||t.pageIndexCache.put(s,0);return[e,s]}}throw new FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(i){warn(`_getLinearizationPage: "${i.message}".`);return t.getPageDict(e)}}getPage(e){const t=this._pagePromises.get(e);if(t)return t;const{catalog:i,linearization:a,xfaFactory:s}=this;let r;r=s?Promise.resolve([Dict.empty,null]):a?.pageFirst===e?this._getLinearizationPage(e):i.getPageDict(e);r=r.then((([t,a])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:a,globalIdFactory:this._globalIdFactory,fontCache:i.fontCache,builtInCMapCache:i.builtInCMapCache,standardFontDataCache:i.standardFontDataCache,globalImageCache:i.globalImageCache,systemFontCache:i.systemFontCache,nonBlendModesSet:i.nonBlendModesSet,xfaFactory:s})));this._pagePromises.set(e,r);return r}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this._pagePromises.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:i}=this;t.setActualNumPages();let a;try{await Promise.all([i.ensureDoc("xfaFactory"),i.ensureDoc("linearization"),i.ensureCatalog("numPages")]);if(this.xfaFactory)return;a=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(a))throw new FormatError("Page count is not an integer.");if(a<=1)return;await this.getPage(a-1)}catch(s){this._pagePromises.delete(a-1);await this.cleanup();if(s instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${a}.`);let r;try{r=await t.getAllPageDicts(e)}catch(i){if(i instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[a,s]]of r){let r;if(a instanceof Error){r=Promise.reject(a);r.catch((()=>{}))}else r=Promise.resolve(new Page({pdfManager:i,xref:this.xref,pageIndex:e,pageDict:a,ref:s,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this._pagePromises.set(e,r)}t.setActualNumPages(r.size)}}fontFallback(e,t){return this.catalog.fontFallback(e,t)}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#q(e,t,i,a,s){const{xref:r}=this;if(!(t instanceof Ref)||s.has(t))return;s.put(t);const n=await r.fetchAsync(t);if(!(n instanceof Dict))return;if(n.has("T")){const t=stringToPDFString(await n.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let t=n;for(;;){t=t.getRaw("Parent");if(t instanceof Ref){if(s.has(t))break;t=await r.fetchAsync(t)}if(!(t instanceof Dict))break;if(t.has("T")){const i=stringToPDFString(await t.getAsync("T"));e=""===e?i:`${e}.${i}`;break}}}i.has(e)||i.set(e,[]);i.get(e).push(AnnotationFactory.create(r,t,a,null,!0,null).then((e=>e?.getFieldObject())).catch((function(e){warn(`#collectFieldObjects: "${e}".`);return null})));if(!n.has("Kids"))return;const g=await n.getAsync("Kids");if(Array.isArray(g))for(const t of g)await this.#q(e,t,i,a,s)}get fieldObjects(){if(!this.formInfo.hasFields)return shadow(this,"fieldObjects",Promise.resolve(null));return shadow(this,"fieldObjects",Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureCatalog("acroForm")]).then((async([e,t])=>{if(!e)return null;const i=new RefSet,a=Object.create(null),s=new Map;for(const a of await t.getAsync("Fields"))await this.#q("",a,s,e,i);const r=[];for(const[e,t]of s)r.push(Promise.all(t).then((t=>{(t=t.filter((e=>!!e))).length>0&&(a[e]=t)})));await Promise.all(r);return a})))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t&&Object.values(t).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm;if(!e?.has("CO"))return shadow(this,"calculationOrderIds",null);const t=e.get("CO");if(!Array.isArray(t)||0===t.length)return shadow(this,"calculationOrderIds",null);const i=[];for(const e of t)e instanceof Ref&&i.push(e.toString());return 0===i.length?shadow(this,"calculationOrderIds",null):shadow(this,"calculationOrderIds",i)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class BasePdfManager{constructor(e){this.constructor===BasePdfManager&&unreachable("Cannot initialize BasePdfManager.");this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e.docBaseUrl);this._docId=e.docId;this._password=e.password;this.enableXfa=e.enableXfa;e.evaluatorOptions.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;this.evaluatorOptions=Object.freeze(e.evaluatorOptions)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}get catalog(){return this.pdfDocument.catalog}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}loadXfaFonts(e,t){return this.pdfDocument.loadXfaFonts(e,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(e){return this.pdfDocument.serializeXfaData(e)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,i){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,i){const a=e[t];return"function"==typeof a?a.apply(e,i):a}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,i){try{const a=e[t];return"function"==typeof a?a.apply(e,i):a}catch(a){if(!(a instanceof MissingDataException))throw a;await this.requestRange(a.begin,a.end);return this.ensure(e,t,i)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const og=1,Ig=2,cg=1,Cg=2,hg=3,Bg=4,lg=5,Qg=6,Eg=7,ug=8;function wrapReason(e){e instanceof Error||"object"==typeof e&&null!==e||unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');switch(e.name){case"AbortException":return new AbortException(e.message);case"MissingPDFException":return new MissingPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"UnexpectedResponseException":return new UnexpectedResponseException(e.message,e.status);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details);default:return new UnknownErrorException(e.message,e.toString())}}class MessageHandler{constructor(e,t,i){this.sourceName=e;this.targetName=t;this.comObj=i;this.callbackId=1;this.streamId=1;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);this._onComObjOnMessage=e=>{const t=e.data;if(t.targetName!==this.sourceName)return;if(t.stream){this.#O(t);return}if(t.callback){const e=t.callbackId,i=this.callbackCapabilities[e];if(!i)throw new Error(`Cannot resolve callback ${e}`);delete this.callbackCapabilities[e];if(t.callback===og)i.resolve(t.data);else{if(t.callback!==Ig)throw new Error("Unexpected callback case");i.reject(wrapReason(t.reason))}return}const a=this.actionHandler[t.action];if(!a)throw new Error(`Unknown action from worker: ${t.action}`);if(t.callbackId){const e=this.sourceName,s=t.sourceName;new Promise((function(e){e(a(t.data))})).then((function(a){i.postMessage({sourceName:e,targetName:s,callback:og,callbackId:t.callbackId,data:a})}),(function(a){i.postMessage({sourceName:e,targetName:s,callback:Ig,callbackId:t.callbackId,reason:wrapReason(a)})}))}else t.streamId?this.#P(t):a(t.data)};i.addEventListener("message",this._onComObjOnMessage)}on(e,t){const i=this.actionHandler;if(i[e])throw new Error(`There is already an actionName called "${e}"`);i[e]=t}send(e,t,i){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},i)}sendWithPromise(e,t,i){const a=this.callbackId++,s=Promise.withResolvers();this.callbackCapabilities[a]=s;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:a,data:t},i)}catch(e){s.reject(e)}return s.promise}sendWithStream(e,t,i,a){const s=this.streamId++,r=this.sourceName,n=this.targetName,g=this.comObj;return new ReadableStream({start:i=>{const o=Promise.withResolvers();this.streamControllers[s]={controller:i,startCall:o,pullCall:null,cancelCall:null,isClosed:!1};g.postMessage({sourceName:r,targetName:n,action:e,streamId:s,data:t,desiredSize:i.desiredSize},a);return o.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[s].pullCall=t;g.postMessage({sourceName:r,targetName:n,stream:Qg,streamId:s,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[s].cancelCall=t;this.streamControllers[s].isClosed=!0;g.postMessage({sourceName:r,targetName:n,stream:cg,streamId:s,reason:wrapReason(e)});return t.promise}},i)}#P(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comObj,r=this,n=this.actionHandler[e.action],g={enqueue(e,r=1,n){if(this.isCancelled)return;const g=this.desiredSize;this.desiredSize-=r;if(g>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}s.postMessage({sourceName:i,targetName:a,stream:Bg,streamId:t,chunk:e},n)},close(){if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:i,targetName:a,stream:hg,streamId:t});delete r.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;s.postMessage({sourceName:i,targetName:a,stream:lg,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};g.sinkCapability.resolve();g.ready=g.sinkCapability.promise;this.streamSinks[t]=g;new Promise((function(t){t(n(e.data,g))})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:ug,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:ug,streamId:t,reason:wrapReason(e)})}))}#O(e){const t=e.streamId,i=this.sourceName,a=e.sourceName,s=this.comObj,r=this.streamControllers[t],n=this.streamSinks[t];switch(e.stream){case ug:e.success?r.startCall.resolve():r.startCall.reject(wrapReason(e.reason));break;case Eg:e.success?r.pullCall.resolve():r.pullCall.reject(wrapReason(e.reason));break;case Qg:if(!n){s.postMessage({sourceName:i,targetName:a,stream:Eg,streamId:t,success:!0});break}n.desiredSize<=0&&e.desiredSize>0&&n.sinkCapability.resolve();n.desiredSize=e.desiredSize;new Promise((function(e){e(n.onPull?.())})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:Eg,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:Eg,streamId:t,reason:wrapReason(e)})}));break;case Bg:assert(r,"enqueue should have stream controller");if(r.isClosed)break;r.controller.enqueue(e.chunk);break;case hg:assert(r,"close should have stream controller");if(r.isClosed)break;r.isClosed=!0;r.controller.close();this.#W(r,t);break;case lg:assert(r,"error should have stream controller");r.controller.error(wrapReason(e.reason));this.#W(r,t);break;case Cg:e.success?r.cancelCall.resolve():r.cancelCall.reject(wrapReason(e.reason));this.#W(r,t);break;case cg:if(!n)break;new Promise((function(t){t(n.onCancel?.(wrapReason(e.reason)))})).then((function(){s.postMessage({sourceName:i,targetName:a,stream:Cg,streamId:t,success:!0})}),(function(e){s.postMessage({sourceName:i,targetName:a,stream:Cg,streamId:t,reason:wrapReason(e)})}));n.sinkCapability.reject(wrapReason(e.reason));n.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#W(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once.");this._fullRequestReader=new PDFWorkerStreamReader(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const i=new PDFWorkerStreamRangeReader(e,t,this._msgHandler);this._rangeRequestReaders.push(i);return i}cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}}class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader{constructor(e,t,i){this._msgHandler=i;this.onProgress=null;const a=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=a.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static setup(e,t){let i=!1;e.on("test",(function(t){if(!i){i=!0;e.send("test",t instanceof Uint8Array)}}));e.on("configure",(function(e){!function setVerbosityLevel(e){Number.isInteger(e)&&(st=e)}(e.verbosity)}));e.on("GetDocRequest",(function(e){return WorkerMessageHandler.createDocumentHandler(e,t)}))}static createDocumentHandler(e,t){let i,a=!1,s=null;const r=new Set,n=getVerbosityLevel(),{docId:g,apiVersion:o}=e,c="4.4.168";if(o!==c)throw new Error(`The API version "${o}" does not match the Worker version "${c}".`);const C=[];for(const e in[])C.push(e);if(C.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+C.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");const h=g+"_worker";let l=new MessageHandler(h,g,t);function ensureNotTerminated(){if(a)throw new Error("Worker was terminated")}function startWorkerTask(e){r.add(e)}function finishWorkerTask(e){e.finish();r.delete(e)}async function loadDocument(e){await i.ensureDoc("checkHeader");await i.ensureDoc("parseStartXRef");await i.ensureDoc("parse",[e]);await i.ensureDoc("checkFirstPage",[e]);await i.ensureDoc("checkLastPage",[e]);const t=await i.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaFonts");startWorkerTask(e);await Promise.all([i.loadXfaFonts(l,e).catch((e=>{})).then((()=>finishWorkerTask(e))),i.loadXfaImages()])}const[a,s]=await Promise.all([i.ensureDoc("numPages"),i.ensureDoc("fingerprints")]);return{numPages:a,fingerprints:s,htmlForXfa:t?await i.ensureDoc("htmlForXfa"):null}}function getPdfManager({data:e,password:t,disableAutoFetch:i,rangeChunkSize:a,length:r,docBaseUrl:n,enableXfa:o,evaluatorOptions:c}){const C={source:null,disableAutoFetch:i,docBaseUrl:n,docId:g,enableXfa:o,evaluatorOptions:c,handler:l,length:r,password:t,rangeChunkSize:a},h=Promise.withResolvers();let Q;if(e){try{C.source=e;Q=new LocalPdfManager(C);h.resolve(Q)}catch(e){h.reject(e)}return h.promise}let E,u=[];try{E=new PDFWorkerStream(l)}catch(e){h.reject(e);return h.promise}const d=E.getFullReader();d.headersReady.then((function(){if(d.isRangeSupported){C.source=E;C.length=d.contentLength;C.disableAutoFetch||=d.isStreamingSupported;Q=new NetworkPdfManager(C);for(const e of u)Q.sendProgressiveData(e);u=[];h.resolve(Q);s=null}})).catch((function(e){h.reject(e);s=null}));let f=0;new Promise((function(e,t){const readChunk=function({value:e,done:i}){try{ensureNotTerminated();if(i){Q||function(){const e=arrayBuffersToBytes(u);r&&e.length!==r&&warn("reported HTTP length is different from actual");try{C.source=e;Q=new LocalPdfManager(C);h.resolve(Q)}catch(e){h.reject(e)}u=[]}();s=null;return}f+=e.byteLength;d.isStreamingSupported||l.send("DocProgress",{loaded:f,total:Math.max(f,d.contentLength||0)});Q?Q.sendProgressiveData(e):u.push(e);d.read().then(readChunk,t)}catch(e){t(e)}};d.read().then(readChunk,t)})).catch((function(e){h.reject(e);s=null}));s=function(e){E.cancelAllRequests(e)};return h.promise}l.on("GetPage",(function(e){return i.getPage(e.pageIndex).then((function(e){return Promise.all([i.ensure(e,"rotate"),i.ensure(e,"ref"),i.ensure(e,"userUnit"),i.ensure(e,"view")]).then((function([e,t,i,a]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:i,view:a}}))}))}));l.on("GetPageIndex",(function(e){const t=Ref.get(e.num,e.gen);return i.ensureCatalog("getPageIndex",[t])}));l.on("GetDestinations",(function(e){return i.ensureCatalog("destinations")}));l.on("GetDestination",(function(e){return i.ensureCatalog("getDestination",[e.id])}));l.on("GetPageLabels",(function(e){return i.ensureCatalog("pageLabels")}));l.on("GetPageLayout",(function(e){return i.ensureCatalog("pageLayout")}));l.on("GetPageMode",(function(e){return i.ensureCatalog("pageMode")}));l.on("GetViewerPreferences",(function(e){return i.ensureCatalog("viewerPreferences")}));l.on("GetOpenAction",(function(e){return i.ensureCatalog("openAction")}));l.on("GetAttachments",(function(e){return i.ensureCatalog("attachments")}));l.on("GetDocJSActions",(function(e){return i.ensureCatalog("jsActions")}));l.on("GetPageJSActions",(function({pageIndex:e}){return i.getPage(e).then((function(e){return i.ensure(e,"jsActions")}))}));l.on("GetOutline",(function(e){return i.ensureCatalog("documentOutline")}));l.on("GetOptionalContentConfig",(function(e){return i.ensureCatalog("optionalContentConfig")}));l.on("GetPermissions",(function(e){return i.ensureCatalog("permissions")}));l.on("GetMetadata",(function(e){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}));l.on("GetMarkInfo",(function(e){return i.ensureCatalog("markInfo")}));l.on("GetData",(function(e){return i.requestLoadedStream().then((function(e){return e.bytes}))}));l.on("GetAnnotations",(function({pageIndex:e,intent:t}){return i.getPage(e).then((function(i){const a=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(a);return i.getAnnotationsData(l,a,t).then((e=>{finishWorkerTask(a);return e}),(e=>{finishWorkerTask(a);throw e}))}))}));l.on("GetFieldObjects",(function(e){return i.ensureDoc("fieldObjects")}));l.on("HasJSActions",(function(e){return i.ensureDoc("hasJSActions")}));l.on("GetCalculationOrderIds",(function(e){return i.ensureDoc("calculationOrderIds")}));l.on("SaveDocument",(async function({isPureXfa:e,numPages:t,annotationStorage:a,filename:s}){const r=[i.requestLoadedStream(),i.ensureCatalog("acroForm"),i.ensureCatalog("acroFormRef"),i.ensureDoc("startXRef"),i.ensureDoc("xref"),i.ensureDoc("linearization"),i.ensureCatalog("structTreeRoot")],n=[],g=e?null:getNewAnnotationsMap(a),[o,c,C,h,Q,E,u]=await Promise.all(r),d=Q.trailer.getRaw("Root")||null;let f;if(g){u?await u.canUpdateStructTree({pdfManager:i,xref:Q,newAnnotationsByPage:g})&&(f=u):await StructTreeRoot.canCreateStructureTree({catalogRef:d,pdfManager:i,newAnnotationsByPage:g})&&(f=null);const e=AnnotationFactory.generateImages(a.values(),Q,i.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===f?n:[];for(const[a,s]of g)t.push(i.getPage(a).then((t=>{const i=new WorkerTask(`Save (editor): page ${a}`);return t.saveNewAnnotations(l,i,s,e).finally((function(){finishWorkerTask(i)}))})));null===f?n.push(Promise.all(t).then((async e=>{await StructTreeRoot.createStructureTree({newAnnotationsByPage:g,xref:Q,catalogRef:d,pdfManager:i,newRefs:e});return e}))):f&&n.push(Promise.all(t).then((async e=>{await f.updateStructureTree({newAnnotationsByPage:g,pdfManager:i,newRefs:e});return e})))}if(e)n.push(i.serializeXfaData(a));else for(let e=0;ee.needAppearances)),D=c instanceof Dict&&c.get("XFA")||null;let b=null,F=!1;if(Array.isArray(D)){for(let e=0,t=D.length;e{"string"==typeof i&&(e[t]=stringToPDFString(i))}));S={rootRef:d,encryptRef:Q.trailer.getRaw("Encrypt")||null,newRef:Q.getNewTemporaryRef(),infoRef:Q.trailer.getRaw("Info")||null,info:e,fileIds:Q.trailer.get("ID")||null,startXRef:E?h:Q.lastXRefStreamPos??h,filename:s}}return incrementalUpdate({originalData:o.bytes,xrefInfo:S,newRefs:m,xref:Q,hasXfa:!!D,xfaDatasetsRef:b,hasXfaDatasetsEntry:F,needAppearances:w,acroFormRef:C,acroForm:c,xfaData:y,useXrefStream:isDict(Q.topDict,"XRef")}).finally((()=>{Q.resetNewTemporaryRef()}))}));l.on("GetOperatorList",(function(e,t){const a=e.pageIndex;i.getPage(a).then((function(i){const s=new WorkerTask(`GetOperatorList: page ${a}`);startWorkerTask(s);const r=n>=pA.INFOS?Date.now():0;i.getOperatorList({handler:l,sink:t,task:s,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage}).then((function(e){finishWorkerTask(s);r&&info(`page=${a+1} - getOperatorList: time=${Date.now()-r}ms, len=${e.length}`);t.close()}),(function(e){finishWorkerTask(s);s.terminated||t.error(e)}))}))}));l.on("GetTextContent",(function(e,t){const{pageIndex:a,includeMarkedContent:s,disableNormalization:r}=e;i.getPage(a).then((function(e){const i=new WorkerTask("GetTextContent: page "+a);startWorkerTask(i);const g=n>=pA.INFOS?Date.now():0;e.extractTextContent({handler:l,task:i,sink:t,includeMarkedContent:s,disableNormalization:r}).then((function(){finishWorkerTask(i);g&&info(`page=${a+1} - getTextContent: time=`+(Date.now()-g)+"ms");t.close()}),(function(e){finishWorkerTask(i);i.terminated||t.error(e)}))}))}));l.on("GetStructTree",(function(e){return i.getPage(e.pageIndex).then((function(e){return i.ensure(e,"getStructTree")}))}));l.on("FontFallback",(function(e){return i.fontFallback(e.id,l)}));l.on("Cleanup",(function(e){return i.cleanup(!0)}));l.on("Terminate",(function(e){a=!0;const t=[];if(i){i.terminate(new AbortException("Worker was terminated."));const e=i.cleanup();t.push(e);i=null}else clearGlobalCaches();s&&s(new AbortException("Worker was terminated."));for(const e of r){t.push(e.finished);e.terminate()}return Promise.all(t).then((function(){l.destroy();l=null}))}));l.on("Ready",(function(t){!function setupDoc(e){function onSuccess(e){ensureNotTerminated();l.send("GetDoc",{pdfInfo:e})}function onFailure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);l.sendWithPromise("PasswordRequest",e).then((function({password:e}){finishWorkerTask(t);i.updatePassword(e);pdfManagerReady()})).catch((function(){finishWorkerTask(t);l.send("DocException",e)}))}else e instanceof InvalidPDFException||e instanceof MissingPDFException||e instanceof UnexpectedResponseException||e instanceof UnknownErrorException?l.send("DocException",e):l.send("DocException",new UnknownErrorException(e.message,e.toString()))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,(function(e){ensureNotTerminated();e instanceof XRefParseException?i.requestLoadedStream().then((function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)})):onFailure(e)}))}ensureNotTerminated();getPdfManager(e).then((function(e){if(a){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}i=e;i.requestLoadedStream(!0).then((e=>{l.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(pdfManagerReady,onFailure)}(e);e=null}));return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);WorkerMessageHandler.setup(t,e);t.send("ready",null)}}"undefined"==typeof window&&!t&&"undefined"!=typeof self&&function isMessagePort(e){return"function"==typeof e.postMessage&&"onmessage"in e}(self)&&WorkerMessageHandler.initializeFromPort(self);var dg=__webpack_exports__.WorkerMessageHandler;export{dg as WorkerMessageHandler}; \ No newline at end of file + */ var e = { + d: (t, i) => { + for (var a in i) + e.o(i, a) && + !e.o(t, a) && + Object.defineProperty(t, a, { enumerable: !0, get: i[a] }); + }, + o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), + }, + __webpack_exports__ = (globalThis.pdfjsWorker = {}); +e.d(__webpack_exports__, { WorkerMessageHandler: () => WorkerMessageHandler }); +const t = !( + "object" != typeof process || + process + "" != "[object process]" || + process.versions.nw || + (process.versions.electron && process.type && "browser" !== process.type) + ), + i = [1, 0, 0, 1, 0, 0], + a = [0.001, 0, 0, 0.001, 0, 0], + s = 1.35, + r = 0.35, + n = 0.25925925925925924, + g = 1, + o = 2, + c = 4, + C = 8, + h = 16, + l = 64, + Q = 256, + E = "pdfjs_internal_editor_", + u = 3, + d = 9, + f = 13, + p = 15, + m = { + PRINT: 4, + MODIFY_CONTENTS: 8, + COPY: 16, + MODIFY_ANNOTATIONS: 32, + FILL_INTERACTIVE_FORMS: 256, + COPY_FOR_ACCESSIBILITY: 512, + ASSEMBLE: 1024, + PRINT_HIGH_QUALITY: 2048, + }, + y = 0, + w = 4, + D = 1, + b = 2, + F = 3, + S = 1, + k = 2, + R = 3, + N = 4, + G = 5, + x = 6, + U = 7, + M = 8, + L = 9, + H = 10, + J = 11, + Y = 12, + v = 13, + K = 14, + T = 15, + q = 16, + O = 17, + W = 20, + j = "Group", + X = "R", + Z = 1, + V = 2, + z = 4, + _ = 16, + $ = 32, + AA = 128, + eA = 512, + tA = 1, + iA = 2, + aA = 4096, + sA = 8192, + rA = 32768, + nA = 65536, + gA = 131072, + oA = 1048576, + IA = 2097152, + cA = 8388608, + CA = 16777216, + hA = 1, + BA = 2, + lA = 3, + QA = 4, + EA = 5, + uA = { + E: "Mouse Enter", + X: "Mouse Exit", + D: "Mouse Down", + U: "Mouse Up", + Fo: "Focus", + Bl: "Blur", + PO: "PageOpen", + PC: "PageClose", + PV: "PageVisible", + PI: "PageInvisible", + K: "Keystroke", + F: "Format", + V: "Validate", + C: "Calculate", + }, + dA = { + WC: "WillClose", + WS: "WillSave", + DS: "DidSave", + WP: "WillPrint", + DP: "DidPrint", + }, + fA = { O: "PageOpen", C: "PageClose" }, + pA = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }, + mA = { NONE: 0, BINARY: 1 }, + yA = 1, + wA = 2, + DA = 3, + bA = 4, + FA = 5, + SA = 6, + kA = 7, + RA = 8, + NA = 9, + GA = 10, + xA = 11, + UA = 12, + MA = 13, + LA = 14, + HA = 15, + JA = 16, + YA = 17, + vA = 18, + KA = 19, + TA = 20, + qA = 21, + OA = 22, + PA = 23, + WA = 24, + jA = 25, + XA = 26, + ZA = 27, + VA = 28, + zA = 29, + _A = 30, + $A = 31, + Ae = 32, + ee = 33, + te = 34, + ie = 35, + ae = 36, + se = 37, + re = 38, + ne = 39, + ge = 40, + oe = 41, + Ie = 42, + ce = 43, + Ce = 44, + he = 45, + Be = 46, + le = 47, + Qe = 48, + Ee = 49, + ue = 50, + de = 51, + fe = 52, + pe = 53, + me = 54, + ye = 55, + we = 56, + De = 57, + be = 58, + Fe = 59, + Se = 60, + ke = 61, + Re = 62, + Ne = 63, + Ge = 64, + xe = 65, + Ue = 66, + Me = 67, + Le = 68, + He = 69, + Je = 70, + Ye = 71, + ve = 72, + Ke = 73, + Te = 74, + qe = 75, + Oe = 76, + Pe = 77, + We = 80, + je = 81, + Xe = 83, + Ze = 84, + Ve = 85, + ze = 86, + _e = 87, + $e = 88, + At = 89, + et = 90, + tt = 91, + it = 1, + at = 2; +let st = pA.WARNINGS; +function getVerbosityLevel() { + return st; +} +function info(e) { + st >= pA.INFOS && console.log(`Info: ${e}`); +} +function warn(e) { + st >= pA.WARNINGS && console.log(`Warning: ${e}`); +} +function unreachable(e) { + throw new Error(e); +} +function assert(e, t) { + e || unreachable(t); +} +function createValidAbsoluteUrl(e, t = null, i = null) { + if (!e) return null; + try { + if (i && "string" == typeof e) { + if (i.addDefaultProtocol && e.startsWith("www.")) { + const t = e.match(/\./g); + t?.length >= 2 && (e = `http://${e}`); + } + if (i.tryConvertEncoding) + try { + e = stringToUTF8String(e); + } catch {} + } + const a = t ? new URL(e, t) : new URL(e); + if ( + (function _isValidProtocol(e) { + switch (e?.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return !0; + default: + return !1; + } + })(a) + ) + return a; + } catch {} + return null; +} +function shadow(e, t, i, a = !1) { + Object.defineProperty(e, t, { + value: i, + enumerable: !a, + configurable: !0, + writable: !1, + }); + return i; +} +const rt = (function BaseExceptionClosure() { + function BaseException(e, t) { + this.constructor === BaseException && + unreachable("Cannot initialize BaseException."); + this.message = e; + this.name = t; + } + BaseException.prototype = new Error(); + BaseException.constructor = BaseException; + return BaseException; +})(); +class PasswordException extends rt { + constructor(e, t) { + super(e, "PasswordException"); + this.code = t; + } +} +class UnknownErrorException extends rt { + constructor(e, t) { + super(e, "UnknownErrorException"); + this.details = t; + } +} +class InvalidPDFException extends rt { + constructor(e) { + super(e, "InvalidPDFException"); + } +} +class MissingPDFException extends rt { + constructor(e) { + super(e, "MissingPDFException"); + } +} +class UnexpectedResponseException extends rt { + constructor(e, t) { + super(e, "UnexpectedResponseException"); + this.status = t; + } +} +class FormatError extends rt { + constructor(e) { + super(e, "FormatError"); + } +} +class AbortException extends rt { + constructor(e) { + super(e, "AbortException"); + } +} +function bytesToString(e) { + ("object" == typeof e && void 0 !== e?.length) || + unreachable("Invalid argument for bytesToString"); + const t = e.length, + i = 8192; + if (t < i) return String.fromCharCode.apply(null, e); + const a = []; + for (let s = 0; s < t; s += i) { + const r = Math.min(s + i, t), + n = e.subarray(s, r); + a.push(String.fromCharCode.apply(null, n)); + } + return a.join(""); +} +function stringToBytes(e) { + "string" != typeof e && unreachable("Invalid argument for stringToBytes"); + const t = e.length, + i = new Uint8Array(t); + for (let a = 0; a < t; ++a) i[a] = 255 & e.charCodeAt(a); + return i; +} +function string32(e) { + return String.fromCharCode( + (e >> 24) & 255, + (e >> 16) & 255, + (e >> 8) & 255, + 255 & e, + ); +} +function objectSize(e) { + return Object.keys(e).length; +} +class FeatureTest { + static get isLittleEndian() { + return shadow( + this, + "isLittleEndian", + (function isLittleEndian() { + const e = new Uint8Array(4); + e[0] = 1; + return 1 === new Uint32Array(e.buffer, 0, 1)[0]; + })(), + ); + } + static get isEvalSupported() { + return shadow( + this, + "isEvalSupported", + (function isEvalSupported() { + try { + new Function(""); + return !0; + } catch { + return !1; + } + })(), + ); + } + static get isOffscreenCanvasSupported() { + return shadow( + this, + "isOffscreenCanvasSupported", + "undefined" != typeof OffscreenCanvas, + ); + } + static get platform() { + return "undefined" != typeof navigator && + "string" == typeof navigator?.platform + ? shadow(this, "platform", { isMac: navigator.platform.includes("Mac") }) + : shadow(this, "platform", { isMac: !1 }); + } + static get isCSSRoundSupported() { + return shadow( + this, + "isCSSRoundSupported", + globalThis.CSS?.supports?.("width: round(1.5px, 1px)"), + ); + } +} +const nt = Array.from(Array(256).keys(), (e) => + e.toString(16).padStart(2, "0"), +); +class Util { + static makeHexColor(e, t, i) { + return `#${nt[e]}${nt[t]}${nt[i]}`; + } + static scaleMinMax(e, t) { + let i; + if (e[0]) { + if (e[0] < 0) { + i = t[0]; + t[0] = t[2]; + t[2] = i; + } + t[0] *= e[0]; + t[2] *= e[0]; + if (e[3] < 0) { + i = t[1]; + t[1] = t[3]; + t[3] = i; + } + t[1] *= e[3]; + t[3] *= e[3]; + } else { + i = t[0]; + t[0] = t[1]; + t[1] = i; + i = t[2]; + t[2] = t[3]; + t[3] = i; + if (e[1] < 0) { + i = t[1]; + t[1] = t[3]; + t[3] = i; + } + t[1] *= e[1]; + t[3] *= e[1]; + if (e[2] < 0) { + i = t[0]; + t[0] = t[2]; + t[2] = i; + } + t[0] *= e[2]; + t[2] *= e[2]; + } + t[0] += e[4]; + t[1] += e[5]; + t[2] += e[4]; + t[3] += e[5]; + } + static transform(e, t) { + return [ + e[0] * t[0] + e[2] * t[1], + e[1] * t[0] + e[3] * t[1], + e[0] * t[2] + e[2] * t[3], + e[1] * t[2] + e[3] * t[3], + e[0] * t[4] + e[2] * t[5] + e[4], + e[1] * t[4] + e[3] * t[5] + e[5], + ]; + } + static applyTransform(e, t) { + return [e[0] * t[0] + e[1] * t[2] + t[4], e[0] * t[1] + e[1] * t[3] + t[5]]; + } + static applyInverseTransform(e, t) { + const i = t[0] * t[3] - t[1] * t[2]; + return [ + (e[0] * t[3] - e[1] * t[2] + t[2] * t[5] - t[4] * t[3]) / i, + (-e[0] * t[1] + e[1] * t[0] + t[4] * t[1] - t[5] * t[0]) / i, + ]; + } + static getAxialAlignedBoundingBox(e, t) { + const i = this.applyTransform(e, t), + a = this.applyTransform(e.slice(2, 4), t), + s = this.applyTransform([e[0], e[3]], t), + r = this.applyTransform([e[2], e[1]], t); + return [ + Math.min(i[0], a[0], s[0], r[0]), + Math.min(i[1], a[1], s[1], r[1]), + Math.max(i[0], a[0], s[0], r[0]), + Math.max(i[1], a[1], s[1], r[1]), + ]; + } + static inverseTransform(e) { + const t = e[0] * e[3] - e[1] * e[2]; + return [ + e[3] / t, + -e[1] / t, + -e[2] / t, + e[0] / t, + (e[2] * e[5] - e[4] * e[3]) / t, + (e[4] * e[1] - e[5] * e[0]) / t, + ]; + } + static singularValueDecompose2dScale(e) { + const t = [e[0], e[2], e[1], e[3]], + i = e[0] * t[0] + e[1] * t[2], + a = e[0] * t[1] + e[1] * t[3], + s = e[2] * t[0] + e[3] * t[2], + r = e[2] * t[1] + e[3] * t[3], + n = (i + r) / 2, + g = Math.sqrt((i + r) ** 2 - 4 * (i * r - s * a)) / 2, + o = n + g || 1, + c = n - g || 1; + return [Math.sqrt(o), Math.sqrt(c)]; + } + static normalizeRect(e) { + const t = e.slice(0); + if (e[0] > e[2]) { + t[0] = e[2]; + t[2] = e[0]; + } + if (e[1] > e[3]) { + t[1] = e[3]; + t[3] = e[1]; + } + return t; + } + static intersect(e, t) { + const i = Math.max(Math.min(e[0], e[2]), Math.min(t[0], t[2])), + a = Math.min(Math.max(e[0], e[2]), Math.max(t[0], t[2])); + if (i > a) return null; + const s = Math.max(Math.min(e[1], e[3]), Math.min(t[1], t[3])), + r = Math.min(Math.max(e[1], e[3]), Math.max(t[1], t[3])); + return s > r ? null : [i, s, a, r]; + } + static #A(e, t, i, a, s, r, n, g, o, c) { + if (o <= 0 || o >= 1) return; + const C = 1 - o, + h = o * o, + l = h * o, + Q = C * (C * (C * e + 3 * o * t) + 3 * h * i) + l * a, + E = C * (C * (C * s + 3 * o * r) + 3 * h * n) + l * g; + c[0] = Math.min(c[0], Q); + c[1] = Math.min(c[1], E); + c[2] = Math.max(c[2], Q); + c[3] = Math.max(c[3], E); + } + static #e(e, t, i, a, s, r, n, g, o, c, C, h) { + if (Math.abs(o) < 1e-12) { + Math.abs(c) >= 1e-12 && this.#A(e, t, i, a, s, r, n, g, -C / c, h); + return; + } + const l = c ** 2 - 4 * C * o; + if (l < 0) return; + const Q = Math.sqrt(l), + E = 2 * o; + this.#A(e, t, i, a, s, r, n, g, (-c + Q) / E, h); + this.#A(e, t, i, a, s, r, n, g, (-c - Q) / E, h); + } + static bezierBoundingBox(e, t, i, a, s, r, n, g, o) { + if (o) { + o[0] = Math.min(o[0], e, n); + o[1] = Math.min(o[1], t, g); + o[2] = Math.max(o[2], e, n); + o[3] = Math.max(o[3], t, g); + } else o = [Math.min(e, n), Math.min(t, g), Math.max(e, n), Math.max(t, g)]; + this.#e( + e, + i, + s, + n, + t, + a, + r, + g, + 3 * (3 * (i - s) - e + n), + 6 * (e - 2 * i + s), + 3 * (i - e), + o, + ); + this.#e( + e, + i, + s, + n, + t, + a, + r, + g, + 3 * (3 * (a - r) - t + g), + 6 * (t - 2 * a + r), + 3 * (a - t), + o, + ); + return o; + } +} +const gt = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, + 711, 710, 729, 733, 731, 730, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8226, 8224, 8225, 8230, 8212, 8211, 402, 8260, 8249, 8250, 8722, + 8240, 8222, 8220, 8221, 8216, 8217, 8218, 8482, 64257, 64258, 321, 338, 352, + 376, 381, 305, 322, 339, 353, 382, 0, 8364, +]; +function stringToPDFString(e) { + if (e[0] >= "ï") { + let t; + if ("þ" === e[0] && "ÿ" === e[1]) { + t = "utf-16be"; + e.length % 2 == 1 && (e = e.slice(0, -1)); + } else if ("ÿ" === e[0] && "þ" === e[1]) { + t = "utf-16le"; + e.length % 2 == 1 && (e = e.slice(0, -1)); + } else "ï" === e[0] && "»" === e[1] && "¿" === e[2] && (t = "utf-8"); + if (t) + try { + const i = new TextDecoder(t, { fatal: !0 }), + a = stringToBytes(e), + s = i.decode(a); + return s.includes("") ? s.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, "") : s; + } catch (e) { + warn(`stringToPDFString: "${e}".`); + } + } + const t = []; + for (let i = 0, a = e.length; i < a; i++) { + const s = e.charCodeAt(i); + if (27 === s) { + for (; ++i < a && 27 !== e.charCodeAt(i); ); + continue; + } + const r = gt[s]; + t.push(r ? String.fromCharCode(r) : e.charAt(i)); + } + return t.join(""); +} +function stringToUTF8String(e) { + return decodeURIComponent(escape(e)); +} +function utf8StringToString(e) { + return unescape(encodeURIComponent(e)); +} +function isArrayEqual(e, t) { + if (e.length !== t.length) return !1; + for (let i = 0, a = e.length; i < a; i++) if (e[i] !== t[i]) return !1; + return !0; +} +function getModificationDate(e = new Date()) { + return [ + e.getUTCFullYear().toString(), + (e.getUTCMonth() + 1).toString().padStart(2, "0"), + e.getUTCDate().toString().padStart(2, "0"), + e.getUTCHours().toString().padStart(2, "0"), + e.getUTCMinutes().toString().padStart(2, "0"), + e.getUTCSeconds().toString().padStart(2, "0"), + ].join(""); +} +let ot = null, + It = null; +const ct = 0, + Ct = 1, + ht = 2, + Bt = 3, + lt = 4, + Qt = 5, + Et = 6, + ut = 7, + dt = 8, + ft = Symbol("CIRCULAR_REF"), + pt = Symbol("EOF"); +let mt = Object.create(null), + yt = Object.create(null), + wt = Object.create(null); +class Name { + constructor(e) { + this.name = e; + } + static get(e) { + return (yt[e] ||= new Name(e)); + } +} +class Cmd { + constructor(e) { + this.cmd = e; + } + static get(e) { + return (mt[e] ||= new Cmd(e)); + } +} +const Dt = function nonSerializableClosure() { + return Dt; +}; +class Dict { + constructor(e = null) { + this._map = Object.create(null); + this.xref = e; + this.objId = null; + this.suppressEncryption = !1; + this.__nonSerializable__ = Dt; + } + assignXref(e) { + this.xref = e; + } + get size() { + return Object.keys(this._map).length; + } + get(e, t, i) { + let a = this._map[e]; + if (void 0 === a && void 0 !== t) { + a = this._map[t]; + void 0 === a && void 0 !== i && (a = this._map[i]); + } + return a instanceof Ref && this.xref + ? this.xref.fetch(a, this.suppressEncryption) + : a; + } + async getAsync(e, t, i) { + let a = this._map[e]; + if (void 0 === a && void 0 !== t) { + a = this._map[t]; + void 0 === a && void 0 !== i && (a = this._map[i]); + } + return a instanceof Ref && this.xref + ? this.xref.fetchAsync(a, this.suppressEncryption) + : a; + } + getArray(e, t, i) { + let a = this._map[e]; + if (void 0 === a && void 0 !== t) { + a = this._map[t]; + void 0 === a && void 0 !== i && (a = this._map[i]); + } + a instanceof Ref && + this.xref && + (a = this.xref.fetch(a, this.suppressEncryption)); + if (Array.isArray(a)) { + a = a.slice(); + for (let e = 0, t = a.length; e < t; e++) + a[e] instanceof Ref && + this.xref && + (a[e] = this.xref.fetch(a[e], this.suppressEncryption)); + } + return a; + } + getRaw(e) { + return this._map[e]; + } + getKeys() { + return Object.keys(this._map); + } + getRawValues() { + return Object.values(this._map); + } + set(e, t) { + this._map[e] = t; + } + has(e) { + return void 0 !== this._map[e]; + } + forEach(e) { + for (const t in this._map) e(t, this.get(t)); + } + static get empty() { + const e = new Dict(null); + e.set = (e, t) => { + unreachable("Should not call `set` on the empty dictionary."); + }; + return shadow(this, "empty", e); + } + static merge({ xref: e, dictArray: t, mergeSubDicts: i = !1 }) { + const a = new Dict(e), + s = new Map(); + for (const e of t) + if (e instanceof Dict) + for (const [t, a] of Object.entries(e._map)) { + let e = s.get(t); + if (void 0 === e) { + e = []; + s.set(t, e); + } else if (!(i && a instanceof Dict)) continue; + e.push(a); + } + for (const [t, i] of s) { + if (1 === i.length || !(i[0] instanceof Dict)) { + a._map[t] = i[0]; + continue; + } + const s = new Dict(e); + for (const e of i) + for (const [t, i] of Object.entries(e._map)) + void 0 === s._map[t] && (s._map[t] = i); + s.size > 0 && (a._map[t] = s); + } + s.clear(); + return a.size > 0 ? a : Dict.empty; + } + clone() { + const e = new Dict(this.xref); + for (const t of this.getKeys()) e.set(t, this.getRaw(t)); + return e; + } +} +class Ref { + constructor(e, t) { + this.num = e; + this.gen = t; + } + toString() { + return 0 === this.gen ? `${this.num}R` : `${this.num}R${this.gen}`; + } + static fromString(e) { + const t = wt[e]; + if (t) return t; + const i = /^(\d+)R(\d*)$/.exec(e); + return i && "0" !== i[1] + ? (wt[e] = new Ref(parseInt(i[1]), i[2] ? parseInt(i[2]) : 0)) + : null; + } + static get(e, t) { + const i = 0 === t ? `${e}R` : `${e}R${t}`; + return (wt[i] ||= new Ref(e, t)); + } +} +class RefSet { + constructor(e = null) { + this._set = new Set(e?._set); + } + has(e) { + return this._set.has(e.toString()); + } + put(e) { + this._set.add(e.toString()); + } + remove(e) { + this._set.delete(e.toString()); + } + [Symbol.iterator]() { + return this._set.values(); + } + clear() { + this._set.clear(); + } +} +class RefSetCache { + constructor() { + this._map = new Map(); + } + get size() { + return this._map.size; + } + get(e) { + return this._map.get(e.toString()); + } + has(e) { + return this._map.has(e.toString()); + } + put(e, t) { + this._map.set(e.toString(), t); + } + putAlias(e, t) { + this._map.set(e.toString(), this.get(t)); + } + [Symbol.iterator]() { + return this._map.values(); + } + clear() { + this._map.clear(); + } + *items() { + for (const [e, t] of this._map) yield [Ref.fromString(e), t]; + } +} +function isName(e, t) { + return e instanceof Name && (void 0 === t || e.name === t); +} +function isCmd(e, t) { + return e instanceof Cmd && (void 0 === t || e.cmd === t); +} +function isDict(e, t) { + return e instanceof Dict && (void 0 === t || isName(e.get("Type"), t)); +} +function isRefsEqual(e, t) { + return e.num === t.num && e.gen === t.gen; +} +class BaseStream { + constructor() { + this.constructor === BaseStream && + unreachable("Cannot initialize BaseStream."); + } + get length() { + unreachable("Abstract getter `length` accessed"); + } + get isEmpty() { + unreachable("Abstract getter `isEmpty` accessed"); + } + get isDataLoaded() { + return shadow(this, "isDataLoaded", !0); + } + getByte() { + unreachable("Abstract method `getByte` called"); + } + getBytes(e) { + unreachable("Abstract method `getBytes` called"); + } + async getImageData(e, t) { + return this.getBytes(e, t); + } + async asyncGetBytes() { + unreachable("Abstract method `asyncGetBytes` called"); + } + get isAsync() { + return !1; + } + get canAsyncDecodeImageFromBuffer() { + return !1; + } + peekByte() { + const e = this.getByte(); + -1 !== e && this.pos--; + return e; + } + peekBytes(e) { + const t = this.getBytes(e); + this.pos -= t.length; + return t; + } + getUint16() { + const e = this.getByte(), + t = this.getByte(); + return -1 === e || -1 === t ? -1 : (e << 8) + t; + } + getInt32() { + return ( + (this.getByte() << 24) + + (this.getByte() << 16) + + (this.getByte() << 8) + + this.getByte() + ); + } + getByteRange(e, t) { + unreachable("Abstract method `getByteRange` called"); + } + getString(e) { + return bytesToString(this.getBytes(e)); + } + skip(e) { + this.pos += e || 1; + } + reset() { + unreachable("Abstract method `reset` called"); + } + moveStart() { + unreachable("Abstract method `moveStart` called"); + } + makeSubStream(e, t, i = null) { + unreachable("Abstract method `makeSubStream` called"); + } + getBaseStreams() { + return null; + } +} +const bt = /^[1-9]\.\d$/; +function getLookupTableFactory(e) { + let t; + return function () { + if (e) { + t = Object.create(null); + e(t); + e = null; + } + return t; + }; +} +class MissingDataException extends rt { + constructor(e, t) { + super(`Missing data [${e}, ${t})`, "MissingDataException"); + this.begin = e; + this.end = t; + } +} +class ParserEOFException extends rt { + constructor(e) { + super(e, "ParserEOFException"); + } +} +class XRefEntryException extends rt { + constructor(e) { + super(e, "XRefEntryException"); + } +} +class XRefParseException extends rt { + constructor(e) { + super(e, "XRefParseException"); + } +} +function arrayBuffersToBytes(e) { + const t = e.length; + if (0 === t) return new Uint8Array(0); + if (1 === t) return new Uint8Array(e[0]); + let i = 0; + for (let a = 0; a < t; a++) i += e[a].byteLength; + const a = new Uint8Array(i); + let s = 0; + for (let i = 0; i < t; i++) { + const t = new Uint8Array(e[i]); + a.set(t, s); + s += t.byteLength; + } + return a; +} +function getInheritableProperty({ + dict: e, + key: t, + getArray: i = !1, + stopWhenFound: a = !0, +}) { + let s; + const r = new RefSet(); + for (; e instanceof Dict && (!e.objId || !r.has(e.objId)); ) { + e.objId && r.put(e.objId); + const n = i ? e.getArray(t) : e.get(t); + if (void 0 !== n) { + if (a) return n; + (s ||= []).push(n); + } + e = e.get("Parent"); + } + return s; +} +const Ft = [ + "", + "C", + "CC", + "CCC", + "CD", + "D", + "DC", + "DCC", + "DCCC", + "CM", + "", + "X", + "XX", + "XXX", + "XL", + "L", + "LX", + "LXX", + "LXXX", + "XC", + "", + "I", + "II", + "III", + "IV", + "V", + "VI", + "VII", + "VIII", + "IX", +]; +function toRomanNumerals(e, t = !1) { + assert( + Number.isInteger(e) && e > 0, + "The number should be a positive integer.", + ); + const i = []; + let a; + for (; e >= 1e3; ) { + e -= 1e3; + i.push("M"); + } + a = (e / 100) | 0; + e %= 100; + i.push(Ft[a]); + a = (e / 10) | 0; + e %= 10; + i.push(Ft[10 + a]); + i.push(Ft[20 + e]); + const s = i.join(""); + return t ? s.toLowerCase() : s; +} +function log2(e) { + return e <= 0 ? 0 : Math.ceil(Math.log2(e)); +} +function readInt8(e, t) { + return (e[t] << 24) >> 24; +} +function readUint16(e, t) { + return (e[t] << 8) | e[t + 1]; +} +function readUint32(e, t) { + return ((e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3]) >>> 0; +} +function isWhiteSpace(e) { + return 32 === e || 9 === e || 13 === e || 10 === e; +} +function isNumberArray(e, t) { + return ( + Array.isArray(e) && + (null === t || e.length === t) && + e.every((e) => "number" == typeof e) + ); +} +function lookupMatrix(e, t) { + return isNumberArray(e, 6) ? e : t; +} +function lookupRect(e, t) { + return isNumberArray(e, 4) ? e : t; +} +function lookupNormalRect(e, t) { + return isNumberArray(e, 4) ? Util.normalizeRect(e) : t; +} +function parseXFAPath(e) { + const t = /(.+)\[(\d+)\]$/; + return e.split(".").map((e) => { + const i = e.match(t); + return i ? { name: i[1], pos: parseInt(i[2], 10) } : { name: e, pos: 0 }; + }); +} +function escapePDFName(e) { + const t = []; + let i = 0; + for (let a = 0, s = e.length; a < s; a++) { + const s = e.charCodeAt(a); + if ( + s < 33 || + s > 126 || + 35 === s || + 40 === s || + 41 === s || + 60 === s || + 62 === s || + 91 === s || + 93 === s || + 123 === s || + 125 === s || + 47 === s || + 37 === s + ) { + i < a && t.push(e.substring(i, a)); + t.push(`#${s.toString(16)}`); + i = a + 1; + } + } + if (0 === t.length) return e; + i < e.length && t.push(e.substring(i, e.length)); + return t.join(""); +} +function escapeString(e) { + return e.replaceAll(/([()\\\n\r])/g, (e) => + "\n" === e ? "\\n" : "\r" === e ? "\\r" : `\\${e}`, + ); +} +function _collectJS(e, t, i, a) { + if (!e) return; + let s = null; + if (e instanceof Ref) { + if (a.has(e)) return; + s = e; + a.put(s); + e = t.fetch(e); + } + if (Array.isArray(e)) for (const s of e) _collectJS(s, t, i, a); + else if (e instanceof Dict) { + if (isName(e.get("S"), "JavaScript")) { + const t = e.get("JS"); + let a; + t instanceof BaseStream + ? (a = t.getString()) + : "string" == typeof t && (a = t); + a &&= stringToPDFString(a).replaceAll("\0", ""); + a && i.push(a); + } + _collectJS(e.getRaw("Next"), t, i, a); + } + s && a.remove(s); +} +function collectActions(e, t, i) { + const a = Object.create(null), + s = getInheritableProperty({ dict: t, key: "AA", stopWhenFound: !1 }); + if (s) + for (let t = s.length - 1; t >= 0; t--) { + const r = s[t]; + if (r instanceof Dict) + for (const t of r.getKeys()) { + const s = i[t]; + if (!s) continue; + const n = []; + _collectJS(r.getRaw(t), e, n, new RefSet()); + n.length > 0 && (a[s] = n); + } + } + if (t.has("A")) { + const i = []; + _collectJS(t.get("A"), e, i, new RefSet()); + i.length > 0 && (a.Action = i); + } + return objectSize(a) > 0 ? a : null; +} +const St = { 60: "<", 62: ">", 38: "&", 34: """, 39: "'" }; +function* codePointIter(e) { + for (let t = 0, i = e.length; t < i; t++) { + const i = e.codePointAt(t); + i > 55295 && (i < 57344 || i > 65533) && t++; + yield i; + } +} +function encodeToXmlString(e) { + const t = []; + let i = 0; + for (let a = 0, s = e.length; a < s; a++) { + const s = e.codePointAt(a); + if (32 <= s && s <= 126) { + const r = St[s]; + if (r) { + i < a && t.push(e.substring(i, a)); + t.push(r); + i = a + 1; + } + } else { + i < a && t.push(e.substring(i, a)); + t.push(`&#x${s.toString(16).toUpperCase()};`); + s > 55295 && (s < 57344 || s > 65533) && a++; + i = a + 1; + } + } + if (0 === t.length) return e; + i < e.length && t.push(e.substring(i, e.length)); + return t.join(""); +} +function validateFontName(e, t = !1) { + const i = /^("|').*("|')$/.exec(e); + if (i && i[1] === i[2]) { + if (new RegExp(`[^\\\\]${i[1]}`).test(e.slice(1, -1))) { + t && warn(`FontFamily contains unescaped ${i[1]}: ${e}.`); + return !1; + } + } else + for (const i of e.split(/[ \t]+/)) + if (/^(\d|(-(\d|-)))/.test(i) || !/^[\w-\\]+$/.test(i)) { + t && warn(`FontFamily contains invalid : ${e}.`); + return !1; + } + return !0; +} +function validateCSSFont(e) { + const t = new Set([ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900", + "1000", + "normal", + "bold", + "bolder", + "lighter", + ]), + { fontFamily: i, fontWeight: a, italicAngle: s } = e; + if (!validateFontName(i, !0)) return !1; + const r = a ? a.toString() : ""; + e.fontWeight = t.has(r) ? r : "400"; + const n = parseFloat(s); + e.italicAngle = isNaN(n) || n < -90 || n > 90 ? "14" : s.toString(); + return !0; +} +function recoverJsURL(e) { + const t = new RegExp( + "^\\s*(" + + ["app.launchURL", "window.open", "xfa.host.gotoURL"] + .join("|") + .replaceAll(".", "\\.") + + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", + "i", + ).exec(e); + if (t?.[2]) { + const e = t[2]; + let i = !1; + "true" === t[3] && "app.launchURL" === t[1] && (i = !0); + return { url: e, newWindow: i }; + } + return null; +} +function numberToString(e) { + if (Number.isInteger(e)) return e.toString(); + const t = Math.round(100 * e); + return t % 100 == 0 + ? (t / 100).toString() + : t % 10 == 0 + ? e.toFixed(1) + : e.toFixed(2); +} +function getNewAnnotationsMap(e) { + if (!e) return null; + const t = new Map(); + for (const [i, a] of e) { + if (!i.startsWith(E)) continue; + let e = t.get(a.pageIndex); + if (!e) { + e = []; + t.set(a.pageIndex, e); + } + e.push(a); + } + return t.size > 0 ? t : null; +} +function isAscii(e) { + return /^[\x00-\x7F]*$/.test(e); +} +function stringToUTF16HexString(e) { + const t = []; + for (let i = 0, a = e.length; i < a; i++) { + const a = e.charCodeAt(i); + t.push( + ((a >> 8) & 255).toString(16).padStart(2, "0"), + (255 & a).toString(16).padStart(2, "0"), + ); + } + return t.join(""); +} +function stringToUTF16String(e, t = !1) { + const i = []; + t && i.push("þÿ"); + for (let t = 0, a = e.length; t < a; t++) { + const a = e.charCodeAt(t); + i.push(String.fromCharCode((a >> 8) & 255), String.fromCharCode(255 & a)); + } + return i.join(""); +} +function getRotationMatrix(e, t, i) { + switch (e) { + case 90: + return [0, 1, -1, 0, t, 0]; + case 180: + return [-1, 0, 0, -1, t, i]; + case 270: + return [0, -1, 1, 0, 0, i]; + default: + throw new Error("Invalid rotation"); + } +} +function getSizeInBytes(e) { + return Math.ceil(Math.ceil(Math.log2(1 + e)) / 8); +} +class Stream extends BaseStream { + constructor(e, t, i, a) { + super(); + this.bytes = e instanceof Uint8Array ? e : new Uint8Array(e); + this.start = t || 0; + this.pos = this.start; + this.end = t + i || this.bytes.length; + this.dict = a; + } + get length() { + return this.end - this.start; + } + get isEmpty() { + return 0 === this.length; + } + getByte() { + return this.pos >= this.end ? -1 : this.bytes[this.pos++]; + } + getBytes(e) { + const t = this.bytes, + i = this.pos, + a = this.end; + if (!e) return t.subarray(i, a); + let s = i + e; + s > a && (s = a); + this.pos = s; + return t.subarray(i, s); + } + getByteRange(e, t) { + e < 0 && (e = 0); + t > this.end && (t = this.end); + return this.bytes.subarray(e, t); + } + reset() { + this.pos = this.start; + } + moveStart() { + this.start = this.pos; + } + makeSubStream(e, t, i = null) { + return new Stream(this.bytes.buffer, e, t, i); + } +} +class StringStream extends Stream { + constructor(e) { + super(stringToBytes(e)); + } +} +class NullStream extends Stream { + constructor() { + super(new Uint8Array(0)); + } +} +class ChunkedStream extends Stream { + constructor(e, t, i) { + super(new Uint8Array(e), 0, e, null); + this.chunkSize = t; + this._loadedChunks = new Set(); + this.numChunks = Math.ceil(e / t); + this.manager = i; + this.progressiveDataLength = 0; + this.lastSuccessfulEnsureByteChunk = -1; + } + getMissingChunks() { + const e = []; + for (let t = 0, i = this.numChunks; t < i; ++t) + this._loadedChunks.has(t) || e.push(t); + return e; + } + get numChunksLoaded() { + return this._loadedChunks.size; + } + get isDataLoaded() { + return this.numChunksLoaded === this.numChunks; + } + onReceiveData(e, t) { + const i = this.chunkSize; + if (e % i != 0) throw new Error(`Bad begin offset: ${e}`); + const a = e + t.byteLength; + if (a % i != 0 && a !== this.bytes.length) + throw new Error(`Bad end offset: ${a}`); + this.bytes.set(new Uint8Array(t), e); + const s = Math.floor(e / i), + r = Math.floor((a - 1) / i) + 1; + for (let e = s; e < r; ++e) this._loadedChunks.add(e); + } + onReceiveProgressiveData(e) { + let t = this.progressiveDataLength; + const i = Math.floor(t / this.chunkSize); + this.bytes.set(new Uint8Array(e), t); + t += e.byteLength; + this.progressiveDataLength = t; + const a = t >= this.end ? this.numChunks : Math.floor(t / this.chunkSize); + for (let e = i; e < a; ++e) this._loadedChunks.add(e); + } + ensureByte(e) { + if (e < this.progressiveDataLength) return; + const t = Math.floor(e / this.chunkSize); + if (!(t > this.numChunks) && t !== this.lastSuccessfulEnsureByteChunk) { + if (!this._loadedChunks.has(t)) throw new MissingDataException(e, e + 1); + this.lastSuccessfulEnsureByteChunk = t; + } + } + ensureRange(e, t) { + if (e >= t) return; + if (t <= this.progressiveDataLength) return; + const i = Math.floor(e / this.chunkSize); + if (i > this.numChunks) return; + const a = Math.min( + Math.floor((t - 1) / this.chunkSize) + 1, + this.numChunks, + ); + for (let s = i; s < a; ++s) + if (!this._loadedChunks.has(s)) throw new MissingDataException(e, t); + } + nextEmptyChunk(e) { + const t = this.numChunks; + for (let i = 0; i < t; ++i) { + const a = (e + i) % t; + if (!this._loadedChunks.has(a)) return a; + } + return null; + } + hasChunk(e) { + return this._loadedChunks.has(e); + } + getByte() { + const e = this.pos; + if (e >= this.end) return -1; + e >= this.progressiveDataLength && this.ensureByte(e); + return this.bytes[this.pos++]; + } + getBytes(e) { + const t = this.bytes, + i = this.pos, + a = this.end; + if (!e) { + a > this.progressiveDataLength && this.ensureRange(i, a); + return t.subarray(i, a); + } + let s = i + e; + s > a && (s = a); + s > this.progressiveDataLength && this.ensureRange(i, s); + this.pos = s; + return t.subarray(i, s); + } + getByteRange(e, t) { + e < 0 && (e = 0); + t > this.end && (t = this.end); + t > this.progressiveDataLength && this.ensureRange(e, t); + return this.bytes.subarray(e, t); + } + makeSubStream(e, t, i = null) { + t + ? e + t > this.progressiveDataLength && this.ensureRange(e, e + t) + : e >= this.progressiveDataLength && this.ensureByte(e); + function ChunkedStreamSubstream() {} + ChunkedStreamSubstream.prototype = Object.create(this); + ChunkedStreamSubstream.prototype.getMissingChunks = function () { + const e = this.chunkSize, + t = Math.floor(this.start / e), + i = Math.floor((this.end - 1) / e) + 1, + a = []; + for (let e = t; e < i; ++e) this._loadedChunks.has(e) || a.push(e); + return a; + }; + Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { + get() { + return ( + this.numChunksLoaded === this.numChunks || + 0 === this.getMissingChunks().length + ); + }, + configurable: !0, + }); + const a = new ChunkedStreamSubstream(); + a.pos = a.start = e; + a.end = e + t || this.end; + a.dict = i; + return a; + } + getBaseStreams() { + return [this]; + } +} +class ChunkedStreamManager { + constructor(e, t) { + this.length = t.length; + this.chunkSize = t.rangeChunkSize; + this.stream = new ChunkedStream(this.length, this.chunkSize, this); + this.pdfNetworkStream = e; + this.disableAutoFetch = t.disableAutoFetch; + this.msgHandler = t.msgHandler; + this.currRequestId = 0; + this._chunksNeededByRequest = new Map(); + this._requestsByChunk = new Map(); + this._promisesByRequest = new Map(); + this.progressiveDataLength = 0; + this.aborted = !1; + this._loadedStreamCapability = Promise.withResolvers(); + } + sendRequest(e, t) { + const i = this.pdfNetworkStream.getRangeReader(e, t); + i.isStreamingSupported || (i.onProgress = this.onProgress.bind(this)); + let a = [], + s = 0; + return new Promise((e, t) => { + const readChunk = ({ value: r, done: n }) => { + try { + if (n) { + const t = arrayBuffersToBytes(a); + a = null; + e(t); + return; + } + s += r.byteLength; + i.isStreamingSupported && this.onProgress({ loaded: s }); + a.push(r); + i.read().then(readChunk, t); + } catch (e) { + t(e); + } + }; + i.read().then(readChunk, t); + }).then((t) => { + this.aborted || this.onReceiveData({ chunk: t, begin: e }); + }); + } + requestAllChunks(e = !1) { + if (!e) { + const e = this.stream.getMissingChunks(); + this._requestChunks(e); + } + return this._loadedStreamCapability.promise; + } + _requestChunks(e) { + const t = this.currRequestId++, + i = new Set(); + this._chunksNeededByRequest.set(t, i); + for (const t of e) this.stream.hasChunk(t) || i.add(t); + if (0 === i.size) return Promise.resolve(); + const a = Promise.withResolvers(); + this._promisesByRequest.set(t, a); + const s = []; + for (const e of i) { + let i = this._requestsByChunk.get(e); + if (!i) { + i = []; + this._requestsByChunk.set(e, i); + s.push(e); + } + i.push(t); + } + if (s.length > 0) { + const e = this.groupChunks(s); + for (const t of e) { + const e = t.beginChunk * this.chunkSize, + i = Math.min(t.endChunk * this.chunkSize, this.length); + this.sendRequest(e, i).catch(a.reject); + } + } + return a.promise.catch((e) => { + if (!this.aborted) throw e; + }); + } + getStream() { + return this.stream; + } + requestRange(e, t) { + t = Math.min(t, this.length); + const i = this.getBeginChunk(e), + a = this.getEndChunk(t), + s = []; + for (let e = i; e < a; ++e) s.push(e); + return this._requestChunks(s); + } + requestRanges(e = []) { + const t = []; + for (const i of e) { + const e = this.getBeginChunk(i.begin), + a = this.getEndChunk(i.end); + for (let i = e; i < a; ++i) t.includes(i) || t.push(i); + } + t.sort(function (e, t) { + return e - t; + }); + return this._requestChunks(t); + } + groupChunks(e) { + const t = []; + let i = -1, + a = -1; + for (let s = 0, r = e.length; s < r; ++s) { + const r = e[s]; + i < 0 && (i = r); + if (a >= 0 && a + 1 !== r) { + t.push({ beginChunk: i, endChunk: a + 1 }); + i = r; + } + s + 1 === e.length && t.push({ beginChunk: i, endChunk: r + 1 }); + a = r; + } + return t; + } + onProgress(e) { + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize + e.loaded, + total: this.length, + }); + } + onReceiveData(e) { + const t = e.chunk, + i = void 0 === e.begin, + a = i ? this.progressiveDataLength : e.begin, + s = a + t.byteLength, + r = Math.floor(a / this.chunkSize), + n = + s < this.length + ? Math.floor(s / this.chunkSize) + : Math.ceil(s / this.chunkSize); + if (i) { + this.stream.onReceiveProgressiveData(t); + this.progressiveDataLength = s; + } else this.stream.onReceiveData(a, t); + this.stream.isDataLoaded && + this._loadedStreamCapability.resolve(this.stream); + const g = []; + for (let e = r; e < n; ++e) { + const t = this._requestsByChunk.get(e); + if (t) { + this._requestsByChunk.delete(e); + for (const i of t) { + const t = this._chunksNeededByRequest.get(i); + t.has(e) && t.delete(e); + t.size > 0 || g.push(i); + } + } + } + if (!this.disableAutoFetch && 0 === this._requestsByChunk.size) { + let e; + if (1 === this.stream.numChunksLoaded) { + const t = this.stream.numChunks - 1; + this.stream.hasChunk(t) || (e = t); + } else e = this.stream.nextEmptyChunk(n); + Number.isInteger(e) && this._requestChunks([e]); + } + for (const e of g) { + const t = this._promisesByRequest.get(e); + this._promisesByRequest.delete(e); + t.resolve(); + } + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize, + total: this.length, + }); + } + onError(e) { + this._loadedStreamCapability.reject(e); + } + getBeginChunk(e) { + return Math.floor(e / this.chunkSize); + } + getEndChunk(e) { + return Math.floor((e - 1) / this.chunkSize) + 1; + } + abort(e) { + this.aborted = !0; + this.pdfNetworkStream?.cancelAllRequests(e); + for (const t of this._promisesByRequest.values()) t.reject(e); + } +} +class ColorSpace { + constructor(e, t) { + this.constructor === ColorSpace && + unreachable("Cannot initialize ColorSpace."); + this.name = e; + this.numComps = t; + } + getRgb(e, t) { + const i = new Uint8ClampedArray(3); + this.getRgbItem(e, t, i, 0); + return i; + } + getRgbItem(e, t, i, a) { + unreachable("Should not call ColorSpace.getRgbItem"); + } + getRgbBuffer(e, t, i, a, s, r, n) { + unreachable("Should not call ColorSpace.getRgbBuffer"); + } + getOutputLength(e, t) { + unreachable("Should not call ColorSpace.getOutputLength"); + } + isPassthrough(e) { + return !1; + } + isDefaultDecode(e, t) { + return ColorSpace.isDefaultDecode(e, this.numComps); + } + fillRgb(e, t, i, a, s, r, n, g, o) { + const c = t * i; + let C = null; + const h = 1 << n, + l = i !== s || t !== a; + if (this.isPassthrough(n)) C = g; + else if ( + 1 === this.numComps && + c > h && + "DeviceGray" !== this.name && + "DeviceRGB" !== this.name + ) { + const t = n <= 8 ? new Uint8Array(h) : new Uint16Array(h); + for (let e = 0; e < h; e++) t[e] = e; + const i = new Uint8ClampedArray(3 * h); + this.getRgbBuffer(t, 0, h, i, 0, n, 0); + if (l) { + C = new Uint8Array(3 * c); + let e = 0; + for (let t = 0; t < c; ++t) { + const a = 3 * g[t]; + C[e++] = i[a]; + C[e++] = i[a + 1]; + C[e++] = i[a + 2]; + } + } else { + let t = 0; + for (let a = 0; a < c; ++a) { + const s = 3 * g[a]; + e[t++] = i[s]; + e[t++] = i[s + 1]; + e[t++] = i[s + 2]; + t += o; + } + } + } else if (l) { + C = new Uint8ClampedArray(3 * c); + this.getRgbBuffer(g, 0, c, C, 0, n, 0); + } else this.getRgbBuffer(g, 0, a * r, e, 0, n, o); + if (C) + if (l) + !(function resizeRgbImage(e, t, i, a, s, r, n) { + n = 1 !== n ? 0 : n; + const g = i / s, + o = a / r; + let c, + C = 0; + const h = new Uint16Array(s), + l = 3 * i; + for (let e = 0; e < s; e++) h[e] = 3 * Math.floor(e * g); + for (let i = 0; i < r; i++) { + const a = Math.floor(i * o) * l; + for (let i = 0; i < s; i++) { + c = a + h[i]; + t[C++] = e[c++]; + t[C++] = e[c++]; + t[C++] = e[c++]; + C += n; + } + } + })(C, e, t, i, a, s, o); + else { + let t = 0, + i = 0; + for (let s = 0, n = a * r; s < n; s++) { + e[t++] = C[i++]; + e[t++] = C[i++]; + e[t++] = C[i++]; + t += o; + } + } + } + get usesZeroToOneRange() { + return shadow(this, "usesZeroToOneRange", !0); + } + static _cache(e, t, i, a) { + if (!i) + throw new Error( + 'ColorSpace._cache - expected "localColorSpaceCache" argument.', + ); + if (!a) + throw new Error( + 'ColorSpace._cache - expected "parsedColorSpace" argument.', + ); + let s, r; + if (e instanceof Ref) { + r = e; + e = t.fetch(e); + } + e instanceof Name && (s = e.name); + (s || r) && i.set(s, r, a); + } + static getCached(e, t, i) { + if (!i) + throw new Error( + 'ColorSpace.getCached - expected "localColorSpaceCache" argument.', + ); + if (e instanceof Ref) { + const a = i.getByRef(e); + if (a) return a; + try { + e = t.fetch(e); + } catch (e) { + if (e instanceof MissingDataException) throw e; + } + } + if (e instanceof Name) { + const t = i.getByName(e.name); + if (t) return t; + } + return null; + } + static async parseAsync({ + cs: e, + xref: t, + resources: i = null, + pdfFunctionFactory: a, + localColorSpaceCache: s, + }) { + const r = this._parse(e, t, i, a); + this._cache(e, t, s, r); + return r; + } + static parse({ + cs: e, + xref: t, + resources: i = null, + pdfFunctionFactory: a, + localColorSpaceCache: s, + }) { + const r = this.getCached(e, t, s); + if (r) return r; + const n = this._parse(e, t, i, a); + this._cache(e, t, s, n); + return n; + } + static _parse(e, t, i = null, a) { + if ((e = t.fetchIfRef(e)) instanceof Name) + switch (e.name) { + case "G": + case "DeviceGray": + return this.singletons.gray; + case "RGB": + case "DeviceRGB": + return this.singletons.rgb; + case "DeviceRGBA": + return this.singletons.rgba; + case "CMYK": + case "DeviceCMYK": + return this.singletons.cmyk; + case "Pattern": + return new PatternCS(null); + default: + if (i instanceof Dict) { + const s = i.get("ColorSpace"); + if (s instanceof Dict) { + const r = s.get(e.name); + if (r) { + if (r instanceof Name) return this._parse(r, t, i, a); + e = r; + break; + } + } + } + throw new FormatError(`Unrecognized ColorSpace: ${e.name}`); + } + if (Array.isArray(e)) { + const s = t.fetchIfRef(e[0]).name; + let r, n, g, o, c, C; + switch (s) { + case "G": + case "DeviceGray": + return this.singletons.gray; + case "RGB": + case "DeviceRGB": + return this.singletons.rgb; + case "CMYK": + case "DeviceCMYK": + return this.singletons.cmyk; + case "CalGray": + r = t.fetchIfRef(e[1]); + o = r.getArray("WhitePoint"); + c = r.getArray("BlackPoint"); + C = r.get("Gamma"); + return new CalGrayCS(o, c, C); + case "CalRGB": + r = t.fetchIfRef(e[1]); + o = r.getArray("WhitePoint"); + c = r.getArray("BlackPoint"); + C = r.getArray("Gamma"); + const h = r.getArray("Matrix"); + return new CalRGBCS(o, c, C, h); + case "ICCBased": + const l = t.fetchIfRef(e[1]).dict; + n = l.get("N"); + const Q = l.get("Alternate"); + if (Q) { + const e = this._parse(Q, t, i, a); + if (e.numComps === n) return e; + warn("ICCBased color space: Ignoring incorrect /Alternate entry."); + } + if (1 === n) return this.singletons.gray; + if (3 === n) return this.singletons.rgb; + if (4 === n) return this.singletons.cmyk; + break; + case "Pattern": + g = e[1] || null; + g && (g = this._parse(g, t, i, a)); + return new PatternCS(g); + case "I": + case "Indexed": + g = this._parse(e[1], t, i, a); + const E = t.fetchIfRef(e[2]) + 1, + u = t.fetchIfRef(e[3]); + return new IndexedCS(g, E, u); + case "Separation": + case "DeviceN": + const d = t.fetchIfRef(e[1]); + n = Array.isArray(d) ? d.length : 1; + g = this._parse(e[2], t, i, a); + const f = a.create(e[3]); + return new AlternateCS(n, g, f); + case "Lab": + r = t.fetchIfRef(e[1]); + o = r.getArray("WhitePoint"); + c = r.getArray("BlackPoint"); + const p = r.getArray("Range"); + return new LabCS(o, c, p); + default: + throw new FormatError(`Unimplemented ColorSpace object: ${s}`); + } + } + throw new FormatError(`Unrecognized ColorSpace object: ${e}`); + } + static isDefaultDecode(e, t) { + if (!Array.isArray(e)) return !0; + if (2 * t !== e.length) { + warn("The decode map is not the correct length"); + return !0; + } + for (let t = 0, i = e.length; t < i; t += 2) + if (0 !== e[t] || 1 !== e[t + 1]) return !1; + return !0; + } + static get singletons() { + return shadow(this, "singletons", { + get gray() { + return shadow(this, "gray", new DeviceGrayCS()); + }, + get rgb() { + return shadow(this, "rgb", new DeviceRgbCS()); + }, + get rgba() { + return shadow(this, "rgba", new DeviceRgbaCS()); + }, + get cmyk() { + return shadow(this, "cmyk", new DeviceCmykCS()); + }, + }); + } +} +class AlternateCS extends ColorSpace { + constructor(e, t, i) { + super("Alternate", e); + this.base = t; + this.tintFn = i; + this.tmpBuf = new Float32Array(t.numComps); + } + getRgbItem(e, t, i, a) { + const s = this.tmpBuf; + this.tintFn(e, t, s, 0); + this.base.getRgbItem(s, 0, i, a); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = this.tintFn, + o = this.base, + c = 1 / ((1 << r) - 1), + C = o.numComps, + h = o.usesZeroToOneRange, + l = (o.isPassthrough(8) || !h) && 0 === n; + let Q = l ? s : 0; + const E = l ? a : new Uint8ClampedArray(C * i), + u = this.numComps, + d = new Float32Array(u), + f = new Float32Array(C); + let p, m; + for (p = 0; p < i; p++) { + for (m = 0; m < u; m++) d[m] = e[t++] * c; + g(d, 0, f, 0); + if (h) for (m = 0; m < C; m++) E[Q++] = 255 * f[m]; + else { + o.getRgbItem(f, 0, E, Q); + Q += C; + } + } + l || o.getRgbBuffer(E, 0, i, a, s, 8, n); + } + getOutputLength(e, t) { + return this.base.getOutputLength( + (e * this.base.numComps) / this.numComps, + t, + ); + } +} +class PatternCS extends ColorSpace { + constructor(e) { + super("Pattern", null); + this.base = e; + } + isDefaultDecode(e, t) { + unreachable("Should not call PatternCS.isDefaultDecode"); + } +} +class IndexedCS extends ColorSpace { + constructor(e, t, i) { + super("Indexed", 1); + this.base = e; + this.highVal = t; + const a = e.numComps * t; + this.lookup = new Uint8Array(a); + if (i instanceof BaseStream) { + const e = i.getBytes(a); + this.lookup.set(e); + } else { + if ("string" != typeof i) + throw new FormatError(`IndexedCS - unrecognized lookup table: ${i}`); + for (let e = 0; e < a; ++e) this.lookup[e] = 255 & i.charCodeAt(e); + } + } + getRgbItem(e, t, i, a) { + const s = this.base.numComps, + r = e[t] * s; + this.base.getRgbBuffer(this.lookup, r, 1, i, a, 8, 0); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = this.base, + o = g.numComps, + c = g.getOutputLength(o, n), + C = this.lookup; + for (let r = 0; r < i; ++r) { + const i = e[t++] * o; + g.getRgbBuffer(C, i, 1, a, s, 8, n); + s += c; + } + } + getOutputLength(e, t) { + return this.base.getOutputLength(e * this.base.numComps, t); + } + isDefaultDecode(e, t) { + if (!Array.isArray(e)) return !0; + if (2 !== e.length) { + warn("Decode map length is not correct"); + return !0; + } + if (!Number.isInteger(t) || t < 1) { + warn("Bits per component is not correct"); + return !0; + } + return 0 === e[0] && e[1] === (1 << t) - 1; + } +} +class DeviceGrayCS extends ColorSpace { + constructor() { + super("DeviceGray", 1); + } + getRgbItem(e, t, i, a) { + const s = 255 * e[t]; + i[a] = i[a + 1] = i[a + 2] = s; + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = 255 / ((1 << r) - 1); + let o = t, + c = s; + for (let t = 0; t < i; ++t) { + const t = g * e[o++]; + a[c++] = t; + a[c++] = t; + a[c++] = t; + c += n; + } + } + getOutputLength(e, t) { + return e * (3 + t); + } +} +class DeviceRgbCS extends ColorSpace { + constructor() { + super("DeviceRGB", 3); + } + getRgbItem(e, t, i, a) { + i[a] = 255 * e[t]; + i[a + 1] = 255 * e[t + 1]; + i[a + 2] = 255 * e[t + 2]; + } + getRgbBuffer(e, t, i, a, s, r, n) { + if (8 === r && 0 === n) { + a.set(e.subarray(t, t + 3 * i), s); + return; + } + const g = 255 / ((1 << r) - 1); + let o = t, + c = s; + for (let t = 0; t < i; ++t) { + a[c++] = g * e[o++]; + a[c++] = g * e[o++]; + a[c++] = g * e[o++]; + c += n; + } + } + getOutputLength(e, t) { + return ((e * (3 + t)) / 3) | 0; + } + isPassthrough(e) { + return 8 === e; + } +} +class DeviceRgbaCS extends ColorSpace { + constructor() { + super("DeviceRGBA", 4); + } + getOutputLength(e, t) { + return 4 * e; + } + isPassthrough(e) { + return 8 === e; + } +} +class DeviceCmykCS extends ColorSpace { + constructor() { + super("DeviceCMYK", 4); + } + #t(e, t, i, a, s) { + const r = e[t] * i, + n = e[t + 1] * i, + g = e[t + 2] * i, + o = e[t + 3] * i; + a[s] = + 255 + + r * + (-4.387332384609988 * r + + 54.48615194189176 * n + + 18.82290502165302 * g + + 212.25662451639585 * o - + 285.2331026137004) + + n * + (1.7149763477362134 * n - + 5.6096736904047315 * g + + -17.873870861415444 * o - + 5.497006427196366) + + g * + (-2.5217340131683033 * g - 21.248923337353073 * o + 17.5119270841813) + + o * (-21.86122147463605 * o - 189.48180835922747); + a[s + 1] = + 255 + + r * + (8.841041422036149 * r + + 60.118027045597366 * n + + 6.871425592049007 * g + + 31.159100130055922 * o - + 79.2970844816548) + + n * + (-15.310361306967817 * n + + 17.575251261109482 * g + + 131.35250912493976 * o - + 190.9453302588951) + + g * (4.444339102852739 * g + 9.8632861493405 * o - 24.86741582555878) + + o * (-20.737325471181034 * o - 187.80453709719578); + a[s + 2] = + 255 + + r * + (0.8842522430003296 * r + + 8.078677503112928 * n + + 30.89978309703729 * g - + 0.23883238689178934 * o - + 14.183576799673286) + + n * + (10.49593273432072 * n + + 63.02378494754052 * g + + 50.606957656360734 * o - + 112.23884253719248) + + g * + (0.03296041114873217 * g + + 115.60384449646641 * o - + 193.58209356861505) + + o * (-22.33816807309886 * o - 180.12613974708367); + } + getRgbItem(e, t, i, a) { + this.#t(e, t, 1, i, a); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = 1 / ((1 << r) - 1); + for (let r = 0; r < i; r++) { + this.#t(e, t, g, a, s); + t += 4; + s += 3 + n; + } + } + getOutputLength(e, t) { + return ((e / 4) * (3 + t)) | 0; + } +} +class CalGrayCS extends ColorSpace { + constructor(e, t, i) { + super("CalGray", 1); + if (!e) + throw new FormatError( + "WhitePoint missing - required for color space CalGray", + ); + [this.XW, this.YW, this.ZW] = e; + [this.XB, this.YB, this.ZB] = t || [0, 0, 0]; + this.G = i || 1; + if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) + throw new FormatError( + `Invalid WhitePoint components for ${this.name}, no fallback available`, + ); + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info(`Invalid BlackPoint for ${this.name}, falling back to default.`); + this.XB = this.YB = this.ZB = 0; + } + (0 === this.XB && 0 === this.YB && 0 === this.ZB) || + warn( + `${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ZB: ${this.ZB}, only default values are supported.`, + ); + if (this.G < 1) { + info( + `Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`, + ); + this.G = 1; + } + } + #t(e, t, i, a, s) { + const r = (e[t] * s) ** this.G, + n = this.YW * r, + g = Math.max(295.8 * n ** 0.3333333333333333 - 40.8, 0); + i[a] = g; + i[a + 1] = g; + i[a + 2] = g; + } + getRgbItem(e, t, i, a) { + this.#t(e, t, i, a, 1); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = 1 / ((1 << r) - 1); + for (let r = 0; r < i; ++r) { + this.#t(e, t, a, s, g); + t += 1; + s += 3 + n; + } + } + getOutputLength(e, t) { + return e * (3 + t); + } +} +class CalRGBCS extends ColorSpace { + static #i = new Float32Array([ + 0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296, + ]); + static #a = new Float32Array([ + 0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, + -0.0085287, 0.0400428, 0.9684867, + ]); + static #s = new Float32Array([ + 3.2404542, -1.5371385, -0.4985314, -0.969266, 1.8760108, 0.041556, + 0.0556434, -0.2040259, 1.0572252, + ]); + static #r = new Float32Array([1, 1, 1]); + static #n = new Float32Array(3); + static #g = new Float32Array(3); + static #o = new Float32Array(3); + static #I = (24 / 116) ** 3 / 8; + constructor(e, t, i, a) { + super("CalRGB", 3); + if (!e) + throw new FormatError( + "WhitePoint missing - required for color space CalRGB", + ); + const [s, r, n] = (this.whitePoint = e), + [g, o, c] = (this.blackPoint = t || new Float32Array(3)); + [this.GR, this.GG, this.GB] = i || new Float32Array([1, 1, 1]); + [ + this.MXA, + this.MYA, + this.MZA, + this.MXB, + this.MYB, + this.MZB, + this.MXC, + this.MYC, + this.MZC, + ] = a || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); + if (s < 0 || n < 0 || 1 !== r) + throw new FormatError( + `Invalid WhitePoint components for ${this.name}, no fallback available`, + ); + if (g < 0 || o < 0 || c < 0) { + info( + `Invalid BlackPoint for ${this.name} [${g}, ${o}, ${c}], falling back to default.`, + ); + this.blackPoint = new Float32Array(3); + } + if (this.GR < 0 || this.GG < 0 || this.GB < 0) { + info( + `Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ${this.name}, falling back to default.`, + ); + this.GR = this.GG = this.GB = 1; + } + } + #c(e, t, i) { + i[0] = e[0] * t[0] + e[1] * t[1] + e[2] * t[2]; + i[1] = e[3] * t[0] + e[4] * t[1] + e[5] * t[2]; + i[2] = e[6] * t[0] + e[7] * t[1] + e[8] * t[2]; + } + #C(e, t, i) { + i[0] = (1 * t[0]) / e[0]; + i[1] = (1 * t[1]) / e[1]; + i[2] = (1 * t[2]) / e[2]; + } + #h(e, t, i) { + i[0] = (0.95047 * t[0]) / e[0]; + i[1] = (1 * t[1]) / e[1]; + i[2] = (1.08883 * t[2]) / e[2]; + } + #B(e) { + return e <= 0.0031308 + ? this.#l(0, 1, 12.92 * e) + : e >= 0.99554525 + ? 1 + : this.#l(0, 1, 1.055 * e ** (1 / 2.4) - 0.055); + } + #l(e, t, i) { + return Math.max(e, Math.min(t, i)); + } + #Q(e) { + return e < 0 + ? -this.#Q(-e) + : e > 8 + ? ((e + 16) / 116) ** 3 + : e * CalRGBCS.#I; + } + #E(e, t, i) { + if (0 === e[0] && 0 === e[1] && 0 === e[2]) { + i[0] = t[0]; + i[1] = t[1]; + i[2] = t[2]; + return; + } + const a = this.#Q(0), + s = (1 - a) / (1 - this.#Q(e[0])), + r = 1 - s, + n = (1 - a) / (1 - this.#Q(e[1])), + g = 1 - n, + o = (1 - a) / (1 - this.#Q(e[2])), + c = 1 - o; + i[0] = t[0] * s + r; + i[1] = t[1] * n + g; + i[2] = t[2] * o + c; + } + #u(e, t, i) { + if (1 === e[0] && 1 === e[2]) { + i[0] = t[0]; + i[1] = t[1]; + i[2] = t[2]; + return; + } + const a = i; + this.#c(CalRGBCS.#i, t, a); + const s = CalRGBCS.#n; + this.#C(e, a, s); + this.#c(CalRGBCS.#a, s, i); + } + #d(e, t, i) { + const a = i; + this.#c(CalRGBCS.#i, t, a); + const s = CalRGBCS.#n; + this.#h(e, a, s); + this.#c(CalRGBCS.#a, s, i); + } + #t(e, t, i, a, s) { + const r = this.#l(0, 1, e[t] * s), + n = this.#l(0, 1, e[t + 1] * s), + g = this.#l(0, 1, e[t + 2] * s), + o = 1 === r ? 1 : r ** this.GR, + c = 1 === n ? 1 : n ** this.GG, + C = 1 === g ? 1 : g ** this.GB, + h = this.MXA * o + this.MXB * c + this.MXC * C, + l = this.MYA * o + this.MYB * c + this.MYC * C, + Q = this.MZA * o + this.MZB * c + this.MZC * C, + E = CalRGBCS.#g; + E[0] = h; + E[1] = l; + E[2] = Q; + const u = CalRGBCS.#o; + this.#u(this.whitePoint, E, u); + const d = CalRGBCS.#g; + this.#E(this.blackPoint, u, d); + const f = CalRGBCS.#o; + this.#d(CalRGBCS.#r, d, f); + const p = CalRGBCS.#g; + this.#c(CalRGBCS.#s, f, p); + i[a] = 255 * this.#B(p[0]); + i[a + 1] = 255 * this.#B(p[1]); + i[a + 2] = 255 * this.#B(p[2]); + } + getRgbItem(e, t, i, a) { + this.#t(e, t, i, a, 1); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = 1 / ((1 << r) - 1); + for (let r = 0; r < i; ++r) { + this.#t(e, t, a, s, g); + t += 3; + s += 3 + n; + } + } + getOutputLength(e, t) { + return ((e * (3 + t)) / 3) | 0; + } +} +class LabCS extends ColorSpace { + constructor(e, t, i) { + super("Lab", 3); + if (!e) + throw new FormatError( + "WhitePoint missing - required for color space Lab", + ); + [this.XW, this.YW, this.ZW] = e; + [this.amin, this.amax, this.bmin, this.bmax] = i || [-100, 100, -100, 100]; + [this.XB, this.YB, this.ZB] = t || [0, 0, 0]; + if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) + throw new FormatError( + "Invalid WhitePoint components, no fallback available", + ); + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + info("Invalid BlackPoint, falling back to default"); + this.XB = this.YB = this.ZB = 0; + } + if (this.amin > this.amax || this.bmin > this.bmax) { + info("Invalid Range, falling back to defaults"); + this.amin = -100; + this.amax = 100; + this.bmin = -100; + this.bmax = 100; + } + } + #f(e) { + return e >= 6 / 29 ? e ** 3 : (108 / 841) * (e - 4 / 29); + } + #p(e, t, i, a) { + return i + (e * (a - i)) / t; + } + #t(e, t, i, a, s) { + let r = e[t], + n = e[t + 1], + g = e[t + 2]; + if (!1 !== i) { + r = this.#p(r, i, 0, 100); + n = this.#p(n, i, this.amin, this.amax); + g = this.#p(g, i, this.bmin, this.bmax); + } + n > this.amax ? (n = this.amax) : n < this.amin && (n = this.amin); + g > this.bmax ? (g = this.bmax) : g < this.bmin && (g = this.bmin); + const o = (r + 16) / 116, + c = o + n / 500, + C = o - g / 200, + h = this.XW * this.#f(c), + l = this.YW * this.#f(o), + Q = this.ZW * this.#f(C); + let E, u, d; + if (this.ZW < 1) { + E = 3.1339 * h + -1.617 * l + -0.4906 * Q; + u = -0.9785 * h + 1.916 * l + 0.0333 * Q; + d = 0.072 * h + -0.229 * l + 1.4057 * Q; + } else { + E = 3.2406 * h + -1.5372 * l + -0.4986 * Q; + u = -0.9689 * h + 1.8758 * l + 0.0415 * Q; + d = 0.0557 * h + -0.204 * l + 1.057 * Q; + } + a[s] = 255 * Math.sqrt(E); + a[s + 1] = 255 * Math.sqrt(u); + a[s + 2] = 255 * Math.sqrt(d); + } + getRgbItem(e, t, i, a) { + this.#t(e, t, !1, i, a); + } + getRgbBuffer(e, t, i, a, s, r, n) { + const g = (1 << r) - 1; + for (let r = 0; r < i; r++) { + this.#t(e, t, g, a, s); + t += 3; + s += 3 + n; + } + } + getOutputLength(e, t) { + return ((e * (3 + t)) / 3) | 0; + } + isDefaultDecode(e, t) { + return !0; + } + get usesZeroToOneRange() { + return shadow(this, "usesZeroToOneRange", !1); + } +} +function hexToInt(e, t) { + let i = 0; + for (let a = 0; a <= t; a++) i = (i << 8) | e[a]; + return i >>> 0; +} +function hexToStr(e, t) { + return 1 === t + ? String.fromCharCode(e[0], e[1]) + : 3 === t + ? String.fromCharCode(e[0], e[1], e[2], e[3]) + : String.fromCharCode(...e.subarray(0, t + 1)); +} +function addHex(e, t, i) { + let a = 0; + for (let s = i; s >= 0; s--) { + a += e[s] + t[s]; + e[s] = 255 & a; + a >>= 8; + } +} +function incHex(e, t) { + let i = 1; + for (let a = t; a >= 0 && i > 0; a--) { + i += e[a]; + e[a] = 255 & i; + i >>= 8; + } +} +const kt = 16; +class BinaryCMapStream { + constructor(e) { + this.buffer = e; + this.pos = 0; + this.end = e.length; + this.tmpBuf = new Uint8Array(19); + } + readByte() { + return this.pos >= this.end ? -1 : this.buffer[this.pos++]; + } + readNumber() { + let e, + t = 0; + do { + const i = this.readByte(); + if (i < 0) throw new FormatError("unexpected EOF in bcmap"); + e = !(128 & i); + t = (t << 7) | (127 & i); + } while (!e); + return t; + } + readSigned() { + const e = this.readNumber(); + return 1 & e ? ~(e >>> 1) : e >>> 1; + } + readHex(e, t) { + e.set(this.buffer.subarray(this.pos, this.pos + t + 1)); + this.pos += t + 1; + } + readHexNumber(e, t) { + let i; + const a = this.tmpBuf; + let s = 0; + do { + const e = this.readByte(); + if (e < 0) throw new FormatError("unexpected EOF in bcmap"); + i = !(128 & e); + a[s++] = 127 & e; + } while (!i); + let r = t, + n = 0, + g = 0; + for (; r >= 0; ) { + for (; g < 8 && a.length > 0; ) { + n |= a[--s] << g; + g += 7; + } + e[r] = 255 & n; + r--; + n >>= 8; + g -= 8; + } + } + readHexSigned(e, t) { + this.readHexNumber(e, t); + const i = 1 & e[t] ? 255 : 0; + let a = 0; + for (let s = 0; s <= t; s++) { + a = ((1 & a) << 8) | e[s]; + e[s] = (a >> 1) ^ i; + } + } + readString() { + const e = this.readNumber(), + t = new Array(e); + for (let i = 0; i < e; i++) t[i] = this.readNumber(); + return String.fromCharCode(...t); + } +} +class BinaryCMapReader { + async process(e, t, i) { + const a = new BinaryCMapStream(e), + s = a.readByte(); + t.vertical = !!(1 & s); + let r = null; + const n = new Uint8Array(kt), + g = new Uint8Array(kt), + o = new Uint8Array(kt), + c = new Uint8Array(kt), + C = new Uint8Array(kt); + let h, l; + for (; (l = a.readByte()) >= 0; ) { + const e = l >> 5; + if (7 === e) { + switch (31 & l) { + case 0: + a.readString(); + break; + case 1: + r = a.readString(); + } + continue; + } + const i = !!(16 & l), + s = 15 & l; + if (s + 1 > kt) + throw new Error("BinaryCMapReader.process: Invalid dataSize."); + const Q = 1, + E = a.readNumber(); + switch (e) { + case 0: + a.readHex(n, s); + a.readHexNumber(g, s); + addHex(g, n, s); + t.addCodespaceRange(s + 1, hexToInt(n, s), hexToInt(g, s)); + for (let e = 1; e < E; e++) { + incHex(g, s); + a.readHexNumber(n, s); + addHex(n, g, s); + a.readHexNumber(g, s); + addHex(g, n, s); + t.addCodespaceRange(s + 1, hexToInt(n, s), hexToInt(g, s)); + } + break; + case 1: + a.readHex(n, s); + a.readHexNumber(g, s); + addHex(g, n, s); + a.readNumber(); + for (let e = 1; e < E; e++) { + incHex(g, s); + a.readHexNumber(n, s); + addHex(n, g, s); + a.readHexNumber(g, s); + addHex(g, n, s); + a.readNumber(); + } + break; + case 2: + a.readHex(o, s); + h = a.readNumber(); + t.mapOne(hexToInt(o, s), h); + for (let e = 1; e < E; e++) { + incHex(o, s); + if (!i) { + a.readHexNumber(C, s); + addHex(o, C, s); + } + h = a.readSigned() + (h + 1); + t.mapOne(hexToInt(o, s), h); + } + break; + case 3: + a.readHex(n, s); + a.readHexNumber(g, s); + addHex(g, n, s); + h = a.readNumber(); + t.mapCidRange(hexToInt(n, s), hexToInt(g, s), h); + for (let e = 1; e < E; e++) { + incHex(g, s); + if (i) n.set(g); + else { + a.readHexNumber(n, s); + addHex(n, g, s); + } + a.readHexNumber(g, s); + addHex(g, n, s); + h = a.readNumber(); + t.mapCidRange(hexToInt(n, s), hexToInt(g, s), h); + } + break; + case 4: + a.readHex(o, Q); + a.readHex(c, s); + t.mapOne(hexToInt(o, Q), hexToStr(c, s)); + for (let e = 1; e < E; e++) { + incHex(o, Q); + if (!i) { + a.readHexNumber(C, Q); + addHex(o, C, Q); + } + incHex(c, s); + a.readHexSigned(C, s); + addHex(c, C, s); + t.mapOne(hexToInt(o, Q), hexToStr(c, s)); + } + break; + case 5: + a.readHex(n, Q); + a.readHexNumber(g, Q); + addHex(g, n, Q); + a.readHex(c, s); + t.mapBfRange(hexToInt(n, Q), hexToInt(g, Q), hexToStr(c, s)); + for (let e = 1; e < E; e++) { + incHex(g, Q); + if (i) n.set(g); + else { + a.readHexNumber(n, Q); + addHex(n, g, Q); + } + a.readHexNumber(g, Q); + addHex(g, n, Q); + a.readHex(c, s); + t.mapBfRange(hexToInt(n, Q), hexToInt(g, Q), hexToStr(c, s)); + } + break; + default: + throw new Error(`BinaryCMapReader.process - unknown type: ${e}`); + } + } + return r ? i(r) : t; + } +} +const Rt = new Uint8Array(0); +class DecodeStream extends BaseStream { + constructor(e) { + super(); + this._rawMinBufferLength = e || 0; + this.pos = 0; + this.bufferLength = 0; + this.eof = !1; + this.buffer = Rt; + this.minBufferLength = 512; + if (e) for (; this.minBufferLength < e; ) this.minBufferLength *= 2; + } + get isEmpty() { + for (; !this.eof && 0 === this.bufferLength; ) this.readBlock(); + return 0 === this.bufferLength; + } + ensureBuffer(e) { + const t = this.buffer; + if (e <= t.byteLength) return t; + let i = this.minBufferLength; + for (; i < e; ) i *= 2; + const a = new Uint8Array(i); + a.set(t); + return (this.buffer = a); + } + getByte() { + const e = this.pos; + for (; this.bufferLength <= e; ) { + if (this.eof) return -1; + this.readBlock(); + } + return this.buffer[this.pos++]; + } + getBytes(e, t = null) { + const i = this.pos; + let a; + if (e) { + this.ensureBuffer(i + e); + a = i + e; + for (; !this.eof && this.bufferLength < a; ) this.readBlock(t); + const s = this.bufferLength; + a > s && (a = s); + } else { + for (; !this.eof; ) this.readBlock(t); + a = this.bufferLength; + } + this.pos = a; + return this.buffer.subarray(i, a); + } + async getImageData(e, t = null) { + if (!this.canAsyncDecodeImageFromBuffer) return this.getBytes(e, t); + const i = await this.stream.asyncGetBytes(); + return this.decodeImage(i, t); + } + reset() { + this.pos = 0; + } + makeSubStream(e, t, i = null) { + if (void 0 === t) for (; !this.eof; ) this.readBlock(); + else { + const i = e + t; + for (; this.bufferLength <= i && !this.eof; ) this.readBlock(); + } + return new Stream(this.buffer, e, t, i); + } + getBaseStreams() { + return this.str ? this.str.getBaseStreams() : null; + } +} +class StreamsSequenceStream extends DecodeStream { + constructor(e, t = null) { + let i = 0; + for (const t of e) + i += t instanceof DecodeStream ? t._rawMinBufferLength : t.length; + super(i); + this.streams = e; + this._onError = t; + } + readBlock() { + const e = this.streams; + if (0 === e.length) { + this.eof = !0; + return; + } + const t = e.shift(); + let i; + try { + i = t.getBytes(); + } catch (e) { + if (this._onError) { + this._onError(e, t.dict?.objId); + return; + } + throw e; + } + const a = this.bufferLength, + s = a + i.length; + this.ensureBuffer(s).set(i, a); + this.bufferLength = s; + } + getBaseStreams() { + const e = []; + for (const t of this.streams) { + const i = t.getBaseStreams(); + i && e.push(...i); + } + return e.length > 0 ? e : null; + } +} +class Ascii85Stream extends DecodeStream { + constructor(e, t) { + t && (t *= 0.8); + super(t); + this.str = e; + this.dict = e.dict; + this.input = new Uint8Array(5); + } + readBlock() { + const e = this.str; + let t = e.getByte(); + for (; isWhiteSpace(t); ) t = e.getByte(); + if (-1 === t || 126 === t) { + this.eof = !0; + return; + } + const i = this.bufferLength; + let a, s; + if (122 === t) { + a = this.ensureBuffer(i + 4); + for (s = 0; s < 4; ++s) a[i + s] = 0; + this.bufferLength += 4; + } else { + const r = this.input; + r[0] = t; + for (s = 1; s < 5; ++s) { + t = e.getByte(); + for (; isWhiteSpace(t); ) t = e.getByte(); + r[s] = t; + if (-1 === t || 126 === t) break; + } + a = this.ensureBuffer(i + s - 1); + this.bufferLength += s - 1; + if (s < 5) { + for (; s < 5; ++s) r[s] = 117; + this.eof = !0; + } + let n = 0; + for (s = 0; s < 5; ++s) n = 85 * n + (r[s] - 33); + for (s = 3; s >= 0; --s) { + a[i + s] = 255 & n; + n >>= 8; + } + } + } +} +class AsciiHexStream extends DecodeStream { + constructor(e, t) { + t && (t *= 0.5); + super(t); + this.str = e; + this.dict = e.dict; + this.firstDigit = -1; + } + readBlock() { + const e = this.str.getBytes(8e3); + if (!e.length) { + this.eof = !0; + return; + } + const t = (e.length + 1) >> 1, + i = this.ensureBuffer(this.bufferLength + t); + let a = this.bufferLength, + s = this.firstDigit; + for (const t of e) { + let e; + if (t >= 48 && t <= 57) e = 15 & t; + else { + if (!((t >= 65 && t <= 70) || (t >= 97 && t <= 102))) { + if (62 === t) { + this.eof = !0; + break; + } + continue; + } + e = 9 + (15 & t); + } + if (s < 0) s = e; + else { + i[a++] = (s << 4) | e; + s = -1; + } + } + if (s >= 0 && this.eof) { + i[a++] = s << 4; + s = -1; + } + this.firstDigit = s; + this.bufferLength = a; + } +} +const Nt = -1, + Gt = [ + [-1, -1], + [-1, -1], + [7, 8], + [7, 7], + [6, 6], + [6, 6], + [6, 5], + [6, 5], + [4, 0], + [4, 0], + [4, 0], + [4, 0], + [4, 0], + [4, 0], + [4, 0], + [4, 0], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [3, 3], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + [1, 2], + ], + xt = [ + [-1, -1], + [12, -2], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [11, 1792], + [11, 1792], + [12, 1984], + [12, 2048], + [12, 2112], + [12, 2176], + [12, 2240], + [12, 2304], + [11, 1856], + [11, 1856], + [11, 1920], + [11, 1920], + [12, 2368], + [12, 2432], + [12, 2496], + [12, 2560], + ], + Ut = [ + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [8, 29], + [8, 29], + [8, 30], + [8, 30], + [8, 45], + [8, 45], + [8, 46], + [8, 46], + [7, 22], + [7, 22], + [7, 22], + [7, 22], + [7, 23], + [7, 23], + [7, 23], + [7, 23], + [8, 47], + [8, 47], + [8, 48], + [8, 48], + [6, 13], + [6, 13], + [6, 13], + [6, 13], + [6, 13], + [6, 13], + [6, 13], + [6, 13], + [7, 20], + [7, 20], + [7, 20], + [7, 20], + [8, 33], + [8, 33], + [8, 34], + [8, 34], + [8, 35], + [8, 35], + [8, 36], + [8, 36], + [8, 37], + [8, 37], + [8, 38], + [8, 38], + [7, 19], + [7, 19], + [7, 19], + [7, 19], + [8, 31], + [8, 31], + [8, 32], + [8, 32], + [6, 1], + [6, 1], + [6, 1], + [6, 1], + [6, 1], + [6, 1], + [6, 1], + [6, 1], + [6, 12], + [6, 12], + [6, 12], + [6, 12], + [6, 12], + [6, 12], + [6, 12], + [6, 12], + [8, 53], + [8, 53], + [8, 54], + [8, 54], + [7, 26], + [7, 26], + [7, 26], + [7, 26], + [8, 39], + [8, 39], + [8, 40], + [8, 40], + [8, 41], + [8, 41], + [8, 42], + [8, 42], + [8, 43], + [8, 43], + [8, 44], + [8, 44], + [7, 21], + [7, 21], + [7, 21], + [7, 21], + [7, 28], + [7, 28], + [7, 28], + [7, 28], + [8, 61], + [8, 61], + [8, 62], + [8, 62], + [8, 63], + [8, 63], + [8, 0], + [8, 0], + [8, 320], + [8, 320], + [8, 384], + [8, 384], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 10], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [5, 11], + [7, 27], + [7, 27], + [7, 27], + [7, 27], + [8, 59], + [8, 59], + [8, 60], + [8, 60], + [9, 1472], + [9, 1536], + [9, 1600], + [9, 1728], + [7, 18], + [7, 18], + [7, 18], + [7, 18], + [7, 24], + [7, 24], + [7, 24], + [7, 24], + [8, 49], + [8, 49], + [8, 50], + [8, 50], + [8, 51], + [8, 51], + [8, 52], + [8, 52], + [7, 25], + [7, 25], + [7, 25], + [7, 25], + [8, 55], + [8, 55], + [8, 56], + [8, 56], + [8, 57], + [8, 57], + [8, 58], + [8, 58], + [6, 192], + [6, 192], + [6, 192], + [6, 192], + [6, 192], + [6, 192], + [6, 192], + [6, 192], + [6, 1664], + [6, 1664], + [6, 1664], + [6, 1664], + [6, 1664], + [6, 1664], + [6, 1664], + [6, 1664], + [8, 448], + [8, 448], + [8, 512], + [8, 512], + [9, 704], + [9, 768], + [8, 640], + [8, 640], + [8, 576], + [8, 576], + [9, 832], + [9, 896], + [9, 960], + [9, 1024], + [9, 1088], + [9, 1152], + [9, 1216], + [9, 1280], + [9, 1344], + [9, 1408], + [7, 256], + [7, 256], + [7, 256], + [7, 256], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 2], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [4, 3], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 128], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 8], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [5, 9], + [6, 16], + [6, 16], + [6, 16], + [6, 16], + [6, 16], + [6, 16], + [6, 16], + [6, 16], + [6, 17], + [6, 17], + [6, 17], + [6, 17], + [6, 17], + [6, 17], + [6, 17], + [6, 17], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 4], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [6, 14], + [6, 14], + [6, 14], + [6, 14], + [6, 14], + [6, 14], + [6, 14], + [6, 14], + [6, 15], + [6, 15], + [6, 15], + [6, 15], + [6, 15], + [6, 15], + [6, 15], + [6, 15], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [5, 64], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + [4, 7], + ], + Mt = [ + [-1, -1], + [-1, -1], + [12, -2], + [12, -2], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [11, 1792], + [11, 1792], + [11, 1792], + [11, 1792], + [12, 1984], + [12, 1984], + [12, 2048], + [12, 2048], + [12, 2112], + [12, 2112], + [12, 2176], + [12, 2176], + [12, 2240], + [12, 2240], + [12, 2304], + [12, 2304], + [11, 1856], + [11, 1856], + [11, 1856], + [11, 1856], + [11, 1920], + [11, 1920], + [11, 1920], + [11, 1920], + [12, 2368], + [12, 2368], + [12, 2432], + [12, 2432], + [12, 2496], + [12, 2496], + [12, 2560], + [12, 2560], + [10, 18], + [10, 18], + [10, 18], + [10, 18], + [10, 18], + [10, 18], + [10, 18], + [10, 18], + [12, 52], + [12, 52], + [13, 640], + [13, 704], + [13, 768], + [13, 832], + [12, 55], + [12, 55], + [12, 56], + [12, 56], + [13, 1280], + [13, 1344], + [13, 1408], + [13, 1472], + [12, 59], + [12, 59], + [12, 60], + [12, 60], + [13, 1536], + [13, 1600], + [11, 24], + [11, 24], + [11, 24], + [11, 24], + [11, 25], + [11, 25], + [11, 25], + [11, 25], + [13, 1664], + [13, 1728], + [12, 320], + [12, 320], + [12, 384], + [12, 384], + [12, 448], + [12, 448], + [13, 512], + [13, 576], + [12, 53], + [12, 53], + [12, 54], + [12, 54], + [13, 896], + [13, 960], + [13, 1024], + [13, 1088], + [13, 1152], + [13, 1216], + [10, 64], + [10, 64], + [10, 64], + [10, 64], + [10, 64], + [10, 64], + [10, 64], + [10, 64], + ], + Lt = [ + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [8, 13], + [11, 23], + [11, 23], + [12, 50], + [12, 51], + [12, 44], + [12, 45], + [12, 46], + [12, 47], + [12, 57], + [12, 58], + [12, 61], + [12, 256], + [10, 16], + [10, 16], + [10, 16], + [10, 16], + [10, 17], + [10, 17], + [10, 17], + [10, 17], + [12, 48], + [12, 49], + [12, 62], + [12, 63], + [12, 30], + [12, 31], + [12, 32], + [12, 33], + [12, 40], + [12, 41], + [11, 22], + [11, 22], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [8, 14], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 10], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [7, 11], + [9, 15], + [9, 15], + [9, 15], + [9, 15], + [9, 15], + [9, 15], + [9, 15], + [9, 15], + [12, 128], + [12, 192], + [12, 26], + [12, 27], + [12, 28], + [12, 29], + [11, 19], + [11, 19], + [11, 20], + [11, 20], + [12, 34], + [12, 35], + [12, 36], + [12, 37], + [12, 38], + [12, 39], + [11, 21], + [11, 21], + [12, 42], + [12, 43], + [10, 0], + [10, 0], + [10, 0], + [10, 0], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + [7, 12], + ], + Ht = [ + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [6, 9], + [6, 8], + [5, 7], + [5, 7], + [4, 6], + [4, 6], + [4, 6], + [4, 6], + [4, 5], + [4, 5], + [4, 5], + [4, 5], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 1], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [3, 4], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 3], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + [2, 2], + ]; +class CCITTFaxDecoder { + constructor(e, t = {}) { + if (!e || "function" != typeof e.next) + throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); + this.source = e; + this.eof = !1; + this.encoding = t.K || 0; + this.eoline = t.EndOfLine || !1; + this.byteAlign = t.EncodedByteAlign || !1; + this.columns = t.Columns || 1728; + this.rows = t.Rows || 0; + this.eoblock = t.EndOfBlock ?? !0; + this.black = t.BlackIs1 || !1; + this.codingLine = new Uint32Array(this.columns + 1); + this.refLine = new Uint32Array(this.columns + 2); + this.codingLine[0] = this.columns; + this.codingPos = 0; + this.row = 0; + this.nextLine2D = this.encoding < 0; + this.inputBits = 0; + this.inputBuf = 0; + this.outputBits = 0; + this.rowsDone = !1; + let i; + for (; 0 === (i = this._lookBits(12)); ) this._eatBits(1); + 1 === i && this._eatBits(12); + if (this.encoding > 0) { + this.nextLine2D = !this._lookBits(1); + this._eatBits(1); + } + } + readNextChar() { + if (this.eof) return -1; + const e = this.refLine, + t = this.codingLine, + i = this.columns; + let a, s, r, n, g; + if (0 === this.outputBits) { + this.rowsDone && (this.eof = !0); + if (this.eof) return -1; + this.err = !1; + let r, g, o; + if (this.nextLine2D) { + for (n = 0; t[n] < i; ++n) e[n] = t[n]; + e[n++] = i; + e[n] = i; + t[0] = 0; + this.codingPos = 0; + a = 0; + s = 0; + for (; t[this.codingPos] < i; ) { + r = this._getTwoDimCode(); + switch (r) { + case 0: + this._addPixels(e[a + 1], s); + e[a + 1] < i && (a += 2); + break; + case 1: + r = g = 0; + if (s) { + do { + r += o = this._getBlackCode(); + } while (o >= 64); + do { + g += o = this._getWhiteCode(); + } while (o >= 64); + } else { + do { + r += o = this._getWhiteCode(); + } while (o >= 64); + do { + g += o = this._getBlackCode(); + } while (o >= 64); + } + this._addPixels(t[this.codingPos] + r, s); + t[this.codingPos] < i && + this._addPixels(t[this.codingPos] + g, 1 ^ s); + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + break; + case 7: + this._addPixels(e[a] + 3, s); + s ^= 1; + if (t[this.codingPos] < i) { + ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 5: + this._addPixels(e[a] + 2, s); + s ^= 1; + if (t[this.codingPos] < i) { + ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 3: + this._addPixels(e[a] + 1, s); + s ^= 1; + if (t[this.codingPos] < i) { + ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 2: + this._addPixels(e[a], s); + s ^= 1; + if (t[this.codingPos] < i) { + ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 8: + this._addPixelsNeg(e[a] - 3, s); + s ^= 1; + if (t[this.codingPos] < i) { + a > 0 ? --a : ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 6: + this._addPixelsNeg(e[a] - 2, s); + s ^= 1; + if (t[this.codingPos] < i) { + a > 0 ? --a : ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case 4: + this._addPixelsNeg(e[a] - 1, s); + s ^= 1; + if (t[this.codingPos] < i) { + a > 0 ? --a : ++a; + for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; + } + break; + case Nt: + this._addPixels(i, 0); + this.eof = !0; + break; + default: + info("bad 2d code"); + this._addPixels(i, 0); + this.err = !0; + } + } + } else { + t[0] = 0; + this.codingPos = 0; + s = 0; + for (; t[this.codingPos] < i; ) { + r = 0; + if (s) + do { + r += o = this._getBlackCode(); + } while (o >= 64); + else + do { + r += o = this._getWhiteCode(); + } while (o >= 64); + this._addPixels(t[this.codingPos] + r, s); + s ^= 1; + } + } + let c = !1; + this.byteAlign && (this.inputBits &= -8); + if (this.eoblock || this.row !== this.rows - 1) { + r = this._lookBits(12); + if (this.eoline) + for (; r !== Nt && 1 !== r; ) { + this._eatBits(1); + r = this._lookBits(12); + } + else + for (; 0 === r; ) { + this._eatBits(1); + r = this._lookBits(12); + } + if (1 === r) { + this._eatBits(12); + c = !0; + } else r === Nt && (this.eof = !0); + } else this.rowsDone = !0; + if (!this.eof && this.encoding > 0 && !this.rowsDone) { + this.nextLine2D = !this._lookBits(1); + this._eatBits(1); + } + if (this.eoblock && c && this.byteAlign) { + r = this._lookBits(12); + if (1 === r) { + this._eatBits(12); + if (this.encoding > 0) { + this._lookBits(1); + this._eatBits(1); + } + if (this.encoding >= 0) + for (n = 0; n < 4; ++n) { + r = this._lookBits(12); + 1 !== r && info("bad rtc code: " + r); + this._eatBits(12); + if (this.encoding > 0) { + this._lookBits(1); + this._eatBits(1); + } + } + this.eof = !0; + } + } else if (this.err && this.eoline) { + for (;;) { + r = this._lookBits(13); + if (r === Nt) { + this.eof = !0; + return -1; + } + if (r >> 1 == 1) break; + this._eatBits(1); + } + this._eatBits(12); + if (this.encoding > 0) { + this._eatBits(1); + this.nextLine2D = !(1 & r); + } + } + this.outputBits = + t[0] > 0 ? t[(this.codingPos = 0)] : t[(this.codingPos = 1)]; + this.row++; + } + if (this.outputBits >= 8) { + g = 1 & this.codingPos ? 0 : 255; + this.outputBits -= 8; + if (0 === this.outputBits && t[this.codingPos] < i) { + this.codingPos++; + this.outputBits = t[this.codingPos] - t[this.codingPos - 1]; + } + } else { + r = 8; + g = 0; + do { + if ("number" != typeof this.outputBits) + throw new FormatError( + 'Invalid /CCITTFaxDecode data, "outputBits" must be a number.', + ); + if (this.outputBits > r) { + g <<= r; + 1 & this.codingPos || (g |= 255 >> (8 - r)); + this.outputBits -= r; + r = 0; + } else { + g <<= this.outputBits; + 1 & this.codingPos || (g |= 255 >> (8 - this.outputBits)); + r -= this.outputBits; + this.outputBits = 0; + if (t[this.codingPos] < i) { + this.codingPos++; + this.outputBits = t[this.codingPos] - t[this.codingPos - 1]; + } else if (r > 0) { + g <<= r; + r = 0; + } + } + } while (r); + } + this.black && (g ^= 255); + return g; + } + _addPixels(e, t) { + const i = this.codingLine; + let a = this.codingPos; + if (e > i[a]) { + if (e > this.columns) { + info("row is wrong length"); + this.err = !0; + e = this.columns; + } + (1 & a) ^ t && ++a; + i[a] = e; + } + this.codingPos = a; + } + _addPixelsNeg(e, t) { + const i = this.codingLine; + let a = this.codingPos; + if (e > i[a]) { + if (e > this.columns) { + info("row is wrong length"); + this.err = !0; + e = this.columns; + } + (1 & a) ^ t && ++a; + i[a] = e; + } else if (e < i[a]) { + if (e < 0) { + info("invalid code"); + this.err = !0; + e = 0; + } + for (; a > 0 && e < i[a - 1]; ) --a; + i[a] = e; + } + this.codingPos = a; + } + _findTableCode(e, t, i, a) { + const s = a || 0; + for (let a = e; a <= t; ++a) { + let e = this._lookBits(a); + if (e === Nt) return [!0, 1, !1]; + a < t && (e <<= t - a); + if (!s || e >= s) { + const t = i[e - s]; + if (t[0] === a) { + this._eatBits(a); + return [!0, t[1], !0]; + } + } + } + return [!1, 0, !1]; + } + _getTwoDimCode() { + let e, + t = 0; + if (this.eoblock) { + t = this._lookBits(7); + e = Gt[t]; + if (e?.[0] > 0) { + this._eatBits(e[0]); + return e[1]; + } + } else { + const e = this._findTableCode(1, 7, Gt); + if (e[0] && e[2]) return e[1]; + } + info("Bad two dim code"); + return Nt; + } + _getWhiteCode() { + let e, + t = 0; + if (this.eoblock) { + t = this._lookBits(12); + if (t === Nt) return 1; + e = t >> 5 == 0 ? xt[t] : Ut[t >> 3]; + if (e[0] > 0) { + this._eatBits(e[0]); + return e[1]; + } + } else { + let e = this._findTableCode(1, 9, Ut); + if (e[0]) return e[1]; + e = this._findTableCode(11, 12, xt); + if (e[0]) return e[1]; + } + info("bad white code"); + this._eatBits(1); + return 1; + } + _getBlackCode() { + let e, t; + if (this.eoblock) { + e = this._lookBits(13); + if (e === Nt) return 1; + t = + e >> 7 == 0 + ? Mt[e] + : e >> 9 == 0 && e >> 7 != 0 + ? Lt[(e >> 1) - 64] + : Ht[e >> 7]; + if (t[0] > 0) { + this._eatBits(t[0]); + return t[1]; + } + } else { + let e = this._findTableCode(2, 6, Ht); + if (e[0]) return e[1]; + e = this._findTableCode(7, 12, Lt, 64); + if (e[0]) return e[1]; + e = this._findTableCode(10, 13, Mt); + if (e[0]) return e[1]; + } + info("bad black code"); + this._eatBits(1); + return 1; + } + _lookBits(e) { + let t; + for (; this.inputBits < e; ) { + if (-1 === (t = this.source.next())) + return 0 === this.inputBits + ? Nt + : (this.inputBuf << (e - this.inputBits)) & (65535 >> (16 - e)); + this.inputBuf = (this.inputBuf << 8) | t; + this.inputBits += 8; + } + return (this.inputBuf >> (this.inputBits - e)) & (65535 >> (16 - e)); + } + _eatBits(e) { + (this.inputBits -= e) < 0 && (this.inputBits = 0); + } +} +class CCITTFaxStream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.str = e; + this.dict = e.dict; + i instanceof Dict || (i = Dict.empty); + const a = { next: () => e.getByte() }; + this.ccittFaxDecoder = new CCITTFaxDecoder(a, { + K: i.get("K"), + EndOfLine: i.get("EndOfLine"), + EncodedByteAlign: i.get("EncodedByteAlign"), + Columns: i.get("Columns"), + Rows: i.get("Rows"), + EndOfBlock: i.get("EndOfBlock"), + BlackIs1: i.get("BlackIs1"), + }); + } + readBlock() { + for (; !this.eof; ) { + const e = this.ccittFaxDecoder.readNextChar(); + if (-1 === e) { + this.eof = !0; + return; + } + this.ensureBuffer(this.bufferLength + 1); + this.buffer[this.bufferLength++] = e; + } + } +} +const Jt = new Int32Array([ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15, + ]), + Yt = new Int32Array([ + 3, 4, 5, 6, 7, 8, 9, 10, 65547, 65549, 65551, 65553, 131091, 131095, 131099, + 131103, 196643, 196651, 196659, 196667, 262211, 262227, 262243, 262259, + 327811, 327843, 327875, 327907, 258, 258, 258, + ]), + vt = new Int32Array([ + 1, 2, 3, 4, 65541, 65543, 131081, 131085, 196625, 196633, 262177, 262193, + 327745, 327777, 393345, 393409, 459009, 459137, 524801, 525057, 590849, + 591361, 657409, 658433, 724993, 727041, 794625, 798721, 868353, 876545, + ]), + Kt = [ + new Int32Array([ + 459008, 524368, 524304, 524568, 459024, 524400, 524336, 590016, 459016, + 524384, 524320, 589984, 524288, 524416, 524352, 590048, 459012, 524376, + 524312, 589968, 459028, 524408, 524344, 590032, 459020, 524392, 524328, + 59e4, 524296, 524424, 524360, 590064, 459010, 524372, 524308, 524572, + 459026, 524404, 524340, 590024, 459018, 524388, 524324, 589992, 524292, + 524420, 524356, 590056, 459014, 524380, 524316, 589976, 459030, 524412, + 524348, 590040, 459022, 524396, 524332, 590008, 524300, 524428, 524364, + 590072, 459009, 524370, 524306, 524570, 459025, 524402, 524338, 590020, + 459017, 524386, 524322, 589988, 524290, 524418, 524354, 590052, 459013, + 524378, 524314, 589972, 459029, 524410, 524346, 590036, 459021, 524394, + 524330, 590004, 524298, 524426, 524362, 590068, 459011, 524374, 524310, + 524574, 459027, 524406, 524342, 590028, 459019, 524390, 524326, 589996, + 524294, 524422, 524358, 590060, 459015, 524382, 524318, 589980, 459031, + 524414, 524350, 590044, 459023, 524398, 524334, 590012, 524302, 524430, + 524366, 590076, 459008, 524369, 524305, 524569, 459024, 524401, 524337, + 590018, 459016, 524385, 524321, 589986, 524289, 524417, 524353, 590050, + 459012, 524377, 524313, 589970, 459028, 524409, 524345, 590034, 459020, + 524393, 524329, 590002, 524297, 524425, 524361, 590066, 459010, 524373, + 524309, 524573, 459026, 524405, 524341, 590026, 459018, 524389, 524325, + 589994, 524293, 524421, 524357, 590058, 459014, 524381, 524317, 589978, + 459030, 524413, 524349, 590042, 459022, 524397, 524333, 590010, 524301, + 524429, 524365, 590074, 459009, 524371, 524307, 524571, 459025, 524403, + 524339, 590022, 459017, 524387, 524323, 589990, 524291, 524419, 524355, + 590054, 459013, 524379, 524315, 589974, 459029, 524411, 524347, 590038, + 459021, 524395, 524331, 590006, 524299, 524427, 524363, 590070, 459011, + 524375, 524311, 524575, 459027, 524407, 524343, 590030, 459019, 524391, + 524327, 589998, 524295, 524423, 524359, 590062, 459015, 524383, 524319, + 589982, 459031, 524415, 524351, 590046, 459023, 524399, 524335, 590014, + 524303, 524431, 524367, 590078, 459008, 524368, 524304, 524568, 459024, + 524400, 524336, 590017, 459016, 524384, 524320, 589985, 524288, 524416, + 524352, 590049, 459012, 524376, 524312, 589969, 459028, 524408, 524344, + 590033, 459020, 524392, 524328, 590001, 524296, 524424, 524360, 590065, + 459010, 524372, 524308, 524572, 459026, 524404, 524340, 590025, 459018, + 524388, 524324, 589993, 524292, 524420, 524356, 590057, 459014, 524380, + 524316, 589977, 459030, 524412, 524348, 590041, 459022, 524396, 524332, + 590009, 524300, 524428, 524364, 590073, 459009, 524370, 524306, 524570, + 459025, 524402, 524338, 590021, 459017, 524386, 524322, 589989, 524290, + 524418, 524354, 590053, 459013, 524378, 524314, 589973, 459029, 524410, + 524346, 590037, 459021, 524394, 524330, 590005, 524298, 524426, 524362, + 590069, 459011, 524374, 524310, 524574, 459027, 524406, 524342, 590029, + 459019, 524390, 524326, 589997, 524294, 524422, 524358, 590061, 459015, + 524382, 524318, 589981, 459031, 524414, 524350, 590045, 459023, 524398, + 524334, 590013, 524302, 524430, 524366, 590077, 459008, 524369, 524305, + 524569, 459024, 524401, 524337, 590019, 459016, 524385, 524321, 589987, + 524289, 524417, 524353, 590051, 459012, 524377, 524313, 589971, 459028, + 524409, 524345, 590035, 459020, 524393, 524329, 590003, 524297, 524425, + 524361, 590067, 459010, 524373, 524309, 524573, 459026, 524405, 524341, + 590027, 459018, 524389, 524325, 589995, 524293, 524421, 524357, 590059, + 459014, 524381, 524317, 589979, 459030, 524413, 524349, 590043, 459022, + 524397, 524333, 590011, 524301, 524429, 524365, 590075, 459009, 524371, + 524307, 524571, 459025, 524403, 524339, 590023, 459017, 524387, 524323, + 589991, 524291, 524419, 524355, 590055, 459013, 524379, 524315, 589975, + 459029, 524411, 524347, 590039, 459021, 524395, 524331, 590007, 524299, + 524427, 524363, 590071, 459011, 524375, 524311, 524575, 459027, 524407, + 524343, 590031, 459019, 524391, 524327, 589999, 524295, 524423, 524359, + 590063, 459015, 524383, 524319, 589983, 459031, 524415, 524351, 590047, + 459023, 524399, 524335, 590015, 524303, 524431, 524367, 590079, + ]), + 9, + ], + Tt = [ + new Int32Array([ + 327680, 327696, 327688, 327704, 327684, 327700, 327692, 327708, 327682, + 327698, 327690, 327706, 327686, 327702, 327694, 0, 327681, 327697, 327689, + 327705, 327685, 327701, 327693, 327709, 327683, 327699, 327691, 327707, + 327687, 327703, 327695, 0, + ]), + 5, + ]; +class FlateStream extends DecodeStream { + constructor(e, t) { + super(t); + this.str = e; + this.dict = e.dict; + const i = e.getByte(), + a = e.getByte(); + if (-1 === i || -1 === a) + throw new FormatError(`Invalid header in flate stream: ${i}, ${a}`); + if (8 != (15 & i)) + throw new FormatError( + `Unknown compression method in flate stream: ${i}, ${a}`, + ); + if (((i << 8) + a) % 31 != 0) + throw new FormatError(`Bad FCHECK in flate stream: ${i}, ${a}`); + if (32 & a) + throw new FormatError(`FDICT bit set in flate stream: ${i}, ${a}`); + this.codeSize = 0; + this.codeBuf = 0; + } + async getImageData(e, t) { + const i = await this.asyncGetBytes(); + return i?.subarray(0, e) || this.getBytes(e); + } + async asyncGetBytes() { + this.str.reset(); + const e = this.str.getBytes(); + try { + const { readable: t, writable: i } = new DecompressionStream("deflate"), + a = i.getWriter(); + a.write(e); + a.close(); + const s = []; + let r = 0; + for await (const e of t) { + s.push(e); + r += e.byteLength; + } + const n = new Uint8Array(r); + let g = 0; + for (const e of s) { + n.set(e, g); + g += e.byteLength; + } + return n; + } catch { + this.str = new Stream(e, 2, e.length, this.str.dict); + this.reset(); + return null; + } + } + get isAsync() { + return !0; + } + getBits(e) { + const t = this.str; + let i, + a = this.codeSize, + s = this.codeBuf; + for (; a < e; ) { + if (-1 === (i = t.getByte())) + throw new FormatError("Bad encoding in flate stream"); + s |= i << a; + a += 8; + } + i = s & ((1 << e) - 1); + this.codeBuf = s >> e; + this.codeSize = a -= e; + return i; + } + getCode(e) { + const t = this.str, + i = e[0], + a = e[1]; + let s, + r = this.codeSize, + n = this.codeBuf; + for (; r < a && -1 !== (s = t.getByte()); ) { + n |= s << r; + r += 8; + } + const g = i[n & ((1 << a) - 1)], + o = g >> 16, + c = 65535 & g; + if (o < 1 || r < o) throw new FormatError("Bad encoding in flate stream"); + this.codeBuf = n >> o; + this.codeSize = r - o; + return c; + } + generateHuffmanTable(e) { + const t = e.length; + let i, + a = 0; + for (i = 0; i < t; ++i) e[i] > a && (a = e[i]); + const s = 1 << a, + r = new Int32Array(s); + for (let n = 1, g = 0, o = 2; n <= a; ++n, g <<= 1, o <<= 1) + for (let a = 0; a < t; ++a) + if (e[a] === n) { + let e = 0, + t = g; + for (i = 0; i < n; ++i) { + e = (e << 1) | (1 & t); + t >>= 1; + } + for (i = e; i < s; i += o) r[i] = (n << 16) | a; + ++g; + } + return [r, a]; + } + #m(e) { + info(e); + this.eof = !0; + } + readBlock() { + let e, t, i; + const a = this.str; + try { + t = this.getBits(3); + } catch (e) { + this.#m(e.message); + return; + } + 1 & t && (this.eof = !0); + t >>= 1; + if (0 === t) { + let t; + if (-1 === (t = a.getByte())) { + this.#m("Bad block header in flate stream"); + return; + } + let i = t; + if (-1 === (t = a.getByte())) { + this.#m("Bad block header in flate stream"); + return; + } + i |= t << 8; + if (-1 === (t = a.getByte())) { + this.#m("Bad block header in flate stream"); + return; + } + let s = t; + if (-1 === (t = a.getByte())) { + this.#m("Bad block header in flate stream"); + return; + } + s |= t << 8; + if (s !== (65535 & ~i) && (0 !== i || 0 !== s)) + throw new FormatError("Bad uncompressed block length in flate stream"); + this.codeBuf = 0; + this.codeSize = 0; + const r = this.bufferLength, + n = r + i; + e = this.ensureBuffer(n); + this.bufferLength = n; + if (0 === i) -1 === a.peekByte() && (this.eof = !0); + else { + const t = a.getBytes(i); + e.set(t, r); + t.length < i && (this.eof = !0); + } + return; + } + let s, r; + if (1 === t) { + s = Kt; + r = Tt; + } else { + if (2 !== t) throw new FormatError("Unknown block type in flate stream"); + { + const e = this.getBits(5) + 257, + t = this.getBits(5) + 1, + a = this.getBits(4) + 4, + n = new Uint8Array(Jt.length); + let g; + for (g = 0; g < a; ++g) n[Jt[g]] = this.getBits(3); + const o = this.generateHuffmanTable(n); + i = 0; + g = 0; + const c = e + t, + C = new Uint8Array(c); + let h, l, Q; + for (; g < c; ) { + const e = this.getCode(o); + if (16 === e) { + h = 2; + l = 3; + Q = i; + } else if (17 === e) { + h = 3; + l = 3; + Q = i = 0; + } else { + if (18 !== e) { + C[g++] = i = e; + continue; + } + h = 7; + l = 11; + Q = i = 0; + } + let t = this.getBits(h) + l; + for (; t-- > 0; ) C[g++] = Q; + } + s = this.generateHuffmanTable(C.subarray(0, e)); + r = this.generateHuffmanTable(C.subarray(e, c)); + } + } + e = this.buffer; + let n = e ? e.length : 0, + g = this.bufferLength; + for (;;) { + let t = this.getCode(s); + if (t < 256) { + if (g + 1 >= n) { + e = this.ensureBuffer(g + 1); + n = e.length; + } + e[g++] = t; + continue; + } + if (256 === t) { + this.bufferLength = g; + return; + } + t -= 257; + t = Yt[t]; + let a = t >> 16; + a > 0 && (a = this.getBits(a)); + i = (65535 & t) + a; + t = this.getCode(r); + t = vt[t]; + a = t >> 16; + a > 0 && (a = this.getBits(a)); + const o = (65535 & t) + a; + if (g + i >= n) { + e = this.ensureBuffer(g + i); + n = e.length; + } + for (let t = 0; t < i; ++t, ++g) e[g] = e[g - o]; + } + } +} +const qt = [ + { qe: 22017, nmps: 1, nlps: 1, switchFlag: 1 }, + { qe: 13313, nmps: 2, nlps: 6, switchFlag: 0 }, + { qe: 6145, nmps: 3, nlps: 9, switchFlag: 0 }, + { qe: 2753, nmps: 4, nlps: 12, switchFlag: 0 }, + { qe: 1313, nmps: 5, nlps: 29, switchFlag: 0 }, + { qe: 545, nmps: 38, nlps: 33, switchFlag: 0 }, + { qe: 22017, nmps: 7, nlps: 6, switchFlag: 1 }, + { qe: 21505, nmps: 8, nlps: 14, switchFlag: 0 }, + { qe: 18433, nmps: 9, nlps: 14, switchFlag: 0 }, + { qe: 14337, nmps: 10, nlps: 14, switchFlag: 0 }, + { qe: 12289, nmps: 11, nlps: 17, switchFlag: 0 }, + { qe: 9217, nmps: 12, nlps: 18, switchFlag: 0 }, + { qe: 7169, nmps: 13, nlps: 20, switchFlag: 0 }, + { qe: 5633, nmps: 29, nlps: 21, switchFlag: 0 }, + { qe: 22017, nmps: 15, nlps: 14, switchFlag: 1 }, + { qe: 21505, nmps: 16, nlps: 14, switchFlag: 0 }, + { qe: 20737, nmps: 17, nlps: 15, switchFlag: 0 }, + { qe: 18433, nmps: 18, nlps: 16, switchFlag: 0 }, + { qe: 14337, nmps: 19, nlps: 17, switchFlag: 0 }, + { qe: 13313, nmps: 20, nlps: 18, switchFlag: 0 }, + { qe: 12289, nmps: 21, nlps: 19, switchFlag: 0 }, + { qe: 10241, nmps: 22, nlps: 19, switchFlag: 0 }, + { qe: 9217, nmps: 23, nlps: 20, switchFlag: 0 }, + { qe: 8705, nmps: 24, nlps: 21, switchFlag: 0 }, + { qe: 7169, nmps: 25, nlps: 22, switchFlag: 0 }, + { qe: 6145, nmps: 26, nlps: 23, switchFlag: 0 }, + { qe: 5633, nmps: 27, nlps: 24, switchFlag: 0 }, + { qe: 5121, nmps: 28, nlps: 25, switchFlag: 0 }, + { qe: 4609, nmps: 29, nlps: 26, switchFlag: 0 }, + { qe: 4353, nmps: 30, nlps: 27, switchFlag: 0 }, + { qe: 2753, nmps: 31, nlps: 28, switchFlag: 0 }, + { qe: 2497, nmps: 32, nlps: 29, switchFlag: 0 }, + { qe: 2209, nmps: 33, nlps: 30, switchFlag: 0 }, + { qe: 1313, nmps: 34, nlps: 31, switchFlag: 0 }, + { qe: 1089, nmps: 35, nlps: 32, switchFlag: 0 }, + { qe: 673, nmps: 36, nlps: 33, switchFlag: 0 }, + { qe: 545, nmps: 37, nlps: 34, switchFlag: 0 }, + { qe: 321, nmps: 38, nlps: 35, switchFlag: 0 }, + { qe: 273, nmps: 39, nlps: 36, switchFlag: 0 }, + { qe: 133, nmps: 40, nlps: 37, switchFlag: 0 }, + { qe: 73, nmps: 41, nlps: 38, switchFlag: 0 }, + { qe: 37, nmps: 42, nlps: 39, switchFlag: 0 }, + { qe: 21, nmps: 43, nlps: 40, switchFlag: 0 }, + { qe: 9, nmps: 44, nlps: 41, switchFlag: 0 }, + { qe: 5, nmps: 45, nlps: 42, switchFlag: 0 }, + { qe: 1, nmps: 45, nlps: 43, switchFlag: 0 }, + { qe: 22017, nmps: 46, nlps: 46, switchFlag: 0 }, +]; +class ArithmeticDecoder { + constructor(e, t, i) { + this.data = e; + this.bp = t; + this.dataEnd = i; + this.chigh = e[t]; + this.clow = 0; + this.byteIn(); + this.chigh = ((this.chigh << 7) & 65535) | ((this.clow >> 9) & 127); + this.clow = (this.clow << 7) & 65535; + this.ct -= 7; + this.a = 32768; + } + byteIn() { + const e = this.data; + let t = this.bp; + if (255 === e[t]) + if (e[t + 1] > 143) { + this.clow += 65280; + this.ct = 8; + } else { + t++; + this.clow += e[t] << 9; + this.ct = 7; + this.bp = t; + } + else { + t++; + this.clow += t < this.dataEnd ? e[t] << 8 : 65280; + this.ct = 8; + this.bp = t; + } + if (this.clow > 65535) { + this.chigh += this.clow >> 16; + this.clow &= 65535; + } + } + readBit(e, t) { + let i = e[t] >> 1, + a = 1 & e[t]; + const s = qt[i], + r = s.qe; + let n, + g = this.a - r; + if (this.chigh < r) + if (g < r) { + g = r; + n = a; + i = s.nmps; + } else { + g = r; + n = 1 ^ a; + 1 === s.switchFlag && (a = n); + i = s.nlps; + } + else { + this.chigh -= r; + if (0 != (32768 & g)) { + this.a = g; + return a; + } + if (g < r) { + n = 1 ^ a; + 1 === s.switchFlag && (a = n); + i = s.nlps; + } else { + n = a; + i = s.nmps; + } + } + do { + 0 === this.ct && this.byteIn(); + g <<= 1; + this.chigh = ((this.chigh << 1) & 65535) | ((this.clow >> 15) & 1); + this.clow = (this.clow << 1) & 65535; + this.ct--; + } while (0 == (32768 & g)); + this.a = g; + e[t] = (i << 1) | a; + return n; + } +} +class Jbig2Error extends rt { + constructor(e) { + super(e, "Jbig2Error"); + } +} +class ContextCache { + getContexts(e) { + return e in this ? this[e] : (this[e] = new Int8Array(65536)); + } +} +class DecodingContext { + constructor(e, t, i) { + this.data = e; + this.start = t; + this.end = i; + } + get decoder() { + return shadow( + this, + "decoder", + new ArithmeticDecoder(this.data, this.start, this.end), + ); + } + get contextCache() { + return shadow(this, "contextCache", new ContextCache()); + } +} +const Ot = 2 ** 31 - 1, + Pt = -(2 ** 31); +function decodeInteger(e, t, i) { + const a = e.getContexts(t); + let s = 1; + function readBits(e) { + let t = 0; + for (let r = 0; r < e; r++) { + const e = i.readBit(a, s); + s = s < 256 ? (s << 1) | e : (511 & ((s << 1) | e)) | 256; + t = (t << 1) | e; + } + return t >>> 0; + } + const r = readBits(1), + n = readBits(1) + ? readBits(1) + ? readBits(1) + ? readBits(1) + ? readBits(1) + ? readBits(32) + 4436 + : readBits(12) + 340 + : readBits(8) + 84 + : readBits(6) + 20 + : readBits(4) + 4 + : readBits(2); + let g; + 0 === r ? (g = n) : n > 0 && (g = -n); + return g >= Pt && g <= Ot ? g : null; +} +function decodeIAID(e, t, i) { + const a = e.getContexts("IAID"); + let s = 1; + for (let e = 0; e < i; e++) { + s = (s << 1) | t.readBit(a, s); + } + return i < 31 ? s & ((1 << i) - 1) : 2147483647 & s; +} +const Wt = [ + "SymbolDictionary", + null, + null, + null, + "IntermediateTextRegion", + null, + "ImmediateTextRegion", + "ImmediateLosslessTextRegion", + null, + null, + null, + null, + null, + null, + null, + null, + "PatternDictionary", + null, + null, + null, + "IntermediateHalftoneRegion", + null, + "ImmediateHalftoneRegion", + "ImmediateLosslessHalftoneRegion", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "IntermediateGenericRegion", + null, + "ImmediateGenericRegion", + "ImmediateLosslessGenericRegion", + "IntermediateGenericRefinementRegion", + null, + "ImmediateGenericRefinementRegion", + "ImmediateLosslessGenericRefinementRegion", + null, + null, + null, + null, + "PageInformation", + "EndOfPage", + "EndOfStripe", + "EndOfFile", + "Profiles", + "Tables", + null, + null, + null, + null, + null, + null, + null, + null, + "Extension", + ], + jt = [ + [ + { x: -1, y: -2 }, + { x: 0, y: -2 }, + { x: 1, y: -2 }, + { x: -2, y: -1 }, + { x: -1, y: -1 }, + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: 2, y: -1 }, + { x: -4, y: 0 }, + { x: -3, y: 0 }, + { x: -2, y: 0 }, + { x: -1, y: 0 }, + ], + [ + { x: -1, y: -2 }, + { x: 0, y: -2 }, + { x: 1, y: -2 }, + { x: 2, y: -2 }, + { x: -2, y: -1 }, + { x: -1, y: -1 }, + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: 2, y: -1 }, + { x: -3, y: 0 }, + { x: -2, y: 0 }, + { x: -1, y: 0 }, + ], + [ + { x: -1, y: -2 }, + { x: 0, y: -2 }, + { x: 1, y: -2 }, + { x: -2, y: -1 }, + { x: -1, y: -1 }, + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: -2, y: 0 }, + { x: -1, y: 0 }, + ], + [ + { x: -3, y: -1 }, + { x: -2, y: -1 }, + { x: -1, y: -1 }, + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: -4, y: 0 }, + { x: -3, y: 0 }, + { x: -2, y: 0 }, + { x: -1, y: 0 }, + ], + ], + Xt = [ + { + coding: [ + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: -1, y: 0 }, + ], + reference: [ + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: -1, y: 0 }, + { x: 0, y: 0 }, + { x: 1, y: 0 }, + { x: -1, y: 1 }, + { x: 0, y: 1 }, + { x: 1, y: 1 }, + ], + }, + { + coding: [ + { x: -1, y: -1 }, + { x: 0, y: -1 }, + { x: 1, y: -1 }, + { x: -1, y: 0 }, + ], + reference: [ + { x: 0, y: -1 }, + { x: -1, y: 0 }, + { x: 0, y: 0 }, + { x: 1, y: 0 }, + { x: 0, y: 1 }, + { x: 1, y: 1 }, + ], + }, + ], + Zt = [39717, 1941, 229, 405], + Vt = [32, 8]; +function decodeBitmap(e, t, i, a, s, r, n, g) { + if (e) { + return decodeMMRBitmap(new Reader(g.data, g.start, g.end), t, i, !1); + } + if ( + 0 === a && + !r && + !s && + 4 === n.length && + 3 === n[0].x && + -1 === n[0].y && + -3 === n[1].x && + -1 === n[1].y && + 2 === n[2].x && + -2 === n[2].y && + -2 === n[3].x && + -2 === n[3].y + ) + return (function decodeBitmapTemplate0(e, t, i) { + const a = i.decoder, + s = i.contextCache.getContexts("GB"), + r = []; + let n, g, o, c, C, h, l; + for (g = 0; g < t; g++) { + C = r[g] = new Uint8Array(e); + h = g < 1 ? C : r[g - 1]; + l = g < 2 ? C : r[g - 2]; + n = + (l[0] << 13) | + (l[1] << 12) | + (l[2] << 11) | + (h[0] << 7) | + (h[1] << 6) | + (h[2] << 5) | + (h[3] << 4); + for (o = 0; o < e; o++) { + C[o] = c = a.readBit(s, n); + n = + ((31735 & n) << 1) | + (o + 3 < e ? l[o + 3] << 11 : 0) | + (o + 4 < e ? h[o + 4] << 4 : 0) | + c; + } + } + return r; + })(t, i, g); + const o = !!r, + c = jt[a].concat(n); + c.sort(function (e, t) { + return e.y - t.y || e.x - t.x; + }); + const C = c.length, + h = new Int8Array(C), + l = new Int8Array(C), + Q = []; + let E, + u, + d = 0, + f = 0, + p = 0, + m = 0; + for (u = 0; u < C; u++) { + h[u] = c[u].x; + l[u] = c[u].y; + f = Math.min(f, c[u].x); + p = Math.max(p, c[u].x); + m = Math.min(m, c[u].y); + u < C - 1 && c[u].y === c[u + 1].y && c[u].x === c[u + 1].x - 1 + ? (d |= 1 << (C - 1 - u)) + : Q.push(u); + } + const y = Q.length, + w = new Int8Array(y), + D = new Int8Array(y), + b = new Uint16Array(y); + for (E = 0; E < y; E++) { + u = Q[E]; + w[E] = c[u].x; + D[E] = c[u].y; + b[E] = 1 << (C - 1 - u); + } + const F = -f, + S = -m, + k = t - p, + R = Zt[a]; + let N = new Uint8Array(t); + const G = [], + x = g.decoder, + U = g.contextCache.getContexts("GB"); + let M, + L, + H, + J, + Y, + v = 0, + K = 0; + for (let e = 0; e < i; e++) { + if (s) { + v ^= x.readBit(U, R); + if (v) { + G.push(N); + continue; + } + } + N = new Uint8Array(N); + G.push(N); + for (M = 0; M < t; M++) { + if (o && r[e][M]) { + N[M] = 0; + continue; + } + if (M >= F && M < k && e >= S) { + K = (K << 1) & d; + for (u = 0; u < y; u++) { + L = e + D[u]; + H = M + w[u]; + J = G[L][H]; + if (J) { + J = b[u]; + K |= J; + } + } + } else { + K = 0; + Y = C - 1; + for (u = 0; u < C; u++, Y--) { + H = M + h[u]; + if (H >= 0 && H < t) { + L = e + l[u]; + if (L >= 0) { + J = G[L][H]; + J && (K |= J << Y); + } + } + } + } + const i = x.readBit(U, K); + N[M] = i; + } + } + return G; +} +function decodeRefinement(e, t, i, a, s, r, n, g, o) { + let c = Xt[i].coding; + 0 === i && (c = c.concat([g[0]])); + const C = c.length, + h = new Int32Array(C), + l = new Int32Array(C); + let Q; + for (Q = 0; Q < C; Q++) { + h[Q] = c[Q].x; + l[Q] = c[Q].y; + } + let E = Xt[i].reference; + 0 === i && (E = E.concat([g[1]])); + const u = E.length, + d = new Int32Array(u), + f = new Int32Array(u); + for (Q = 0; Q < u; Q++) { + d[Q] = E[Q].x; + f[Q] = E[Q].y; + } + const p = a[0].length, + m = a.length, + y = Vt[i], + w = [], + D = o.decoder, + b = o.contextCache.getContexts("GR"); + let F = 0; + for (let i = 0; i < t; i++) { + if (n) { + F ^= D.readBit(b, y); + if (F) throw new Jbig2Error("prediction is not supported"); + } + const t = new Uint8Array(e); + w.push(t); + for (let n = 0; n < e; n++) { + let g, + o, + c = 0; + for (Q = 0; Q < C; Q++) { + g = i + l[Q]; + o = n + h[Q]; + g < 0 || o < 0 || o >= e ? (c <<= 1) : (c = (c << 1) | w[g][o]); + } + for (Q = 0; Q < u; Q++) { + g = i + f[Q] - r; + o = n + d[Q] - s; + g < 0 || g >= m || o < 0 || o >= p + ? (c <<= 1) + : (c = (c << 1) | a[g][o]); + } + const E = D.readBit(b, c); + t[n] = E; + } + } + return w; +} +function decodeTextRegion( + e, + t, + i, + a, + s, + r, + n, + g, + o, + c, + C, + h, + l, + Q, + E, + u, + d, + f, + p, +) { + if (e && t) throw new Jbig2Error("refinement with Huffman is not supported"); + const m = []; + let y, w; + for (y = 0; y < a; y++) { + w = new Uint8Array(i); + if (s) for (let e = 0; e < i; e++) w[e] = s; + m.push(w); + } + const D = d.decoder, + b = d.contextCache; + let F = e ? -Q.tableDeltaT.decode(p) : -decodeInteger(b, "IADT", D), + S = 0; + y = 0; + for (; y < r; ) { + F += e ? Q.tableDeltaT.decode(p) : decodeInteger(b, "IADT", D); + S += e ? Q.tableFirstS.decode(p) : decodeInteger(b, "IAFS", D); + let a = S; + for (;;) { + let s = 0; + n > 1 && (s = e ? p.readBits(f) : decodeInteger(b, "IAIT", D)); + const r = n * F + s, + S = e ? Q.symbolIDTable.decode(p) : decodeIAID(b, D, o), + k = t && (e ? p.readBit() : decodeInteger(b, "IARI", D)); + let R = g[S], + N = R[0].length, + G = R.length; + if (k) { + const e = decodeInteger(b, "IARDW", D), + t = decodeInteger(b, "IARDH", D); + N += e; + G += t; + R = decodeRefinement( + N, + G, + E, + R, + (e >> 1) + decodeInteger(b, "IARDX", D), + (t >> 1) + decodeInteger(b, "IARDY", D), + !1, + u, + d, + ); + } + let x = 0; + c + ? 1 & h + ? (x = G - 1) + : (a += G - 1) + : h > 1 + ? (a += N - 1) + : (x = N - 1); + const U = r - (1 & h ? 0 : G - 1), + M = a - (2 & h ? N - 1 : 0); + let L, H, J; + if (c) + for (L = 0; L < G; L++) { + w = m[M + L]; + if (!w) continue; + J = R[L]; + const e = Math.min(i - U, N); + switch (l) { + case 0: + for (H = 0; H < e; H++) w[U + H] |= J[H]; + break; + case 2: + for (H = 0; H < e; H++) w[U + H] ^= J[H]; + break; + default: + throw new Jbig2Error(`operator ${l} is not supported`); + } + } + else + for (H = 0; H < G; H++) { + w = m[U + H]; + if (w) { + J = R[H]; + switch (l) { + case 0: + for (L = 0; L < N; L++) w[M + L] |= J[L]; + break; + case 2: + for (L = 0; L < N; L++) w[M + L] ^= J[L]; + break; + default: + throw new Jbig2Error(`operator ${l} is not supported`); + } + } + } + y++; + const Y = e ? Q.tableDeltaS.decode(p) : decodeInteger(b, "IADS", D); + if (null === Y) break; + a += x + Y + C; + } + } + return m; +} +function readSegmentHeader(e, t) { + const i = {}; + i.number = readUint32(e, t); + const a = e[t + 4], + s = 63 & a; + if (!Wt[s]) throw new Jbig2Error("invalid segment type: " + s); + i.type = s; + i.typeName = Wt[s]; + i.deferredNonRetain = !!(128 & a); + const r = !!(64 & a), + n = e[t + 5]; + let g = (n >> 5) & 7; + const o = [31 & n]; + let c = t + 6; + if (7 === n) { + g = 536870911 & readUint32(e, c - 1); + c += 3; + let t = (g + 7) >> 3; + o[0] = e[c++]; + for (; --t > 0; ) o.push(e[c++]); + } else if (5 === n || 6 === n) + throw new Jbig2Error("invalid referred-to flags"); + i.retainBits = o; + let C = 4; + i.number <= 256 ? (C = 1) : i.number <= 65536 && (C = 2); + const h = []; + let l, Q; + for (l = 0; l < g; l++) { + let t; + t = 1 === C ? e[c] : 2 === C ? readUint16(e, c) : readUint32(e, c); + h.push(t); + c += C; + } + i.referredTo = h; + if (r) { + i.pageAssociation = readUint32(e, c); + c += 4; + } else i.pageAssociation = e[c++]; + i.length = readUint32(e, c); + c += 4; + if (4294967295 === i.length) { + if (38 !== s) throw new Jbig2Error("invalid unknown segment length"); + { + const t = readRegionSegmentInformation(e, c), + a = !!(1 & e[c + zt]), + s = 6, + r = new Uint8Array(s); + if (!a) { + r[0] = 255; + r[1] = 172; + } + r[2] = (t.height >>> 24) & 255; + r[3] = (t.height >> 16) & 255; + r[4] = (t.height >> 8) & 255; + r[5] = 255 & t.height; + for (l = c, Q = e.length; l < Q; l++) { + let t = 0; + for (; t < s && r[t] === e[l + t]; ) t++; + if (t === s) { + i.length = l + s; + break; + } + } + if (4294967295 === i.length) + throw new Jbig2Error("segment end was not found"); + } + } + i.headerEnd = c; + return i; +} +function readSegments(e, t, i, a) { + const s = []; + let r = i; + for (; r < a; ) { + const i = readSegmentHeader(t, r); + r = i.headerEnd; + const a = { header: i, data: t }; + if (!e.randomAccess) { + a.start = r; + r += i.length; + a.end = r; + } + s.push(a); + if (51 === i.type) break; + } + if (e.randomAccess) + for (let e = 0, t = s.length; e < t; e++) { + s[e].start = r; + r += s[e].header.length; + s[e].end = r; + } + return s; +} +function readRegionSegmentInformation(e, t) { + return { + width: readUint32(e, t), + height: readUint32(e, t + 4), + x: readUint32(e, t + 8), + y: readUint32(e, t + 12), + combinationOperator: 7 & e[t + 16], + }; +} +const zt = 17; +function processSegment(e, t) { + const i = e.header, + a = e.data, + s = e.end; + let r, + n, + g, + o, + c = e.start; + switch (i.type) { + case 0: + const e = {}, + t = readUint16(a, c); + e.huffman = !!(1 & t); + e.refinement = !!(2 & t); + e.huffmanDHSelector = (t >> 2) & 3; + e.huffmanDWSelector = (t >> 4) & 3; + e.bitmapSizeSelector = (t >> 6) & 1; + e.aggregationInstancesSelector = (t >> 7) & 1; + e.bitmapCodingContextUsed = !!(256 & t); + e.bitmapCodingContextRetained = !!(512 & t); + e.template = (t >> 10) & 3; + e.refinementTemplate = (t >> 12) & 1; + c += 2; + if (!e.huffman) { + o = 0 === e.template ? 4 : 1; + n = []; + for (g = 0; g < o; g++) { + n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); + c += 2; + } + e.at = n; + } + if (e.refinement && !e.refinementTemplate) { + n = []; + for (g = 0; g < 2; g++) { + n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); + c += 2; + } + e.refinementAt = n; + } + e.numberOfExportedSymbols = readUint32(a, c); + c += 4; + e.numberOfNewSymbols = readUint32(a, c); + c += 4; + r = [e, i.number, i.referredTo, a, c, s]; + break; + case 6: + case 7: + const C = {}; + C.info = readRegionSegmentInformation(a, c); + c += zt; + const h = readUint16(a, c); + c += 2; + C.huffman = !!(1 & h); + C.refinement = !!(2 & h); + C.logStripSize = (h >> 2) & 3; + C.stripSize = 1 << C.logStripSize; + C.referenceCorner = (h >> 4) & 3; + C.transposed = !!(64 & h); + C.combinationOperator = (h >> 7) & 3; + C.defaultPixelValue = (h >> 9) & 1; + C.dsOffset = (h << 17) >> 27; + C.refinementTemplate = (h >> 15) & 1; + if (C.huffman) { + const e = readUint16(a, c); + c += 2; + C.huffmanFS = 3 & e; + C.huffmanDS = (e >> 2) & 3; + C.huffmanDT = (e >> 4) & 3; + C.huffmanRefinementDW = (e >> 6) & 3; + C.huffmanRefinementDH = (e >> 8) & 3; + C.huffmanRefinementDX = (e >> 10) & 3; + C.huffmanRefinementDY = (e >> 12) & 3; + C.huffmanRefinementSizeSelector = !!(16384 & e); + } + if (C.refinement && !C.refinementTemplate) { + n = []; + for (g = 0; g < 2; g++) { + n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); + c += 2; + } + C.refinementAt = n; + } + C.numberOfSymbolInstances = readUint32(a, c); + c += 4; + r = [C, i.referredTo, a, c, s]; + break; + case 16: + const l = {}, + Q = a[c++]; + l.mmr = !!(1 & Q); + l.template = (Q >> 1) & 3; + l.patternWidth = a[c++]; + l.patternHeight = a[c++]; + l.maxPatternIndex = readUint32(a, c); + c += 4; + r = [l, i.number, a, c, s]; + break; + case 22: + case 23: + const E = {}; + E.info = readRegionSegmentInformation(a, c); + c += zt; + const u = a[c++]; + E.mmr = !!(1 & u); + E.template = (u >> 1) & 3; + E.enableSkip = !!(8 & u); + E.combinationOperator = (u >> 4) & 7; + E.defaultPixelValue = (u >> 7) & 1; + E.gridWidth = readUint32(a, c); + c += 4; + E.gridHeight = readUint32(a, c); + c += 4; + E.gridOffsetX = 4294967295 & readUint32(a, c); + c += 4; + E.gridOffsetY = 4294967295 & readUint32(a, c); + c += 4; + E.gridVectorX = readUint16(a, c); + c += 2; + E.gridVectorY = readUint16(a, c); + c += 2; + r = [E, i.referredTo, a, c, s]; + break; + case 38: + case 39: + const d = {}; + d.info = readRegionSegmentInformation(a, c); + c += zt; + const f = a[c++]; + d.mmr = !!(1 & f); + d.template = (f >> 1) & 3; + d.prediction = !!(8 & f); + if (!d.mmr) { + o = 0 === d.template ? 4 : 1; + n = []; + for (g = 0; g < o; g++) { + n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); + c += 2; + } + d.at = n; + } + r = [d, a, c, s]; + break; + case 48: + const p = { + width: readUint32(a, c), + height: readUint32(a, c + 4), + resolutionX: readUint32(a, c + 8), + resolutionY: readUint32(a, c + 12), + }; + 4294967295 === p.height && delete p.height; + const m = a[c + 16]; + readUint16(a, c + 17); + p.lossless = !!(1 & m); + p.refinement = !!(2 & m); + p.defaultPixelValue = (m >> 2) & 1; + p.combinationOperator = (m >> 3) & 3; + p.requiresBuffer = !!(32 & m); + p.combinationOperatorOverride = !!(64 & m); + r = [p]; + break; + case 49: + case 50: + case 51: + case 62: + break; + case 53: + r = [i.number, a, c, s]; + break; + default: + throw new Jbig2Error( + `segment type ${i.typeName}(${i.type}) is not implemented`, + ); + } + const C = "on" + i.typeName; + C in t && t[C].apply(t, r); +} +function processSegments(e, t) { + for (let i = 0, a = e.length; i < a; i++) processSegment(e[i], t); +} +class SimpleSegmentVisitor { + onPageInformation(e) { + this.currentPageInfo = e; + const t = (e.width + 7) >> 3, + i = new Uint8ClampedArray(t * e.height); + e.defaultPixelValue && i.fill(255); + this.buffer = i; + } + drawBitmap(e, t) { + const i = this.currentPageInfo, + a = e.width, + s = e.height, + r = (i.width + 7) >> 3, + n = i.combinationOperatorOverride + ? e.combinationOperator + : i.combinationOperator, + g = this.buffer, + o = 128 >> (7 & e.x); + let c, + C, + h, + l, + Q = e.y * r + (e.x >> 3); + switch (n) { + case 0: + for (c = 0; c < s; c++) { + h = o; + l = Q; + for (C = 0; C < a; C++) { + t[c][C] && (g[l] |= h); + h >>= 1; + if (!h) { + h = 128; + l++; + } + } + Q += r; + } + break; + case 2: + for (c = 0; c < s; c++) { + h = o; + l = Q; + for (C = 0; C < a; C++) { + t[c][C] && (g[l] ^= h); + h >>= 1; + if (!h) { + h = 128; + l++; + } + } + Q += r; + } + break; + default: + throw new Jbig2Error(`operator ${n} is not supported`); + } + } + onImmediateGenericRegion(e, t, i, a) { + const s = e.info, + r = new DecodingContext(t, i, a), + n = decodeBitmap( + e.mmr, + s.width, + s.height, + e.template, + e.prediction, + null, + e.at, + r, + ); + this.drawBitmap(s, n); + } + onImmediateLosslessGenericRegion() { + this.onImmediateGenericRegion(...arguments); + } + onSymbolDictionary(e, t, i, a, s, r) { + let n, g; + if (e.huffman) { + n = (function getSymbolDictionaryHuffmanTables(e, t, i) { + let a, + s, + r, + n, + g = 0; + switch (e.huffmanDHSelector) { + case 0: + case 1: + a = getStandardTable(e.huffmanDHSelector + 4); + break; + case 3: + a = getCustomHuffmanTable(g, t, i); + g++; + break; + default: + throw new Jbig2Error("invalid Huffman DH selector"); + } + switch (e.huffmanDWSelector) { + case 0: + case 1: + s = getStandardTable(e.huffmanDWSelector + 2); + break; + case 3: + s = getCustomHuffmanTable(g, t, i); + g++; + break; + default: + throw new Jbig2Error("invalid Huffman DW selector"); + } + if (e.bitmapSizeSelector) { + r = getCustomHuffmanTable(g, t, i); + g++; + } else r = getStandardTable(1); + n = e.aggregationInstancesSelector + ? getCustomHuffmanTable(g, t, i) + : getStandardTable(1); + return { + tableDeltaHeight: a, + tableDeltaWidth: s, + tableBitmapSize: r, + tableAggregateInstances: n, + }; + })(e, i, this.customTables); + g = new Reader(a, s, r); + } + let o = this.symbols; + o || (this.symbols = o = {}); + const c = []; + for (const e of i) { + const t = o[e]; + t && c.push(...t); + } + const C = new DecodingContext(a, s, r); + o[t] = (function decodeSymbolDictionary( + e, + t, + i, + a, + s, + r, + n, + g, + o, + c, + C, + h, + ) { + if (e && t) + throw new Jbig2Error("symbol refinement with Huffman is not supported"); + const l = []; + let Q = 0, + E = log2(i.length + a); + const u = C.decoder, + d = C.contextCache; + let f, p; + if (e) { + f = getStandardTable(1); + p = []; + E = Math.max(E, 1); + } + for (; l.length < a; ) { + Q += e ? r.tableDeltaHeight.decode(h) : decodeInteger(d, "IADH", u); + let a = 0, + s = 0; + const f = e ? p.length : 0; + for (;;) { + const f = e + ? r.tableDeltaWidth.decode(h) + : decodeInteger(d, "IADW", u); + if (null === f) break; + a += f; + s += a; + let m; + if (t) { + const s = decodeInteger(d, "IAAI", u); + if (s > 1) + m = decodeTextRegion( + e, + t, + a, + Q, + 0, + s, + 1, + i.concat(l), + E, + 0, + 0, + 1, + 0, + r, + o, + c, + C, + 0, + h, + ); + else { + const e = decodeIAID(d, u, E), + t = decodeInteger(d, "IARDX", u), + s = decodeInteger(d, "IARDY", u); + m = decodeRefinement( + a, + Q, + o, + e < i.length ? i[e] : l[e - i.length], + t, + s, + !1, + c, + C, + ); + } + l.push(m); + } else if (e) p.push(a); + else { + m = decodeBitmap(!1, a, Q, n, !1, null, g, C); + l.push(m); + } + } + if (e && !t) { + const e = r.tableBitmapSize.decode(h); + h.byteAlign(); + let t; + if (0 === e) t = readUncompressedBitmap(h, s, Q); + else { + const i = h.end, + a = h.position + e; + h.end = a; + t = decodeMMRBitmap(h, s, Q, !1); + h.end = i; + h.position = a; + } + const i = p.length; + if (f === i - 1) l.push(t); + else { + let e, + a, + s, + r, + n, + g = 0; + for (e = f; e < i; e++) { + r = p[e]; + s = g + r; + n = []; + for (a = 0; a < Q; a++) n.push(t[a].subarray(g, s)); + l.push(n); + g = s; + } + } + } + } + const m = [], + y = []; + let w, + D, + b = !1; + const F = i.length + a; + for (; y.length < F; ) { + let t = e ? f.decode(h) : decodeInteger(d, "IAEX", u); + for (; t--; ) y.push(b); + b = !b; + } + for (w = 0, D = i.length; w < D; w++) y[w] && m.push(i[w]); + for (let e = 0; e < a; w++, e++) y[w] && m.push(l[e]); + return m; + })( + e.huffman, + e.refinement, + c, + e.numberOfNewSymbols, + e.numberOfExportedSymbols, + n, + e.template, + e.at, + e.refinementTemplate, + e.refinementAt, + C, + g, + ); + } + onImmediateTextRegion(e, t, i, a, s) { + const r = e.info; + let n, g; + const o = this.symbols, + c = []; + for (const e of t) { + const t = o[e]; + t && c.push(...t); + } + const C = log2(c.length); + if (e.huffman) { + g = new Reader(i, a, s); + n = (function getTextRegionHuffmanTables(e, t, i, a, s) { + const r = []; + for (let e = 0; e <= 34; e++) { + const t = s.readBits(4); + r.push(new HuffmanLine([e, t, 0, 0])); + } + const n = new HuffmanTable(r, !1); + r.length = 0; + for (let e = 0; e < a; ) { + const t = n.decode(s); + if (t >= 32) { + let i, a, n; + switch (t) { + case 32: + if (0 === e) + throw new Jbig2Error("no previous value in symbol ID table"); + a = s.readBits(2) + 3; + i = r[e - 1].prefixLength; + break; + case 33: + a = s.readBits(3) + 3; + i = 0; + break; + case 34: + a = s.readBits(7) + 11; + i = 0; + break; + default: + throw new Jbig2Error("invalid code length in symbol ID table"); + } + for (n = 0; n < a; n++) { + r.push(new HuffmanLine([e, i, 0, 0])); + e++; + } + } else { + r.push(new HuffmanLine([e, t, 0, 0])); + e++; + } + } + s.byteAlign(); + const g = new HuffmanTable(r, !1); + let o, + c, + C, + h = 0; + switch (e.huffmanFS) { + case 0: + case 1: + o = getStandardTable(e.huffmanFS + 6); + break; + case 3: + o = getCustomHuffmanTable(h, t, i); + h++; + break; + default: + throw new Jbig2Error("invalid Huffman FS selector"); + } + switch (e.huffmanDS) { + case 0: + case 1: + case 2: + c = getStandardTable(e.huffmanDS + 8); + break; + case 3: + c = getCustomHuffmanTable(h, t, i); + h++; + break; + default: + throw new Jbig2Error("invalid Huffman DS selector"); + } + switch (e.huffmanDT) { + case 0: + case 1: + case 2: + C = getStandardTable(e.huffmanDT + 11); + break; + case 3: + C = getCustomHuffmanTable(h, t, i); + h++; + break; + default: + throw new Jbig2Error("invalid Huffman DT selector"); + } + if (e.refinement) + throw new Jbig2Error("refinement with Huffman is not supported"); + return { + symbolIDTable: g, + tableFirstS: o, + tableDeltaS: c, + tableDeltaT: C, + }; + })(e, t, this.customTables, c.length, g); + } + const h = new DecodingContext(i, a, s), + l = decodeTextRegion( + e.huffman, + e.refinement, + r.width, + r.height, + e.defaultPixelValue, + e.numberOfSymbolInstances, + e.stripSize, + c, + C, + e.transposed, + e.dsOffset, + e.referenceCorner, + e.combinationOperator, + n, + e.refinementTemplate, + e.refinementAt, + h, + e.logStripSize, + g, + ); + this.drawBitmap(r, l); + } + onImmediateLosslessTextRegion() { + this.onImmediateTextRegion(...arguments); + } + onPatternDictionary(e, t, i, a, s) { + let r = this.patterns; + r || (this.patterns = r = {}); + const n = new DecodingContext(i, a, s); + r[t] = (function decodePatternDictionary(e, t, i, a, s, r) { + const n = []; + if (!e) { + n.push({ x: -t, y: 0 }); + 0 === s && n.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); + } + const g = decodeBitmap(e, (a + 1) * t, i, s, !1, null, n, r), + o = []; + for (let e = 0; e <= a; e++) { + const a = [], + s = t * e, + r = s + t; + for (let e = 0; e < i; e++) a.push(g[e].subarray(s, r)); + o.push(a); + } + return o; + })( + e.mmr, + e.patternWidth, + e.patternHeight, + e.maxPatternIndex, + e.template, + n, + ); + } + onImmediateHalftoneRegion(e, t, i, a, s) { + const r = this.patterns[t[0]], + n = e.info, + g = new DecodingContext(i, a, s), + o = (function decodeHalftoneRegion( + e, + t, + i, + a, + s, + r, + n, + g, + o, + c, + C, + h, + l, + Q, + E, + ) { + if (n) throw new Jbig2Error("skip is not supported"); + if (0 !== g) + throw new Jbig2Error( + `operator "${g}" is not supported in halftone region`, + ); + const u = []; + let d, f, p; + for (d = 0; d < s; d++) { + p = new Uint8Array(a); + if (r) for (f = 0; f < a; f++) p[f] = r; + u.push(p); + } + const m = t.length, + y = t[0], + w = y[0].length, + D = y.length, + b = log2(m), + F = []; + if (!e) { + F.push({ x: i <= 1 ? 3 : 2, y: -1 }); + 0 === i && + F.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); + } + const S = []; + let k, R, N, G, x, U, M, L, H, J, Y; + e && (k = new Reader(E.data, E.start, E.end)); + for (d = b - 1; d >= 0; d--) { + R = e + ? decodeMMRBitmap(k, o, c, !0) + : decodeBitmap(!1, o, c, i, !1, null, F, E); + S[d] = R; + } + for (N = 0; N < c; N++) + for (G = 0; G < o; G++) { + x = 0; + U = 0; + for (f = b - 1; f >= 0; f--) { + x ^= S[f][N][G]; + U |= x << f; + } + M = t[U]; + L = (C + N * Q + G * l) >> 8; + H = (h + N * l - G * Q) >> 8; + if (L >= 0 && L + w <= a && H >= 0 && H + D <= s) + for (d = 0; d < D; d++) { + Y = u[H + d]; + J = M[d]; + for (f = 0; f < w; f++) Y[L + f] |= J[f]; + } + else { + let e, t; + for (d = 0; d < D; d++) { + t = H + d; + if (!(t < 0 || t >= s)) { + Y = u[t]; + J = M[d]; + for (f = 0; f < w; f++) { + e = L + f; + e >= 0 && e < a && (Y[e] |= J[f]); + } + } + } + } + } + return u; + })( + e.mmr, + r, + e.template, + n.width, + n.height, + e.defaultPixelValue, + e.enableSkip, + e.combinationOperator, + e.gridWidth, + e.gridHeight, + e.gridOffsetX, + e.gridOffsetY, + e.gridVectorX, + e.gridVectorY, + g, + ); + this.drawBitmap(n, o); + } + onImmediateLosslessHalftoneRegion() { + this.onImmediateHalftoneRegion(...arguments); + } + onTables(e, t, i, a) { + let s = this.customTables; + s || (this.customTables = s = {}); + s[e] = (function decodeTablesSegment(e, t, i) { + const a = e[t], + s = 4294967295 & readUint32(e, t + 1), + r = 4294967295 & readUint32(e, t + 5), + n = new Reader(e, t + 9, i), + g = 1 + ((a >> 1) & 7), + o = 1 + ((a >> 4) & 7), + c = []; + let C, + h, + l = s; + do { + C = n.readBits(g); + h = n.readBits(o); + c.push(new HuffmanLine([l, C, h, 0])); + l += 1 << h; + } while (l < r); + C = n.readBits(g); + c.push(new HuffmanLine([s - 1, C, 32, 0, "lower"])); + C = n.readBits(g); + c.push(new HuffmanLine([r, C, 32, 0])); + if (1 & a) { + C = n.readBits(g); + c.push(new HuffmanLine([C, 0])); + } + return new HuffmanTable(c, !1); + })(t, i, a); + } +} +class HuffmanLine { + constructor(e) { + if (2 === e.length) { + this.isOOB = !0; + this.rangeLow = 0; + this.prefixLength = e[0]; + this.rangeLength = 0; + this.prefixCode = e[1]; + this.isLowerRange = !1; + } else { + this.isOOB = !1; + this.rangeLow = e[0]; + this.prefixLength = e[1]; + this.rangeLength = e[2]; + this.prefixCode = e[3]; + this.isLowerRange = "lower" === e[4]; + } + } +} +class HuffmanTreeNode { + constructor(e) { + this.children = []; + if (e) { + this.isLeaf = !0; + this.rangeLength = e.rangeLength; + this.rangeLow = e.rangeLow; + this.isLowerRange = e.isLowerRange; + this.isOOB = e.isOOB; + } else this.isLeaf = !1; + } + buildTree(e, t) { + const i = (e.prefixCode >> t) & 1; + if (t <= 0) this.children[i] = new HuffmanTreeNode(e); + else { + let a = this.children[i]; + a || (this.children[i] = a = new HuffmanTreeNode(null)); + a.buildTree(e, t - 1); + } + } + decodeNode(e) { + if (this.isLeaf) { + if (this.isOOB) return null; + const t = e.readBits(this.rangeLength); + return this.rangeLow + (this.isLowerRange ? -t : t); + } + const t = this.children[e.readBit()]; + if (!t) throw new Jbig2Error("invalid Huffman data"); + return t.decodeNode(e); + } +} +class HuffmanTable { + constructor(e, t) { + t || this.assignPrefixCodes(e); + this.rootNode = new HuffmanTreeNode(null); + for (let t = 0, i = e.length; t < i; t++) { + const i = e[t]; + i.prefixLength > 0 && this.rootNode.buildTree(i, i.prefixLength - 1); + } + } + decode(e) { + return this.rootNode.decodeNode(e); + } + assignPrefixCodes(e) { + const t = e.length; + let i = 0; + for (let a = 0; a < t; a++) i = Math.max(i, e[a].prefixLength); + const a = new Uint32Array(i + 1); + for (let i = 0; i < t; i++) a[e[i].prefixLength]++; + let s, + r, + n, + g = 1, + o = 0; + a[0] = 0; + for (; g <= i; ) { + o = (o + a[g - 1]) << 1; + s = o; + r = 0; + for (; r < t; ) { + n = e[r]; + if (n.prefixLength === g) { + n.prefixCode = s; + s++; + } + r++; + } + g++; + } + } +} +const _t = {}; +function getStandardTable(e) { + let t, + i = _t[e]; + if (i) return i; + switch (e) { + case 1: + t = [ + [0, 1, 4, 0], + [16, 2, 8, 2], + [272, 3, 16, 6], + [65808, 3, 32, 7], + ]; + break; + case 2: + t = [ + [0, 1, 0, 0], + [1, 2, 0, 2], + [2, 3, 0, 6], + [3, 4, 3, 14], + [11, 5, 6, 30], + [75, 6, 32, 62], + [6, 63], + ]; + break; + case 3: + t = [ + [-256, 8, 8, 254], + [0, 1, 0, 0], + [1, 2, 0, 2], + [2, 3, 0, 6], + [3, 4, 3, 14], + [11, 5, 6, 30], + [-257, 8, 32, 255, "lower"], + [75, 7, 32, 126], + [6, 62], + ]; + break; + case 4: + t = [ + [1, 1, 0, 0], + [2, 2, 0, 2], + [3, 3, 0, 6], + [4, 4, 3, 14], + [12, 5, 6, 30], + [76, 5, 32, 31], + ]; + break; + case 5: + t = [ + [-255, 7, 8, 126], + [1, 1, 0, 0], + [2, 2, 0, 2], + [3, 3, 0, 6], + [4, 4, 3, 14], + [12, 5, 6, 30], + [-256, 7, 32, 127, "lower"], + [76, 6, 32, 62], + ]; + break; + case 6: + t = [ + [-2048, 5, 10, 28], + [-1024, 4, 9, 8], + [-512, 4, 8, 9], + [-256, 4, 7, 10], + [-128, 5, 6, 29], + [-64, 5, 5, 30], + [-32, 4, 5, 11], + [0, 2, 7, 0], + [128, 3, 7, 2], + [256, 3, 8, 3], + [512, 4, 9, 12], + [1024, 4, 10, 13], + [-2049, 6, 32, 62, "lower"], + [2048, 6, 32, 63], + ]; + break; + case 7: + t = [ + [-1024, 4, 9, 8], + [-512, 3, 8, 0], + [-256, 4, 7, 9], + [-128, 5, 6, 26], + [-64, 5, 5, 27], + [-32, 4, 5, 10], + [0, 4, 5, 11], + [32, 5, 5, 28], + [64, 5, 6, 29], + [128, 4, 7, 12], + [256, 3, 8, 1], + [512, 3, 9, 2], + [1024, 3, 10, 3], + [-1025, 5, 32, 30, "lower"], + [2048, 5, 32, 31], + ]; + break; + case 8: + t = [ + [-15, 8, 3, 252], + [-7, 9, 1, 508], + [-5, 8, 1, 253], + [-3, 9, 0, 509], + [-2, 7, 0, 124], + [-1, 4, 0, 10], + [0, 2, 1, 0], + [2, 5, 0, 26], + [3, 6, 0, 58], + [4, 3, 4, 4], + [20, 6, 1, 59], + [22, 4, 4, 11], + [38, 4, 5, 12], + [70, 5, 6, 27], + [134, 5, 7, 28], + [262, 6, 7, 60], + [390, 7, 8, 125], + [646, 6, 10, 61], + [-16, 9, 32, 510, "lower"], + [1670, 9, 32, 511], + [2, 1], + ]; + break; + case 9: + t = [ + [-31, 8, 4, 252], + [-15, 9, 2, 508], + [-11, 8, 2, 253], + [-7, 9, 1, 509], + [-5, 7, 1, 124], + [-3, 4, 1, 10], + [-1, 3, 1, 2], + [1, 3, 1, 3], + [3, 5, 1, 26], + [5, 6, 1, 58], + [7, 3, 5, 4], + [39, 6, 2, 59], + [43, 4, 5, 11], + [75, 4, 6, 12], + [139, 5, 7, 27], + [267, 5, 8, 28], + [523, 6, 8, 60], + [779, 7, 9, 125], + [1291, 6, 11, 61], + [-32, 9, 32, 510, "lower"], + [3339, 9, 32, 511], + [2, 0], + ]; + break; + case 10: + t = [ + [-21, 7, 4, 122], + [-5, 8, 0, 252], + [-4, 7, 0, 123], + [-3, 5, 0, 24], + [-2, 2, 2, 0], + [2, 5, 0, 25], + [3, 6, 0, 54], + [4, 7, 0, 124], + [5, 8, 0, 253], + [6, 2, 6, 1], + [70, 5, 5, 26], + [102, 6, 5, 55], + [134, 6, 6, 56], + [198, 6, 7, 57], + [326, 6, 8, 58], + [582, 6, 9, 59], + [1094, 6, 10, 60], + [2118, 7, 11, 125], + [-22, 8, 32, 254, "lower"], + [4166, 8, 32, 255], + [2, 2], + ]; + break; + case 11: + t = [ + [1, 1, 0, 0], + [2, 2, 1, 2], + [4, 4, 0, 12], + [5, 4, 1, 13], + [7, 5, 1, 28], + [9, 5, 2, 29], + [13, 6, 2, 60], + [17, 7, 2, 122], + [21, 7, 3, 123], + [29, 7, 4, 124], + [45, 7, 5, 125], + [77, 7, 6, 126], + [141, 7, 32, 127], + ]; + break; + case 12: + t = [ + [1, 1, 0, 0], + [2, 2, 0, 2], + [3, 3, 1, 6], + [5, 5, 0, 28], + [6, 5, 1, 29], + [8, 6, 1, 60], + [10, 7, 0, 122], + [11, 7, 1, 123], + [13, 7, 2, 124], + [17, 7, 3, 125], + [25, 7, 4, 126], + [41, 8, 5, 254], + [73, 8, 32, 255], + ]; + break; + case 13: + t = [ + [1, 1, 0, 0], + [2, 3, 0, 4], + [3, 4, 0, 12], + [4, 5, 0, 28], + [5, 4, 1, 13], + [7, 3, 3, 5], + [15, 6, 1, 58], + [17, 6, 2, 59], + [21, 6, 3, 60], + [29, 6, 4, 61], + [45, 6, 5, 62], + [77, 7, 6, 126], + [141, 7, 32, 127], + ]; + break; + case 14: + t = [ + [-2, 3, 0, 4], + [-1, 3, 0, 5], + [0, 1, 0, 0], + [1, 3, 0, 6], + [2, 3, 0, 7], + ]; + break; + case 15: + t = [ + [-24, 7, 4, 124], + [-8, 6, 2, 60], + [-4, 5, 1, 28], + [-2, 4, 0, 12], + [-1, 3, 0, 4], + [0, 1, 0, 0], + [1, 3, 0, 5], + [2, 4, 0, 13], + [3, 5, 1, 29], + [5, 6, 2, 61], + [9, 7, 4, 125], + [-25, 7, 32, 126, "lower"], + [25, 7, 32, 127], + ]; + break; + default: + throw new Jbig2Error(`standard table B.${e} does not exist`); + } + for (let e = 0, i = t.length; e < i; e++) t[e] = new HuffmanLine(t[e]); + i = new HuffmanTable(t, !0); + _t[e] = i; + return i; +} +class Reader { + constructor(e, t, i) { + this.data = e; + this.start = t; + this.end = i; + this.position = t; + this.shift = -1; + this.currentByte = 0; + } + readBit() { + if (this.shift < 0) { + if (this.position >= this.end) + throw new Jbig2Error("end of data while reading bit"); + this.currentByte = this.data[this.position++]; + this.shift = 7; + } + const e = (this.currentByte >> this.shift) & 1; + this.shift--; + return e; + } + readBits(e) { + let t, + i = 0; + for (t = e - 1; t >= 0; t--) i |= this.readBit() << t; + return i; + } + byteAlign() { + this.shift = -1; + } + next() { + return this.position >= this.end ? -1 : this.data[this.position++]; + } +} +function getCustomHuffmanTable(e, t, i) { + let a = 0; + for (let s = 0, r = t.length; s < r; s++) { + const r = i[t[s]]; + if (r) { + if (e === a) return r; + a++; + } + } + throw new Jbig2Error("can't find custom Huffman table"); +} +function readUncompressedBitmap(e, t, i) { + const a = []; + for (let s = 0; s < i; s++) { + const i = new Uint8Array(t); + a.push(i); + for (let a = 0; a < t; a++) i[a] = e.readBit(); + e.byteAlign(); + } + return a; +} +function decodeMMRBitmap(e, t, i, a) { + const s = new CCITTFaxDecoder(e, { + K: -1, + Columns: t, + Rows: i, + BlackIs1: !0, + EndOfBlock: a, + }), + r = []; + let n, + g = !1; + for (let e = 0; e < i; e++) { + const e = new Uint8Array(t); + r.push(e); + let i = -1; + for (let a = 0; a < t; a++) { + if (i < 0) { + n = s.readNextChar(); + if (-1 === n) { + n = 0; + g = !0; + } + i = 7; + } + e[a] = (n >> i) & 1; + i--; + } + } + if (a && !g) { + const e = 5; + for (let t = 0; t < e && -1 !== s.readNextChar(); t++); + } + return r; +} +class Jbig2Image { + parseChunks(e) { + return (function parseJbig2Chunks(e) { + const t = new SimpleSegmentVisitor(); + for (let i = 0, a = e.length; i < a; i++) { + const a = e[i]; + processSegments(readSegments({}, a.data, a.start, a.end), t); + } + return t.buffer; + })(e); + } + parse(e) { + throw new Error("Not implemented: Jbig2Image.parse"); + } +} +class Jbig2Stream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.stream = e; + this.dict = e.dict; + this.maybeLength = t; + this.params = i; + } + get bytes() { + return shadow(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + ensureBuffer(e) {} + readBlock() { + this.decodeImage(); + } + decodeImage(e) { + if (this.eof) return this.buffer; + e ||= this.bytes; + const t = new Jbig2Image(), + i = []; + if (this.params instanceof Dict) { + const e = this.params.get("JBIG2Globals"); + if (e instanceof BaseStream) { + const t = e.getBytes(); + i.push({ data: t, start: 0, end: t.length }); + } + } + i.push({ data: e, start: 0, end: e.length }); + const a = t.parseChunks(i), + s = a.length; + for (let e = 0; e < s; e++) a[e] ^= 255; + this.buffer = a; + this.bufferLength = s; + this.eof = !0; + return this.buffer; + } + get canAsyncDecodeImageFromBuffer() { + return this.stream.isAsync; + } +} +function convertToRGBA(e) { + switch (e.kind) { + case D: + return convertBlackAndWhiteToRGBA(e); + case b: + return (function convertRGBToRGBA({ + src: e, + srcPos: t = 0, + dest: i, + destPos: a = 0, + width: s, + height: r, + }) { + let n = 0; + const g = e.length >> 2, + o = new Uint32Array(e.buffer, t, g); + if (FeatureTest.isLittleEndian) { + for (; n < g - 2; n += 3, a += 4) { + const e = o[n], + t = o[n + 1], + s = o[n + 2]; + i[a] = 4278190080 | e; + i[a + 1] = (e >>> 24) | (t << 8) | 4278190080; + i[a + 2] = (t >>> 16) | (s << 16) | 4278190080; + i[a + 3] = (s >>> 8) | 4278190080; + } + for (let t = 4 * n, s = e.length; t < s; t += 3) + i[a++] = e[t] | (e[t + 1] << 8) | (e[t + 2] << 16) | 4278190080; + } else { + for (; n < g - 2; n += 3, a += 4) { + const e = o[n], + t = o[n + 1], + s = o[n + 2]; + i[a] = 255 | e; + i[a + 1] = (e << 24) | (t >>> 8) | 255; + i[a + 2] = (t << 16) | (s >>> 16) | 255; + i[a + 3] = (s << 8) | 255; + } + for (let t = 4 * n, s = e.length; t < s; t += 3) + i[a++] = (e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | 255; + } + return { srcPos: t, destPos: a }; + })(e); + } + return null; +} +function convertBlackAndWhiteToRGBA({ + src: e, + srcPos: t = 0, + dest: i, + width: a, + height: s, + nonBlackColor: r = 4294967295, + inverseDecode: n = !1, +}) { + const g = FeatureTest.isLittleEndian ? 4278190080 : 255, + [o, c] = n ? [r, g] : [g, r], + C = a >> 3, + h = 7 & a, + l = e.length; + i = new Uint32Array(i.buffer); + let Q = 0; + for (let a = 0; a < s; a++) { + for (const a = t + C; t < a; t++) { + const a = t < l ? e[t] : 255; + i[Q++] = 128 & a ? c : o; + i[Q++] = 64 & a ? c : o; + i[Q++] = 32 & a ? c : o; + i[Q++] = 16 & a ? c : o; + i[Q++] = 8 & a ? c : o; + i[Q++] = 4 & a ? c : o; + i[Q++] = 2 & a ? c : o; + i[Q++] = 1 & a ? c : o; + } + if (0 === h) continue; + const a = t < l ? e[t++] : 255; + for (let e = 0; e < h; e++) i[Q++] = a & (1 << (7 - e)) ? c : o; + } + return { srcPos: t, destPos: Q }; +} +class JpegError extends rt { + constructor(e) { + super(e, "JpegError"); + } +} +class DNLMarkerError extends rt { + constructor(e, t) { + super(e, "DNLMarkerError"); + this.scanLines = t; + } +} +class EOIMarkerError extends rt { + constructor(e) { + super(e, "EOIMarkerError"); + } +} +const $t = new Uint8Array([ + 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, + 54, 47, 55, 62, 63, + ]), + Ai = 4017, + ei = 799, + ti = 3406, + ii = 2276, + ai = 1567, + si = 3784, + ri = 5793, + ni = 2896; +function buildHuffmanTable(e, t) { + let i, + a, + s = 0, + r = 16; + for (; r > 0 && !e[r - 1]; ) r--; + const n = [{ children: [], index: 0 }]; + let g, + o = n[0]; + for (i = 0; i < r; i++) { + for (a = 0; a < e[i]; a++) { + o = n.pop(); + o.children[o.index] = t[s]; + for (; o.index > 0; ) o = n.pop(); + o.index++; + n.push(o); + for (; n.length <= i; ) { + n.push((g = { children: [], index: 0 })); + o.children[o.index] = g.children; + o = g; + } + s++; + } + if (i + 1 < r) { + n.push((g = { children: [], index: 0 })); + o.children[o.index] = g.children; + o = g; + } + } + return n[0].children; +} +function getBlockBufferOffset(e, t, i) { + return 64 * ((e.blocksPerLine + 1) * t + i); +} +function decodeScan(e, t, i, a, s, r, n, g, o, c = !1) { + const C = i.mcusPerLine, + h = i.progressive, + l = t; + let Q = 0, + E = 0; + function readBit() { + if (E > 0) { + E--; + return (Q >> E) & 1; + } + Q = e[t++]; + if (255 === Q) { + const a = e[t++]; + if (a) { + if (220 === a && c) { + const a = readUint16(e, (t += 2)); + t += 2; + if (a > 0 && a !== i.scanLines) + throw new DNLMarkerError( + "Found DNL marker (0xFFDC) while parsing scan data", + a, + ); + } else if (217 === a) { + if (c) { + const e = p * (8 === i.precision ? 8 : 0); + if (e > 0 && Math.round(i.scanLines / e) >= 5) + throw new DNLMarkerError( + "Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter", + e, + ); + } + throw new EOIMarkerError( + "Found EOI marker (0xFFD9) while parsing scan data", + ); + } + throw new JpegError(`unexpected marker ${((Q << 8) | a).toString(16)}`); + } + } + E = 7; + return Q >>> 7; + } + function decodeHuffman(e) { + let t = e; + for (;;) { + t = t[readBit()]; + switch (typeof t) { + case "number": + return t; + case "object": + continue; + } + throw new JpegError("invalid huffman sequence"); + } + } + function receive(e) { + let t = 0; + for (; e > 0; ) { + t = (t << 1) | readBit(); + e--; + } + return t; + } + function receiveAndExtend(e) { + if (1 === e) return 1 === readBit() ? 1 : -1; + const t = receive(e); + return t >= 1 << (e - 1) ? t : t + (-1 << e) + 1; + } + let u = 0; + let d, + f = 0; + let p = 0; + function decodeMcu(e, t, i, a, s) { + const r = i % C; + p = ((i / C) | 0) * e.v + a; + const n = r * e.h + s; + t(e, getBlockBufferOffset(e, p, n)); + } + function decodeBlock(e, t, i) { + p = (i / e.blocksPerLine) | 0; + const a = i % e.blocksPerLine; + t(e, getBlockBufferOffset(e, p, a)); + } + const m = a.length; + let y, w, D, b, F, S; + S = h + ? 0 === r + ? 0 === g + ? function decodeDCFirst(e, t) { + const i = decodeHuffman(e.huffmanTableDC), + a = 0 === i ? 0 : receiveAndExtend(i) << o; + e.blockData[t] = e.pred += a; + } + : function decodeDCSuccessive(e, t) { + e.blockData[t] |= readBit() << o; + } + : 0 === g + ? function decodeACFirst(e, t) { + if (u > 0) { + u--; + return; + } + let i = r; + const a = n; + for (; i <= a; ) { + const a = decodeHuffman(e.huffmanTableAC), + s = 15 & a, + r = a >> 4; + if (0 === s) { + if (r < 15) { + u = receive(r) + (1 << r) - 1; + break; + } + i += 16; + continue; + } + i += r; + const n = $t[i]; + e.blockData[t + n] = receiveAndExtend(s) * (1 << o); + i++; + } + } + : function decodeACSuccessive(e, t) { + let i = r; + const a = n; + let s, + g, + c = 0; + for (; i <= a; ) { + const a = t + $t[i], + r = e.blockData[a] < 0 ? -1 : 1; + switch (f) { + case 0: + g = decodeHuffman(e.huffmanTableAC); + s = 15 & g; + c = g >> 4; + if (0 === s) + if (c < 15) { + u = receive(c) + (1 << c); + f = 4; + } else { + c = 16; + f = 1; + } + else { + if (1 !== s) throw new JpegError("invalid ACn encoding"); + d = receiveAndExtend(s); + f = c ? 2 : 3; + } + continue; + case 1: + case 2: + if (e.blockData[a]) e.blockData[a] += r * (readBit() << o); + else { + c--; + 0 === c && (f = 2 === f ? 3 : 0); + } + break; + case 3: + if (e.blockData[a]) e.blockData[a] += r * (readBit() << o); + else { + e.blockData[a] = d << o; + f = 0; + } + break; + case 4: + e.blockData[a] && (e.blockData[a] += r * (readBit() << o)); + } + i++; + } + if (4 === f) { + u--; + 0 === u && (f = 0); + } + } + : function decodeBaseline(e, t) { + const i = decodeHuffman(e.huffmanTableDC), + a = 0 === i ? 0 : receiveAndExtend(i); + e.blockData[t] = e.pred += a; + let s = 1; + for (; s < 64; ) { + const i = decodeHuffman(e.huffmanTableAC), + a = 15 & i, + r = i >> 4; + if (0 === a) { + if (r < 15) break; + s += 16; + continue; + } + s += r; + const n = $t[s]; + e.blockData[t + n] = receiveAndExtend(a); + s++; + } + }; + let k, + R = 0; + const N = + 1 === m ? a[0].blocksPerLine * a[0].blocksPerColumn : C * i.mcusPerColumn; + let G, x; + for (; R <= N; ) { + const i = s ? Math.min(N - R, s) : N; + if (i > 0) { + for (w = 0; w < m; w++) a[w].pred = 0; + u = 0; + if (1 === m) { + y = a[0]; + for (F = 0; F < i; F++) { + decodeBlock(y, S, R); + R++; + } + } else + for (F = 0; F < i; F++) { + for (w = 0; w < m; w++) { + y = a[w]; + G = y.h; + x = y.v; + for (D = 0; D < x; D++) + for (b = 0; b < G; b++) decodeMcu(y, S, R, D, b); + } + R++; + } + } + E = 0; + k = findNextFileMarker(e, t); + if (!k) break; + if (k.invalid) { + warn( + `decodeScan - ${i > 0 ? "unexpected" : "excessive"} MCU data, current marker is: ${k.invalid}`, + ); + t = k.offset; + } + if (!(k.marker >= 65488 && k.marker <= 65495)) break; + t += 2; + } + return t - l; +} +function quantizeAndInverse(e, t, i) { + const a = e.quantizationTable, + s = e.blockData; + let r, n, g, o, c, C, h, l, Q, E, u, d, f, p, m, y, w; + if (!a) throw new JpegError("missing required Quantization Table."); + for (let e = 0; e < 64; e += 8) { + Q = s[t + e]; + E = s[t + e + 1]; + u = s[t + e + 2]; + d = s[t + e + 3]; + f = s[t + e + 4]; + p = s[t + e + 5]; + m = s[t + e + 6]; + y = s[t + e + 7]; + Q *= a[e]; + if (0 != (E | u | d | f | p | m | y)) { + E *= a[e + 1]; + u *= a[e + 2]; + d *= a[e + 3]; + f *= a[e + 4]; + p *= a[e + 5]; + m *= a[e + 6]; + y *= a[e + 7]; + r = (ri * Q + 128) >> 8; + n = (ri * f + 128) >> 8; + g = u; + o = m; + c = (ni * (E - y) + 128) >> 8; + l = (ni * (E + y) + 128) >> 8; + C = d << 4; + h = p << 4; + r = (r + n + 1) >> 1; + n = r - n; + w = (g * si + o * ai + 128) >> 8; + g = (g * ai - o * si + 128) >> 8; + o = w; + c = (c + h + 1) >> 1; + h = c - h; + l = (l + C + 1) >> 1; + C = l - C; + r = (r + o + 1) >> 1; + o = r - o; + n = (n + g + 1) >> 1; + g = n - g; + w = (c * ii + l * ti + 2048) >> 12; + c = (c * ti - l * ii + 2048) >> 12; + l = w; + w = (C * ei + h * Ai + 2048) >> 12; + C = (C * Ai - h * ei + 2048) >> 12; + h = w; + i[e] = r + l; + i[e + 7] = r - l; + i[e + 1] = n + h; + i[e + 6] = n - h; + i[e + 2] = g + C; + i[e + 5] = g - C; + i[e + 3] = o + c; + i[e + 4] = o - c; + } else { + w = (ri * Q + 512) >> 10; + i[e] = w; + i[e + 1] = w; + i[e + 2] = w; + i[e + 3] = w; + i[e + 4] = w; + i[e + 5] = w; + i[e + 6] = w; + i[e + 7] = w; + } + } + for (let e = 0; e < 8; ++e) { + Q = i[e]; + E = i[e + 8]; + u = i[e + 16]; + d = i[e + 24]; + f = i[e + 32]; + p = i[e + 40]; + m = i[e + 48]; + y = i[e + 56]; + if (0 != (E | u | d | f | p | m | y)) { + r = (ri * Q + 2048) >> 12; + n = (ri * f + 2048) >> 12; + g = u; + o = m; + c = (ni * (E - y) + 2048) >> 12; + l = (ni * (E + y) + 2048) >> 12; + C = d; + h = p; + r = 4112 + ((r + n + 1) >> 1); + n = r - n; + w = (g * si + o * ai + 2048) >> 12; + g = (g * ai - o * si + 2048) >> 12; + o = w; + c = (c + h + 1) >> 1; + h = c - h; + l = (l + C + 1) >> 1; + C = l - C; + r = (r + o + 1) >> 1; + o = r - o; + n = (n + g + 1) >> 1; + g = n - g; + w = (c * ii + l * ti + 2048) >> 12; + c = (c * ti - l * ii + 2048) >> 12; + l = w; + w = (C * ei + h * Ai + 2048) >> 12; + C = (C * Ai - h * ei + 2048) >> 12; + h = w; + Q = r + l; + y = r - l; + E = n + h; + m = n - h; + u = g + C; + p = g - C; + d = o + c; + f = o - c; + Q < 16 ? (Q = 0) : Q >= 4080 ? (Q = 255) : (Q >>= 4); + E < 16 ? (E = 0) : E >= 4080 ? (E = 255) : (E >>= 4); + u < 16 ? (u = 0) : u >= 4080 ? (u = 255) : (u >>= 4); + d < 16 ? (d = 0) : d >= 4080 ? (d = 255) : (d >>= 4); + f < 16 ? (f = 0) : f >= 4080 ? (f = 255) : (f >>= 4); + p < 16 ? (p = 0) : p >= 4080 ? (p = 255) : (p >>= 4); + m < 16 ? (m = 0) : m >= 4080 ? (m = 255) : (m >>= 4); + y < 16 ? (y = 0) : y >= 4080 ? (y = 255) : (y >>= 4); + s[t + e] = Q; + s[t + e + 8] = E; + s[t + e + 16] = u; + s[t + e + 24] = d; + s[t + e + 32] = f; + s[t + e + 40] = p; + s[t + e + 48] = m; + s[t + e + 56] = y; + } else { + w = (ri * Q + 8192) >> 14; + w = w < -2040 ? 0 : w >= 2024 ? 255 : (w + 2056) >> 4; + s[t + e] = w; + s[t + e + 8] = w; + s[t + e + 16] = w; + s[t + e + 24] = w; + s[t + e + 32] = w; + s[t + e + 40] = w; + s[t + e + 48] = w; + s[t + e + 56] = w; + } + } +} +function buildComponentData(e, t) { + const i = t.blocksPerLine, + a = t.blocksPerColumn, + s = new Int16Array(64); + for (let e = 0; e < a; e++) + for (let a = 0; a < i; a++) { + quantizeAndInverse(t, getBlockBufferOffset(t, e, a), s); + } + return t.blockData; +} +function findNextFileMarker(e, t, i = t) { + const a = e.length - 1; + let s = i < t ? i : t; + if (t >= a) return null; + const r = readUint16(e, t); + if (r >= 65472 && r <= 65534) return { invalid: null, marker: r, offset: t }; + let n = readUint16(e, s); + for (; !(n >= 65472 && n <= 65534); ) { + if (++s >= a) return null; + n = readUint16(e, s); + } + return { invalid: r.toString(16), marker: n, offset: s }; +} +class JpegImage { + constructor({ decodeTransform: e = null, colorTransform: t = -1 } = {}) { + this._decodeTransform = e; + this._colorTransform = t; + } + parse(e, { dnlScanLines: t = null } = {}) { + function readDataBlock() { + const t = readUint16(e, s); + s += 2; + let i = s + t - 2; + const a = findNextFileMarker(e, i, s); + if (a?.invalid) { + warn( + "readDataBlock - incorrect length, current marker is: " + a.invalid, + ); + i = a.offset; + } + const r = e.subarray(s, i); + s += r.length; + return r; + } + function prepareComponents(e) { + const t = Math.ceil(e.samplesPerLine / 8 / e.maxH), + i = Math.ceil(e.scanLines / 8 / e.maxV); + for (const a of e.components) { + const s = Math.ceil((Math.ceil(e.samplesPerLine / 8) * a.h) / e.maxH), + r = Math.ceil((Math.ceil(e.scanLines / 8) * a.v) / e.maxV), + n = t * a.h, + g = 64 * (i * a.v) * (n + 1); + a.blockData = new Int16Array(g); + a.blocksPerLine = s; + a.blocksPerColumn = r; + } + e.mcusPerLine = t; + e.mcusPerColumn = i; + } + let i, + a, + s = 0, + r = null, + n = null, + g = 0; + const o = [], + c = [], + C = []; + let h = readUint16(e, s); + s += 2; + if (65496 !== h) throw new JpegError("SOI not found"); + h = readUint16(e, s); + s += 2; + A: for (; 65497 !== h; ) { + let l, Q, E; + switch (h) { + case 65504: + case 65505: + case 65506: + case 65507: + case 65508: + case 65509: + case 65510: + case 65511: + case 65512: + case 65513: + case 65514: + case 65515: + case 65516: + case 65517: + case 65518: + case 65519: + case 65534: + const u = readDataBlock(); + 65504 === h && + 74 === u[0] && + 70 === u[1] && + 73 === u[2] && + 70 === u[3] && + 0 === u[4] && + (r = { + version: { major: u[5], minor: u[6] }, + densityUnits: u[7], + xDensity: (u[8] << 8) | u[9], + yDensity: (u[10] << 8) | u[11], + thumbWidth: u[12], + thumbHeight: u[13], + thumbData: u.subarray(14, 14 + 3 * u[12] * u[13]), + }); + 65518 === h && + 65 === u[0] && + 100 === u[1] && + 111 === u[2] && + 98 === u[3] && + 101 === u[4] && + (n = { + version: (u[5] << 8) | u[6], + flags0: (u[7] << 8) | u[8], + flags1: (u[9] << 8) | u[10], + transformCode: u[11], + }); + break; + case 65499: + const d = readUint16(e, s); + s += 2; + const f = d + s - 2; + let p; + for (; s < f; ) { + const t = e[s++], + i = new Uint16Array(64); + if (t >> 4 == 0) + for (Q = 0; Q < 64; Q++) { + p = $t[Q]; + i[p] = e[s++]; + } + else { + if (t >> 4 != 1) throw new JpegError("DQT - invalid table spec"); + for (Q = 0; Q < 64; Q++) { + p = $t[Q]; + i[p] = readUint16(e, s); + s += 2; + } + } + o[15 & t] = i; + } + break; + case 65472: + case 65473: + case 65474: + if (i) throw new JpegError("Only single frame JPEGs supported"); + s += 2; + i = {}; + i.extended = 65473 === h; + i.progressive = 65474 === h; + i.precision = e[s++]; + const m = readUint16(e, s); + s += 2; + i.scanLines = t || m; + i.samplesPerLine = readUint16(e, s); + s += 2; + i.components = []; + i.componentIds = {}; + const y = e[s++]; + let w = 0, + D = 0; + for (l = 0; l < y; l++) { + const t = e[s], + a = e[s + 1] >> 4, + r = 15 & e[s + 1]; + w < a && (w = a); + D < r && (D = r); + const n = e[s + 2]; + E = i.components.push({ + h: a, + v: r, + quantizationId: n, + quantizationTable: null, + }); + i.componentIds[t] = E - 1; + s += 3; + } + i.maxH = w; + i.maxV = D; + prepareComponents(i); + break; + case 65476: + const b = readUint16(e, s); + s += 2; + for (l = 2; l < b; ) { + const t = e[s++], + i = new Uint8Array(16); + let a = 0; + for (Q = 0; Q < 16; Q++, s++) a += i[Q] = e[s]; + const r = new Uint8Array(a); + for (Q = 0; Q < a; Q++, s++) r[Q] = e[s]; + l += 17 + a; + (t >> 4 == 0 ? C : c)[15 & t] = buildHuffmanTable(i, r); + } + break; + case 65501: + s += 2; + a = readUint16(e, s); + s += 2; + break; + case 65498: + const F = 1 == ++g && !t; + s += 2; + const S = e[s++], + k = []; + for (l = 0; l < S; l++) { + const t = e[s++], + a = i.componentIds[t], + r = i.components[a]; + r.index = t; + const n = e[s++]; + r.huffmanTableDC = C[n >> 4]; + r.huffmanTableAC = c[15 & n]; + k.push(r); + } + const R = e[s++], + N = e[s++], + G = e[s++]; + try { + const t = decodeScan(e, s, i, k, a, R, N, G >> 4, 15 & G, F); + s += t; + } catch (t) { + if (t instanceof DNLMarkerError) { + warn(`${t.message} -- attempting to re-parse the JPEG image.`); + return this.parse(e, { dnlScanLines: t.scanLines }); + } + if (t instanceof EOIMarkerError) { + warn(`${t.message} -- ignoring the rest of the image data.`); + break A; + } + throw t; + } + break; + case 65500: + s += 4; + break; + case 65535: + 255 !== e[s] && s--; + break; + default: + const x = findNextFileMarker(e, s - 2, s - 3); + if (x?.invalid) { + warn( + "JpegImage.parse - unexpected data, current marker is: " + + x.invalid, + ); + s = x.offset; + break; + } + if (!x || s >= e.length - 1) { + warn( + "JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).", + ); + break A; + } + throw new JpegError( + "JpegImage.parse - unknown marker: " + h.toString(16), + ); + } + h = readUint16(e, s); + s += 2; + } + if (!i) throw new JpegError("JpegImage.parse - no frame data found."); + this.width = i.samplesPerLine; + this.height = i.scanLines; + this.jfif = r; + this.adobe = n; + this.components = []; + for (const e of i.components) { + const t = o[e.quantizationId]; + t && (e.quantizationTable = t); + this.components.push({ + index: e.index, + output: buildComponentData(0, e), + scaleX: e.h / i.maxH, + scaleY: e.v / i.maxV, + blocksPerLine: e.blocksPerLine, + blocksPerColumn: e.blocksPerColumn, + }); + } + this.numComponents = this.components.length; + } + _getLinearizedBlockData(e, t, i = !1) { + const a = this.width / e, + s = this.height / t; + let r, + n, + g, + o, + c, + C, + h, + l, + Q, + E, + u, + d = 0; + const f = this.components.length, + p = e * t * f, + m = new Uint8ClampedArray(p), + y = new Uint32Array(e), + w = 4294967288; + let D; + for (h = 0; h < f; h++) { + r = this.components[h]; + n = r.scaleX * a; + g = r.scaleY * s; + d = h; + u = r.output; + o = (r.blocksPerLine + 1) << 3; + if (n !== D) { + for (c = 0; c < e; c++) { + l = 0 | (c * n); + y[c] = ((l & w) << 3) | (7 & l); + } + D = n; + } + for (C = 0; C < t; C++) { + l = 0 | (C * g); + E = (o * (l & w)) | ((7 & l) << 3); + for (c = 0; c < e; c++) { + m[d] = u[E + y[c]]; + d += f; + } + } + } + let b = this._decodeTransform; + i || + 4 !== f || + b || + (b = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255])); + if (b) + for (h = 0; h < p; ) + for (l = 0, Q = 0; l < f; l++, h++, Q += 2) + m[h] = ((m[h] * b[Q]) >> 8) + b[Q + 1]; + return m; + } + get _isColorConversionNeeded() { + return this.adobe + ? !!this.adobe.transformCode + : 3 === this.numComponents + ? 0 !== this._colorTransform && + (82 !== this.components[0].index || + 71 !== this.components[1].index || + 66 !== this.components[2].index) + : 1 === this._colorTransform; + } + _convertYccToRgb(e) { + let t, i, a; + for (let s = 0, r = e.length; s < r; s += 3) { + t = e[s]; + i = e[s + 1]; + a = e[s + 2]; + e[s] = t - 179.456 + 1.402 * a; + e[s + 1] = t + 135.459 - 0.344 * i - 0.714 * a; + e[s + 2] = t - 226.816 + 1.772 * i; + } + return e; + } + _convertYccToRgba(e, t) { + for (let i = 0, a = 0, s = e.length; i < s; i += 3, a += 4) { + const s = e[i], + r = e[i + 1], + n = e[i + 2]; + t[a] = s - 179.456 + 1.402 * n; + t[a + 1] = s + 135.459 - 0.344 * r - 0.714 * n; + t[a + 2] = s - 226.816 + 1.772 * r; + t[a + 3] = 255; + } + return t; + } + _convertYcckToRgb(e) { + let t, + i, + a, + s, + r = 0; + for (let n = 0, g = e.length; n < g; n += 4) { + t = e[n]; + i = e[n + 1]; + a = e[n + 2]; + s = e[n + 3]; + e[r++] = + i * + (-660635669420364e-19 * i + + 0.000437130475926232 * a - + 54080610064599e-18 * t + + 0.00048449797120281 * s - + 0.154362151871126) - + 122.67195406894 + + a * + (-0.000957964378445773 * a + + 0.000817076911346625 * t - + 0.00477271405408747 * s + + 1.53380253221734) + + t * + (0.000961250184130688 * t - + 0.00266257332283933 * s + + 0.48357088451265) + + s * (-0.000336197177618394 * s + 0.484791561490776); + e[r++] = + 107.268039397724 + + i * + (219927104525741e-19 * i - + 0.000640992018297945 * a + + 0.000659397001245577 * t + + 0.000426105652938837 * s - + 0.176491792462875) + + a * + (-0.000778269941513683 * a + + 0.00130872261408275 * t + + 0.000770482631801132 * s - + 0.151051492775562) + + t * + (0.00126935368114843 * t - + 0.00265090189010898 * s + + 0.25802910206845) + + s * (-0.000318913117588328 * s - 0.213742400323665); + e[r++] = + i * + (-0.000570115196973677 * i - + 263409051004589e-19 * a + + 0.0020741088115012 * t - + 0.00288260236853442 * s + + 0.814272968359295) - + 20.810012546947 + + a * + (-153496057440975e-19 * a - + 0.000132689043961446 * t + + 0.000560833691242812 * s - + 0.195152027534049) + + t * + (0.00174418132927582 * t - + 0.00255243321439347 * s + + 0.116935020465145) + + s * (-0.000343531996510555 * s + 0.24165260232407); + } + return e.subarray(0, r); + } + _convertYcckToRgba(e) { + for (let t = 0, i = e.length; t < i; t += 4) { + const i = e[t], + a = e[t + 1], + s = e[t + 2], + r = e[t + 3]; + e[t] = + a * + (-660635669420364e-19 * a + + 0.000437130475926232 * s - + 54080610064599e-18 * i + + 0.00048449797120281 * r - + 0.154362151871126) - + 122.67195406894 + + s * + (-0.000957964378445773 * s + + 0.000817076911346625 * i - + 0.00477271405408747 * r + + 1.53380253221734) + + i * + (0.000961250184130688 * i - + 0.00266257332283933 * r + + 0.48357088451265) + + r * (-0.000336197177618394 * r + 0.484791561490776); + e[t + 1] = + 107.268039397724 + + a * + (219927104525741e-19 * a - + 0.000640992018297945 * s + + 0.000659397001245577 * i + + 0.000426105652938837 * r - + 0.176491792462875) + + s * + (-0.000778269941513683 * s + + 0.00130872261408275 * i + + 0.000770482631801132 * r - + 0.151051492775562) + + i * + (0.00126935368114843 * i - + 0.00265090189010898 * r + + 0.25802910206845) + + r * (-0.000318913117588328 * r - 0.213742400323665); + e[t + 2] = + a * + (-0.000570115196973677 * a - + 263409051004589e-19 * s + + 0.0020741088115012 * i - + 0.00288260236853442 * r + + 0.814272968359295) - + 20.810012546947 + + s * + (-153496057440975e-19 * s - + 0.000132689043961446 * i + + 0.000560833691242812 * r - + 0.195152027534049) + + i * + (0.00174418132927582 * i - + 0.00255243321439347 * r + + 0.116935020465145) + + r * (-0.000343531996510555 * r + 0.24165260232407); + e[t + 3] = 255; + } + return e; + } + _convertYcckToCmyk(e) { + let t, i, a; + for (let s = 0, r = e.length; s < r; s += 4) { + t = e[s]; + i = e[s + 1]; + a = e[s + 2]; + e[s] = 434.456 - t - 1.402 * a; + e[s + 1] = 119.541 - t + 0.344 * i + 0.714 * a; + e[s + 2] = 481.816 - t - 1.772 * i; + } + return e; + } + _convertCmykToRgb(e) { + let t, + i, + a, + s, + r = 0; + for (let n = 0, g = e.length; n < g; n += 4) { + t = e[n]; + i = e[n + 1]; + a = e[n + 2]; + s = e[n + 3]; + e[r++] = + 255 + + t * + (-6747147073602441e-20 * t + + 0.0008379262121013727 * i + + 0.0002894718188643294 * a + + 0.003264231057537806 * s - + 1.1185611867203937) + + i * + (26374107616089405e-21 * i - + 8626949158638572e-20 * a - + 0.0002748769067499491 * s - + 0.02155688794978967) + + a * + (-3878099212869363e-20 * a - + 0.0003267808279485286 * s + + 0.0686742238595345) - + s * (0.0003361971776183937 * s + 0.7430659151342254); + e[r++] = + 255 + + t * + (0.00013596372813588848 * t + + 0.000924537132573585 * i + + 0.00010567359618683593 * a + + 0.0004791864687436512 * s - + 0.3109689587515875) + + i * + (-0.00023545346108370344 * i + + 0.0002702845253534714 * a + + 0.0020200308977307156 * s - + 0.7488052167015494) + + a * + (6834815998235662e-20 * a + + 0.00015168452363460973 * s - + 0.09751927774728933) - + s * (0.0003189131175883281 * s + 0.7364883807733168); + e[r++] = + 255 + + t * + (13598650411385307e-21 * t + + 0.00012423956175490851 * i + + 0.0004751985097583589 * a - + 36729317476630422e-22 * s - + 0.05562186980264034) + + i * + (0.00016141380598724676 * i + + 0.0009692239130725186 * a + + 0.0007782692450036253 * s - + 0.44015232367526463) + + a * + (5.068882914068769e-7 * a + + 0.0017778369011375071 * s - + 0.7591454649749609) - + s * (0.0003435319965105553 * s + 0.7063770186160144); + } + return e.subarray(0, r); + } + _convertCmykToRgba(e) { + for (let t = 0, i = e.length; t < i; t += 4) { + const i = e[t], + a = e[t + 1], + s = e[t + 2], + r = e[t + 3]; + e[t] = + 255 + + i * + (-6747147073602441e-20 * i + + 0.0008379262121013727 * a + + 0.0002894718188643294 * s + + 0.003264231057537806 * r - + 1.1185611867203937) + + a * + (26374107616089405e-21 * a - + 8626949158638572e-20 * s - + 0.0002748769067499491 * r - + 0.02155688794978967) + + s * + (-3878099212869363e-20 * s - + 0.0003267808279485286 * r + + 0.0686742238595345) - + r * (0.0003361971776183937 * r + 0.7430659151342254); + e[t + 1] = + 255 + + i * + (0.00013596372813588848 * i + + 0.000924537132573585 * a + + 0.00010567359618683593 * s + + 0.0004791864687436512 * r - + 0.3109689587515875) + + a * + (-0.00023545346108370344 * a + + 0.0002702845253534714 * s + + 0.0020200308977307156 * r - + 0.7488052167015494) + + s * + (6834815998235662e-20 * s + + 0.00015168452363460973 * r - + 0.09751927774728933) - + r * (0.0003189131175883281 * r + 0.7364883807733168); + e[t + 2] = + 255 + + i * + (13598650411385307e-21 * i + + 0.00012423956175490851 * a + + 0.0004751985097583589 * s - + 36729317476630422e-22 * r - + 0.05562186980264034) + + a * + (0.00016141380598724676 * a + + 0.0009692239130725186 * s + + 0.0007782692450036253 * r - + 0.44015232367526463) + + s * + (5.068882914068769e-7 * s + + 0.0017778369011375071 * r - + 0.7591454649749609) - + r * (0.0003435319965105553 * r + 0.7063770186160144); + e[t + 3] = 255; + } + return e; + } + getData({ + width: e, + height: t, + forceRGBA: i = !1, + forceRGB: a = !1, + isSourcePDF: s = !1, + }) { + if (this.numComponents > 4) throw new JpegError("Unsupported color mode"); + const r = this._getLinearizedBlockData(e, t, s); + if (1 === this.numComponents && (i || a)) { + const e = r.length * (i ? 4 : 3), + t = new Uint8ClampedArray(e); + let a = 0; + if (i) + !(function grayToRGBA(e, t) { + if (FeatureTest.isLittleEndian) + for (let i = 0, a = e.length; i < a; i++) + t[i] = (65793 * e[i]) | 4278190080; + else + for (let i = 0, a = e.length; i < a; i++) + t[i] = (16843008 * e[i]) | 255; + })(r, new Uint32Array(t.buffer)); + else + for (const e of r) { + t[a++] = e; + t[a++] = e; + t[a++] = e; + } + return t; + } + if (3 === this.numComponents && this._isColorConversionNeeded) { + if (i) { + const e = new Uint8ClampedArray((r.length / 3) * 4); + return this._convertYccToRgba(r, e); + } + return this._convertYccToRgb(r); + } + if (4 === this.numComponents) { + if (this._isColorConversionNeeded) + return i + ? this._convertYcckToRgba(r) + : a + ? this._convertYcckToRgb(r) + : this._convertYcckToCmyk(r); + if (i) return this._convertCmykToRgba(r); + if (a) return this._convertCmykToRgb(r); + } + return r; + } +} +class JpegStream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.stream = e; + this.dict = e.dict; + this.maybeLength = t; + this.params = i; + } + get bytes() { + return shadow(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + ensureBuffer(e) {} + readBlock() { + this.decodeImage(); + } + decodeImage(e) { + if (this.eof) return this.buffer; + e ||= this.bytes; + for (let t = 0, i = e.length - 1; t < i; t++) + if (255 === e[t] && 216 === e[t + 1]) { + t > 0 && (e = e.subarray(t)); + break; + } + const t = { decodeTransform: void 0, colorTransform: void 0 }, + i = this.dict.getArray("D", "Decode"); + if ((this.forceRGBA || this.forceRGB) && Array.isArray(i)) { + const e = this.dict.get("BPC", "BitsPerComponent") || 8, + a = i.length, + s = new Int32Array(a); + let r = !1; + const n = (1 << e) - 1; + for (let e = 0; e < a; e += 2) { + s[e] = (256 * (i[e + 1] - i[e])) | 0; + s[e + 1] = (i[e] * n) | 0; + (256 === s[e] && 0 === s[e + 1]) || (r = !0); + } + r && (t.decodeTransform = s); + } + if (this.params instanceof Dict) { + const e = this.params.get("ColorTransform"); + Number.isInteger(e) && (t.colorTransform = e); + } + const a = new JpegImage(t); + a.parse(e); + const s = a.getData({ + width: this.drawWidth, + height: this.drawHeight, + forceRGBA: this.forceRGBA, + forceRGB: this.forceRGB, + isSourcePDF: !0, + }); + this.buffer = s; + this.bufferLength = s.length; + this.eof = !0; + return this.buffer; + } + get canAsyncDecodeImageFromBuffer() { + return this.stream.isAsync; + } +} +var gi, + oi = + ((gi = + "undefined" != typeof document ? document.currentScript?.src : void 0), + function (e = {}) { + var t, + i, + a = e; + new Promise((e, a) => { + t = e; + i = a; + }); + a.decode = function ( + e, + { + numComponents: t = 4, + isIndexedColormap: i = !1, + smaskInData: s = !1, + }, + ) { + const r = e.length, + n = a._malloc(r); + a.HEAPU8.set(e, n); + const g = a._jp2_decode(n, r, t > 0 ? t : 0, !!i, !!s); + a._free(n); + if (g) { + const { errorMessages: e } = a; + if (e) { + delete a.errorMessages; + return e; + } + return "Unknown error"; + } + const { imageData: o } = a; + a.imageData = null; + return o; + }; + var s, + r = Object.assign({}, a), + n = "./this.program", + g = ""; + "undefined" != typeof document && + document.currentScript && + (g = document.currentScript.src); + gi && (g = gi); + g = g.startsWith("blob:") + ? "" + : g.substr(0, g.replace(/[?#].*/, "").lastIndexOf("/") + 1); + var o, + c, + C, + h, + l, + Q = a.print || console.log.bind(console), + E = a.printErr || console.error.bind(console); + Object.assign(a, r); + r = null; + a.arguments && a.arguments; + a.thisProgram && (n = a.thisProgram); + a.quit && a.quit; + a.wasmBinary && (o = a.wasmBinary); + function tryParseAsDataURI(e) { + if (isDataURI(e)) + return (function intArrayFromBase64(e) { + for ( + var t = atob(e), i = new Uint8Array(t.length), a = 0; + a < t.length; + ++a + ) + i[a] = t.charCodeAt(a); + return i; + })(e.slice(D.length)); + } + function updateMemoryViews() { + var e = c.buffer; + a.HEAP8 = C = new Int8Array(e); + a.HEAP16 = new Int16Array(e); + a.HEAPU8 = h = new Uint8Array(e); + a.HEAPU16 = new Uint16Array(e); + a.HEAP32 = new Int32Array(e); + a.HEAPU32 = l = new Uint32Array(e); + a.HEAPF32 = new Float32Array(e); + a.HEAPF64 = new Float64Array(e); + } + var u, + d = [], + f = [], + p = [], + m = 0, + y = null, + w = null, + D = "data:application/octet-stream;base64,", + isDataURI = (e) => e.startsWith(D); + function instantiateSync(e, t) { + var i, + a = (function getBinarySync(e) { + if (e == u && o) return new Uint8Array(o); + var t = tryParseAsDataURI(e); + if (t) return t; + if (s) return s(e); + throw 'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)'; + })(e); + i = new WebAssembly.Module(a); + return [new WebAssembly.Instance(i, t), i]; + } + var callRuntimeCallbacks = (e) => { + for (; e.length > 0; ) e.shift()(a); + }; + a.noExitRuntime; + var b, + growMemory = (e) => { + var t = (e - c.buffer.byteLength + 65535) / 65536; + try { + c.grow(t); + updateMemoryViews(); + return 1; + } catch (e) {} + }, + F = {}, + getEnvStrings = () => { + if (!getEnvStrings.strings) { + var e = { + USER: "web_user", + LOGNAME: "web_user", + PATH: "/", + PWD: "/", + HOME: "/home/web_user", + LANG: + ( + ("object" == typeof navigator && + navigator.languages && + navigator.languages[0]) || + "C" + ).replace("-", "_") + ".UTF-8", + _: n || "./this.program", + }; + for (var t in F) void 0 === F[t] ? delete e[t] : (e[t] = F[t]); + var i = []; + for (var t in e) i.push(`${t}=${e[t]}`); + getEnvStrings.strings = i; + } + return getEnvStrings.strings; + }, + S = [null, [], []], + k = + "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, + UTF8ArrayToString = (e, t, i) => { + for (var a = t + i, s = t; e[s] && !(s >= a); ) ++s; + if (s - t > 16 && e.buffer && k) return k.decode(e.subarray(t, s)); + for (var r = ""; t < s; ) { + var n = e[t++]; + if (128 & n) { + var g = 63 & e[t++]; + if (192 != (224 & n)) { + var o = 63 & e[t++]; + if ( + (n = + 224 == (240 & n) + ? ((15 & n) << 12) | (g << 6) | o + : ((7 & n) << 18) | + (g << 12) | + (o << 6) | + (63 & e[t++])) < 65536 + ) + r += String.fromCharCode(n); + else { + var c = n - 65536; + r += String.fromCharCode( + 55296 | (c >> 10), + 56320 | (1023 & c), + ); + } + } else r += String.fromCharCode(((31 & n) << 6) | g); + } else r += String.fromCharCode(n); + } + return r; + }, + printChar = (e, t) => { + var i = S[e]; + if (0 === t || 10 === t) { + (1 === e ? Q : E)(UTF8ArrayToString(i, 0)); + i.length = 0; + } else i.push(t); + }, + UTF8ToString = (e, t) => (e ? UTF8ArrayToString(h, e, t) : ""), + R = { + c: (e, t, i) => h.copyWithin(e, t, t + i), + g: function _copy_pixels_1(e, t) { + e >>= 2; + const i = (a.imageData = new Uint8ClampedArray(t)), + s = a.HEAP32.subarray(e, e + t); + i.set(s); + }, + f: function _copy_pixels_3(e, t, i, s) { + e >>= 2; + t >>= 2; + i >>= 2; + const r = (a.imageData = new Uint8ClampedArray(3 * s)), + n = a.HEAP32.subarray(e, e + s), + g = a.HEAP32.subarray(t, t + s), + o = a.HEAP32.subarray(i, i + s); + for (let e = 0; e < s; e++) { + r[3 * e] = n[e]; + r[3 * e + 1] = g[e]; + r[3 * e + 2] = o[e]; + } + }, + e: function _copy_pixels_4(e, t, i, s, r) { + e >>= 2; + t >>= 2; + i >>= 2; + s >>= 2; + const n = (a.imageData = new Uint8ClampedArray(4 * r)), + g = a.HEAP32.subarray(e, e + r), + o = a.HEAP32.subarray(t, t + r), + c = a.HEAP32.subarray(i, i + r), + C = a.HEAP32.subarray(s, s + r); + for (let e = 0; e < r; e++) { + n[4 * e] = g[e]; + n[4 * e + 1] = o[e]; + n[4 * e + 2] = c[e]; + n[4 * e + 3] = C[e]; + } + }, + k: (e) => { + var t = h.length, + i = 2147483648; + if ((e >>>= 0) > i) return !1; + for (var a, s, r = 1; r <= 4; r *= 2) { + var n = t * (1 + 0.2 / r); + n = Math.min(n, e + 100663296); + var g = Math.min( + i, + (a = Math.max(e, n)) + (((s = 65536) - (a % s)) % s), + ); + if (growMemory(g)) return !0; + } + return !1; + }, + l: (e, t) => { + var i = 0; + getEnvStrings().forEach((a, s) => { + var r = t + i; + l[(e + 4 * s) >> 2] = r; + ((e, t) => { + for (var i = 0; i < e.length; ++i) C[t++] = e.charCodeAt(i); + C[t] = 0; + })(a, r); + i += a.length + 1; + }); + return 0; + }, + m: (e, t) => { + var i = getEnvStrings(); + l[e >> 2] = i.length; + var a = 0; + i.forEach((e) => (a += e.length + 1)); + l[t >> 2] = a; + return 0; + }, + n: (e) => 52, + j: function _fd_seek(e, t, i, a, s) { + return 70; + }, + b: (e, t, i, a) => { + for (var s = 0, r = 0; r < i; r++) { + var n = l[t >> 2], + g = l[(t + 4) >> 2]; + t += 8; + for (var o = 0; o < g; o++) printChar(e, h[n + o]); + s += g; + } + l[a >> 2] = s; + return 0; + }, + o: function _gray_to_rgba(e, t) { + e >>= 2; + const i = (a.imageData = new Uint8ClampedArray(4 * t)), + s = a.HEAP32.subarray(e, e + t); + for (let e = 0; e < t; e++) { + i[4 * e] = i[4 * e + 1] = i[4 * e + 2] = s[e]; + i[4 * e + 3] = 255; + } + }, + i: function _graya_to_rgba(e, t, i) { + e >>= 2; + t >>= 2; + const s = (a.imageData = new Uint8ClampedArray(4 * i)), + r = a.HEAP32.subarray(e, e + i), + n = a.HEAP32.subarray(t, t + i); + for (let e = 0; e < i; e++) { + s[4 * e] = s[4 * e + 1] = s[4 * e + 2] = r[e]; + s[4 * e + 3] = n[e]; + } + }, + d: function _jsPrintWarning(e) { + const t = UTF8ToString(e); + (a.warn || console.warn)(`OpenJPEG: ${t}`); + }, + h: function _rgb_to_rgba(e, t, i, s) { + e >>= 2; + t >>= 2; + i >>= 2; + const r = (a.imageData = new Uint8ClampedArray(4 * s)), + n = a.HEAP32.subarray(e, e + s), + g = a.HEAP32.subarray(t, t + s), + o = a.HEAP32.subarray(i, i + s); + for (let e = 0; e < s; e++) { + r[4 * e] = n[e]; + r[4 * e + 1] = g[e]; + r[4 * e + 2] = o[e]; + r[4 * e + 3] = 255; + } + }, + a: function _storeErrorMessage(e) { + const t = UTF8ToString(e); + a.errorMessages + ? (a.errorMessages += "\n" + t) + : (a.errorMessages = t); + }, + }, + N = (function createWasm() { + var e = (function getWasmImports() { + return { a: R }; + })(); + function receiveInstance(e, t) { + N = e.exports; + c = N.p; + updateMemoryViews(); + !(function addOnInit(e) { + f.unshift(e); + })(N.q); + !(function removeRunDependency(e) { + m--; + a.monitorRunDependencies?.(m); + if (0 == m) { + if (null !== y) { + clearInterval(y); + y = null; + } + if (w) { + var t = w; + w = null; + t(); + } + } + })(); + return N; + } + !(function addRunDependency(e) { + m++; + a.monitorRunDependencies?.(m); + })(); + if (a.instantiateWasm) + try { + return a.instantiateWasm(e, receiveInstance); + } catch (e) { + E(`Module.instantiateWasm callback failed with error: ${e}`); + i(e); + } + u || + (u = + "data:application/octet-stream;base64,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A0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCAD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IABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsE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AyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQgKCVkKQpNb2RpZnkgdGhlIGNwX3JlZHVjZSBwYXJhbWV0ZXIuCgoASW1hZ2UgZGF0YSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGlsZSAlZC4KCgBBoP0AC4AgIwClAEMAZgCDAO6oFADf2CMAvhBDAP/1gwB+IFUAX1EjADUAQwBORIMAzsQUAM/MIwD+4kMA/5mDAJYAxQA/MSMApQBDAF5EgwDOyBQA3xEjAP70QwD//IMAngBVAHcAIwA1AEMA//GDAK6IFAC3ACMA/vhDAO/kgwCOiMUAHxEjAKUAQwBmAIMA7qgUAN9UIwC+EEMA7yKDAH4gVQB/IiMANQBDAE5EgwDOxBQAvxEjAP7iQwD3AIMAlgDFAD8iIwClAEMAXkSDAM7IFADXACMA/vRDAP+6gwCeAFUAbwAjADUAQwD/5oMArogUAK+iIwD++EMA5wCDAI6IxQAvIgIAxQCEAH4gAgDOxCQA9wACAP6iRABWAAIAngAUANcAAgC+EIQAZgACAK6IJADfEQIA7qhEADYAAgCOiBQAHxECAMUAhABuAAIAzogkAP+IAgD+uEQATkQCAJYAFAC3AAIA/uSEAF5EAgCmACQA5wACAN5URAAuIgIAPgAUAHcAAgDFAIQAfiACAM7EJAD/8QIA/qJEAFYAAgCeABQAvxECAL4QhABmAAIArogkAO8iAgDuqEQANgACAI6IFAB/IgIAxQCEAG4AAgDOiCQA7+QCAP64RABORAIAlgAUAK+iAgD+5IQAXkQCAKYAJADf2AIA3lREAC4iAgA+ABQAX1ECAFUAhABmAAIA3ogkAP8yAgD+EUQATkQCAK4AFAC3AAIAfjGEAF5RAgDGACQA1wACAO4gRAAeEQIAngAUAHcAAgBVAIQAXlQCAM5EJADnAAIA/vFEADYAAgCmABQAX1UCAP50hAA+EQIAviAkAH90AgDexEQA//gCAJYAFAAvIgIAVQCEAGYAAgDeiCQA9wACAP4RRABORAIArgAUAI+IAgB+MYQAXlECAMYAJADPyAIA7iBEAB4RAgCeABQAbwACAFUAhABeVAIAzkQkAN/RAgD+8UQANgACAKYAFAB/IgIA/nSEAD4RAgC+ICQAvyICAN7ERADvIgIAlgAUAD8yAwDe1P30//wUAD4RVQCPiAMAvjKFAOcAJQBeUf6qf3IDAM5E/fjvRBQAfmRFAK+iAwCmAF1V35n98TYA/vVvYgMA3tH99P/mFAB+cVUAv7EDAK6IhQDf1SUATkT+8n9mAwDGAP347+IUAF5URQCfEQMAlgBdVc/I/fEeEe7IZwADAN7U/fT/8xQAPhFVAL8RAwC+MoUA39glAF5R/qovIgMAzkT9+PcAFAB+ZEUAn5gDAKYAXVXXAP3xNgD+9W9EAwDe0f30/7kUAH5xVQC3AAMAroiFAN/cJQBORP7ydwADAMYA/fjv5BQAXlRFAH9zAwCWAF1Vv7j98R4R7sg/MgIApQCEAH5AAgDeECQA3xECAP5yRABWAAIArqgUAL+yAgCWAIQAZgACAMYAJADnAAIA7shEAC4iAgCOiBQAdwACAKUAhABuAAIAzogkAPcAAgD+kUQANgACAK6iFACvqgIA/riEAF4AAgC+ACQAz8QCAO5ERAD/9AIAPiIUAB8RAgClAIQAfkACAN4QJAD/mQIA/nJEAFYAAgCuqBQAtwACAJYAhABmAAIAxgAkANcAAgDuyEQALiICAI6IFABPRAIApQCEAG4AAgDOiCQA7+ICAP6RRAA2AAIArqIUAH9EAgD+uIQAXgACAL4AJACfAAIA7kREAP92AgA+IhQAPzEDAMYAhQD/2f3yfmT+8b+ZAwCuoiUA72b99FYA7uJ/cwMAvphFAPcA/fhmAP52n4gDAI6IFQDf1aUALiLemE9EAwC+soUA//z98m4ilgC3AAMArqolAN/R/fQ2AN7Ub2QDAK6oRQDv6v34XkTu6H9xAwA+MhUAz8SlAP/6zog/MQMAxgCFAP93/fJ+ZP7xv7MDAK6iJQDnAP30VgDu4ncAAwC+mEUA7+T9+GYA/nZ/ZgMAjogVANcApQAuIt6YPzMDAL6yhQD/df3ybiKWAJ+RAwCuqiUA35n99DYA3tRfUQMArqhFAO/s/fheRO7of3IDAD4yFQC/saUA//POiB8RAwDeVP3yHhEUAH5k/vjPzAMAvpFFAO8iJQAuIv7zj4gDAMYAhQD3ABQAXhH+/K+oAwCmADUA38j98T4x/mZvZAMAzsj98v/1FABmAP70v7oDAK4iRQDnACUAPjL+6n9zAwC+soUA31UUAFYAfnGfEQMAlgA1AM/E/fE+M+7oT0QDAN5U/fIeERQAfmT++L+ZAwC+kUUA7+IlAC4i/vN/ZgMAxgCFAO/kFABeEf78n5gDAKYANQDXAP3xPjH+Zm8iAwDOyP3y/7kUAGYA/vS3AAMAriJFAN/RJQA+Mv7qdwADAL6yhQDv7BQAVgB+cX9yAwCWADUAv7j98T4z7uhfVPzx3tH9+tcA/PgWAP3/f3T89H5x/fO/s/zy7+ru6E9E/PGuIgUAv7j8+PcA/vx3APz0XhH99X91/PLf2O7iPzP88b6y/frPiPz4//v9/39z/PRuAP3ztwD88u9m/vk/MfzxngAFAL+6/Pj//f72ZwD89CYA/fWPiPzy39ze1C8i/PHe0f36z8T8+BYA/f9/cvz0fnH987+Z/PLv7O7oRwD88a4iBQCnAPz4//f+/FcA/PReEf31lwD88t/V7uI3APzxvrL9+scA/Pj//v3/f2b89G4A/fOvqPzy5wD++T8y/PGeAAUAv7H8+O/k/vZfVPz0JgD99YcA/PLfmd7UHxETAGUAQwDeAIMAjYgjAE5EEwClAEMAroiDADUAIwDXABMAxQBDAJ4AgwBVACMALiITAJUAQwB+AIMA/hAjAHcAEwBlAEMAzoiDAI2IIwAeERMApQBDAF4AgwA1ACMA5wATAMUAQwC+AIMAVQAjAP8REwCVAEMAPgCDAO5AIwCvohMAZQBDAN4AgwCNiCMATkQTAKUAQwCuiIMANQAjAO9EEwDFAEMAngCDAFUAIwAuIhMAlQBDAH4AgwD+ECMAtwATAGUAQwDOiIMAjYgjAB4REwClAEMAXgCDADUAIwDPxBMAxQBDAL4AgwBVACMA9wATAJUAQwA+AIMA7kAjAG8AAQCEAAEAVgABABQAAQDXAAEAJAABAJYAAQBFAAEAdwABAIQAAQDGAAEAFAABAI+IAQAkAAEA9wABADUAAQAvIgEAhAABAP5AAQAUAAEAtwABACQAAQC/AAEARQABAGcAAQCEAAEApgABABQAAQBPRAEAJAABAOcAAQA1AAEAPxEBAIQAAQBWAAEAFAABAM8AAQAkAAEAlgABAEUAAQBvAAEAhAABAMYAAQAUAAEAnwABACQAAQDvAAEANQABAD8yAQCEAAEA/kABABQAAQCvAAEAJAABAP9EAQBFAAEAXwABAIQAAQCmAAEAFAABAH8AAQAkAAEA3wABADUAAQAfEQEAJAABAFYAAQCFAAEAvwABABQAAQD3AAEAxgABAHcAAQAkAAEA//gBAEUAAQB/AAEAFAABAN8AAQCmAAEAPzEBACQAAQAuIgEAhQABALcAAQAUAAEA70QBAK6iAQBnAAEAJAABAP9RAQBFAAEAlwABABQAAQDPAAEANgABAD8iAQAkAAEAVgABAIUAAQC/sgEAFAABAO9AAQDGAAEAbwABACQAAQD/cgEARQABAJ8AAQAUAAEA1wABAKYAAQBPRAEAJAABAC4iAQCFAAEAr6gBABQAAQDnAAEArqIBAF8AAQAkAAEA/0QBAEUAAQCPiAEAFAABAK+qAQA2AAEAHxECAP74JABWAAIAtgCFAP9mAgDOABQAHhECAJYANQCvqAIA9gAkAD4xAgCmAEUAv7MCAL6yFAD/9QIAZgB+UV9UAgD+8iQALiICAK4ihQDvRAIAxgAUAP/0AgB2ADUAf0QCAN5AJAA+MgIAngBFANcAAgC+iBQA//oCAF4R/vFPRAIA/vgkAFYAAgC2AIUA78gCAM4AFAAeEQIAlgA1AI+IAgD2ACQAPjECAKYARQDfRAIAvrIUAP+oAgBmAH5RbwACAP7yJAAuIgIAriKFAOcAAgDGABQA7+ICAHYANQB/cgIA3kAkAD4yAgCeAEUAv7ECAL6IFAD/cwIAXhH+8T8zAQCEAAEA7iABAMUAAQDPxAEARAABAP8yAQAVAAEAj4gBAIQAAQBmAAEAJQABAK8AAQBEAAEA7yIBAKYAAQBfAAEAhAABAE5EAQDFAAEAz8wBAEQAAQD3AAEAFQABAG8AAQCEAAEAVgABACUAAQCfAAEARAABAN8AAQD+MAEALyIBAIQAAQDuIAEAxQABAM/IAQBEAAEA/xEBABUAAQB3AAEAhAABAGYAAQAlAAEAfwABAEQAAQDnAAEApgABADcAAQCEAAEATkQBAMUAAQC3AAEARAABAL8AAQAVAAEAPwABAIQAAQBWAAEAJQABAJcAAQBEAAEA1wABAP4wAQAfEQIA7qhEAI6IAgDWAMUA//MCAP78JQA+AAIAtgBVAN/YAgD++EQAZgACAH4ghQD/mQIA5gD1ADYAAgCmABUAnwACAP7yRAB2AAIAzkTFAP92AgD+8SUATkQCAK4AVQDPyAIA/vREAF5EAgC+EIUA7+QCAN5U9QAeEQIAlgAVAC8iAgDuqEQAjogCANYAxQD/+gIA/vwlAD4AAgC2AFUAvxECAP74RABmAAIAfiCFAO8iAgDmAPUANgACAKYAFQB/IgIA/vJEAHYAAgDORMUA/9UCAP7xJQBORAIArgBVAG8AAgD+9EQAXkQCAL4QhQDfEQIA3lT1AB4RAgCWABUAX1EDAPYAFAAeEUQAjoilAN/UAwCuolUA/3YkAD4itgCvqgMA5gAUAP/1RABmAIUAz8wDAJ4AxQDvRCQANgD++H8xAwDu6BQA//FEAHYApQDPxAMAfiJVAN/RJABORP70X1EDANYAFADv4kQAXkSFAL8iAwCWAMUA38gkAC4i/vJvIgMA9gAUAB4RRACOiKUAv7EDAK6iVQD/MyQAPiK2AK+oAwDmABQA/7lEAGYAhQC/qAMAngDFAO/kJAA2AP74b2QDAO7oFAD//EQAdgClAM/IAwB+IlUA7+okAE5E/vR/dAMA1gAUAP/6RABeRIUAv7IDAJYAxQDfRCQALiL+8j8x8wD++v3xNgAEAL4ydQDfEfMA3lT98u/k1QB+cf78f3PzAP7z/fgeEQQAlgBVAL+x8wDOALUA39j99GYA/rlfVPMA/nb98SYABACmAHUAnwDzAK4A/fL/99UARgD+9X908wDmAP34FgAEAIYAVQCPiPMAxgC1AO/i/fReEe6oPxHzAP76/fE2AAQAvjJ1AN/R8wDeVP3y//vVAH5x/vx/RPMA/vP9+B4RBACWAFUAf3LzAM4AtQDvIv30ZgD+uU9E8wD+dv3xJgAEAKYAdQC/EfMArgD98v//1QBGAP71PzLzAOYA/fgWAAQAhgBVAG8A8wDGALUAv7j99F4R7qgvIgBBrJ0BC6QeAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAAAAMAAAAEAAAABQAAALchQiFnIUIhERERETMzMzN3d3d3AAAAAAAAAAABVgAAAAAAABBPAAAgTwAAAVYAAAEAAAAgTwAAEE8AAAE0AAAAAAAAME8AALBPAAABNAAAAQAAAEBPAADATwAAARgAAAAAAABQTwAAEFAAAAEYAAABAAAAYE8AACBQAADBCgAAAAAAAHBPAABwUAAAwQoAAAEAAACATwAAgFAAACEFAAAAAAAAkE8AAJBSAAAhBQAAAQAAAKBPAACgUgAAIQIAAAAAAACwUwAAEFMAACECAAABAAAAwFMAACBTAAABVgAAAAAAANBPAADATwAAAVYAAAEAAADgTwAAsE8AAAFUAAAAAAAA8E8AALBQAAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo="); + return receiveInstance(instantiateSync(u, e)[0]); + })(); + N.q, (a._malloc = N.r), (a._free = N.s), (a._jp2_decode = N.u); + w = function runCaller() { + b || run(); + b || (w = runCaller); + }; + function run() { + if (!(m > 0)) { + !(function preRun() { + if (a.preRun) { + "function" == typeof a.preRun && (a.preRun = [a.preRun]); + for (; a.preRun.length; ) (e = a.preRun.shift()), d.unshift(e); + } + var e; + callRuntimeCallbacks(d); + })(); + if (!(m > 0)) + if (a.setStatus) { + a.setStatus("Running..."); + setTimeout(function () { + setTimeout(function () { + a.setStatus(""); + }, 1); + doRun(); + }, 1); + } else doRun(); + } + function doRun() { + if (!b) { + b = !0; + a.calledRun = !0; + !(function initRuntime() { + callRuntimeCallbacks(f); + })(); + t(a); + a.onRuntimeInitialized && a.onRuntimeInitialized(); + !(function postRun() { + if (a.postRun) { + "function" == typeof a.postRun && (a.postRun = [a.postRun]); + for (; a.postRun.length; ) + (e = a.postRun.shift()), p.unshift(e); + } + var e; + callRuntimeCallbacks(p); + })(); + } + } + } + if (a.preInit) { + "function" == typeof a.preInit && (a.preInit = [a.preInit]); + for (; a.preInit.length > 0; ) a.preInit.pop()(); + } + run(); + return a; + }); +const Ii = oi; +class JpxError extends rt { + constructor(e) { + super(e, "JpxError"); + } +} +class JpxImage { + static #y = null; + static decode(e, t) { + t ||= {}; + this.#y ||= Ii({ warn }); + const i = this.#y.decode(e, t); + if ("string" == typeof i) throw new JpxError(i); + return i; + } + static cleanup() { + this.#y = null; + } + static parseImageProperties(e) { + let t = e.getByte(); + for (; t >= 0; ) { + const i = t; + t = e.getByte(); + if (65361 === ((i << 8) | t)) { + e.skip(4); + const t = e.getInt32() >>> 0, + i = e.getInt32() >>> 0, + a = e.getInt32() >>> 0, + s = e.getInt32() >>> 0; + e.skip(16); + return { + width: t - a, + height: i - s, + bitsPerComponent: 8, + componentsCount: e.getUint16(), + }; + } + } + throw new JpxError("No size marker found in JPX stream"); + } +} +class JpxStream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.stream = e; + this.dict = e.dict; + this.maybeLength = t; + this.params = i; + } + get bytes() { + return shadow(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + ensureBuffer(e) {} + readBlock(e) { + this.decodeImage(null, e); + } + decodeImage(e, t) { + if (this.eof) return this.buffer; + e ||= this.bytes; + this.buffer = JpxImage.decode(e, t); + this.bufferLength = this.buffer.length; + this.eof = !0; + return this.buffer; + } + get canAsyncDecodeImageFromBuffer() { + return this.stream.isAsync; + } +} +class LZWStream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.str = e; + this.dict = e.dict; + this.cachedData = 0; + this.bitsCached = 0; + const a = 4096, + s = { + earlyChange: i, + codeLength: 9, + nextCode: 258, + dictionaryValues: new Uint8Array(a), + dictionaryLengths: new Uint16Array(a), + dictionaryPrevCodes: new Uint16Array(a), + currentSequence: new Uint8Array(a), + currentSequenceLength: 0, + }; + for (let e = 0; e < 256; ++e) { + s.dictionaryValues[e] = e; + s.dictionaryLengths[e] = 1; + } + this.lzwState = s; + } + readBits(e) { + let t = this.bitsCached, + i = this.cachedData; + for (; t < e; ) { + const e = this.str.getByte(); + if (-1 === e) { + this.eof = !0; + return null; + } + i = (i << 8) | e; + t += 8; + } + this.bitsCached = t -= e; + this.cachedData = i; + this.lastCode = null; + return (i >>> t) & ((1 << e) - 1); + } + readBlock() { + let e, + t, + i, + a = 1024; + const s = this.lzwState; + if (!s) return; + const r = s.earlyChange; + let n = s.nextCode; + const g = s.dictionaryValues, + o = s.dictionaryLengths, + c = s.dictionaryPrevCodes; + let C = s.codeLength, + h = s.prevCode; + const l = s.currentSequence; + let Q = s.currentSequenceLength, + E = 0, + u = this.bufferLength, + d = this.ensureBuffer(this.bufferLength + a); + for (e = 0; e < 512; e++) { + const e = this.readBits(C), + s = Q > 0; + if (e < 256) { + l[0] = e; + Q = 1; + } else { + if (!(e >= 258)) { + if (256 === e) { + C = 9; + n = 258; + Q = 0; + continue; + } + this.eof = !0; + delete this.lzwState; + break; + } + if (e < n) { + Q = o[e]; + for (t = Q - 1, i = e; t >= 0; t--) { + l[t] = g[i]; + i = c[i]; + } + } else l[Q++] = l[0]; + } + if (s) { + c[n] = h; + o[n] = o[h] + 1; + g[n] = l[0]; + n++; + C = + (n + r) & (n + r - 1) + ? C + : 0 | Math.min(Math.log(n + r) / 0.6931471805599453 + 1, 12); + } + h = e; + E += Q; + if (a < E) { + do { + a += 512; + } while (a < E); + d = this.ensureBuffer(this.bufferLength + a); + } + for (t = 0; t < Q; t++) d[u++] = l[t]; + } + s.nextCode = n; + s.codeLength = C; + s.prevCode = h; + s.currentSequenceLength = Q; + this.bufferLength = u; + } +} +class PredictorStream extends DecodeStream { + constructor(e, t, i) { + super(t); + if (!(i instanceof Dict)) return e; + const a = (this.predictor = i.get("Predictor") || 1); + if (a <= 1) return e; + if (2 !== a && (a < 10 || a > 15)) + throw new FormatError(`Unsupported predictor: ${a}`); + this.readBlock = 2 === a ? this.readBlockTiff : this.readBlockPng; + this.str = e; + this.dict = e.dict; + const s = (this.colors = i.get("Colors") || 1), + r = (this.bits = i.get("BPC", "BitsPerComponent") || 8), + n = (this.columns = i.get("Columns") || 1); + this.pixBytes = (s * r + 7) >> 3; + this.rowBytes = (n * s * r + 7) >> 3; + return this; + } + readBlockTiff() { + const e = this.rowBytes, + t = this.bufferLength, + i = this.ensureBuffer(t + e), + a = this.bits, + s = this.colors, + r = this.str.getBytes(e); + this.eof = !r.length; + if (this.eof) return; + let n, + g = 0, + o = 0, + c = 0, + C = 0, + h = t; + if (1 === a && 1 === s) + for (n = 0; n < e; ++n) { + let e = r[n] ^ g; + e ^= e >> 1; + e ^= e >> 2; + e ^= e >> 4; + g = (1 & e) << 7; + i[h++] = e; + } + else if (8 === a) { + for (n = 0; n < s; ++n) i[h++] = r[n]; + for (; n < e; ++n) { + i[h] = i[h - s] + r[n]; + h++; + } + } else if (16 === a) { + const t = 2 * s; + for (n = 0; n < t; ++n) i[h++] = r[n]; + for (; n < e; n += 2) { + const e = + ((255 & r[n]) << 8) + + (255 & r[n + 1]) + + ((255 & i[h - t]) << 8) + + (255 & i[h - t + 1]); + i[h++] = (e >> 8) & 255; + i[h++] = 255 & e; + } + } else { + const e = new Uint8Array(s + 1), + h = (1 << a) - 1; + let l = 0, + Q = t; + const E = this.columns; + for (n = 0; n < E; ++n) + for (let t = 0; t < s; ++t) { + if (c < a) { + g = (g << 8) | (255 & r[l++]); + c += 8; + } + e[t] = (e[t] + (g >> (c - a))) & h; + c -= a; + o = (o << a) | e[t]; + C += a; + if (C >= 8) { + i[Q++] = (o >> (C - 8)) & 255; + C -= 8; + } + } + C > 0 && (i[Q++] = (o << (8 - C)) + (g & ((1 << (8 - C)) - 1))); + } + this.bufferLength += e; + } + readBlockPng() { + const e = this.rowBytes, + t = this.pixBytes, + i = this.str.getByte(), + a = this.str.getBytes(e); + this.eof = !a.length; + if (this.eof) return; + const s = this.bufferLength, + r = this.ensureBuffer(s + e); + let n = r.subarray(s - e, s); + 0 === n.length && (n = new Uint8Array(e)); + let g, + o, + c, + C = s; + switch (i) { + case 0: + for (g = 0; g < e; ++g) r[C++] = a[g]; + break; + case 1: + for (g = 0; g < t; ++g) r[C++] = a[g]; + for (; g < e; ++g) { + r[C] = (r[C - t] + a[g]) & 255; + C++; + } + break; + case 2: + for (g = 0; g < e; ++g) r[C++] = (n[g] + a[g]) & 255; + break; + case 3: + for (g = 0; g < t; ++g) r[C++] = (n[g] >> 1) + a[g]; + for (; g < e; ++g) { + r[C] = (((n[g] + r[C - t]) >> 1) + a[g]) & 255; + C++; + } + break; + case 4: + for (g = 0; g < t; ++g) { + o = n[g]; + c = a[g]; + r[C++] = o + c; + } + for (; g < e; ++g) { + o = n[g]; + const e = n[g - t], + i = r[C - t], + s = i + o - e; + let h = s - i; + h < 0 && (h = -h); + let l = s - o; + l < 0 && (l = -l); + let Q = s - e; + Q < 0 && (Q = -Q); + c = a[g]; + r[C++] = h <= l && h <= Q ? i + c : l <= Q ? o + c : e + c; + } + break; + default: + throw new FormatError(`Unsupported predictor: ${i}`); + } + this.bufferLength += e; + } +} +class RunLengthStream extends DecodeStream { + constructor(e, t) { + super(t); + this.str = e; + this.dict = e.dict; + } + readBlock() { + const e = this.str.getBytes(2); + if (!e || e.length < 2 || 128 === e[0]) { + this.eof = !0; + return; + } + let t, + i = this.bufferLength, + a = e[0]; + if (a < 128) { + t = this.ensureBuffer(i + a + 1); + t[i++] = e[1]; + if (a > 0) { + const e = this.str.getBytes(a); + t.set(e, i); + i += a; + } + } else { + a = 257 - a; + const s = e[1]; + t = this.ensureBuffer(i + a + 1); + for (let e = 0; e < a; e++) t[i++] = s; + } + this.bufferLength = i; + } +} +class Parser { + constructor({ + lexer: e, + xref: t, + allowStreams: i = !1, + recoveryMode: a = !1, + }) { + this.lexer = e; + this.xref = t; + this.allowStreams = i; + this.recoveryMode = a; + this.imageCache = Object.create(null); + this._imageId = 0; + this.refill(); + } + refill() { + this.buf1 = this.lexer.getObj(); + this.buf2 = this.lexer.getObj(); + } + shift() { + if (this.buf2 instanceof Cmd && "ID" === this.buf2.cmd) { + this.buf1 = this.buf2; + this.buf2 = null; + } else { + this.buf1 = this.buf2; + this.buf2 = this.lexer.getObj(); + } + } + tryShift() { + try { + this.shift(); + return !0; + } catch (e) { + if (e instanceof MissingDataException) throw e; + return !1; + } + } + getObj(e = null) { + const t = this.buf1; + this.shift(); + if (t instanceof Cmd) + switch (t.cmd) { + case "BI": + return this.makeInlineImage(e); + case "[": + const i = []; + for (; !isCmd(this.buf1, "]") && this.buf1 !== pt; ) + i.push(this.getObj(e)); + if (this.buf1 === pt) { + if (this.recoveryMode) return i; + throw new ParserEOFException("End of file inside array."); + } + this.shift(); + return i; + case "<<": + const a = new Dict(this.xref); + for (; !isCmd(this.buf1, ">>") && this.buf1 !== pt; ) { + if (!(this.buf1 instanceof Name)) { + info("Malformed dictionary: key must be a name object"); + this.shift(); + continue; + } + const t = this.buf1.name; + this.shift(); + if (this.buf1 === pt) break; + a.set(t, this.getObj(e)); + } + if (this.buf1 === pt) { + if (this.recoveryMode) return a; + throw new ParserEOFException("End of file inside dictionary."); + } + if (isCmd(this.buf2, "stream")) + return this.allowStreams ? this.makeStream(a, e) : a; + this.shift(); + return a; + default: + return t; + } + if (Number.isInteger(t)) { + if (Number.isInteger(this.buf1) && isCmd(this.buf2, "R")) { + const e = Ref.get(t, this.buf1); + this.shift(); + this.shift(); + return e; + } + return t; + } + return "string" == typeof t && e ? e.decryptString(t) : t; + } + findDefaultInlineStreamEnd(e) { + const { knownCommands: t } = this.lexer, + i = e.pos; + let a, + s, + r = 0; + for (; -1 !== (a = e.getByte()); ) + if (0 === r) r = 69 === a ? 1 : 0; + else if (1 === r) r = 73 === a ? 2 : 0; + else if (32 === a || 10 === a || 13 === a) { + s = e.pos; + const i = e.peekBytes(15), + n = i.length; + if (0 === n) break; + for (let e = 0; e < n; e++) { + a = i[e]; + if ( + (0 !== a || 0 === i[e + 1]) && + 10 !== a && + 13 !== a && + (a < 32 || a > 127) + ) { + r = 0; + break; + } + } + if (2 !== r) continue; + if (!t) { + warn( + "findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.", + ); + continue; + } + const g = new Lexer(new Stream(i.slice()), t); + g._hexStringWarn = () => {}; + let o = 0; + for (;;) { + const e = g.getObj(); + if (e === pt) { + r = 0; + break; + } + if (e instanceof Cmd) { + const i = t[e.cmd]; + if (!i) { + r = 0; + break; + } + if (i.variableArgs ? o <= i.numArgs : o === i.numArgs) break; + o = 0; + } else o++; + } + if (2 === r) break; + } else r = 0; + if (-1 === a) { + warn( + "findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker", + ); + if (s) { + warn('... trying to recover by using the last "EI" occurrence.'); + e.skip(-(e.pos - s)); + } + } + let n = 4; + e.skip(-n); + a = e.peekByte(); + e.skip(n); + isWhiteSpace(a) || n--; + return e.pos - n - i; + } + findDCTDecodeInlineStreamEnd(e) { + const t = e.pos; + let i, + a, + s = !1; + for (; -1 !== (i = e.getByte()); ) + if (255 === i) { + switch (e.getByte()) { + case 0: + break; + case 255: + e.skip(-1); + break; + case 217: + s = !0; + break; + case 192: + case 193: + case 194: + case 195: + case 197: + case 198: + case 199: + case 201: + case 202: + case 203: + case 205: + case 206: + case 207: + case 196: + case 204: + case 218: + case 219: + case 220: + case 221: + case 222: + case 223: + case 224: + case 225: + case 226: + case 227: + case 228: + case 229: + case 230: + case 231: + case 232: + case 233: + case 234: + case 235: + case 236: + case 237: + case 238: + case 239: + case 254: + a = e.getUint16(); + a > 2 ? e.skip(a - 2) : e.skip(-2); + } + if (s) break; + } + const r = e.pos - t; + if (-1 === i) { + warn( + "Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.", + ); + e.skip(-r); + return this.findDefaultInlineStreamEnd(e); + } + this.inlineStreamSkipEI(e); + return r; + } + findASCII85DecodeInlineStreamEnd(e) { + const t = e.pos; + let i; + for (; -1 !== (i = e.getByte()); ) + if (126 === i) { + const t = e.pos; + i = e.peekByte(); + for (; isWhiteSpace(i); ) { + e.skip(); + i = e.peekByte(); + } + if (62 === i) { + e.skip(); + break; + } + if (e.pos > t) { + const t = e.peekBytes(2); + if (69 === t[0] && 73 === t[1]) break; + } + } + const a = e.pos - t; + if (-1 === i) { + warn( + "Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.", + ); + e.skip(-a); + return this.findDefaultInlineStreamEnd(e); + } + this.inlineStreamSkipEI(e); + return a; + } + findASCIIHexDecodeInlineStreamEnd(e) { + const t = e.pos; + let i; + for (; -1 !== (i = e.getByte()) && 62 !== i; ); + const a = e.pos - t; + if (-1 === i) { + warn( + "Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.", + ); + e.skip(-a); + return this.findDefaultInlineStreamEnd(e); + } + this.inlineStreamSkipEI(e); + return a; + } + inlineStreamSkipEI(e) { + let t, + i = 0; + for (; -1 !== (t = e.getByte()); ) + if (0 === i) i = 69 === t ? 1 : 0; + else if (1 === i) i = 73 === t ? 2 : 0; + else if (2 === i) break; + } + makeInlineImage(e) { + const t = this.lexer, + i = t.stream, + a = Object.create(null); + let s; + for (; !isCmd(this.buf1, "ID") && this.buf1 !== pt; ) { + if (!(this.buf1 instanceof Name)) + throw new FormatError("Dictionary key must be a name object"); + const t = this.buf1.name; + this.shift(); + if (this.buf1 === pt) break; + a[t] = this.getObj(e); + } + -1 !== t.beginInlineImagePos && (s = i.pos - t.beginInlineImagePos); + const r = this.xref.fetchIfRef(a.F || a.Filter); + let n; + if (r instanceof Name) n = r.name; + else if (Array.isArray(r)) { + const e = this.xref.fetchIfRef(r[0]); + e instanceof Name && (n = e.name); + } + const g = i.pos; + let o, c; + switch (n) { + case "DCT": + case "DCTDecode": + o = this.findDCTDecodeInlineStreamEnd(i); + break; + case "A85": + case "ASCII85Decode": + o = this.findASCII85DecodeInlineStreamEnd(i); + break; + case "AHx": + case "ASCIIHexDecode": + o = this.findASCIIHexDecodeInlineStreamEnd(i); + break; + default: + o = this.findDefaultInlineStreamEnd(i); + } + if (o < 1e3 && s > 0) { + const e = i.pos; + i.pos = t.beginInlineImagePos; + c = (function getInlineImageCacheKey(e) { + const t = [], + i = e.length; + let a = 0; + for (; a < i - 1; ) t.push((e[a++] << 8) | e[a++]); + a < i && t.push(e[a]); + return i + "_" + String.fromCharCode.apply(null, t); + })(i.getBytes(s + o)); + i.pos = e; + const a = this.imageCache[c]; + if (void 0 !== a) { + this.buf2 = Cmd.get("EI"); + this.shift(); + a.reset(); + return a; + } + } + const C = new Dict(this.xref); + for (const e in a) C.set(e, a[e]); + let h = i.makeSubStream(g, o, C); + e && (h = e.createStream(h, o)); + h = this.filter(h, C, o); + h.dict = C; + if (void 0 !== c) { + h.cacheKey = "inline_img_" + ++this._imageId; + this.imageCache[c] = h; + } + this.buf2 = Cmd.get("EI"); + this.shift(); + return h; + } + #w(e) { + const { stream: t } = this.lexer; + t.pos = e; + const i = new Uint8Array([101, 110, 100]), + a = i.length, + s = [ + new Uint8Array([115, 116, 114, 101, 97, 109]), + new Uint8Array([115, 116, 101, 97, 109]), + new Uint8Array([115, 116, 114, 101, 97]), + ], + r = 9 - a; + for (; t.pos < t.end; ) { + const n = t.peekBytes(2048), + g = n.length - 9; + if (g <= 0) break; + let o = 0; + for (; o < g; ) { + let g = 0; + for (; g < a && n[o + g] === i[g]; ) g++; + if (g >= a) { + let a = !1; + for (const e of s) { + const t = e.length; + let s = 0; + for (; s < t && n[o + g + s] === e[s]; ) s++; + if (s >= r) { + a = !0; + break; + } + if (s >= t) { + if (isWhiteSpace(n[o + g + s])) { + info( + `Found "${bytesToString([...i, ...e])}" when searching for endstream command.`, + ); + a = !0; + } + break; + } + } + if (a) { + t.pos += o; + return t.pos - e; + } + } + o++; + } + t.pos += g; + } + return -1; + } + makeStream(e, t) { + const i = this.lexer; + let a = i.stream; + i.skipToNextLine(); + const s = a.pos - 1; + let r = e.get("Length"); + if (!Number.isInteger(r)) { + info(`Bad length "${r && r.toString()}" in stream.`); + r = 0; + } + a.pos = s + r; + i.nextChar(); + if (this.tryShift() && isCmd(this.buf2, "endstream")) this.shift(); + else { + r = this.#w(s); + if (r < 0) throw new FormatError("Missing endstream command."); + i.nextChar(); + this.shift(); + this.shift(); + } + this.shift(); + a = a.makeSubStream(s, r, e); + t && (a = t.createStream(a, r)); + a = this.filter(a, e, r); + a.dict = e; + return a; + } + filter(e, t, i) { + let a = t.get("F", "Filter"), + s = t.get("DP", "DecodeParms"); + if (a instanceof Name) { + Array.isArray(s) && + warn("/DecodeParms should not be an Array, when /Filter is a Name."); + return this.makeFilter(e, a.name, i, s); + } + let r = i; + if (Array.isArray(a)) { + const t = a, + i = s; + for (let n = 0, g = t.length; n < g; ++n) { + a = this.xref.fetchIfRef(t[n]); + if (!(a instanceof Name)) + throw new FormatError(`Bad filter name "${a}"`); + s = null; + Array.isArray(i) && n in i && (s = this.xref.fetchIfRef(i[n])); + e = this.makeFilter(e, a.name, r, s); + r = null; + } + } + return e; + } + makeFilter(e, t, i, a) { + if (0 === i) { + warn(`Empty "${t}" stream.`); + return new NullStream(); + } + try { + switch (t) { + case "Fl": + case "FlateDecode": + return a + ? new PredictorStream(new FlateStream(e, i), i, a) + : new FlateStream(e, i); + case "LZW": + case "LZWDecode": + let t = 1; + if (a) { + a.has("EarlyChange") && (t = a.get("EarlyChange")); + return new PredictorStream(new LZWStream(e, i, t), i, a); + } + return new LZWStream(e, i, t); + case "DCT": + case "DCTDecode": + return new JpegStream(e, i, a); + case "JPX": + case "JPXDecode": + return new JpxStream(e, i, a); + case "A85": + case "ASCII85Decode": + return new Ascii85Stream(e, i); + case "AHx": + case "ASCIIHexDecode": + return new AsciiHexStream(e, i); + case "CCF": + case "CCITTFaxDecode": + return new CCITTFaxStream(e, i, a); + case "RL": + case "RunLengthDecode": + return new RunLengthStream(e, i); + case "JBIG2Decode": + return new Jbig2Stream(e, i, a); + } + warn(`Filter "${t}" is not supported.`); + return e; + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`Invalid stream: "${e}"`); + return new NullStream(); + } + } +} +const ci = [ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +]; +function toHexDigit(e) { + return e >= 48 && e <= 57 + ? 15 & e + : (e >= 65 && e <= 70) || (e >= 97 && e <= 102) + ? 9 + (15 & e) + : -1; +} +class Lexer { + constructor(e, t = null) { + this.stream = e; + this.nextChar(); + this.strBuf = []; + this.knownCommands = t; + this._hexStringNumWarn = 0; + this.beginInlineImagePos = -1; + } + nextChar() { + return (this.currentChar = this.stream.getByte()); + } + peekChar() { + return this.stream.peekByte(); + } + getNumber() { + let e = this.currentChar, + t = !1, + i = 0, + a = 1; + if (45 === e) { + a = -1; + e = this.nextChar(); + 45 === e && (e = this.nextChar()); + } else 43 === e && (e = this.nextChar()); + if (10 === e || 13 === e) + do { + e = this.nextChar(); + } while (10 === e || 13 === e); + if (46 === e) { + i = 10; + e = this.nextChar(); + } + if (e < 48 || e > 57) { + const t = `Invalid number: ${String.fromCharCode(e)} (charCode ${e})`; + if (isWhiteSpace(e) || -1 === e) { + info(`Lexer.getNumber - "${t}".`); + return 0; + } + throw new FormatError(t); + } + let s = e - 48, + r = 0, + n = 1; + for (; (e = this.nextChar()) >= 0; ) + if (e >= 48 && e <= 57) { + const a = e - 48; + if (t) r = 10 * r + a; + else { + 0 !== i && (i *= 10); + s = 10 * s + a; + } + } else if (46 === e) { + if (0 !== i) break; + i = 1; + } else if (45 === e) + warn("Badly formatted number: minus sign in the middle"); + else { + if (69 !== e && 101 !== e) break; + e = this.peekChar(); + if (43 === e || 45 === e) { + n = 45 === e ? -1 : 1; + this.nextChar(); + } else if (e < 48 || e > 57) break; + t = !0; + } + 0 !== i && (s /= i); + t && (s *= 10 ** (n * r)); + return a * s; + } + getString() { + let e = 1, + t = !1; + const i = this.strBuf; + i.length = 0; + let a = this.nextChar(); + for (;;) { + let s = !1; + switch (0 | a) { + case -1: + warn("Unterminated string"); + t = !0; + break; + case 40: + ++e; + i.push("("); + break; + case 41: + if (0 == --e) { + this.nextChar(); + t = !0; + } else i.push(")"); + break; + case 92: + a = this.nextChar(); + switch (a) { + case -1: + warn("Unterminated string"); + t = !0; + break; + case 110: + i.push("\n"); + break; + case 114: + i.push("\r"); + break; + case 116: + i.push("\t"); + break; + case 98: + i.push("\b"); + break; + case 102: + i.push("\f"); + break; + case 92: + case 40: + case 41: + i.push(String.fromCharCode(a)); + break; + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + let e = 15 & a; + a = this.nextChar(); + s = !0; + if (a >= 48 && a <= 55) { + e = (e << 3) + (15 & a); + a = this.nextChar(); + if (a >= 48 && a <= 55) { + s = !1; + e = (e << 3) + (15 & a); + } + } + i.push(String.fromCharCode(e)); + break; + case 13: + 10 === this.peekChar() && this.nextChar(); + break; + case 10: + break; + default: + i.push(String.fromCharCode(a)); + } + break; + default: + i.push(String.fromCharCode(a)); + } + if (t) break; + s || (a = this.nextChar()); + } + return i.join(""); + } + getName() { + let e, t; + const i = this.strBuf; + i.length = 0; + for (; (e = this.nextChar()) >= 0 && !ci[e]; ) + if (35 === e) { + e = this.nextChar(); + if (ci[e]) { + warn( + "Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.", + ); + i.push("#"); + break; + } + const a = toHexDigit(e); + if (-1 !== a) { + t = e; + e = this.nextChar(); + const s = toHexDigit(e); + if (-1 === s) { + warn( + `Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`, + ); + i.push("#", String.fromCharCode(t)); + if (ci[e]) break; + i.push(String.fromCharCode(e)); + continue; + } + i.push(String.fromCharCode((a << 4) | s)); + } else i.push("#", String.fromCharCode(e)); + } else i.push(String.fromCharCode(e)); + i.length > 127 && + warn(`Name token is longer than allowed by the spec: ${i.length}`); + return Name.get(i.join("")); + } + _hexStringWarn(e) { + 5 != this._hexStringNumWarn++ + ? this._hexStringNumWarn > 5 || + warn(`getHexString - ignoring invalid character: ${e}`) + : warn("getHexString - ignoring additional invalid characters."); + } + getHexString() { + const e = this.strBuf; + e.length = 0; + let t, + i, + a = this.currentChar, + s = !0; + this._hexStringNumWarn = 0; + for (;;) { + if (a < 0) { + warn("Unterminated hex string"); + break; + } + if (62 === a) { + this.nextChar(); + break; + } + if (1 !== ci[a]) { + if (s) { + t = toHexDigit(a); + if (-1 === t) { + this._hexStringWarn(a); + a = this.nextChar(); + continue; + } + } else { + i = toHexDigit(a); + if (-1 === i) { + this._hexStringWarn(a); + a = this.nextChar(); + continue; + } + e.push(String.fromCharCode((t << 4) | i)); + } + s = !s; + a = this.nextChar(); + } else a = this.nextChar(); + } + return e.join(""); + } + getObj() { + let e = !1, + t = this.currentChar; + for (;;) { + if (t < 0) return pt; + if (e) (10 !== t && 13 !== t) || (e = !1); + else if (37 === t) e = !0; + else if (1 !== ci[t]) break; + t = this.nextChar(); + } + switch (0 | t) { + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 43: + case 45: + case 46: + return this.getNumber(); + case 40: + return this.getString(); + case 47: + return this.getName(); + case 91: + this.nextChar(); + return Cmd.get("["); + case 93: + this.nextChar(); + return Cmd.get("]"); + case 60: + t = this.nextChar(); + if (60 === t) { + this.nextChar(); + return Cmd.get("<<"); + } + return this.getHexString(); + case 62: + t = this.nextChar(); + if (62 === t) { + this.nextChar(); + return Cmd.get(">>"); + } + return Cmd.get(">"); + case 123: + this.nextChar(); + return Cmd.get("{"); + case 125: + this.nextChar(); + return Cmd.get("}"); + case 41: + this.nextChar(); + throw new FormatError(`Illegal character: ${t}`); + } + let i = String.fromCharCode(t); + if (t < 32 || t > 127) { + const e = this.peekChar(); + if (e >= 32 && e <= 127) { + this.nextChar(); + return Cmd.get(i); + } + } + const a = this.knownCommands; + let s = void 0 !== a?.[i]; + for (; (t = this.nextChar()) >= 0 && !ci[t]; ) { + const e = i + String.fromCharCode(t); + if (s && void 0 === a[e]) break; + if (128 === i.length) + throw new FormatError(`Command token too long: ${i.length}`); + i = e; + s = void 0 !== a?.[i]; + } + if ("true" === i) return !0; + if ("false" === i) return !1; + if ("null" === i) return null; + "BI" === i && (this.beginInlineImagePos = this.stream.pos); + return Cmd.get(i); + } + skipToNextLine() { + let e = this.currentChar; + for (; e >= 0; ) { + if (13 === e) { + e = this.nextChar(); + 10 === e && this.nextChar(); + break; + } + if (10 === e) { + this.nextChar(); + break; + } + e = this.nextChar(); + } + } +} +class Linearization { + static create(e) { + function getInt(e, t, i = !1) { + const a = e.get(t); + if (Number.isInteger(a) && (i ? a >= 0 : a > 0)) return a; + throw new Error( + `The "${t}" parameter in the linearization dictionary is invalid.`, + ); + } + const t = new Parser({ lexer: new Lexer(e), xref: null }), + i = t.getObj(), + a = t.getObj(), + s = t.getObj(), + r = t.getObj(); + let n, g; + if ( + !( + Number.isInteger(i) && + Number.isInteger(a) && + isCmd(s, "obj") && + r instanceof Dict && + "number" == typeof (n = r.get("Linearized")) && + n > 0 + ) + ) + return null; + if ((g = getInt(r, "L")) !== e.length) + throw new Error( + 'The "L" parameter in the linearization dictionary does not equal the stream length.', + ); + return { + length: g, + hints: (function getHints(e) { + const t = e.get("H"); + let i; + if (Array.isArray(t) && (2 === (i = t.length) || 4 === i)) { + for (let e = 0; e < i; e++) { + const i = t[e]; + if (!(Number.isInteger(i) && i > 0)) + throw new Error( + `Hint (${e}) in the linearization dictionary is invalid.`, + ); + } + return t; + } + throw new Error( + "Hint array in the linearization dictionary is invalid.", + ); + })(r), + objectNumberFirst: getInt(r, "O"), + endFirst: getInt(r, "E"), + numPages: getInt(r, "N"), + mainXRefEntriesOffset: getInt(r, "T"), + pageFirst: r.has("P") ? getInt(r, "P", !0) : 0, + }; + } +} +const Ci = [ + "Adobe-GB1-UCS2", + "Adobe-CNS1-UCS2", + "Adobe-Japan1-UCS2", + "Adobe-Korea1-UCS2", + "78-EUC-H", + "78-EUC-V", + "78-H", + "78-RKSJ-H", + "78-RKSJ-V", + "78-V", + "78ms-RKSJ-H", + "78ms-RKSJ-V", + "83pv-RKSJ-H", + "90ms-RKSJ-H", + "90ms-RKSJ-V", + "90msp-RKSJ-H", + "90msp-RKSJ-V", + "90pv-RKSJ-H", + "90pv-RKSJ-V", + "Add-H", + "Add-RKSJ-H", + "Add-RKSJ-V", + "Add-V", + "Adobe-CNS1-0", + "Adobe-CNS1-1", + "Adobe-CNS1-2", + "Adobe-CNS1-3", + "Adobe-CNS1-4", + "Adobe-CNS1-5", + "Adobe-CNS1-6", + "Adobe-GB1-0", + "Adobe-GB1-1", + "Adobe-GB1-2", + "Adobe-GB1-3", + "Adobe-GB1-4", + "Adobe-GB1-5", + "Adobe-Japan1-0", + "Adobe-Japan1-1", + "Adobe-Japan1-2", + "Adobe-Japan1-3", + "Adobe-Japan1-4", + "Adobe-Japan1-5", + "Adobe-Japan1-6", + "Adobe-Korea1-0", + "Adobe-Korea1-1", + "Adobe-Korea1-2", + "B5-H", + "B5-V", + "B5pc-H", + "B5pc-V", + "CNS-EUC-H", + "CNS-EUC-V", + "CNS1-H", + "CNS1-V", + "CNS2-H", + "CNS2-V", + "ETHK-B5-H", + "ETHK-B5-V", + "ETen-B5-H", + "ETen-B5-V", + "ETenms-B5-H", + "ETenms-B5-V", + "EUC-H", + "EUC-V", + "Ext-H", + "Ext-RKSJ-H", + "Ext-RKSJ-V", + "Ext-V", + "GB-EUC-H", + "GB-EUC-V", + "GB-H", + "GB-V", + "GBK-EUC-H", + "GBK-EUC-V", + "GBK2K-H", + "GBK2K-V", + "GBKp-EUC-H", + "GBKp-EUC-V", + "GBT-EUC-H", + "GBT-EUC-V", + "GBT-H", + "GBT-V", + "GBTpc-EUC-H", + "GBTpc-EUC-V", + "GBpc-EUC-H", + "GBpc-EUC-V", + "H", + "HKdla-B5-H", + "HKdla-B5-V", + "HKdlb-B5-H", + "HKdlb-B5-V", + "HKgccs-B5-H", + "HKgccs-B5-V", + "HKm314-B5-H", + "HKm314-B5-V", + "HKm471-B5-H", + "HKm471-B5-V", + "HKscs-B5-H", + "HKscs-B5-V", + "Hankaku", + "Hiragana", + "KSC-EUC-H", + "KSC-EUC-V", + "KSC-H", + "KSC-Johab-H", + "KSC-Johab-V", + "KSC-V", + "KSCms-UHC-H", + "KSCms-UHC-HW-H", + "KSCms-UHC-HW-V", + "KSCms-UHC-V", + "KSCpc-EUC-H", + "KSCpc-EUC-V", + "Katakana", + "NWP-H", + "NWP-V", + "RKSJ-H", + "RKSJ-V", + "Roman", + "UniCNS-UCS2-H", + "UniCNS-UCS2-V", + "UniCNS-UTF16-H", + "UniCNS-UTF16-V", + "UniCNS-UTF32-H", + "UniCNS-UTF32-V", + "UniCNS-UTF8-H", + "UniCNS-UTF8-V", + "UniGB-UCS2-H", + "UniGB-UCS2-V", + "UniGB-UTF16-H", + "UniGB-UTF16-V", + "UniGB-UTF32-H", + "UniGB-UTF32-V", + "UniGB-UTF8-H", + "UniGB-UTF8-V", + "UniJIS-UCS2-H", + "UniJIS-UCS2-HW-H", + "UniJIS-UCS2-HW-V", + "UniJIS-UCS2-V", + "UniJIS-UTF16-H", + "UniJIS-UTF16-V", + "UniJIS-UTF32-H", + "UniJIS-UTF32-V", + "UniJIS-UTF8-H", + "UniJIS-UTF8-V", + "UniJIS2004-UTF16-H", + "UniJIS2004-UTF16-V", + "UniJIS2004-UTF32-H", + "UniJIS2004-UTF32-V", + "UniJIS2004-UTF8-H", + "UniJIS2004-UTF8-V", + "UniJISPro-UCS2-HW-V", + "UniJISPro-UCS2-V", + "UniJISPro-UTF8-V", + "UniJISX0213-UTF32-H", + "UniJISX0213-UTF32-V", + "UniJISX02132004-UTF32-H", + "UniJISX02132004-UTF32-V", + "UniKS-UCS2-H", + "UniKS-UCS2-V", + "UniKS-UTF16-H", + "UniKS-UTF16-V", + "UniKS-UTF32-H", + "UniKS-UTF32-V", + "UniKS-UTF8-H", + "UniKS-UTF8-V", + "V", + "WP-Symbol", + ], + hi = 2 ** 24 - 1; +class CMap { + constructor(e = !1) { + this.codespaceRanges = [[], [], [], []]; + this.numCodespaceRanges = 0; + this._map = []; + this.name = ""; + this.vertical = !1; + this.useCMap = null; + this.builtInCMap = e; + } + addCodespaceRange(e, t, i) { + this.codespaceRanges[e - 1].push(t, i); + this.numCodespaceRanges++; + } + mapCidRange(e, t, i) { + if (t - e > hi) + throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); + for (; e <= t; ) this._map[e++] = i++; + } + mapBfRange(e, t, i) { + if (t - e > hi) + throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); + const a = i.length - 1; + for (; e <= t; ) { + this._map[e++] = i; + const t = i.charCodeAt(a) + 1; + t > 255 + ? (i = + i.substring(0, a - 1) + + String.fromCharCode(i.charCodeAt(a - 1) + 1) + + "\0") + : (i = i.substring(0, a) + String.fromCharCode(t)); + } + } + mapBfRangeToArray(e, t, i) { + if (t - e > hi) + throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); + const a = i.length; + let s = 0; + for (; e <= t && s < a; ) { + this._map[e] = i[s++]; + ++e; + } + } + mapOne(e, t) { + this._map[e] = t; + } + lookup(e) { + return this._map[e]; + } + contains(e) { + return void 0 !== this._map[e]; + } + forEach(e) { + const t = this._map, + i = t.length; + if (i <= 65536) for (let a = 0; a < i; a++) void 0 !== t[a] && e(a, t[a]); + else for (const i in t) e(i, t[i]); + } + charCodeOf(e) { + const t = this._map; + if (t.length <= 65536) return t.indexOf(e); + for (const i in t) if (t[i] === e) return 0 | i; + return -1; + } + getMap() { + return this._map; + } + readCharCode(e, t, i) { + let a = 0; + const s = this.codespaceRanges; + for (let r = 0, n = s.length; r < n; r++) { + a = ((a << 8) | e.charCodeAt(t + r)) >>> 0; + const n = s[r]; + for (let e = 0, t = n.length; e < t; ) { + const t = n[e++], + s = n[e++]; + if (a >= t && a <= s) { + i.charcode = a; + i.length = r + 1; + return; + } + } + } + i.charcode = 0; + i.length = 1; + } + getCharCodeLength(e) { + const t = this.codespaceRanges; + for (let i = 0, a = t.length; i < a; i++) { + const a = t[i]; + for (let t = 0, s = a.length; t < s; ) { + const s = a[t++], + r = a[t++]; + if (e >= s && e <= r) return i + 1; + } + } + return 1; + } + get length() { + return this._map.length; + } + get isIdentityCMap() { + if ("Identity-H" !== this.name && "Identity-V" !== this.name) return !1; + if (65536 !== this._map.length) return !1; + for (let e = 0; e < 65536; e++) if (this._map[e] !== e) return !1; + return !0; + } +} +class IdentityCMap extends CMap { + constructor(e, t) { + super(); + this.vertical = e; + this.addCodespaceRange(t, 0, 65535); + } + mapCidRange(e, t, i) { + unreachable("should not call mapCidRange"); + } + mapBfRange(e, t, i) { + unreachable("should not call mapBfRange"); + } + mapBfRangeToArray(e, t, i) { + unreachable("should not call mapBfRangeToArray"); + } + mapOne(e, t) { + unreachable("should not call mapCidOne"); + } + lookup(e) { + return Number.isInteger(e) && e <= 65535 ? e : void 0; + } + contains(e) { + return Number.isInteger(e) && e <= 65535; + } + forEach(e) { + for (let t = 0; t <= 65535; t++) e(t, t); + } + charCodeOf(e) { + return Number.isInteger(e) && e <= 65535 ? e : -1; + } + getMap() { + const e = new Array(65536); + for (let t = 0; t <= 65535; t++) e[t] = t; + return e; + } + get length() { + return 65536; + } + get isIdentityCMap() { + unreachable("should not access .isIdentityCMap"); + } +} +function strToInt(e) { + let t = 0; + for (let i = 0; i < e.length; i++) t = (t << 8) | e.charCodeAt(i); + return t >>> 0; +} +function expectString(e) { + if ("string" != typeof e) + throw new FormatError("Malformed CMap: expected string."); +} +function expectInt(e) { + if (!Number.isInteger(e)) + throw new FormatError("Malformed CMap: expected int."); +} +function parseBfChar(e, t) { + for (;;) { + let i = t.getObj(); + if (i === pt) break; + if (isCmd(i, "endbfchar")) return; + expectString(i); + const a = strToInt(i); + i = t.getObj(); + expectString(i); + const s = i; + e.mapOne(a, s); + } +} +function parseBfRange(e, t) { + for (;;) { + let i = t.getObj(); + if (i === pt) break; + if (isCmd(i, "endbfrange")) return; + expectString(i); + const a = strToInt(i); + i = t.getObj(); + expectString(i); + const s = strToInt(i); + i = t.getObj(); + if (Number.isInteger(i) || "string" == typeof i) { + const t = Number.isInteger(i) ? String.fromCharCode(i) : i; + e.mapBfRange(a, s, t); + } else { + if (!isCmd(i, "[")) break; + { + i = t.getObj(); + const r = []; + for (; !isCmd(i, "]") && i !== pt; ) { + r.push(i); + i = t.getObj(); + } + e.mapBfRangeToArray(a, s, r); + } + } + } + throw new FormatError("Invalid bf range."); +} +function parseCidChar(e, t) { + for (;;) { + let i = t.getObj(); + if (i === pt) break; + if (isCmd(i, "endcidchar")) return; + expectString(i); + const a = strToInt(i); + i = t.getObj(); + expectInt(i); + const s = i; + e.mapOne(a, s); + } +} +function parseCidRange(e, t) { + for (;;) { + let i = t.getObj(); + if (i === pt) break; + if (isCmd(i, "endcidrange")) return; + expectString(i); + const a = strToInt(i); + i = t.getObj(); + expectString(i); + const s = strToInt(i); + i = t.getObj(); + expectInt(i); + const r = i; + e.mapCidRange(a, s, r); + } +} +function parseCodespaceRange(e, t) { + for (;;) { + let i = t.getObj(); + if (i === pt) break; + if (isCmd(i, "endcodespacerange")) return; + if ("string" != typeof i) break; + const a = strToInt(i); + i = t.getObj(); + if ("string" != typeof i) break; + const s = strToInt(i); + e.addCodespaceRange(i.length, a, s); + } + throw new FormatError("Invalid codespace range."); +} +function parseWMode(e, t) { + const i = t.getObj(); + Number.isInteger(i) && (e.vertical = !!i); +} +function parseCMapName(e, t) { + const i = t.getObj(); + i instanceof Name && (e.name = i.name); +} +async function parseCMap(e, t, i, a) { + let s, r; + A: for (;;) + try { + const i = t.getObj(); + if (i === pt) break; + if (i instanceof Name) { + "WMode" === i.name + ? parseWMode(e, t) + : "CMapName" === i.name && parseCMapName(e, t); + s = i; + } else if (i instanceof Cmd) + switch (i.cmd) { + case "endcmap": + break A; + case "usecmap": + s instanceof Name && (r = s.name); + break; + case "begincodespacerange": + parseCodespaceRange(e, t); + break; + case "beginbfchar": + parseBfChar(e, t); + break; + case "begincidchar": + parseCidChar(e, t); + break; + case "beginbfrange": + parseBfRange(e, t); + break; + case "begincidrange": + parseCidRange(e, t); + } + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Invalid cMap data: " + e); + continue; + } + !a && r && (a = r); + return a ? extendCMap(e, i, a) : e; +} +async function extendCMap(e, t, i) { + e.useCMap = await createBuiltInCMap(i, t); + if (0 === e.numCodespaceRanges) { + const t = e.useCMap.codespaceRanges; + for (let i = 0; i < t.length; i++) e.codespaceRanges[i] = t[i].slice(); + e.numCodespaceRanges = e.useCMap.numCodespaceRanges; + } + e.useCMap.forEach(function (t, i) { + e.contains(t) || e.mapOne(t, e.useCMap.lookup(t)); + }); + return e; +} +async function createBuiltInCMap(e, t) { + if ("Identity-H" === e) return new IdentityCMap(!1, 2); + if ("Identity-V" === e) return new IdentityCMap(!0, 2); + if (!Ci.includes(e)) throw new Error("Unknown CMap name: " + e); + if (!t) throw new Error("Built-in CMap parameters are not provided."); + const { cMapData: i, compressionType: a } = await t(e), + s = new CMap(!0); + if (a === mA.BINARY) + return new BinaryCMapReader().process(i, s, (e) => extendCMap(s, t, e)); + if (a === mA.NONE) { + const e = new Lexer(new Stream(i)); + return parseCMap(s, e, t, null); + } + throw new Error(`Invalid CMap "compressionType" value: ${a}`); +} +class CMapFactory { + static async create({ encoding: e, fetchBuiltInCMap: t, useCMap: i }) { + if (e instanceof Name) return createBuiltInCMap(e.name, t); + if (e instanceof BaseStream) { + const a = await parseCMap(new CMap(), new Lexer(e), t, i); + return a.isIdentityCMap ? createBuiltInCMap(a.name, t) : a; + } + throw new Error("Encoding required."); + } +} +const Bi = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + ], + li = [ + ".notdef", + "space", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + ], + Qi = [ + ".notdef", + "space", + "dollaroldstyle", + "dollarsuperior", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "hyphensuperior", + "colonmonetary", + "onefitted", + "rupiah", + "centoldstyle", + "figuredash", + "hypheninferior", + "onequarter", + "onehalf", + "threequarters", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + ], + Ei = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclamsmall", + "Hungarumlautsmall", + "", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "", + "", + "", + "isuperior", + "", + "", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "", + "", + "rsuperior", + "ssuperior", + "tsuperior", + "", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "", + "", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "", + "Dotaccentsmall", + "", + "", + "Macronsmall", + "", + "", + "figuredash", + "hypheninferior", + "", + "", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "", + "", + "", + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "", + "", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + ], + ui = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclamsmall", + "Hungarumlautsmall", + "centoldstyle", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "", + "threequartersemdash", + "", + "questionsmall", + "", + "", + "", + "", + "Ethsmall", + "", + "", + "onequarter", + "onehalf", + "threequarters", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "", + "", + "", + "", + "", + "", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "", + "parenrightinferior", + "Circumflexsmall", + "hypheninferior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "", + "", + "asuperior", + "centsuperior", + "", + "", + "", + "", + "Aacutesmall", + "Agravesmall", + "Acircumflexsmall", + "Adieresissmall", + "Atildesmall", + "Aringsmall", + "Ccedillasmall", + "Eacutesmall", + "Egravesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Iacutesmall", + "Igravesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ntildesmall", + "Oacutesmall", + "Ogravesmall", + "Ocircumflexsmall", + "Odieresissmall", + "Otildesmall", + "Uacutesmall", + "Ugravesmall", + "Ucircumflexsmall", + "Udieresissmall", + "", + "eightsuperior", + "fourinferior", + "threeinferior", + "sixinferior", + "eightinferior", + "seveninferior", + "Scaronsmall", + "", + "centinferior", + "twoinferior", + "", + "Dieresissmall", + "", + "Caronsmall", + "osuperior", + "fiveinferior", + "", + "commainferior", + "periodinferior", + "Yacutesmall", + "", + "dollarinferior", + "", + "", + "Thornsmall", + "", + "nineinferior", + "zeroinferior", + "Zcaronsmall", + "AEsmall", + "Oslashsmall", + "questiondownsmall", + "oneinferior", + "Lslashsmall", + "", + "", + "", + "", + "", + "", + "Cedillasmall", + "", + "", + "", + "", + "", + "OEsmall", + "figuredash", + "hyphensuperior", + "", + "", + "", + "", + "exclamdownsmall", + "", + "Ydieresissmall", + "", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "ninesuperior", + "zerosuperior", + "", + "esuperior", + "rsuperior", + "tsuperior", + "", + "", + "isuperior", + "ssuperior", + "dsuperior", + "", + "", + "", + "", + "", + "lsuperior", + "Ogoneksmall", + "Brevesmall", + "Macronsmall", + "bsuperior", + "nsuperior", + "msuperior", + "commasuperior", + "periodsuperior", + "Dotaccentsmall", + "Ringsmall", + "", + "", + "", + "", + ], + di = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "", + "Adieresis", + "Aring", + "Ccedilla", + "Eacute", + "Ntilde", + "Odieresis", + "Udieresis", + "aacute", + "agrave", + "acircumflex", + "adieresis", + "atilde", + "aring", + "ccedilla", + "eacute", + "egrave", + "ecircumflex", + "edieresis", + "iacute", + "igrave", + "icircumflex", + "idieresis", + "ntilde", + "oacute", + "ograve", + "ocircumflex", + "odieresis", + "otilde", + "uacute", + "ugrave", + "ucircumflex", + "udieresis", + "dagger", + "degree", + "cent", + "sterling", + "section", + "bullet", + "paragraph", + "germandbls", + "registered", + "copyright", + "trademark", + "acute", + "dieresis", + "notequal", + "AE", + "Oslash", + "infinity", + "plusminus", + "lessequal", + "greaterequal", + "yen", + "mu", + "partialdiff", + "summation", + "product", + "pi", + "integral", + "ordfeminine", + "ordmasculine", + "Omega", + "ae", + "oslash", + "questiondown", + "exclamdown", + "logicalnot", + "radical", + "florin", + "approxequal", + "Delta", + "guillemotleft", + "guillemotright", + "ellipsis", + "space", + "Agrave", + "Atilde", + "Otilde", + "OE", + "oe", + "endash", + "emdash", + "quotedblleft", + "quotedblright", + "quoteleft", + "quoteright", + "divide", + "lozenge", + "ydieresis", + "Ydieresis", + "fraction", + "currency", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "daggerdbl", + "periodcentered", + "quotesinglbase", + "quotedblbase", + "perthousand", + "Acircumflex", + "Ecircumflex", + "Aacute", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Oacute", + "Ocircumflex", + "apple", + "Ograve", + "Uacute", + "Ucircumflex", + "Ugrave", + "dotlessi", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + ], + fi = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "", + "questiondown", + "", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "", + "ring", + "cedilla", + "", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "AE", + "", + "ordfeminine", + "", + "", + "", + "", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "", + "", + "", + "", + "", + "ae", + "", + "", + "", + "dotlessi", + "", + "", + "lslash", + "oslash", + "oe", + "germandbls", + "", + "", + "", + "", + ], + pi = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "bullet", + "Euro", + "bullet", + "quotesinglbase", + "florin", + "quotedblbase", + "ellipsis", + "dagger", + "daggerdbl", + "circumflex", + "perthousand", + "Scaron", + "guilsinglleft", + "OE", + "bullet", + "Zcaron", + "bullet", + "bullet", + "quoteleft", + "quoteright", + "quotedblleft", + "quotedblright", + "bullet", + "endash", + "emdash", + "tilde", + "trademark", + "scaron", + "guilsinglright", + "oe", + "bullet", + "zcaron", + "Ydieresis", + "space", + "exclamdown", + "cent", + "sterling", + "currency", + "yen", + "brokenbar", + "section", + "dieresis", + "copyright", + "ordfeminine", + "guillemotleft", + "logicalnot", + "hyphen", + "registered", + "macron", + "degree", + "plusminus", + "twosuperior", + "threesuperior", + "acute", + "mu", + "paragraph", + "periodcentered", + "cedilla", + "onesuperior", + "ordmasculine", + "guillemotright", + "onequarter", + "onehalf", + "threequarters", + "questiondown", + "Agrave", + "Aacute", + "Acircumflex", + "Atilde", + "Adieresis", + "Aring", + "AE", + "Ccedilla", + "Egrave", + "Eacute", + "Ecircumflex", + "Edieresis", + "Igrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Eth", + "Ntilde", + "Ograve", + "Oacute", + "Ocircumflex", + "Otilde", + "Odieresis", + "multiply", + "Oslash", + "Ugrave", + "Uacute", + "Ucircumflex", + "Udieresis", + "Yacute", + "Thorn", + "germandbls", + "agrave", + "aacute", + "acircumflex", + "atilde", + "adieresis", + "aring", + "ae", + "ccedilla", + "egrave", + "eacute", + "ecircumflex", + "edieresis", + "igrave", + "iacute", + "icircumflex", + "idieresis", + "eth", + "ntilde", + "ograve", + "oacute", + "ocircumflex", + "otilde", + "odieresis", + "divide", + "oslash", + "ugrave", + "uacute", + "ucircumflex", + "udieresis", + "yacute", + "thorn", + "ydieresis", + ], + mi = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "universal", + "numbersign", + "existential", + "percent", + "ampersand", + "suchthat", + "parenleft", + "parenright", + "asteriskmath", + "plus", + "comma", + "minus", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "congruent", + "Alpha", + "Beta", + "Chi", + "Delta", + "Epsilon", + "Phi", + "Gamma", + "Eta", + "Iota", + "theta1", + "Kappa", + "Lambda", + "Mu", + "Nu", + "Omicron", + "Pi", + "Theta", + "Rho", + "Sigma", + "Tau", + "Upsilon", + "sigma1", + "Omega", + "Xi", + "Psi", + "Zeta", + "bracketleft", + "therefore", + "bracketright", + "perpendicular", + "underscore", + "radicalex", + "alpha", + "beta", + "chi", + "delta", + "epsilon", + "phi", + "gamma", + "eta", + "iota", + "phi1", + "kappa", + "lambda", + "mu", + "nu", + "omicron", + "pi", + "theta", + "rho", + "sigma", + "tau", + "upsilon", + "omega1", + "omega", + "xi", + "psi", + "zeta", + "braceleft", + "bar", + "braceright", + "similar", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Euro", + "Upsilon1", + "minute", + "lessequal", + "fraction", + "infinity", + "florin", + "club", + "diamond", + "heart", + "spade", + "arrowboth", + "arrowleft", + "arrowup", + "arrowright", + "arrowdown", + "degree", + "plusminus", + "second", + "greaterequal", + "multiply", + "proportional", + "partialdiff", + "bullet", + "divide", + "notequal", + "equivalence", + "approxequal", + "ellipsis", + "arrowvertex", + "arrowhorizex", + "carriagereturn", + "aleph", + "Ifraktur", + "Rfraktur", + "weierstrass", + "circlemultiply", + "circleplus", + "emptyset", + "intersection", + "union", + "propersuperset", + "reflexsuperset", + "notsubset", + "propersubset", + "reflexsubset", + "element", + "notelement", + "angle", + "gradient", + "registerserif", + "copyrightserif", + "trademarkserif", + "product", + "radical", + "dotmath", + "logicalnot", + "logicaland", + "logicalor", + "arrowdblboth", + "arrowdblleft", + "arrowdblup", + "arrowdblright", + "arrowdbldown", + "lozenge", + "angleleft", + "registersans", + "copyrightsans", + "trademarksans", + "summation", + "parenlefttp", + "parenleftex", + "parenleftbt", + "bracketlefttp", + "bracketleftex", + "bracketleftbt", + "bracelefttp", + "braceleftmid", + "braceleftbt", + "braceex", + "", + "angleright", + "integral", + "integraltp", + "integralex", + "integralbt", + "parenrighttp", + "parenrightex", + "parenrightbt", + "bracketrighttp", + "bracketrightex", + "bracketrightbt", + "bracerighttp", + "bracerightmid", + "bracerightbt", + "", + ], + yi = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "a1", + "a2", + "a202", + "a3", + "a4", + "a5", + "a119", + "a118", + "a117", + "a11", + "a12", + "a13", + "a14", + "a15", + "a16", + "a105", + "a17", + "a18", + "a19", + "a20", + "a21", + "a22", + "a23", + "a24", + "a25", + "a26", + "a27", + "a28", + "a6", + "a7", + "a8", + "a9", + "a10", + "a29", + "a30", + "a31", + "a32", + "a33", + "a34", + "a35", + "a36", + "a37", + "a38", + "a39", + "a40", + "a41", + "a42", + "a43", + "a44", + "a45", + "a46", + "a47", + "a48", + "a49", + "a50", + "a51", + "a52", + "a53", + "a54", + "a55", + "a56", + "a57", + "a58", + "a59", + "a60", + "a61", + "a62", + "a63", + "a64", + "a65", + "a66", + "a67", + "a68", + "a69", + "a70", + "a71", + "a72", + "a73", + "a74", + "a203", + "a75", + "a204", + "a76", + "a77", + "a78", + "a79", + "a81", + "a82", + "a83", + "a84", + "a97", + "a98", + "a99", + "a100", + "", + "a89", + "a90", + "a93", + "a94", + "a91", + "a92", + "a205", + "a85", + "a206", + "a86", + "a87", + "a88", + "a95", + "a96", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "a101", + "a102", + "a103", + "a104", + "a106", + "a107", + "a108", + "a112", + "a111", + "a110", + "a109", + "a120", + "a121", + "a122", + "a123", + "a124", + "a125", + "a126", + "a127", + "a128", + "a129", + "a130", + "a131", + "a132", + "a133", + "a134", + "a135", + "a136", + "a137", + "a138", + "a139", + "a140", + "a141", + "a142", + "a143", + "a144", + "a145", + "a146", + "a147", + "a148", + "a149", + "a150", + "a151", + "a152", + "a153", + "a154", + "a155", + "a156", + "a157", + "a158", + "a159", + "a160", + "a161", + "a163", + "a164", + "a196", + "a165", + "a192", + "a166", + "a167", + "a168", + "a169", + "a170", + "a171", + "a172", + "a173", + "a162", + "a174", + "a175", + "a176", + "a177", + "a178", + "a179", + "a193", + "a180", + "a199", + "a181", + "a200", + "a182", + "", + "a201", + "a183", + "a184", + "a197", + "a185", + "a194", + "a198", + "a186", + "a195", + "a187", + "a188", + "a189", + "a190", + "a191", + "", + ]; +function getEncoding(e) { + switch (e) { + case "WinAnsiEncoding": + return pi; + case "StandardEncoding": + return fi; + case "MacRomanEncoding": + return di; + case "SymbolSetEncoding": + return mi; + case "ZapfDingbatsEncoding": + return yi; + case "ExpertEncoding": + return Ei; + case "MacExpertEncoding": + return ui; + default: + return null; + } +} +const wi = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold", + ], + Di = 391, + bi = [ + null, + { id: "hstem", min: 2, stackClearing: !0, stem: !0 }, + null, + { id: "vstem", min: 2, stackClearing: !0, stem: !0 }, + { id: "vmoveto", min: 1, stackClearing: !0 }, + { id: "rlineto", min: 2, resetStack: !0 }, + { id: "hlineto", min: 1, resetStack: !0 }, + { id: "vlineto", min: 1, resetStack: !0 }, + { id: "rrcurveto", min: 6, resetStack: !0 }, + null, + { id: "callsubr", min: 1, undefStack: !0 }, + { id: "return", min: 0, undefStack: !0 }, + null, + null, + { id: "endchar", min: 0, stackClearing: !0 }, + null, + null, + null, + { id: "hstemhm", min: 2, stackClearing: !0, stem: !0 }, + { id: "hintmask", min: 0, stackClearing: !0 }, + { id: "cntrmask", min: 0, stackClearing: !0 }, + { id: "rmoveto", min: 2, stackClearing: !0 }, + { id: "hmoveto", min: 1, stackClearing: !0 }, + { id: "vstemhm", min: 2, stackClearing: !0, stem: !0 }, + { id: "rcurveline", min: 8, resetStack: !0 }, + { id: "rlinecurve", min: 8, resetStack: !0 }, + { id: "vvcurveto", min: 4, resetStack: !0 }, + { id: "hhcurveto", min: 4, resetStack: !0 }, + null, + { id: "callgsubr", min: 1, undefStack: !0 }, + { id: "vhcurveto", min: 4, resetStack: !0 }, + { id: "hvcurveto", min: 4, resetStack: !0 }, + ], + Fi = [ + null, + null, + null, + { id: "and", min: 2, stackDelta: -1 }, + { id: "or", min: 2, stackDelta: -1 }, + { id: "not", min: 1, stackDelta: 0 }, + null, + null, + null, + { id: "abs", min: 1, stackDelta: 0 }, + { + id: "add", + min: 2, + stackDelta: -1, + stackFn(e, t) { + e[t - 2] = e[t - 2] + e[t - 1]; + }, + }, + { + id: "sub", + min: 2, + stackDelta: -1, + stackFn(e, t) { + e[t - 2] = e[t - 2] - e[t - 1]; + }, + }, + { + id: "div", + min: 2, + stackDelta: -1, + stackFn(e, t) { + e[t - 2] = e[t - 2] / e[t - 1]; + }, + }, + null, + { + id: "neg", + min: 1, + stackDelta: 0, + stackFn(e, t) { + e[t - 1] = -e[t - 1]; + }, + }, + { id: "eq", min: 2, stackDelta: -1 }, + null, + null, + { id: "drop", min: 1, stackDelta: -1 }, + null, + { id: "put", min: 2, stackDelta: -2 }, + { id: "get", min: 1, stackDelta: 0 }, + { id: "ifelse", min: 4, stackDelta: -3 }, + { id: "random", min: 0, stackDelta: 1 }, + { + id: "mul", + min: 2, + stackDelta: -1, + stackFn(e, t) { + e[t - 2] = e[t - 2] * e[t - 1]; + }, + }, + null, + { id: "sqrt", min: 1, stackDelta: 0 }, + { id: "dup", min: 1, stackDelta: 1 }, + { id: "exch", min: 2, stackDelta: 0 }, + { id: "index", min: 2, stackDelta: 0 }, + { id: "roll", min: 3, stackDelta: -2 }, + null, + null, + null, + { id: "hflex", min: 7, resetStack: !0 }, + { id: "flex", min: 13, resetStack: !0 }, + { id: "hflex1", min: 9, resetStack: !0 }, + { id: "flex1", min: 11, resetStack: !0 }, + ]; +class CFFParser { + constructor(e, t, i) { + this.bytes = e.getBytes(); + this.properties = t; + this.seacAnalysisEnabled = !!i; + } + parse() { + const e = this.properties, + t = new CFF(); + this.cff = t; + const i = this.parseHeader(), + a = this.parseIndex(i.endPos), + s = this.parseIndex(a.endPos), + r = this.parseIndex(s.endPos), + n = this.parseIndex(r.endPos), + g = this.parseDict(s.obj.get(0)), + o = this.createDict(CFFTopDict, g, t.strings); + t.header = i.obj; + t.names = this.parseNameIndex(a.obj); + t.strings = this.parseStringIndex(r.obj); + t.topDict = o; + t.globalSubrIndex = n.obj; + this.parsePrivateDict(t.topDict); + t.isCIDFont = o.hasName("ROS"); + const c = o.getByName("CharStrings"), + C = this.parseIndex(c).obj, + h = o.getByName("FontMatrix"); + h && (e.fontMatrix = h); + const l = o.getByName("FontBBox"); + if (l) { + e.ascent = Math.max(l[3], l[1]); + e.descent = Math.min(l[1], l[3]); + e.ascentScaled = !0; + } + let Q, E; + if (t.isCIDFont) { + const e = this.parseIndex(o.getByName("FDArray")).obj; + for (let i = 0, a = e.count; i < a; ++i) { + const a = e.get(i), + s = this.createDict(CFFTopDict, this.parseDict(a), t.strings); + this.parsePrivateDict(s); + t.fdArray.push(s); + } + E = null; + Q = this.parseCharsets(o.getByName("charset"), C.count, t.strings, !0); + t.fdSelect = this.parseFDSelect(o.getByName("FDSelect"), C.count); + } else { + Q = this.parseCharsets(o.getByName("charset"), C.count, t.strings, !1); + E = this.parseEncoding(o.getByName("Encoding"), e, t.strings, Q.charset); + } + t.charset = Q; + t.encoding = E; + const u = this.parseCharStrings({ + charStrings: C, + localSubrIndex: o.privateDict.subrsIndex, + globalSubrIndex: n.obj, + fdSelect: t.fdSelect, + fdArray: t.fdArray, + privateDict: o.privateDict, + }); + t.charStrings = u.charStrings; + t.seacs = u.seacs; + t.widths = u.widths; + return t; + } + parseHeader() { + let e = this.bytes; + const t = e.length; + let i = 0; + for (; i < t && 1 !== e[i]; ) ++i; + if (i >= t) throw new FormatError("Invalid CFF header"); + if (0 !== i) { + info("cff data is shifted"); + e = e.subarray(i); + this.bytes = e; + } + const a = e[0], + s = e[1], + r = e[2], + n = e[3]; + return { obj: new CFFHeader(a, s, r, n), endPos: r }; + } + parseDict(e) { + let t = 0; + function parseOperand() { + let i = e[t++]; + if (30 === i) + return (function parseFloatOperand() { + let i = ""; + const a = 15, + s = [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ".", + "E", + "E-", + null, + "-", + ], + r = e.length; + for (; t < r; ) { + const r = e[t++], + n = r >> 4, + g = 15 & r; + if (n === a) break; + i += s[n]; + if (g === a) break; + i += s[g]; + } + return parseFloat(i); + })(); + if (28 === i) { + i = e[t++]; + i = ((i << 24) | (e[t++] << 16)) >> 16; + return i; + } + if (29 === i) { + i = e[t++]; + i = (i << 8) | e[t++]; + i = (i << 8) | e[t++]; + i = (i << 8) | e[t++]; + return i; + } + if (i >= 32 && i <= 246) return i - 139; + if (i >= 247 && i <= 250) return 256 * (i - 247) + e[t++] + 108; + if (i >= 251 && i <= 254) return -256 * (i - 251) - e[t++] - 108; + warn('CFFParser_parseDict: "' + i + '" is a reserved command.'); + return NaN; + } + let i = []; + const a = []; + t = 0; + const s = e.length; + for (; t < s; ) { + let s = e[t]; + if (s <= 21) { + 12 === s && (s = (s << 8) | e[++t]); + a.push([s, i]); + i = []; + ++t; + } else i.push(parseOperand()); + } + return a; + } + parseIndex(e) { + const t = new CFFIndex(), + i = this.bytes, + a = (i[e++] << 8) | i[e++], + s = []; + let r, + n, + g = e; + if (0 !== a) { + const t = i[e++], + o = e + (a + 1) * t - 1; + for (r = 0, n = a + 1; r < n; ++r) { + let a = 0; + for (let s = 0; s < t; ++s) { + a <<= 8; + a += i[e++]; + } + s.push(o + a); + } + g = s[a]; + } + for (r = 0, n = s.length - 1; r < n; ++r) { + const e = s[r], + a = s[r + 1]; + t.add(i.subarray(e, a)); + } + return { obj: t, endPos: g }; + } + parseNameIndex(e) { + const t = []; + for (let i = 0, a = e.count; i < a; ++i) { + const a = e.get(i); + t.push(bytesToString(a)); + } + return t; + } + parseStringIndex(e) { + const t = new CFFStrings(); + for (let i = 0, a = e.count; i < a; ++i) { + const a = e.get(i); + t.add(bytesToString(a)); + } + return t; + } + createDict(e, t, i) { + const a = new e(i); + for (const [e, i] of t) a.setByKey(e, i); + return a; + } + parseCharString(e, t, i, a) { + if (!t || e.callDepth > 10) return !1; + let s = e.stackSize; + const r = e.stack; + let n = t.length; + for (let g = 0; g < n; ) { + const o = t[g++]; + let c = null; + if (12 === o) { + const e = t[g++]; + if (0 === e) { + t[g - 2] = 139; + t[g - 1] = 22; + s = 0; + } else c = Fi[e]; + } else if (28 === o) { + r[s] = ((t[g] << 24) | (t[g + 1] << 16)) >> 16; + g += 2; + s++; + } else if (14 === o) { + if (s >= 4) { + s -= 4; + if (this.seacAnalysisEnabled) { + e.seac = r.slice(s, s + 4); + return !1; + } + } + c = bi[o]; + } else if (o >= 32 && o <= 246) { + r[s] = o - 139; + s++; + } else if (o >= 247 && o <= 254) { + r[s] = + o < 251 + ? ((o - 247) << 8) + t[g] + 108 + : -((o - 251) << 8) - t[g] - 108; + g++; + s++; + } else if (255 === o) { + r[s] = + ((t[g] << 24) | (t[g + 1] << 16) | (t[g + 2] << 8) | t[g + 3]) / + 65536; + g += 4; + s++; + } else if (19 === o || 20 === o) { + e.hints += s >> 1; + if (0 === e.hints) { + t.copyWithin(g - 1, g, -1); + g -= 1; + n -= 1; + continue; + } + g += (e.hints + 7) >> 3; + s %= 2; + c = bi[o]; + } else { + if (10 === o || 29 === o) { + const t = 10 === o ? i : a; + if (!t) { + c = bi[o]; + warn("Missing subrsIndex for " + c.id); + return !1; + } + let n = 32768; + t.count < 1240 ? (n = 107) : t.count < 33900 && (n = 1131); + const g = r[--s] + n; + if (g < 0 || g >= t.count || isNaN(g)) { + c = bi[o]; + warn("Out of bounds subrIndex for " + c.id); + return !1; + } + e.stackSize = s; + e.callDepth++; + if (!this.parseCharString(e, t.get(g), i, a)) return !1; + e.callDepth--; + s = e.stackSize; + continue; + } + if (11 === o) { + e.stackSize = s; + return !0; + } + if (0 === o && g === t.length) { + t[g - 1] = 14; + c = bi[14]; + } else { + if (9 === o) { + t.copyWithin(g - 1, g, -1); + g -= 1; + n -= 1; + continue; + } + c = bi[o]; + } + } + if (c) { + if (c.stem) { + e.hints += s >> 1; + if (3 === o || 23 === o) e.hasVStems = !0; + else if (e.hasVStems && (1 === o || 18 === o)) { + warn("CFF stem hints are in wrong order"); + t[g - 1] = 1 === o ? 3 : 23; + } + } + if ("min" in c && !e.undefStack && s < c.min) { + warn( + "Not enough parameters for " + + c.id + + "; actual: " + + s + + ", expected: " + + c.min, + ); + if (0 === s) { + t[g - 1] = 14; + return !0; + } + return !1; + } + if (e.firstStackClearing && c.stackClearing) { + e.firstStackClearing = !1; + s -= c.min; + s >= 2 && c.stem + ? (s %= 2) + : s > 1 && + warn("Found too many parameters for stack-clearing command"); + s > 0 && (e.width = r[s - 1]); + } + if ("stackDelta" in c) { + "stackFn" in c && c.stackFn(r, s); + s += c.stackDelta; + } else if (c.stackClearing) s = 0; + else if (c.resetStack) { + s = 0; + e.undefStack = !1; + } else if (c.undefStack) { + s = 0; + e.undefStack = !0; + e.firstStackClearing = !1; + } + } + } + n < t.length && t.fill(14, n); + e.stackSize = s; + return !0; + } + parseCharStrings({ + charStrings: e, + localSubrIndex: t, + globalSubrIndex: i, + fdSelect: a, + fdArray: s, + privateDict: r, + }) { + const n = [], + g = [], + o = e.count; + for (let c = 0; c < o; c++) { + const o = e.get(c), + C = { + callDepth: 0, + stackSize: 0, + stack: [], + undefStack: !0, + hints: 0, + firstStackClearing: !0, + seac: null, + width: null, + hasVStems: !1, + }; + let h = !0, + l = null, + Q = r; + if (a && s.length) { + const e = a.getFDIndex(c); + if (-1 === e) { + warn("Glyph index is not in fd select."); + h = !1; + } + if (e >= s.length) { + warn("Invalid fd index for glyph index."); + h = !1; + } + if (h) { + Q = s[e].privateDict; + l = Q.subrsIndex; + } + } else t && (l = t); + h && (h = this.parseCharString(C, o, l, i)); + if (null !== C.width) { + const e = Q.getByName("nominalWidthX"); + g[c] = e + C.width; + } else { + const e = Q.getByName("defaultWidthX"); + g[c] = e; + } + null !== C.seac && (n[c] = C.seac); + h || e.set(c, new Uint8Array([14])); + } + return { charStrings: e, seacs: n, widths: g }; + } + emptyPrivateDictionary(e) { + const t = this.createDict(CFFPrivateDict, [], e.strings); + e.setByKey(18, [0, 0]); + e.privateDict = t; + } + parsePrivateDict(e) { + if (!e.hasName("Private")) { + this.emptyPrivateDictionary(e); + return; + } + const t = e.getByName("Private"); + if (!Array.isArray(t) || 2 !== t.length) { + e.removeByName("Private"); + return; + } + const i = t[0], + a = t[1]; + if (0 === i || a >= this.bytes.length) { + this.emptyPrivateDictionary(e); + return; + } + const s = a + i, + r = this.bytes.subarray(a, s), + n = this.parseDict(r), + g = this.createDict(CFFPrivateDict, n, e.strings); + e.privateDict = g; + 0 === g.getByName("ExpansionFactor") && + g.setByName("ExpansionFactor", 0.06); + if (!g.getByName("Subrs")) return; + const o = g.getByName("Subrs"), + c = a + o; + if (0 === o || c >= this.bytes.length) { + this.emptyPrivateDictionary(e); + return; + } + const C = this.parseIndex(c); + g.subrsIndex = C.obj; + } + parseCharsets(e, t, i, a) { + if (0 === e) return new CFFCharset(!0, Ri.ISO_ADOBE, Bi); + if (1 === e) return new CFFCharset(!0, Ri.EXPERT, li); + if (2 === e) return new CFFCharset(!0, Ri.EXPERT_SUBSET, Qi); + const s = this.bytes, + r = e, + n = s[e++], + g = [a ? 0 : ".notdef"]; + let o, c, C; + t -= 1; + switch (n) { + case 0: + for (C = 0; C < t; C++) { + o = (s[e++] << 8) | s[e++]; + g.push(a ? o : i.get(o)); + } + break; + case 1: + for (; g.length <= t; ) { + o = (s[e++] << 8) | s[e++]; + c = s[e++]; + for (C = 0; C <= c; C++) g.push(a ? o++ : i.get(o++)); + } + break; + case 2: + for (; g.length <= t; ) { + o = (s[e++] << 8) | s[e++]; + c = (s[e++] << 8) | s[e++]; + for (C = 0; C <= c; C++) g.push(a ? o++ : i.get(o++)); + } + break; + default: + throw new FormatError("Unknown charset format"); + } + const h = e, + l = s.subarray(r, h); + return new CFFCharset(!1, n, g, l); + } + parseEncoding(e, t, i, a) { + const s = Object.create(null), + r = this.bytes; + let n, + g, + o, + c = !1, + C = null; + if (0 === e || 1 === e) { + c = !0; + n = e; + const t = e ? Ei : fi; + for (g = 0, o = a.length; g < o; g++) { + const e = t.indexOf(a[g]); + -1 !== e && (s[e] = g); + } + } else { + const t = e; + n = r[e++]; + switch (127 & n) { + case 0: + const t = r[e++]; + for (g = 1; g <= t; g++) s[r[e++]] = g; + break; + case 1: + const i = r[e++]; + let a = 1; + for (g = 0; g < i; g++) { + const t = r[e++], + i = r[e++]; + for (let e = t; e <= t + i; e++) s[e] = a++; + } + break; + default: + throw new FormatError(`Unknown encoding format: ${n} in CFF`); + } + const o = e; + if (128 & n) { + r[t] &= 127; + !(function readSupplement() { + const t = r[e++]; + for (g = 0; g < t; g++) { + const t = r[e++], + n = (r[e++] << 8) + (255 & r[e++]); + s[t] = a.indexOf(i.get(n)); + } + })(); + } + C = r.subarray(t, o); + } + n &= 127; + return new CFFEncoding(c, n, s, C); + } + parseFDSelect(e, t) { + const i = this.bytes, + a = i[e++], + s = []; + let r; + switch (a) { + case 0: + for (r = 0; r < t; ++r) { + const t = i[e++]; + s.push(t); + } + break; + case 3: + const n = (i[e++] << 8) | i[e++]; + for (r = 0; r < n; ++r) { + let t = (i[e++] << 8) | i[e++]; + if (0 === r && 0 !== t) { + warn( + "parseFDSelect: The first range must have a first GID of 0 -- trying to recover.", + ); + t = 0; + } + const a = i[e++], + n = (i[e] << 8) | i[e + 1]; + for (let e = t; e < n; ++e) s.push(a); + } + e += 2; + break; + default: + throw new FormatError(`parseFDSelect: Unknown format "${a}".`); + } + if (s.length !== t) + throw new FormatError("parseFDSelect: Invalid font data."); + return new CFFFDSelect(a, s); + } +} +class CFF { + constructor() { + this.header = null; + this.names = []; + this.topDict = null; + this.strings = new CFFStrings(); + this.globalSubrIndex = null; + this.encoding = null; + this.charset = null; + this.charStrings = null; + this.fdArray = []; + this.fdSelect = null; + this.isCIDFont = !1; + } + duplicateFirstGlyph() { + if (this.charStrings.count >= 65535) { + warn("Not enough space in charstrings to duplicate first glyph."); + return; + } + const e = this.charStrings.get(0); + this.charStrings.add(e); + this.isCIDFont && this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); + } + hasGlyphId(e) { + if (e < 0 || e >= this.charStrings.count) return !1; + return this.charStrings.get(e).length > 0; + } +} +class CFFHeader { + constructor(e, t, i, a) { + this.major = e; + this.minor = t; + this.hdrSize = i; + this.offSize = a; + } +} +class CFFStrings { + constructor() { + this.strings = []; + } + get(e) { + return e >= 0 && e <= 390 + ? wi[e] + : e - Di <= this.strings.length + ? this.strings[e - Di] + : wi[0]; + } + getSID(e) { + let t = wi.indexOf(e); + if (-1 !== t) return t; + t = this.strings.indexOf(e); + return -1 !== t ? t + Di : -1; + } + add(e) { + this.strings.push(e); + } + get count() { + return this.strings.length; + } +} +class CFFIndex { + constructor() { + this.objects = []; + this.length = 0; + } + add(e) { + this.length += e.length; + this.objects.push(e); + } + set(e, t) { + this.length += t.length - this.objects[e].length; + this.objects[e] = t; + } + get(e) { + return this.objects[e]; + } + get count() { + return this.objects.length; + } +} +class CFFDict { + constructor(e, t) { + this.keyToNameMap = e.keyToNameMap; + this.nameToKeyMap = e.nameToKeyMap; + this.defaults = e.defaults; + this.types = e.types; + this.opcodes = e.opcodes; + this.order = e.order; + this.strings = t; + this.values = Object.create(null); + } + setByKey(e, t) { + if (!(e in this.keyToNameMap)) return !1; + if (0 === t.length) return !0; + for (const i of t) + if (isNaN(i)) { + warn(`Invalid CFFDict value: "${t}" for key "${e}".`); + return !0; + } + const i = this.types[e]; + ("num" !== i && "sid" !== i && "offset" !== i) || (t = t[0]); + this.values[e] = t; + return !0; + } + setByName(e, t) { + if (!(e in this.nameToKeyMap)) + throw new FormatError(`Invalid dictionary name "${e}"`); + this.values[this.nameToKeyMap[e]] = t; + } + hasName(e) { + return this.nameToKeyMap[e] in this.values; + } + getByName(e) { + if (!(e in this.nameToKeyMap)) + throw new FormatError(`Invalid dictionary name ${e}"`); + const t = this.nameToKeyMap[e]; + return t in this.values ? this.values[t] : this.defaults[t]; + } + removeByName(e) { + delete this.values[this.nameToKeyMap[e]]; + } + static createTables(e) { + const t = { + keyToNameMap: {}, + nameToKeyMap: {}, + defaults: {}, + types: {}, + opcodes: {}, + order: [], + }; + for (const i of e) { + const e = Array.isArray(i[0]) ? (i[0][0] << 8) + i[0][1] : i[0]; + t.keyToNameMap[e] = i[1]; + t.nameToKeyMap[i[1]] = e; + t.types[e] = i[2]; + t.defaults[e] = i[3]; + t.opcodes[e] = Array.isArray(i[0]) ? i[0] : [i[0]]; + t.order.push(e); + } + return t; + } +} +const Si = [ + [[12, 30], "ROS", ["sid", "sid", "num"], null], + [[12, 20], "SyntheticBase", "num", null], + [0, "version", "sid", null], + [1, "Notice", "sid", null], + [[12, 0], "Copyright", "sid", null], + [2, "FullName", "sid", null], + [3, "FamilyName", "sid", null], + [4, "Weight", "sid", null], + [[12, 1], "isFixedPitch", "num", 0], + [[12, 2], "ItalicAngle", "num", 0], + [[12, 3], "UnderlinePosition", "num", -100], + [[12, 4], "UnderlineThickness", "num", 50], + [[12, 5], "PaintType", "num", 0], + [[12, 6], "CharstringType", "num", 2], + [ + [12, 7], + "FontMatrix", + ["num", "num", "num", "num", "num", "num"], + [0.001, 0, 0, 0.001, 0, 0], + ], + [13, "UniqueID", "num", null], + [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], + [[12, 8], "StrokeWidth", "num", 0], + [14, "XUID", "array", null], + [15, "charset", "offset", 0], + [16, "Encoding", "offset", 0], + [17, "CharStrings", "offset", 0], + [18, "Private", ["offset", "offset"], null], + [[12, 21], "PostScript", "sid", null], + [[12, 22], "BaseFontName", "sid", null], + [[12, 23], "BaseFontBlend", "delta", null], + [[12, 31], "CIDFontVersion", "num", 0], + [[12, 32], "CIDFontRevision", "num", 0], + [[12, 33], "CIDFontType", "num", 0], + [[12, 34], "CIDCount", "num", 8720], + [[12, 35], "UIDBase", "num", null], + [[12, 37], "FDSelect", "offset", null], + [[12, 36], "FDArray", "offset", null], + [[12, 38], "FontName", "sid", null], +]; +class CFFTopDict extends CFFDict { + static get tables() { + return shadow(this, "tables", this.createTables(Si)); + } + constructor(e) { + super(CFFTopDict.tables, e); + this.privateDict = null; + } +} +const ki = [ + [6, "BlueValues", "delta", null], + [7, "OtherBlues", "delta", null], + [8, "FamilyBlues", "delta", null], + [9, "FamilyOtherBlues", "delta", null], + [[12, 9], "BlueScale", "num", 0.039625], + [[12, 10], "BlueShift", "num", 7], + [[12, 11], "BlueFuzz", "num", 1], + [10, "StdHW", "num", null], + [11, "StdVW", "num", null], + [[12, 12], "StemSnapH", "delta", null], + [[12, 13], "StemSnapV", "delta", null], + [[12, 14], "ForceBold", "num", 0], + [[12, 17], "LanguageGroup", "num", 0], + [[12, 18], "ExpansionFactor", "num", 0.06], + [[12, 19], "initialRandomSeed", "num", 0], + [20, "defaultWidthX", "num", 0], + [21, "nominalWidthX", "num", 0], + [19, "Subrs", "offset", null], +]; +class CFFPrivateDict extends CFFDict { + static get tables() { + return shadow(this, "tables", this.createTables(ki)); + } + constructor(e) { + super(CFFPrivateDict.tables, e); + this.subrsIndex = null; + } +} +const Ri = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; +class CFFCharset { + constructor(e, t, i, a) { + this.predefined = e; + this.format = t; + this.charset = i; + this.raw = a; + } +} +class CFFEncoding { + constructor(e, t, i, a) { + this.predefined = e; + this.format = t; + this.encoding = i; + this.raw = a; + } +} +class CFFFDSelect { + constructor(e, t) { + this.format = e; + this.fdSelect = t; + } + getFDIndex(e) { + return e < 0 || e >= this.fdSelect.length ? -1 : this.fdSelect[e]; + } +} +class CFFOffsetTracker { + constructor() { + this.offsets = Object.create(null); + } + isTracking(e) { + return e in this.offsets; + } + track(e, t) { + if (e in this.offsets) + throw new FormatError(`Already tracking location of ${e}`); + this.offsets[e] = t; + } + offset(e) { + for (const t in this.offsets) this.offsets[t] += e; + } + setEntryLocation(e, t, i) { + if (!(e in this.offsets)) + throw new FormatError(`Not tracking location of ${e}`); + const a = i.data, + s = this.offsets[e]; + for (let e = 0, i = t.length; e < i; ++e) { + const i = 5 * e + s, + r = i + 1, + n = i + 2, + g = i + 3, + o = i + 4; + if (29 !== a[i] || 0 !== a[r] || 0 !== a[n] || 0 !== a[g] || 0 !== a[o]) + throw new FormatError("writing to an offset that is not empty"); + const c = t[e]; + a[i] = 29; + a[r] = (c >> 24) & 255; + a[n] = (c >> 16) & 255; + a[g] = (c >> 8) & 255; + a[o] = 255 & c; + } + } +} +class CFFCompiler { + constructor(e) { + this.cff = e; + } + compile() { + const e = this.cff, + t = { + data: [], + length: 0, + add(e) { + try { + this.data.push(...e); + } catch { + this.data = this.data.concat(e); + } + this.length = this.data.length; + }, + }, + i = this.compileHeader(e.header); + t.add(i); + const a = this.compileNameIndex(e.names); + t.add(a); + if (e.isCIDFont && e.topDict.hasName("FontMatrix")) { + const t = e.topDict.getByName("FontMatrix"); + e.topDict.removeByName("FontMatrix"); + for (const i of e.fdArray) { + let e = t.slice(0); + i.hasName("FontMatrix") && + (e = Util.transform(e, i.getByName("FontMatrix"))); + i.setByName("FontMatrix", e); + } + } + const s = e.topDict.getByName("XUID"); + s?.length > 16 && e.topDict.removeByName("XUID"); + e.topDict.setByName("charset", 0); + let r = this.compileTopDicts([e.topDict], t.length, e.isCIDFont); + t.add(r.output); + const n = r.trackers[0], + g = this.compileStringIndex(e.strings.strings); + t.add(g); + const o = this.compileIndex(e.globalSubrIndex); + t.add(o); + if (e.encoding && e.topDict.hasName("Encoding")) + if (e.encoding.predefined) + n.setEntryLocation("Encoding", [e.encoding.format], t); + else { + const i = this.compileEncoding(e.encoding); + n.setEntryLocation("Encoding", [t.length], t); + t.add(i); + } + const c = this.compileCharset( + e.charset, + e.charStrings.count, + e.strings, + e.isCIDFont, + ); + n.setEntryLocation("charset", [t.length], t); + t.add(c); + const C = this.compileCharStrings(e.charStrings); + n.setEntryLocation("CharStrings", [t.length], t); + t.add(C); + if (e.isCIDFont) { + n.setEntryLocation("FDSelect", [t.length], t); + const i = this.compileFDSelect(e.fdSelect); + t.add(i); + r = this.compileTopDicts(e.fdArray, t.length, !0); + n.setEntryLocation("FDArray", [t.length], t); + t.add(r.output); + const a = r.trackers; + this.compilePrivateDicts(e.fdArray, a, t); + } + this.compilePrivateDicts([e.topDict], [n], t); + t.add([0]); + return t.data; + } + encodeNumber(e) { + return Number.isInteger(e) ? this.encodeInteger(e) : this.encodeFloat(e); + } + static get EncodeFloatRegExp() { + return shadow( + this, + "EncodeFloatRegExp", + /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/, + ); + } + encodeFloat(e) { + let t = e.toString(); + const i = CFFCompiler.EncodeFloatRegExp.exec(t); + if (i) { + const a = parseFloat("1e" + ((i[2] ? +i[2] : 0) + i[1].length)); + t = (Math.round(e * a) / a).toString(); + } + let a, + s, + r = ""; + for (a = 0, s = t.length; a < s; ++a) { + const e = t[a]; + r += + "e" === e + ? "-" === t[++a] + ? "c" + : "b" + : "." === e + ? "a" + : "-" === e + ? "e" + : e; + } + r += 1 & r.length ? "f" : "ff"; + const n = [30]; + for (a = 0, s = r.length; a < s; a += 2) + n.push(parseInt(r.substring(a, a + 2), 16)); + return n; + } + encodeInteger(e) { + let t; + t = + e >= -107 && e <= 107 + ? [e + 139] + : e >= 108 && e <= 1131 + ? [247 + ((e -= 108) >> 8), 255 & e] + : e >= -1131 && e <= -108 + ? [251 + ((e = -e - 108) >> 8), 255 & e] + : e >= -32768 && e <= 32767 + ? [28, (e >> 8) & 255, 255 & e] + : [29, (e >> 24) & 255, (e >> 16) & 255, (e >> 8) & 255, 255 & e]; + return t; + } + compileHeader(e) { + return [e.major, e.minor, 4, e.offSize]; + } + compileNameIndex(e) { + const t = new CFFIndex(); + for (const i of e) { + const e = Math.min(i.length, 127); + let a = new Array(e); + for (let t = 0; t < e; t++) { + let e = i[t]; + (e < "!" || + e > "~" || + "[" === e || + "]" === e || + "(" === e || + ")" === e || + "{" === e || + "}" === e || + "<" === e || + ">" === e || + "/" === e || + "%" === e) && + (e = "_"); + a[t] = e; + } + a = a.join(""); + "" === a && (a = "Bad_Font_Name"); + t.add(stringToBytes(a)); + } + return this.compileIndex(t); + } + compileTopDicts(e, t, i) { + const a = []; + let s = new CFFIndex(); + for (const r of e) { + if (i) { + r.removeByName("CIDFontVersion"); + r.removeByName("CIDFontRevision"); + r.removeByName("CIDFontType"); + r.removeByName("CIDCount"); + r.removeByName("UIDBase"); + } + const e = new CFFOffsetTracker(), + n = this.compileDict(r, e); + a.push(e); + s.add(n); + e.offset(t); + } + s = this.compileIndex(s, a); + return { trackers: a, output: s }; + } + compilePrivateDicts(e, t, i) { + for (let a = 0, s = e.length; a < s; ++a) { + const s = e[a], + r = s.privateDict; + if (!r || !s.hasName("Private")) + throw new FormatError("There must be a private dictionary."); + const n = new CFFOffsetTracker(), + g = this.compileDict(r, n); + let o = i.length; + n.offset(o); + g.length || (o = 0); + t[a].setEntryLocation("Private", [g.length, o], i); + i.add(g); + if (r.subrsIndex && r.hasName("Subrs")) { + const e = this.compileIndex(r.subrsIndex); + n.setEntryLocation("Subrs", [g.length], i); + i.add(e); + } + } + } + compileDict(e, t) { + const i = []; + for (const a of e.order) { + if (!(a in e.values)) continue; + let s = e.values[a], + r = e.types[a]; + Array.isArray(r) || (r = [r]); + Array.isArray(s) || (s = [s]); + if (0 !== s.length) { + for (let n = 0, g = r.length; n < g; ++n) { + const g = r[n], + o = s[n]; + switch (g) { + case "num": + case "sid": + i.push(...this.encodeNumber(o)); + break; + case "offset": + const r = e.keyToNameMap[a]; + t.isTracking(r) || t.track(r, i.length); + i.push(29, 0, 0, 0, 0); + break; + case "array": + case "delta": + i.push(...this.encodeNumber(o)); + for (let e = 1, t = s.length; e < t; ++e) + i.push(...this.encodeNumber(s[e])); + break; + default: + throw new FormatError(`Unknown data type of ${g}`); + } + } + i.push(...e.opcodes[a]); + } + } + return i; + } + compileStringIndex(e) { + const t = new CFFIndex(); + for (const i of e) t.add(stringToBytes(i)); + return this.compileIndex(t); + } + compileCharStrings(e) { + const t = new CFFIndex(); + for (let i = 0; i < e.count; i++) { + const a = e.get(i); + 0 !== a.length ? t.add(a) : t.add(new Uint8Array([139, 14])); + } + return this.compileIndex(t); + } + compileCharset(e, t, i, a) { + let s; + const r = t - 1; + if (a) s = new Uint8Array([2, 0, 0, (r >> 8) & 255, 255 & r]); + else { + s = new Uint8Array(1 + 2 * r); + s[0] = 0; + let t = 0; + const a = e.charset.length; + let n = !1; + for (let r = 1; r < s.length; r += 2) { + let g = 0; + if (t < a) { + const a = e.charset[t++]; + g = i.getSID(a); + if (-1 === g) { + g = 0; + if (!n) { + n = !0; + warn(`Couldn't find ${a} in CFF strings`); + } + } + } + s[r] = (g >> 8) & 255; + s[r + 1] = 255 & g; + } + } + return this.compileTypedArray(s); + } + compileEncoding(e) { + return this.compileTypedArray(e.raw); + } + compileFDSelect(e) { + const t = e.format; + let i, a; + switch (t) { + case 0: + i = new Uint8Array(1 + e.fdSelect.length); + i[0] = t; + for (a = 0; a < e.fdSelect.length; a++) i[a + 1] = e.fdSelect[a]; + break; + case 3: + const s = 0; + let r = e.fdSelect[0]; + const n = [t, 0, 0, (s >> 8) & 255, 255 & s, r]; + for (a = 1; a < e.fdSelect.length; a++) { + const t = e.fdSelect[a]; + if (t !== r) { + n.push((a >> 8) & 255, 255 & a, t); + r = t; + } + } + const g = (n.length - 3) / 3; + n[1] = (g >> 8) & 255; + n[2] = 255 & g; + n.push((a >> 8) & 255, 255 & a); + i = new Uint8Array(n); + } + return this.compileTypedArray(i); + } + compileTypedArray(e) { + return Array.from(e); + } + compileIndex(e, t = []) { + const i = e.objects, + a = i.length; + if (0 === a) return [0, 0]; + const s = [(a >> 8) & 255, 255 & a]; + let r, + n, + g = 1; + for (r = 0; r < a; ++r) g += i[r].length; + n = g < 256 ? 1 : g < 65536 ? 2 : g < 16777216 ? 3 : 4; + s.push(n); + let o = 1; + for (r = 0; r < a + 1; r++) { + 1 === n + ? s.push(255 & o) + : 2 === n + ? s.push((o >> 8) & 255, 255 & o) + : 3 === n + ? s.push((o >> 16) & 255, (o >> 8) & 255, 255 & o) + : s.push( + (o >>> 24) & 255, + (o >> 16) & 255, + (o >> 8) & 255, + 255 & o, + ); + i[r] && (o += i[r].length); + } + for (r = 0; r < a; r++) { + t[r] && t[r].offset(s.length); + s.push(...i[r]); + } + return s; + } +} +const Ni = getLookupTableFactory(function (e) { + e.A = 65; + e.AE = 198; + e.AEacute = 508; + e.AEmacron = 482; + e.AEsmall = 63462; + e.Aacute = 193; + e.Aacutesmall = 63457; + e.Abreve = 258; + e.Abreveacute = 7854; + e.Abrevecyrillic = 1232; + e.Abrevedotbelow = 7862; + e.Abrevegrave = 7856; + e.Abrevehookabove = 7858; + e.Abrevetilde = 7860; + e.Acaron = 461; + e.Acircle = 9398; + e.Acircumflex = 194; + e.Acircumflexacute = 7844; + e.Acircumflexdotbelow = 7852; + e.Acircumflexgrave = 7846; + e.Acircumflexhookabove = 7848; + e.Acircumflexsmall = 63458; + e.Acircumflextilde = 7850; + e.Acute = 63177; + e.Acutesmall = 63412; + e.Acyrillic = 1040; + e.Adblgrave = 512; + e.Adieresis = 196; + e.Adieresiscyrillic = 1234; + e.Adieresismacron = 478; + e.Adieresissmall = 63460; + e.Adotbelow = 7840; + e.Adotmacron = 480; + e.Agrave = 192; + e.Agravesmall = 63456; + e.Ahookabove = 7842; + e.Aiecyrillic = 1236; + e.Ainvertedbreve = 514; + e.Alpha = 913; + e.Alphatonos = 902; + e.Amacron = 256; + e.Amonospace = 65313; + e.Aogonek = 260; + e.Aring = 197; + e.Aringacute = 506; + e.Aringbelow = 7680; + e.Aringsmall = 63461; + e.Asmall = 63329; + e.Atilde = 195; + e.Atildesmall = 63459; + e.Aybarmenian = 1329; + e.B = 66; + e.Bcircle = 9399; + e.Bdotaccent = 7682; + e.Bdotbelow = 7684; + e.Becyrillic = 1041; + e.Benarmenian = 1330; + e.Beta = 914; + e.Bhook = 385; + e.Blinebelow = 7686; + e.Bmonospace = 65314; + e.Brevesmall = 63220; + e.Bsmall = 63330; + e.Btopbar = 386; + e.C = 67; + e.Caarmenian = 1342; + e.Cacute = 262; + e.Caron = 63178; + e.Caronsmall = 63221; + e.Ccaron = 268; + e.Ccedilla = 199; + e.Ccedillaacute = 7688; + e.Ccedillasmall = 63463; + e.Ccircle = 9400; + e.Ccircumflex = 264; + e.Cdot = 266; + e.Cdotaccent = 266; + e.Cedillasmall = 63416; + e.Chaarmenian = 1353; + e.Cheabkhasiancyrillic = 1212; + e.Checyrillic = 1063; + e.Chedescenderabkhasiancyrillic = 1214; + e.Chedescendercyrillic = 1206; + e.Chedieresiscyrillic = 1268; + e.Cheharmenian = 1347; + e.Chekhakassiancyrillic = 1227; + e.Cheverticalstrokecyrillic = 1208; + e.Chi = 935; + e.Chook = 391; + e.Circumflexsmall = 63222; + e.Cmonospace = 65315; + e.Coarmenian = 1361; + e.Csmall = 63331; + e.D = 68; + e.DZ = 497; + e.DZcaron = 452; + e.Daarmenian = 1332; + e.Dafrican = 393; + e.Dcaron = 270; + e.Dcedilla = 7696; + e.Dcircle = 9401; + e.Dcircumflexbelow = 7698; + e.Dcroat = 272; + e.Ddotaccent = 7690; + e.Ddotbelow = 7692; + e.Decyrillic = 1044; + e.Deicoptic = 1006; + e.Delta = 8710; + e.Deltagreek = 916; + e.Dhook = 394; + e.Dieresis = 63179; + e.DieresisAcute = 63180; + e.DieresisGrave = 63181; + e.Dieresissmall = 63400; + e.Digammagreek = 988; + e.Djecyrillic = 1026; + e.Dlinebelow = 7694; + e.Dmonospace = 65316; + e.Dotaccentsmall = 63223; + e.Dslash = 272; + e.Dsmall = 63332; + e.Dtopbar = 395; + e.Dz = 498; + e.Dzcaron = 453; + e.Dzeabkhasiancyrillic = 1248; + e.Dzecyrillic = 1029; + e.Dzhecyrillic = 1039; + e.E = 69; + e.Eacute = 201; + e.Eacutesmall = 63465; + e.Ebreve = 276; + e.Ecaron = 282; + e.Ecedillabreve = 7708; + e.Echarmenian = 1333; + e.Ecircle = 9402; + e.Ecircumflex = 202; + e.Ecircumflexacute = 7870; + e.Ecircumflexbelow = 7704; + e.Ecircumflexdotbelow = 7878; + e.Ecircumflexgrave = 7872; + e.Ecircumflexhookabove = 7874; + e.Ecircumflexsmall = 63466; + e.Ecircumflextilde = 7876; + e.Ecyrillic = 1028; + e.Edblgrave = 516; + e.Edieresis = 203; + e.Edieresissmall = 63467; + e.Edot = 278; + e.Edotaccent = 278; + e.Edotbelow = 7864; + e.Efcyrillic = 1060; + e.Egrave = 200; + e.Egravesmall = 63464; + e.Eharmenian = 1335; + e.Ehookabove = 7866; + e.Eightroman = 8551; + e.Einvertedbreve = 518; + e.Eiotifiedcyrillic = 1124; + e.Elcyrillic = 1051; + e.Elevenroman = 8554; + e.Emacron = 274; + e.Emacronacute = 7702; + e.Emacrongrave = 7700; + e.Emcyrillic = 1052; + e.Emonospace = 65317; + e.Encyrillic = 1053; + e.Endescendercyrillic = 1186; + e.Eng = 330; + e.Enghecyrillic = 1188; + e.Enhookcyrillic = 1223; + e.Eogonek = 280; + e.Eopen = 400; + e.Epsilon = 917; + e.Epsilontonos = 904; + e.Ercyrillic = 1056; + e.Ereversed = 398; + e.Ereversedcyrillic = 1069; + e.Escyrillic = 1057; + e.Esdescendercyrillic = 1194; + e.Esh = 425; + e.Esmall = 63333; + e.Eta = 919; + e.Etarmenian = 1336; + e.Etatonos = 905; + e.Eth = 208; + e.Ethsmall = 63472; + e.Etilde = 7868; + e.Etildebelow = 7706; + e.Euro = 8364; + e.Ezh = 439; + e.Ezhcaron = 494; + e.Ezhreversed = 440; + e.F = 70; + e.Fcircle = 9403; + e.Fdotaccent = 7710; + e.Feharmenian = 1366; + e.Feicoptic = 996; + e.Fhook = 401; + e.Fitacyrillic = 1138; + e.Fiveroman = 8548; + e.Fmonospace = 65318; + e.Fourroman = 8547; + e.Fsmall = 63334; + e.G = 71; + e.GBsquare = 13191; + e.Gacute = 500; + e.Gamma = 915; + e.Gammaafrican = 404; + e.Gangiacoptic = 1002; + e.Gbreve = 286; + e.Gcaron = 486; + e.Gcedilla = 290; + e.Gcircle = 9404; + e.Gcircumflex = 284; + e.Gcommaaccent = 290; + e.Gdot = 288; + e.Gdotaccent = 288; + e.Gecyrillic = 1043; + e.Ghadarmenian = 1346; + e.Ghemiddlehookcyrillic = 1172; + e.Ghestrokecyrillic = 1170; + e.Gheupturncyrillic = 1168; + e.Ghook = 403; + e.Gimarmenian = 1331; + e.Gjecyrillic = 1027; + e.Gmacron = 7712; + e.Gmonospace = 65319; + e.Grave = 63182; + e.Gravesmall = 63328; + e.Gsmall = 63335; + e.Gsmallhook = 667; + e.Gstroke = 484; + e.H = 72; + e.H18533 = 9679; + e.H18543 = 9642; + e.H18551 = 9643; + e.H22073 = 9633; + e.HPsquare = 13259; + e.Haabkhasiancyrillic = 1192; + e.Hadescendercyrillic = 1202; + e.Hardsigncyrillic = 1066; + e.Hbar = 294; + e.Hbrevebelow = 7722; + e.Hcedilla = 7720; + e.Hcircle = 9405; + e.Hcircumflex = 292; + e.Hdieresis = 7718; + e.Hdotaccent = 7714; + e.Hdotbelow = 7716; + e.Hmonospace = 65320; + e.Hoarmenian = 1344; + e.Horicoptic = 1e3; + e.Hsmall = 63336; + e.Hungarumlaut = 63183; + e.Hungarumlautsmall = 63224; + e.Hzsquare = 13200; + e.I = 73; + e.IAcyrillic = 1071; + e.IJ = 306; + e.IUcyrillic = 1070; + e.Iacute = 205; + e.Iacutesmall = 63469; + e.Ibreve = 300; + e.Icaron = 463; + e.Icircle = 9406; + e.Icircumflex = 206; + e.Icircumflexsmall = 63470; + e.Icyrillic = 1030; + e.Idblgrave = 520; + e.Idieresis = 207; + e.Idieresisacute = 7726; + e.Idieresiscyrillic = 1252; + e.Idieresissmall = 63471; + e.Idot = 304; + e.Idotaccent = 304; + e.Idotbelow = 7882; + e.Iebrevecyrillic = 1238; + e.Iecyrillic = 1045; + e.Ifraktur = 8465; + e.Igrave = 204; + e.Igravesmall = 63468; + e.Ihookabove = 7880; + e.Iicyrillic = 1048; + e.Iinvertedbreve = 522; + e.Iishortcyrillic = 1049; + e.Imacron = 298; + e.Imacroncyrillic = 1250; + e.Imonospace = 65321; + e.Iniarmenian = 1339; + e.Iocyrillic = 1025; + e.Iogonek = 302; + e.Iota = 921; + e.Iotaafrican = 406; + e.Iotadieresis = 938; + e.Iotatonos = 906; + e.Ismall = 63337; + e.Istroke = 407; + e.Itilde = 296; + e.Itildebelow = 7724; + e.Izhitsacyrillic = 1140; + e.Izhitsadblgravecyrillic = 1142; + e.J = 74; + e.Jaarmenian = 1345; + e.Jcircle = 9407; + e.Jcircumflex = 308; + e.Jecyrillic = 1032; + e.Jheharmenian = 1355; + e.Jmonospace = 65322; + e.Jsmall = 63338; + e.K = 75; + e.KBsquare = 13189; + e.KKsquare = 13261; + e.Kabashkircyrillic = 1184; + e.Kacute = 7728; + e.Kacyrillic = 1050; + e.Kadescendercyrillic = 1178; + e.Kahookcyrillic = 1219; + e.Kappa = 922; + e.Kastrokecyrillic = 1182; + e.Kaverticalstrokecyrillic = 1180; + e.Kcaron = 488; + e.Kcedilla = 310; + e.Kcircle = 9408; + e.Kcommaaccent = 310; + e.Kdotbelow = 7730; + e.Keharmenian = 1364; + e.Kenarmenian = 1343; + e.Khacyrillic = 1061; + e.Kheicoptic = 998; + e.Khook = 408; + e.Kjecyrillic = 1036; + e.Klinebelow = 7732; + e.Kmonospace = 65323; + e.Koppacyrillic = 1152; + e.Koppagreek = 990; + e.Ksicyrillic = 1134; + e.Ksmall = 63339; + e.L = 76; + e.LJ = 455; + e.LL = 63167; + e.Lacute = 313; + e.Lambda = 923; + e.Lcaron = 317; + e.Lcedilla = 315; + e.Lcircle = 9409; + e.Lcircumflexbelow = 7740; + e.Lcommaaccent = 315; + e.Ldot = 319; + e.Ldotaccent = 319; + e.Ldotbelow = 7734; + e.Ldotbelowmacron = 7736; + e.Liwnarmenian = 1340; + e.Lj = 456; + e.Ljecyrillic = 1033; + e.Llinebelow = 7738; + e.Lmonospace = 65324; + e.Lslash = 321; + e.Lslashsmall = 63225; + e.Lsmall = 63340; + e.M = 77; + e.MBsquare = 13190; + e.Macron = 63184; + e.Macronsmall = 63407; + e.Macute = 7742; + e.Mcircle = 9410; + e.Mdotaccent = 7744; + e.Mdotbelow = 7746; + e.Menarmenian = 1348; + e.Mmonospace = 65325; + e.Msmall = 63341; + e.Mturned = 412; + e.Mu = 924; + e.N = 78; + e.NJ = 458; + e.Nacute = 323; + e.Ncaron = 327; + e.Ncedilla = 325; + e.Ncircle = 9411; + e.Ncircumflexbelow = 7754; + e.Ncommaaccent = 325; + e.Ndotaccent = 7748; + e.Ndotbelow = 7750; + e.Nhookleft = 413; + e.Nineroman = 8552; + e.Nj = 459; + e.Njecyrillic = 1034; + e.Nlinebelow = 7752; + e.Nmonospace = 65326; + e.Nowarmenian = 1350; + e.Nsmall = 63342; + e.Ntilde = 209; + e.Ntildesmall = 63473; + e.Nu = 925; + e.O = 79; + e.OE = 338; + e.OEsmall = 63226; + e.Oacute = 211; + e.Oacutesmall = 63475; + e.Obarredcyrillic = 1256; + e.Obarreddieresiscyrillic = 1258; + e.Obreve = 334; + e.Ocaron = 465; + e.Ocenteredtilde = 415; + e.Ocircle = 9412; + e.Ocircumflex = 212; + e.Ocircumflexacute = 7888; + e.Ocircumflexdotbelow = 7896; + e.Ocircumflexgrave = 7890; + e.Ocircumflexhookabove = 7892; + e.Ocircumflexsmall = 63476; + e.Ocircumflextilde = 7894; + e.Ocyrillic = 1054; + e.Odblacute = 336; + e.Odblgrave = 524; + e.Odieresis = 214; + e.Odieresiscyrillic = 1254; + e.Odieresissmall = 63478; + e.Odotbelow = 7884; + e.Ogoneksmall = 63227; + e.Ograve = 210; + e.Ogravesmall = 63474; + e.Oharmenian = 1365; + e.Ohm = 8486; + e.Ohookabove = 7886; + e.Ohorn = 416; + e.Ohornacute = 7898; + e.Ohorndotbelow = 7906; + e.Ohorngrave = 7900; + e.Ohornhookabove = 7902; + e.Ohorntilde = 7904; + e.Ohungarumlaut = 336; + e.Oi = 418; + e.Oinvertedbreve = 526; + e.Omacron = 332; + e.Omacronacute = 7762; + e.Omacrongrave = 7760; + e.Omega = 8486; + e.Omegacyrillic = 1120; + e.Omegagreek = 937; + e.Omegaroundcyrillic = 1146; + e.Omegatitlocyrillic = 1148; + e.Omegatonos = 911; + e.Omicron = 927; + e.Omicrontonos = 908; + e.Omonospace = 65327; + e.Oneroman = 8544; + e.Oogonek = 490; + e.Oogonekmacron = 492; + e.Oopen = 390; + e.Oslash = 216; + e.Oslashacute = 510; + e.Oslashsmall = 63480; + e.Osmall = 63343; + e.Ostrokeacute = 510; + e.Otcyrillic = 1150; + e.Otilde = 213; + e.Otildeacute = 7756; + e.Otildedieresis = 7758; + e.Otildesmall = 63477; + e.P = 80; + e.Pacute = 7764; + e.Pcircle = 9413; + e.Pdotaccent = 7766; + e.Pecyrillic = 1055; + e.Peharmenian = 1354; + e.Pemiddlehookcyrillic = 1190; + e.Phi = 934; + e.Phook = 420; + e.Pi = 928; + e.Piwrarmenian = 1363; + e.Pmonospace = 65328; + e.Psi = 936; + e.Psicyrillic = 1136; + e.Psmall = 63344; + e.Q = 81; + e.Qcircle = 9414; + e.Qmonospace = 65329; + e.Qsmall = 63345; + e.R = 82; + e.Raarmenian = 1356; + e.Racute = 340; + e.Rcaron = 344; + e.Rcedilla = 342; + e.Rcircle = 9415; + e.Rcommaaccent = 342; + e.Rdblgrave = 528; + e.Rdotaccent = 7768; + e.Rdotbelow = 7770; + e.Rdotbelowmacron = 7772; + e.Reharmenian = 1360; + e.Rfraktur = 8476; + e.Rho = 929; + e.Ringsmall = 63228; + e.Rinvertedbreve = 530; + e.Rlinebelow = 7774; + e.Rmonospace = 65330; + e.Rsmall = 63346; + e.Rsmallinverted = 641; + e.Rsmallinvertedsuperior = 694; + e.S = 83; + e.SF010000 = 9484; + e.SF020000 = 9492; + e.SF030000 = 9488; + e.SF040000 = 9496; + e.SF050000 = 9532; + e.SF060000 = 9516; + e.SF070000 = 9524; + e.SF080000 = 9500; + e.SF090000 = 9508; + e.SF100000 = 9472; + e.SF110000 = 9474; + e.SF190000 = 9569; + e.SF200000 = 9570; + e.SF210000 = 9558; + e.SF220000 = 9557; + e.SF230000 = 9571; + e.SF240000 = 9553; + e.SF250000 = 9559; + e.SF260000 = 9565; + e.SF270000 = 9564; + e.SF280000 = 9563; + e.SF360000 = 9566; + e.SF370000 = 9567; + e.SF380000 = 9562; + e.SF390000 = 9556; + e.SF400000 = 9577; + e.SF410000 = 9574; + e.SF420000 = 9568; + e.SF430000 = 9552; + e.SF440000 = 9580; + e.SF450000 = 9575; + e.SF460000 = 9576; + e.SF470000 = 9572; + e.SF480000 = 9573; + e.SF490000 = 9561; + e.SF500000 = 9560; + e.SF510000 = 9554; + e.SF520000 = 9555; + e.SF530000 = 9579; + e.SF540000 = 9578; + e.Sacute = 346; + e.Sacutedotaccent = 7780; + e.Sampigreek = 992; + e.Scaron = 352; + e.Scarondotaccent = 7782; + e.Scaronsmall = 63229; + e.Scedilla = 350; + e.Schwa = 399; + e.Schwacyrillic = 1240; + e.Schwadieresiscyrillic = 1242; + e.Scircle = 9416; + e.Scircumflex = 348; + e.Scommaaccent = 536; + e.Sdotaccent = 7776; + e.Sdotbelow = 7778; + e.Sdotbelowdotaccent = 7784; + e.Seharmenian = 1357; + e.Sevenroman = 8550; + e.Shaarmenian = 1351; + e.Shacyrillic = 1064; + e.Shchacyrillic = 1065; + e.Sheicoptic = 994; + e.Shhacyrillic = 1210; + e.Shimacoptic = 1004; + e.Sigma = 931; + e.Sixroman = 8549; + e.Smonospace = 65331; + e.Softsigncyrillic = 1068; + e.Ssmall = 63347; + e.Stigmagreek = 986; + e.T = 84; + e.Tau = 932; + e.Tbar = 358; + e.Tcaron = 356; + e.Tcedilla = 354; + e.Tcircle = 9417; + e.Tcircumflexbelow = 7792; + e.Tcommaaccent = 354; + e.Tdotaccent = 7786; + e.Tdotbelow = 7788; + e.Tecyrillic = 1058; + e.Tedescendercyrillic = 1196; + e.Tenroman = 8553; + e.Tetsecyrillic = 1204; + e.Theta = 920; + e.Thook = 428; + e.Thorn = 222; + e.Thornsmall = 63486; + e.Threeroman = 8546; + e.Tildesmall = 63230; + e.Tiwnarmenian = 1359; + e.Tlinebelow = 7790; + e.Tmonospace = 65332; + e.Toarmenian = 1337; + e.Tonefive = 444; + e.Tonesix = 388; + e.Tonetwo = 423; + e.Tretroflexhook = 430; + e.Tsecyrillic = 1062; + e.Tshecyrillic = 1035; + e.Tsmall = 63348; + e.Twelveroman = 8555; + e.Tworoman = 8545; + e.U = 85; + e.Uacute = 218; + e.Uacutesmall = 63482; + e.Ubreve = 364; + e.Ucaron = 467; + e.Ucircle = 9418; + e.Ucircumflex = 219; + e.Ucircumflexbelow = 7798; + e.Ucircumflexsmall = 63483; + e.Ucyrillic = 1059; + e.Udblacute = 368; + e.Udblgrave = 532; + e.Udieresis = 220; + e.Udieresisacute = 471; + e.Udieresisbelow = 7794; + e.Udieresiscaron = 473; + e.Udieresiscyrillic = 1264; + e.Udieresisgrave = 475; + e.Udieresismacron = 469; + e.Udieresissmall = 63484; + e.Udotbelow = 7908; + e.Ugrave = 217; + e.Ugravesmall = 63481; + e.Uhookabove = 7910; + e.Uhorn = 431; + e.Uhornacute = 7912; + e.Uhorndotbelow = 7920; + e.Uhorngrave = 7914; + e.Uhornhookabove = 7916; + e.Uhorntilde = 7918; + e.Uhungarumlaut = 368; + e.Uhungarumlautcyrillic = 1266; + e.Uinvertedbreve = 534; + e.Ukcyrillic = 1144; + e.Umacron = 362; + e.Umacroncyrillic = 1262; + e.Umacrondieresis = 7802; + e.Umonospace = 65333; + e.Uogonek = 370; + e.Upsilon = 933; + e.Upsilon1 = 978; + e.Upsilonacutehooksymbolgreek = 979; + e.Upsilonafrican = 433; + e.Upsilondieresis = 939; + e.Upsilondieresishooksymbolgreek = 980; + e.Upsilonhooksymbol = 978; + e.Upsilontonos = 910; + e.Uring = 366; + e.Ushortcyrillic = 1038; + e.Usmall = 63349; + e.Ustraightcyrillic = 1198; + e.Ustraightstrokecyrillic = 1200; + e.Utilde = 360; + e.Utildeacute = 7800; + e.Utildebelow = 7796; + e.V = 86; + e.Vcircle = 9419; + e.Vdotbelow = 7806; + e.Vecyrillic = 1042; + e.Vewarmenian = 1358; + e.Vhook = 434; + e.Vmonospace = 65334; + e.Voarmenian = 1352; + e.Vsmall = 63350; + e.Vtilde = 7804; + e.W = 87; + e.Wacute = 7810; + e.Wcircle = 9420; + e.Wcircumflex = 372; + e.Wdieresis = 7812; + e.Wdotaccent = 7814; + e.Wdotbelow = 7816; + e.Wgrave = 7808; + e.Wmonospace = 65335; + e.Wsmall = 63351; + e.X = 88; + e.Xcircle = 9421; + e.Xdieresis = 7820; + e.Xdotaccent = 7818; + e.Xeharmenian = 1341; + e.Xi = 926; + e.Xmonospace = 65336; + e.Xsmall = 63352; + e.Y = 89; + e.Yacute = 221; + e.Yacutesmall = 63485; + e.Yatcyrillic = 1122; + e.Ycircle = 9422; + e.Ycircumflex = 374; + e.Ydieresis = 376; + e.Ydieresissmall = 63487; + e.Ydotaccent = 7822; + e.Ydotbelow = 7924; + e.Yericyrillic = 1067; + e.Yerudieresiscyrillic = 1272; + e.Ygrave = 7922; + e.Yhook = 435; + e.Yhookabove = 7926; + e.Yiarmenian = 1349; + e.Yicyrillic = 1031; + e.Yiwnarmenian = 1362; + e.Ymonospace = 65337; + e.Ysmall = 63353; + e.Ytilde = 7928; + e.Yusbigcyrillic = 1130; + e.Yusbigiotifiedcyrillic = 1132; + e.Yuslittlecyrillic = 1126; + e.Yuslittleiotifiedcyrillic = 1128; + e.Z = 90; + e.Zaarmenian = 1334; + e.Zacute = 377; + e.Zcaron = 381; + e.Zcaronsmall = 63231; + e.Zcircle = 9423; + e.Zcircumflex = 7824; + e.Zdot = 379; + e.Zdotaccent = 379; + e.Zdotbelow = 7826; + e.Zecyrillic = 1047; + e.Zedescendercyrillic = 1176; + e.Zedieresiscyrillic = 1246; + e.Zeta = 918; + e.Zhearmenian = 1338; + e.Zhebrevecyrillic = 1217; + e.Zhecyrillic = 1046; + e.Zhedescendercyrillic = 1174; + e.Zhedieresiscyrillic = 1244; + e.Zlinebelow = 7828; + e.Zmonospace = 65338; + e.Zsmall = 63354; + e.Zstroke = 437; + e.a = 97; + e.aabengali = 2438; + e.aacute = 225; + e.aadeva = 2310; + e.aagujarati = 2694; + e.aagurmukhi = 2566; + e.aamatragurmukhi = 2622; + e.aarusquare = 13059; + e.aavowelsignbengali = 2494; + e.aavowelsigndeva = 2366; + e.aavowelsigngujarati = 2750; + e.abbreviationmarkarmenian = 1375; + e.abbreviationsigndeva = 2416; + e.abengali = 2437; + e.abopomofo = 12570; + e.abreve = 259; + e.abreveacute = 7855; + e.abrevecyrillic = 1233; + e.abrevedotbelow = 7863; + e.abrevegrave = 7857; + e.abrevehookabove = 7859; + e.abrevetilde = 7861; + e.acaron = 462; + e.acircle = 9424; + e.acircumflex = 226; + e.acircumflexacute = 7845; + e.acircumflexdotbelow = 7853; + e.acircumflexgrave = 7847; + e.acircumflexhookabove = 7849; + e.acircumflextilde = 7851; + e.acute = 180; + e.acutebelowcmb = 791; + e.acutecmb = 769; + e.acutecomb = 769; + e.acutedeva = 2388; + e.acutelowmod = 719; + e.acutetonecmb = 833; + e.acyrillic = 1072; + e.adblgrave = 513; + e.addakgurmukhi = 2673; + e.adeva = 2309; + e.adieresis = 228; + e.adieresiscyrillic = 1235; + e.adieresismacron = 479; + e.adotbelow = 7841; + e.adotmacron = 481; + e.ae = 230; + e.aeacute = 509; + e.aekorean = 12624; + e.aemacron = 483; + e.afii00208 = 8213; + e.afii08941 = 8356; + e.afii10017 = 1040; + e.afii10018 = 1041; + e.afii10019 = 1042; + e.afii10020 = 1043; + e.afii10021 = 1044; + e.afii10022 = 1045; + e.afii10023 = 1025; + e.afii10024 = 1046; + e.afii10025 = 1047; + e.afii10026 = 1048; + e.afii10027 = 1049; + e.afii10028 = 1050; + e.afii10029 = 1051; + e.afii10030 = 1052; + e.afii10031 = 1053; + e.afii10032 = 1054; + e.afii10033 = 1055; + e.afii10034 = 1056; + e.afii10035 = 1057; + e.afii10036 = 1058; + e.afii10037 = 1059; + e.afii10038 = 1060; + e.afii10039 = 1061; + e.afii10040 = 1062; + e.afii10041 = 1063; + e.afii10042 = 1064; + e.afii10043 = 1065; + e.afii10044 = 1066; + e.afii10045 = 1067; + e.afii10046 = 1068; + e.afii10047 = 1069; + e.afii10048 = 1070; + e.afii10049 = 1071; + e.afii10050 = 1168; + e.afii10051 = 1026; + e.afii10052 = 1027; + e.afii10053 = 1028; + e.afii10054 = 1029; + e.afii10055 = 1030; + e.afii10056 = 1031; + e.afii10057 = 1032; + e.afii10058 = 1033; + e.afii10059 = 1034; + e.afii10060 = 1035; + e.afii10061 = 1036; + e.afii10062 = 1038; + e.afii10063 = 63172; + e.afii10064 = 63173; + e.afii10065 = 1072; + e.afii10066 = 1073; + e.afii10067 = 1074; + e.afii10068 = 1075; + e.afii10069 = 1076; + e.afii10070 = 1077; + e.afii10071 = 1105; + e.afii10072 = 1078; + e.afii10073 = 1079; + e.afii10074 = 1080; + e.afii10075 = 1081; + e.afii10076 = 1082; + e.afii10077 = 1083; + e.afii10078 = 1084; + e.afii10079 = 1085; + e.afii10080 = 1086; + e.afii10081 = 1087; + e.afii10082 = 1088; + e.afii10083 = 1089; + e.afii10084 = 1090; + e.afii10085 = 1091; + e.afii10086 = 1092; + e.afii10087 = 1093; + e.afii10088 = 1094; + e.afii10089 = 1095; + e.afii10090 = 1096; + e.afii10091 = 1097; + e.afii10092 = 1098; + e.afii10093 = 1099; + e.afii10094 = 1100; + e.afii10095 = 1101; + e.afii10096 = 1102; + e.afii10097 = 1103; + e.afii10098 = 1169; + e.afii10099 = 1106; + e.afii10100 = 1107; + e.afii10101 = 1108; + e.afii10102 = 1109; + e.afii10103 = 1110; + e.afii10104 = 1111; + e.afii10105 = 1112; + e.afii10106 = 1113; + e.afii10107 = 1114; + e.afii10108 = 1115; + e.afii10109 = 1116; + e.afii10110 = 1118; + e.afii10145 = 1039; + e.afii10146 = 1122; + e.afii10147 = 1138; + e.afii10148 = 1140; + e.afii10192 = 63174; + e.afii10193 = 1119; + e.afii10194 = 1123; + e.afii10195 = 1139; + e.afii10196 = 1141; + e.afii10831 = 63175; + e.afii10832 = 63176; + e.afii10846 = 1241; + e.afii299 = 8206; + e.afii300 = 8207; + e.afii301 = 8205; + e.afii57381 = 1642; + e.afii57388 = 1548; + e.afii57392 = 1632; + e.afii57393 = 1633; + e.afii57394 = 1634; + e.afii57395 = 1635; + e.afii57396 = 1636; + e.afii57397 = 1637; + e.afii57398 = 1638; + e.afii57399 = 1639; + e.afii57400 = 1640; + e.afii57401 = 1641; + e.afii57403 = 1563; + e.afii57407 = 1567; + e.afii57409 = 1569; + e.afii57410 = 1570; + e.afii57411 = 1571; + e.afii57412 = 1572; + e.afii57413 = 1573; + e.afii57414 = 1574; + e.afii57415 = 1575; + e.afii57416 = 1576; + e.afii57417 = 1577; + e.afii57418 = 1578; + e.afii57419 = 1579; + e.afii57420 = 1580; + e.afii57421 = 1581; + e.afii57422 = 1582; + e.afii57423 = 1583; + e.afii57424 = 1584; + e.afii57425 = 1585; + e.afii57426 = 1586; + e.afii57427 = 1587; + e.afii57428 = 1588; + e.afii57429 = 1589; + e.afii57430 = 1590; + e.afii57431 = 1591; + e.afii57432 = 1592; + e.afii57433 = 1593; + e.afii57434 = 1594; + e.afii57440 = 1600; + e.afii57441 = 1601; + e.afii57442 = 1602; + e.afii57443 = 1603; + e.afii57444 = 1604; + e.afii57445 = 1605; + e.afii57446 = 1606; + e.afii57448 = 1608; + e.afii57449 = 1609; + e.afii57450 = 1610; + e.afii57451 = 1611; + e.afii57452 = 1612; + e.afii57453 = 1613; + e.afii57454 = 1614; + e.afii57455 = 1615; + e.afii57456 = 1616; + e.afii57457 = 1617; + e.afii57458 = 1618; + e.afii57470 = 1607; + e.afii57505 = 1700; + e.afii57506 = 1662; + e.afii57507 = 1670; + e.afii57508 = 1688; + e.afii57509 = 1711; + e.afii57511 = 1657; + e.afii57512 = 1672; + e.afii57513 = 1681; + e.afii57514 = 1722; + e.afii57519 = 1746; + e.afii57534 = 1749; + e.afii57636 = 8362; + e.afii57645 = 1470; + e.afii57658 = 1475; + e.afii57664 = 1488; + e.afii57665 = 1489; + e.afii57666 = 1490; + e.afii57667 = 1491; + e.afii57668 = 1492; + e.afii57669 = 1493; + e.afii57670 = 1494; + e.afii57671 = 1495; + e.afii57672 = 1496; + e.afii57673 = 1497; + e.afii57674 = 1498; + e.afii57675 = 1499; + e.afii57676 = 1500; + e.afii57677 = 1501; + e.afii57678 = 1502; + e.afii57679 = 1503; + e.afii57680 = 1504; + e.afii57681 = 1505; + e.afii57682 = 1506; + e.afii57683 = 1507; + e.afii57684 = 1508; + e.afii57685 = 1509; + e.afii57686 = 1510; + e.afii57687 = 1511; + e.afii57688 = 1512; + e.afii57689 = 1513; + e.afii57690 = 1514; + e.afii57694 = 64298; + e.afii57695 = 64299; + e.afii57700 = 64331; + e.afii57705 = 64287; + e.afii57716 = 1520; + e.afii57717 = 1521; + e.afii57718 = 1522; + e.afii57723 = 64309; + e.afii57793 = 1460; + e.afii57794 = 1461; + e.afii57795 = 1462; + e.afii57796 = 1467; + e.afii57797 = 1464; + e.afii57798 = 1463; + e.afii57799 = 1456; + e.afii57800 = 1458; + e.afii57801 = 1457; + e.afii57802 = 1459; + e.afii57803 = 1474; + e.afii57804 = 1473; + e.afii57806 = 1465; + e.afii57807 = 1468; + e.afii57839 = 1469; + e.afii57841 = 1471; + e.afii57842 = 1472; + e.afii57929 = 700; + e.afii61248 = 8453; + e.afii61289 = 8467; + e.afii61352 = 8470; + e.afii61573 = 8236; + e.afii61574 = 8237; + e.afii61575 = 8238; + e.afii61664 = 8204; + e.afii63167 = 1645; + e.afii64937 = 701; + e.agrave = 224; + e.agujarati = 2693; + e.agurmukhi = 2565; + e.ahiragana = 12354; + e.ahookabove = 7843; + e.aibengali = 2448; + e.aibopomofo = 12574; + e.aideva = 2320; + e.aiecyrillic = 1237; + e.aigujarati = 2704; + e.aigurmukhi = 2576; + e.aimatragurmukhi = 2632; + e.ainarabic = 1593; + e.ainfinalarabic = 65226; + e.aininitialarabic = 65227; + e.ainmedialarabic = 65228; + e.ainvertedbreve = 515; + e.aivowelsignbengali = 2504; + e.aivowelsigndeva = 2376; + e.aivowelsigngujarati = 2760; + e.akatakana = 12450; + e.akatakanahalfwidth = 65393; + e.akorean = 12623; + e.alef = 1488; + e.alefarabic = 1575; + e.alefdageshhebrew = 64304; + e.aleffinalarabic = 65166; + e.alefhamzaabovearabic = 1571; + e.alefhamzaabovefinalarabic = 65156; + e.alefhamzabelowarabic = 1573; + e.alefhamzabelowfinalarabic = 65160; + e.alefhebrew = 1488; + e.aleflamedhebrew = 64335; + e.alefmaddaabovearabic = 1570; + e.alefmaddaabovefinalarabic = 65154; + e.alefmaksuraarabic = 1609; + e.alefmaksurafinalarabic = 65264; + e.alefmaksurainitialarabic = 65267; + e.alefmaksuramedialarabic = 65268; + e.alefpatahhebrew = 64302; + e.alefqamatshebrew = 64303; + e.aleph = 8501; + e.allequal = 8780; + e.alpha = 945; + e.alphatonos = 940; + e.amacron = 257; + e.amonospace = 65345; + e.ampersand = 38; + e.ampersandmonospace = 65286; + e.ampersandsmall = 63270; + e.amsquare = 13250; + e.anbopomofo = 12578; + e.angbopomofo = 12580; + e.angbracketleft = 12296; + e.angbracketright = 12297; + e.angkhankhuthai = 3674; + e.angle = 8736; + e.anglebracketleft = 12296; + e.anglebracketleftvertical = 65087; + e.anglebracketright = 12297; + e.anglebracketrightvertical = 65088; + e.angleleft = 9001; + e.angleright = 9002; + e.angstrom = 8491; + e.anoteleia = 903; + e.anudattadeva = 2386; + e.anusvarabengali = 2434; + e.anusvaradeva = 2306; + e.anusvaragujarati = 2690; + e.aogonek = 261; + e.apaatosquare = 13056; + e.aparen = 9372; + e.apostrophearmenian = 1370; + e.apostrophemod = 700; + e.apple = 63743; + e.approaches = 8784; + e.approxequal = 8776; + e.approxequalorimage = 8786; + e.approximatelyequal = 8773; + e.araeaekorean = 12686; + e.araeakorean = 12685; + e.arc = 8978; + e.arighthalfring = 7834; + e.aring = 229; + e.aringacute = 507; + e.aringbelow = 7681; + e.arrowboth = 8596; + e.arrowdashdown = 8675; + e.arrowdashleft = 8672; + e.arrowdashright = 8674; + e.arrowdashup = 8673; + e.arrowdblboth = 8660; + e.arrowdbldown = 8659; + e.arrowdblleft = 8656; + e.arrowdblright = 8658; + e.arrowdblup = 8657; + e.arrowdown = 8595; + e.arrowdownleft = 8601; + e.arrowdownright = 8600; + e.arrowdownwhite = 8681; + e.arrowheaddownmod = 709; + e.arrowheadleftmod = 706; + e.arrowheadrightmod = 707; + e.arrowheadupmod = 708; + e.arrowhorizex = 63719; + e.arrowleft = 8592; + e.arrowleftdbl = 8656; + e.arrowleftdblstroke = 8653; + e.arrowleftoverright = 8646; + e.arrowleftwhite = 8678; + e.arrowright = 8594; + e.arrowrightdblstroke = 8655; + e.arrowrightheavy = 10142; + e.arrowrightoverleft = 8644; + e.arrowrightwhite = 8680; + e.arrowtableft = 8676; + e.arrowtabright = 8677; + e.arrowup = 8593; + e.arrowupdn = 8597; + e.arrowupdnbse = 8616; + e.arrowupdownbase = 8616; + e.arrowupleft = 8598; + e.arrowupleftofdown = 8645; + e.arrowupright = 8599; + e.arrowupwhite = 8679; + e.arrowvertex = 63718; + e.asciicircum = 94; + e.asciicircummonospace = 65342; + e.asciitilde = 126; + e.asciitildemonospace = 65374; + e.ascript = 593; + e.ascriptturned = 594; + e.asmallhiragana = 12353; + e.asmallkatakana = 12449; + e.asmallkatakanahalfwidth = 65383; + e.asterisk = 42; + e.asteriskaltonearabic = 1645; + e.asteriskarabic = 1645; + e.asteriskmath = 8727; + e.asteriskmonospace = 65290; + e.asterisksmall = 65121; + e.asterism = 8258; + e.asuperior = 63209; + e.asymptoticallyequal = 8771; + e.at = 64; + e.atilde = 227; + e.atmonospace = 65312; + e.atsmall = 65131; + e.aturned = 592; + e.aubengali = 2452; + e.aubopomofo = 12576; + e.audeva = 2324; + e.augujarati = 2708; + e.augurmukhi = 2580; + e.aulengthmarkbengali = 2519; + e.aumatragurmukhi = 2636; + e.auvowelsignbengali = 2508; + e.auvowelsigndeva = 2380; + e.auvowelsigngujarati = 2764; + e.avagrahadeva = 2365; + e.aybarmenian = 1377; + e.ayin = 1506; + e.ayinaltonehebrew = 64288; + e.ayinhebrew = 1506; + e.b = 98; + e.babengali = 2476; + e.backslash = 92; + e.backslashmonospace = 65340; + e.badeva = 2348; + e.bagujarati = 2732; + e.bagurmukhi = 2604; + e.bahiragana = 12400; + e.bahtthai = 3647; + e.bakatakana = 12496; + e.bar = 124; + e.barmonospace = 65372; + e.bbopomofo = 12549; + e.bcircle = 9425; + e.bdotaccent = 7683; + e.bdotbelow = 7685; + e.beamedsixteenthnotes = 9836; + e.because = 8757; + e.becyrillic = 1073; + e.beharabic = 1576; + e.behfinalarabic = 65168; + e.behinitialarabic = 65169; + e.behiragana = 12409; + e.behmedialarabic = 65170; + e.behmeeminitialarabic = 64671; + e.behmeemisolatedarabic = 64520; + e.behnoonfinalarabic = 64621; + e.bekatakana = 12505; + e.benarmenian = 1378; + e.bet = 1489; + e.beta = 946; + e.betasymbolgreek = 976; + e.betdagesh = 64305; + e.betdageshhebrew = 64305; + e.bethebrew = 1489; + e.betrafehebrew = 64332; + e.bhabengali = 2477; + e.bhadeva = 2349; + e.bhagujarati = 2733; + e.bhagurmukhi = 2605; + e.bhook = 595; + e.bihiragana = 12403; + e.bikatakana = 12499; + e.bilabialclick = 664; + e.bindigurmukhi = 2562; + e.birusquare = 13105; + e.blackcircle = 9679; + e.blackdiamond = 9670; + e.blackdownpointingtriangle = 9660; + e.blackleftpointingpointer = 9668; + e.blackleftpointingtriangle = 9664; + e.blacklenticularbracketleft = 12304; + e.blacklenticularbracketleftvertical = 65083; + e.blacklenticularbracketright = 12305; + e.blacklenticularbracketrightvertical = 65084; + e.blacklowerlefttriangle = 9699; + e.blacklowerrighttriangle = 9698; + e.blackrectangle = 9644; + e.blackrightpointingpointer = 9658; + e.blackrightpointingtriangle = 9654; + e.blacksmallsquare = 9642; + e.blacksmilingface = 9787; + e.blacksquare = 9632; + e.blackstar = 9733; + e.blackupperlefttriangle = 9700; + e.blackupperrighttriangle = 9701; + e.blackuppointingsmalltriangle = 9652; + e.blackuppointingtriangle = 9650; + e.blank = 9251; + e.blinebelow = 7687; + e.block = 9608; + e.bmonospace = 65346; + e.bobaimaithai = 3610; + e.bohiragana = 12412; + e.bokatakana = 12508; + e.bparen = 9373; + e.bqsquare = 13251; + e.braceex = 63732; + e.braceleft = 123; + e.braceleftbt = 63731; + e.braceleftmid = 63730; + e.braceleftmonospace = 65371; + e.braceleftsmall = 65115; + e.bracelefttp = 63729; + e.braceleftvertical = 65079; + e.braceright = 125; + e.bracerightbt = 63742; + e.bracerightmid = 63741; + e.bracerightmonospace = 65373; + e.bracerightsmall = 65116; + e.bracerighttp = 63740; + e.bracerightvertical = 65080; + e.bracketleft = 91; + e.bracketleftbt = 63728; + e.bracketleftex = 63727; + e.bracketleftmonospace = 65339; + e.bracketlefttp = 63726; + e.bracketright = 93; + e.bracketrightbt = 63739; + e.bracketrightex = 63738; + e.bracketrightmonospace = 65341; + e.bracketrighttp = 63737; + e.breve = 728; + e.brevebelowcmb = 814; + e.brevecmb = 774; + e.breveinvertedbelowcmb = 815; + e.breveinvertedcmb = 785; + e.breveinverteddoublecmb = 865; + e.bridgebelowcmb = 810; + e.bridgeinvertedbelowcmb = 826; + e.brokenbar = 166; + e.bstroke = 384; + e.bsuperior = 63210; + e.btopbar = 387; + e.buhiragana = 12406; + e.bukatakana = 12502; + e.bullet = 8226; + e.bulletinverse = 9688; + e.bulletoperator = 8729; + e.bullseye = 9678; + e.c = 99; + e.caarmenian = 1390; + e.cabengali = 2458; + e.cacute = 263; + e.cadeva = 2330; + e.cagujarati = 2714; + e.cagurmukhi = 2586; + e.calsquare = 13192; + e.candrabindubengali = 2433; + e.candrabinducmb = 784; + e.candrabindudeva = 2305; + e.candrabindugujarati = 2689; + e.capslock = 8682; + e.careof = 8453; + e.caron = 711; + e.caronbelowcmb = 812; + e.caroncmb = 780; + e.carriagereturn = 8629; + e.cbopomofo = 12568; + e.ccaron = 269; + e.ccedilla = 231; + e.ccedillaacute = 7689; + e.ccircle = 9426; + e.ccircumflex = 265; + e.ccurl = 597; + e.cdot = 267; + e.cdotaccent = 267; + e.cdsquare = 13253; + e.cedilla = 184; + e.cedillacmb = 807; + e.cent = 162; + e.centigrade = 8451; + e.centinferior = 63199; + e.centmonospace = 65504; + e.centoldstyle = 63394; + e.centsuperior = 63200; + e.chaarmenian = 1401; + e.chabengali = 2459; + e.chadeva = 2331; + e.chagujarati = 2715; + e.chagurmukhi = 2587; + e.chbopomofo = 12564; + e.cheabkhasiancyrillic = 1213; + e.checkmark = 10003; + e.checyrillic = 1095; + e.chedescenderabkhasiancyrillic = 1215; + e.chedescendercyrillic = 1207; + e.chedieresiscyrillic = 1269; + e.cheharmenian = 1395; + e.chekhakassiancyrillic = 1228; + e.cheverticalstrokecyrillic = 1209; + e.chi = 967; + e.chieuchacirclekorean = 12919; + e.chieuchaparenkorean = 12823; + e.chieuchcirclekorean = 12905; + e.chieuchkorean = 12618; + e.chieuchparenkorean = 12809; + e.chochangthai = 3594; + e.chochanthai = 3592; + e.chochingthai = 3593; + e.chochoethai = 3596; + e.chook = 392; + e.cieucacirclekorean = 12918; + e.cieucaparenkorean = 12822; + e.cieuccirclekorean = 12904; + e.cieuckorean = 12616; + e.cieucparenkorean = 12808; + e.cieucuparenkorean = 12828; + e.circle = 9675; + e.circlecopyrt = 169; + e.circlemultiply = 8855; + e.circleot = 8857; + e.circleplus = 8853; + e.circlepostalmark = 12342; + e.circlewithlefthalfblack = 9680; + e.circlewithrighthalfblack = 9681; + e.circumflex = 710; + e.circumflexbelowcmb = 813; + e.circumflexcmb = 770; + e.clear = 8999; + e.clickalveolar = 450; + e.clickdental = 448; + e.clicklateral = 449; + e.clickretroflex = 451; + e.club = 9827; + e.clubsuitblack = 9827; + e.clubsuitwhite = 9831; + e.cmcubedsquare = 13220; + e.cmonospace = 65347; + e.cmsquaredsquare = 13216; + e.coarmenian = 1409; + e.colon = 58; + e.colonmonetary = 8353; + e.colonmonospace = 65306; + e.colonsign = 8353; + e.colonsmall = 65109; + e.colontriangularhalfmod = 721; + e.colontriangularmod = 720; + e.comma = 44; + e.commaabovecmb = 787; + e.commaaboverightcmb = 789; + e.commaaccent = 63171; + e.commaarabic = 1548; + e.commaarmenian = 1373; + e.commainferior = 63201; + e.commamonospace = 65292; + e.commareversedabovecmb = 788; + e.commareversedmod = 701; + e.commasmall = 65104; + e.commasuperior = 63202; + e.commaturnedabovecmb = 786; + e.commaturnedmod = 699; + e.compass = 9788; + e.congruent = 8773; + e.contourintegral = 8750; + e.control = 8963; + e.controlACK = 6; + e.controlBEL = 7; + e.controlBS = 8; + e.controlCAN = 24; + e.controlCR = 13; + e.controlDC1 = 17; + e.controlDC2 = 18; + e.controlDC3 = 19; + e.controlDC4 = 20; + e.controlDEL = 127; + e.controlDLE = 16; + e.controlEM = 25; + e.controlENQ = 5; + e.controlEOT = 4; + e.controlESC = 27; + e.controlETB = 23; + e.controlETX = 3; + e.controlFF = 12; + e.controlFS = 28; + e.controlGS = 29; + e.controlHT = 9; + e.controlLF = 10; + e.controlNAK = 21; + e.controlNULL = 0; + e.controlRS = 30; + e.controlSI = 15; + e.controlSO = 14; + e.controlSOT = 2; + e.controlSTX = 1; + e.controlSUB = 26; + e.controlSYN = 22; + e.controlUS = 31; + e.controlVT = 11; + e.copyright = 169; + e.copyrightsans = 63721; + e.copyrightserif = 63193; + e.cornerbracketleft = 12300; + e.cornerbracketlefthalfwidth = 65378; + e.cornerbracketleftvertical = 65089; + e.cornerbracketright = 12301; + e.cornerbracketrighthalfwidth = 65379; + e.cornerbracketrightvertical = 65090; + e.corporationsquare = 13183; + e.cosquare = 13255; + e.coverkgsquare = 13254; + e.cparen = 9374; + e.cruzeiro = 8354; + e.cstretched = 663; + e.curlyand = 8911; + e.curlyor = 8910; + e.currency = 164; + e.cyrBreve = 63185; + e.cyrFlex = 63186; + e.cyrbreve = 63188; + e.cyrflex = 63189; + e.d = 100; + e.daarmenian = 1380; + e.dabengali = 2470; + e.dadarabic = 1590; + e.dadeva = 2342; + e.dadfinalarabic = 65214; + e.dadinitialarabic = 65215; + e.dadmedialarabic = 65216; + e.dagesh = 1468; + e.dageshhebrew = 1468; + e.dagger = 8224; + e.daggerdbl = 8225; + e.dagujarati = 2726; + e.dagurmukhi = 2598; + e.dahiragana = 12384; + e.dakatakana = 12480; + e.dalarabic = 1583; + e.dalet = 1491; + e.daletdagesh = 64307; + e.daletdageshhebrew = 64307; + e.dalethebrew = 1491; + e.dalfinalarabic = 65194; + e.dammaarabic = 1615; + e.dammalowarabic = 1615; + e.dammatanaltonearabic = 1612; + e.dammatanarabic = 1612; + e.danda = 2404; + e.dargahebrew = 1447; + e.dargalefthebrew = 1447; + e.dasiapneumatacyrilliccmb = 1157; + e.dblGrave = 63187; + e.dblanglebracketleft = 12298; + e.dblanglebracketleftvertical = 65085; + e.dblanglebracketright = 12299; + e.dblanglebracketrightvertical = 65086; + e.dblarchinvertedbelowcmb = 811; + e.dblarrowleft = 8660; + e.dblarrowright = 8658; + e.dbldanda = 2405; + e.dblgrave = 63190; + e.dblgravecmb = 783; + e.dblintegral = 8748; + e.dbllowline = 8215; + e.dbllowlinecmb = 819; + e.dbloverlinecmb = 831; + e.dblprimemod = 698; + e.dblverticalbar = 8214; + e.dblverticallineabovecmb = 782; + e.dbopomofo = 12553; + e.dbsquare = 13256; + e.dcaron = 271; + e.dcedilla = 7697; + e.dcircle = 9427; + e.dcircumflexbelow = 7699; + e.dcroat = 273; + e.ddabengali = 2465; + e.ddadeva = 2337; + e.ddagujarati = 2721; + e.ddagurmukhi = 2593; + e.ddalarabic = 1672; + e.ddalfinalarabic = 64393; + e.dddhadeva = 2396; + e.ddhabengali = 2466; + e.ddhadeva = 2338; + e.ddhagujarati = 2722; + e.ddhagurmukhi = 2594; + e.ddotaccent = 7691; + e.ddotbelow = 7693; + e.decimalseparatorarabic = 1643; + e.decimalseparatorpersian = 1643; + e.decyrillic = 1076; + e.degree = 176; + e.dehihebrew = 1453; + e.dehiragana = 12391; + e.deicoptic = 1007; + e.dekatakana = 12487; + e.deleteleft = 9003; + e.deleteright = 8998; + e.delta = 948; + e.deltaturned = 397; + e.denominatorminusonenumeratorbengali = 2552; + e.dezh = 676; + e.dhabengali = 2471; + e.dhadeva = 2343; + e.dhagujarati = 2727; + e.dhagurmukhi = 2599; + e.dhook = 599; + e.dialytikatonos = 901; + e.dialytikatonoscmb = 836; + e.diamond = 9830; + e.diamondsuitwhite = 9826; + e.dieresis = 168; + e.dieresisacute = 63191; + e.dieresisbelowcmb = 804; + e.dieresiscmb = 776; + e.dieresisgrave = 63192; + e.dieresistonos = 901; + e.dihiragana = 12386; + e.dikatakana = 12482; + e.dittomark = 12291; + e.divide = 247; + e.divides = 8739; + e.divisionslash = 8725; + e.djecyrillic = 1106; + e.dkshade = 9619; + e.dlinebelow = 7695; + e.dlsquare = 13207; + e.dmacron = 273; + e.dmonospace = 65348; + e.dnblock = 9604; + e.dochadathai = 3598; + e.dodekthai = 3604; + e.dohiragana = 12393; + e.dokatakana = 12489; + e.dollar = 36; + e.dollarinferior = 63203; + e.dollarmonospace = 65284; + e.dollaroldstyle = 63268; + e.dollarsmall = 65129; + e.dollarsuperior = 63204; + e.dong = 8363; + e.dorusquare = 13094; + e.dotaccent = 729; + e.dotaccentcmb = 775; + e.dotbelowcmb = 803; + e.dotbelowcomb = 803; + e.dotkatakana = 12539; + e.dotlessi = 305; + e.dotlessj = 63166; + e.dotlessjstrokehook = 644; + e.dotmath = 8901; + e.dottedcircle = 9676; + e.doubleyodpatah = 64287; + e.doubleyodpatahhebrew = 64287; + e.downtackbelowcmb = 798; + e.downtackmod = 725; + e.dparen = 9375; + e.dsuperior = 63211; + e.dtail = 598; + e.dtopbar = 396; + e.duhiragana = 12389; + e.dukatakana = 12485; + e.dz = 499; + e.dzaltone = 675; + e.dzcaron = 454; + e.dzcurl = 677; + e.dzeabkhasiancyrillic = 1249; + e.dzecyrillic = 1109; + e.dzhecyrillic = 1119; + e.e = 101; + e.eacute = 233; + e.earth = 9793; + e.ebengali = 2447; + e.ebopomofo = 12572; + e.ebreve = 277; + e.ecandradeva = 2317; + e.ecandragujarati = 2701; + e.ecandravowelsigndeva = 2373; + e.ecandravowelsigngujarati = 2757; + e.ecaron = 283; + e.ecedillabreve = 7709; + e.echarmenian = 1381; + e.echyiwnarmenian = 1415; + e.ecircle = 9428; + e.ecircumflex = 234; + e.ecircumflexacute = 7871; + e.ecircumflexbelow = 7705; + e.ecircumflexdotbelow = 7879; + e.ecircumflexgrave = 7873; + e.ecircumflexhookabove = 7875; + e.ecircumflextilde = 7877; + e.ecyrillic = 1108; + e.edblgrave = 517; + e.edeva = 2319; + e.edieresis = 235; + e.edot = 279; + e.edotaccent = 279; + e.edotbelow = 7865; + e.eegurmukhi = 2575; + e.eematragurmukhi = 2631; + e.efcyrillic = 1092; + e.egrave = 232; + e.egujarati = 2703; + e.eharmenian = 1383; + e.ehbopomofo = 12573; + e.ehiragana = 12360; + e.ehookabove = 7867; + e.eibopomofo = 12575; + e.eight = 56; + e.eightarabic = 1640; + e.eightbengali = 2542; + e.eightcircle = 9319; + e.eightcircleinversesansserif = 10129; + e.eightdeva = 2414; + e.eighteencircle = 9329; + e.eighteenparen = 9349; + e.eighteenperiod = 9369; + e.eightgujarati = 2798; + e.eightgurmukhi = 2670; + e.eighthackarabic = 1640; + e.eighthangzhou = 12328; + e.eighthnotebeamed = 9835; + e.eightideographicparen = 12839; + e.eightinferior = 8328; + e.eightmonospace = 65304; + e.eightoldstyle = 63288; + e.eightparen = 9339; + e.eightperiod = 9359; + e.eightpersian = 1784; + e.eightroman = 8567; + e.eightsuperior = 8312; + e.eightthai = 3672; + e.einvertedbreve = 519; + e.eiotifiedcyrillic = 1125; + e.ekatakana = 12456; + e.ekatakanahalfwidth = 65396; + e.ekonkargurmukhi = 2676; + e.ekorean = 12628; + e.elcyrillic = 1083; + e.element = 8712; + e.elevencircle = 9322; + e.elevenparen = 9342; + e.elevenperiod = 9362; + e.elevenroman = 8570; + e.ellipsis = 8230; + e.ellipsisvertical = 8942; + e.emacron = 275; + e.emacronacute = 7703; + e.emacrongrave = 7701; + e.emcyrillic = 1084; + e.emdash = 8212; + e.emdashvertical = 65073; + e.emonospace = 65349; + e.emphasismarkarmenian = 1371; + e.emptyset = 8709; + e.enbopomofo = 12579; + e.encyrillic = 1085; + e.endash = 8211; + e.endashvertical = 65074; + e.endescendercyrillic = 1187; + e.eng = 331; + e.engbopomofo = 12581; + e.enghecyrillic = 1189; + e.enhookcyrillic = 1224; + e.enspace = 8194; + e.eogonek = 281; + e.eokorean = 12627; + e.eopen = 603; + e.eopenclosed = 666; + e.eopenreversed = 604; + e.eopenreversedclosed = 606; + e.eopenreversedhook = 605; + e.eparen = 9376; + e.epsilon = 949; + e.epsilontonos = 941; + e.equal = 61; + e.equalmonospace = 65309; + e.equalsmall = 65126; + e.equalsuperior = 8316; + e.equivalence = 8801; + e.erbopomofo = 12582; + e.ercyrillic = 1088; + e.ereversed = 600; + e.ereversedcyrillic = 1101; + e.escyrillic = 1089; + e.esdescendercyrillic = 1195; + e.esh = 643; + e.eshcurl = 646; + e.eshortdeva = 2318; + e.eshortvowelsigndeva = 2374; + e.eshreversedloop = 426; + e.eshsquatreversed = 645; + e.esmallhiragana = 12359; + e.esmallkatakana = 12455; + e.esmallkatakanahalfwidth = 65386; + e.estimated = 8494; + e.esuperior = 63212; + e.eta = 951; + e.etarmenian = 1384; + e.etatonos = 942; + e.eth = 240; + e.etilde = 7869; + e.etildebelow = 7707; + e.etnahtafoukhhebrew = 1425; + e.etnahtafoukhlefthebrew = 1425; + e.etnahtahebrew = 1425; + e.etnahtalefthebrew = 1425; + e.eturned = 477; + e.eukorean = 12641; + e.euro = 8364; + e.evowelsignbengali = 2503; + e.evowelsigndeva = 2375; + e.evowelsigngujarati = 2759; + e.exclam = 33; + e.exclamarmenian = 1372; + e.exclamdbl = 8252; + e.exclamdown = 161; + e.exclamdownsmall = 63393; + e.exclammonospace = 65281; + e.exclamsmall = 63265; + e.existential = 8707; + e.ezh = 658; + e.ezhcaron = 495; + e.ezhcurl = 659; + e.ezhreversed = 441; + e.ezhtail = 442; + e.f = 102; + e.fadeva = 2398; + e.fagurmukhi = 2654; + e.fahrenheit = 8457; + e.fathaarabic = 1614; + e.fathalowarabic = 1614; + e.fathatanarabic = 1611; + e.fbopomofo = 12552; + e.fcircle = 9429; + e.fdotaccent = 7711; + e.feharabic = 1601; + e.feharmenian = 1414; + e.fehfinalarabic = 65234; + e.fehinitialarabic = 65235; + e.fehmedialarabic = 65236; + e.feicoptic = 997; + e.female = 9792; + e.ff = 64256; + e.f_f = 64256; + e.ffi = 64259; + e.f_f_i = 64259; + e.ffl = 64260; + e.f_f_l = 64260; + e.fi = 64257; + e.f_i = 64257; + e.fifteencircle = 9326; + e.fifteenparen = 9346; + e.fifteenperiod = 9366; + e.figuredash = 8210; + e.filledbox = 9632; + e.filledrect = 9644; + e.finalkaf = 1498; + e.finalkafdagesh = 64314; + e.finalkafdageshhebrew = 64314; + e.finalkafhebrew = 1498; + e.finalmem = 1501; + e.finalmemhebrew = 1501; + e.finalnun = 1503; + e.finalnunhebrew = 1503; + e.finalpe = 1507; + e.finalpehebrew = 1507; + e.finaltsadi = 1509; + e.finaltsadihebrew = 1509; + e.firsttonechinese = 713; + e.fisheye = 9673; + e.fitacyrillic = 1139; + e.five = 53; + e.fivearabic = 1637; + e.fivebengali = 2539; + e.fivecircle = 9316; + e.fivecircleinversesansserif = 10126; + e.fivedeva = 2411; + e.fiveeighths = 8541; + e.fivegujarati = 2795; + e.fivegurmukhi = 2667; + e.fivehackarabic = 1637; + e.fivehangzhou = 12325; + e.fiveideographicparen = 12836; + e.fiveinferior = 8325; + e.fivemonospace = 65301; + e.fiveoldstyle = 63285; + e.fiveparen = 9336; + e.fiveperiod = 9356; + e.fivepersian = 1781; + e.fiveroman = 8564; + e.fivesuperior = 8309; + e.fivethai = 3669; + e.fl = 64258; + e.f_l = 64258; + e.florin = 402; + e.fmonospace = 65350; + e.fmsquare = 13209; + e.fofanthai = 3615; + e.fofathai = 3613; + e.fongmanthai = 3663; + e.forall = 8704; + e.four = 52; + e.fourarabic = 1636; + e.fourbengali = 2538; + e.fourcircle = 9315; + e.fourcircleinversesansserif = 10125; + e.fourdeva = 2410; + e.fourgujarati = 2794; + e.fourgurmukhi = 2666; + e.fourhackarabic = 1636; + e.fourhangzhou = 12324; + e.fourideographicparen = 12835; + e.fourinferior = 8324; + e.fourmonospace = 65300; + e.fournumeratorbengali = 2551; + e.fouroldstyle = 63284; + e.fourparen = 9335; + e.fourperiod = 9355; + e.fourpersian = 1780; + e.fourroman = 8563; + e.foursuperior = 8308; + e.fourteencircle = 9325; + e.fourteenparen = 9345; + e.fourteenperiod = 9365; + e.fourthai = 3668; + e.fourthtonechinese = 715; + e.fparen = 9377; + e.fraction = 8260; + e.franc = 8355; + e.g = 103; + e.gabengali = 2455; + e.gacute = 501; + e.gadeva = 2327; + e.gafarabic = 1711; + e.gaffinalarabic = 64403; + e.gafinitialarabic = 64404; + e.gafmedialarabic = 64405; + e.gagujarati = 2711; + e.gagurmukhi = 2583; + e.gahiragana = 12364; + e.gakatakana = 12460; + e.gamma = 947; + e.gammalatinsmall = 611; + e.gammasuperior = 736; + e.gangiacoptic = 1003; + e.gbopomofo = 12557; + e.gbreve = 287; + e.gcaron = 487; + e.gcedilla = 291; + e.gcircle = 9430; + e.gcircumflex = 285; + e.gcommaaccent = 291; + e.gdot = 289; + e.gdotaccent = 289; + e.gecyrillic = 1075; + e.gehiragana = 12370; + e.gekatakana = 12466; + e.geometricallyequal = 8785; + e.gereshaccenthebrew = 1436; + e.gereshhebrew = 1523; + e.gereshmuqdamhebrew = 1437; + e.germandbls = 223; + e.gershayimaccenthebrew = 1438; + e.gershayimhebrew = 1524; + e.getamark = 12307; + e.ghabengali = 2456; + e.ghadarmenian = 1394; + e.ghadeva = 2328; + e.ghagujarati = 2712; + e.ghagurmukhi = 2584; + e.ghainarabic = 1594; + e.ghainfinalarabic = 65230; + e.ghaininitialarabic = 65231; + e.ghainmedialarabic = 65232; + e.ghemiddlehookcyrillic = 1173; + e.ghestrokecyrillic = 1171; + e.gheupturncyrillic = 1169; + e.ghhadeva = 2394; + e.ghhagurmukhi = 2650; + e.ghook = 608; + e.ghzsquare = 13203; + e.gihiragana = 12366; + e.gikatakana = 12462; + e.gimarmenian = 1379; + e.gimel = 1490; + e.gimeldagesh = 64306; + e.gimeldageshhebrew = 64306; + e.gimelhebrew = 1490; + e.gjecyrillic = 1107; + e.glottalinvertedstroke = 446; + e.glottalstop = 660; + e.glottalstopinverted = 662; + e.glottalstopmod = 704; + e.glottalstopreversed = 661; + e.glottalstopreversedmod = 705; + e.glottalstopreversedsuperior = 740; + e.glottalstopstroke = 673; + e.glottalstopstrokereversed = 674; + e.gmacron = 7713; + e.gmonospace = 65351; + e.gohiragana = 12372; + e.gokatakana = 12468; + e.gparen = 9378; + e.gpasquare = 13228; + e.gradient = 8711; + e.grave = 96; + e.gravebelowcmb = 790; + e.gravecmb = 768; + e.gravecomb = 768; + e.gravedeva = 2387; + e.gravelowmod = 718; + e.gravemonospace = 65344; + e.gravetonecmb = 832; + e.greater = 62; + e.greaterequal = 8805; + e.greaterequalorless = 8923; + e.greatermonospace = 65310; + e.greaterorequivalent = 8819; + e.greaterorless = 8823; + e.greateroverequal = 8807; + e.greatersmall = 65125; + e.gscript = 609; + e.gstroke = 485; + e.guhiragana = 12368; + e.guillemotleft = 171; + e.guillemotright = 187; + e.guilsinglleft = 8249; + e.guilsinglright = 8250; + e.gukatakana = 12464; + e.guramusquare = 13080; + e.gysquare = 13257; + e.h = 104; + e.haabkhasiancyrillic = 1193; + e.haaltonearabic = 1729; + e.habengali = 2489; + e.hadescendercyrillic = 1203; + e.hadeva = 2361; + e.hagujarati = 2745; + e.hagurmukhi = 2617; + e.haharabic = 1581; + e.hahfinalarabic = 65186; + e.hahinitialarabic = 65187; + e.hahiragana = 12399; + e.hahmedialarabic = 65188; + e.haitusquare = 13098; + e.hakatakana = 12495; + e.hakatakanahalfwidth = 65418; + e.halantgurmukhi = 2637; + e.hamzaarabic = 1569; + e.hamzalowarabic = 1569; + e.hangulfiller = 12644; + e.hardsigncyrillic = 1098; + e.harpoonleftbarbup = 8636; + e.harpoonrightbarbup = 8640; + e.hasquare = 13258; + e.hatafpatah = 1458; + e.hatafpatah16 = 1458; + e.hatafpatah23 = 1458; + e.hatafpatah2f = 1458; + e.hatafpatahhebrew = 1458; + e.hatafpatahnarrowhebrew = 1458; + e.hatafpatahquarterhebrew = 1458; + e.hatafpatahwidehebrew = 1458; + e.hatafqamats = 1459; + e.hatafqamats1b = 1459; + e.hatafqamats28 = 1459; + e.hatafqamats34 = 1459; + e.hatafqamatshebrew = 1459; + e.hatafqamatsnarrowhebrew = 1459; + e.hatafqamatsquarterhebrew = 1459; + e.hatafqamatswidehebrew = 1459; + e.hatafsegol = 1457; + e.hatafsegol17 = 1457; + e.hatafsegol24 = 1457; + e.hatafsegol30 = 1457; + e.hatafsegolhebrew = 1457; + e.hatafsegolnarrowhebrew = 1457; + e.hatafsegolquarterhebrew = 1457; + e.hatafsegolwidehebrew = 1457; + e.hbar = 295; + e.hbopomofo = 12559; + e.hbrevebelow = 7723; + e.hcedilla = 7721; + e.hcircle = 9431; + e.hcircumflex = 293; + e.hdieresis = 7719; + e.hdotaccent = 7715; + e.hdotbelow = 7717; + e.he = 1492; + e.heart = 9829; + e.heartsuitblack = 9829; + e.heartsuitwhite = 9825; + e.hedagesh = 64308; + e.hedageshhebrew = 64308; + e.hehaltonearabic = 1729; + e.heharabic = 1607; + e.hehebrew = 1492; + e.hehfinalaltonearabic = 64423; + e.hehfinalalttwoarabic = 65258; + e.hehfinalarabic = 65258; + e.hehhamzaabovefinalarabic = 64421; + e.hehhamzaaboveisolatedarabic = 64420; + e.hehinitialaltonearabic = 64424; + e.hehinitialarabic = 65259; + e.hehiragana = 12408; + e.hehmedialaltonearabic = 64425; + e.hehmedialarabic = 65260; + e.heiseierasquare = 13179; + e.hekatakana = 12504; + e.hekatakanahalfwidth = 65421; + e.hekutaarusquare = 13110; + e.henghook = 615; + e.herutusquare = 13113; + e.het = 1495; + e.hethebrew = 1495; + e.hhook = 614; + e.hhooksuperior = 689; + e.hieuhacirclekorean = 12923; + e.hieuhaparenkorean = 12827; + e.hieuhcirclekorean = 12909; + e.hieuhkorean = 12622; + e.hieuhparenkorean = 12813; + e.hihiragana = 12402; + e.hikatakana = 12498; + e.hikatakanahalfwidth = 65419; + e.hiriq = 1460; + e.hiriq14 = 1460; + e.hiriq21 = 1460; + e.hiriq2d = 1460; + e.hiriqhebrew = 1460; + e.hiriqnarrowhebrew = 1460; + e.hiriqquarterhebrew = 1460; + e.hiriqwidehebrew = 1460; + e.hlinebelow = 7830; + e.hmonospace = 65352; + e.hoarmenian = 1392; + e.hohipthai = 3627; + e.hohiragana = 12411; + e.hokatakana = 12507; + e.hokatakanahalfwidth = 65422; + e.holam = 1465; + e.holam19 = 1465; + e.holam26 = 1465; + e.holam32 = 1465; + e.holamhebrew = 1465; + e.holamnarrowhebrew = 1465; + e.holamquarterhebrew = 1465; + e.holamwidehebrew = 1465; + e.honokhukthai = 3630; + e.hookabovecomb = 777; + e.hookcmb = 777; + e.hookpalatalizedbelowcmb = 801; + e.hookretroflexbelowcmb = 802; + e.hoonsquare = 13122; + e.horicoptic = 1001; + e.horizontalbar = 8213; + e.horncmb = 795; + e.hotsprings = 9832; + e.house = 8962; + e.hparen = 9379; + e.hsuperior = 688; + e.hturned = 613; + e.huhiragana = 12405; + e.huiitosquare = 13107; + e.hukatakana = 12501; + e.hukatakanahalfwidth = 65420; + e.hungarumlaut = 733; + e.hungarumlautcmb = 779; + e.hv = 405; + e.hyphen = 45; + e.hypheninferior = 63205; + e.hyphenmonospace = 65293; + e.hyphensmall = 65123; + e.hyphensuperior = 63206; + e.hyphentwo = 8208; + e.i = 105; + e.iacute = 237; + e.iacyrillic = 1103; + e.ibengali = 2439; + e.ibopomofo = 12583; + e.ibreve = 301; + e.icaron = 464; + e.icircle = 9432; + e.icircumflex = 238; + e.icyrillic = 1110; + e.idblgrave = 521; + e.ideographearthcircle = 12943; + e.ideographfirecircle = 12939; + e.ideographicallianceparen = 12863; + e.ideographiccallparen = 12858; + e.ideographiccentrecircle = 12965; + e.ideographicclose = 12294; + e.ideographiccomma = 12289; + e.ideographiccommaleft = 65380; + e.ideographiccongratulationparen = 12855; + e.ideographiccorrectcircle = 12963; + e.ideographicearthparen = 12847; + e.ideographicenterpriseparen = 12861; + e.ideographicexcellentcircle = 12957; + e.ideographicfestivalparen = 12864; + e.ideographicfinancialcircle = 12950; + e.ideographicfinancialparen = 12854; + e.ideographicfireparen = 12843; + e.ideographichaveparen = 12850; + e.ideographichighcircle = 12964; + e.ideographiciterationmark = 12293; + e.ideographiclaborcircle = 12952; + e.ideographiclaborparen = 12856; + e.ideographicleftcircle = 12967; + e.ideographiclowcircle = 12966; + e.ideographicmedicinecircle = 12969; + e.ideographicmetalparen = 12846; + e.ideographicmoonparen = 12842; + e.ideographicnameparen = 12852; + e.ideographicperiod = 12290; + e.ideographicprintcircle = 12958; + e.ideographicreachparen = 12867; + e.ideographicrepresentparen = 12857; + e.ideographicresourceparen = 12862; + e.ideographicrightcircle = 12968; + e.ideographicsecretcircle = 12953; + e.ideographicselfparen = 12866; + e.ideographicsocietyparen = 12851; + e.ideographicspace = 12288; + e.ideographicspecialparen = 12853; + e.ideographicstockparen = 12849; + e.ideographicstudyparen = 12859; + e.ideographicsunparen = 12848; + e.ideographicsuperviseparen = 12860; + e.ideographicwaterparen = 12844; + e.ideographicwoodparen = 12845; + e.ideographiczero = 12295; + e.ideographmetalcircle = 12942; + e.ideographmooncircle = 12938; + e.ideographnamecircle = 12948; + e.ideographsuncircle = 12944; + e.ideographwatercircle = 12940; + e.ideographwoodcircle = 12941; + e.ideva = 2311; + e.idieresis = 239; + e.idieresisacute = 7727; + e.idieresiscyrillic = 1253; + e.idotbelow = 7883; + e.iebrevecyrillic = 1239; + e.iecyrillic = 1077; + e.ieungacirclekorean = 12917; + e.ieungaparenkorean = 12821; + e.ieungcirclekorean = 12903; + e.ieungkorean = 12615; + e.ieungparenkorean = 12807; + e.igrave = 236; + e.igujarati = 2695; + e.igurmukhi = 2567; + e.ihiragana = 12356; + e.ihookabove = 7881; + e.iibengali = 2440; + e.iicyrillic = 1080; + e.iideva = 2312; + e.iigujarati = 2696; + e.iigurmukhi = 2568; + e.iimatragurmukhi = 2624; + e.iinvertedbreve = 523; + e.iishortcyrillic = 1081; + e.iivowelsignbengali = 2496; + e.iivowelsigndeva = 2368; + e.iivowelsigngujarati = 2752; + e.ij = 307; + e.ikatakana = 12452; + e.ikatakanahalfwidth = 65394; + e.ikorean = 12643; + e.ilde = 732; + e.iluyhebrew = 1452; + e.imacron = 299; + e.imacroncyrillic = 1251; + e.imageorapproximatelyequal = 8787; + e.imatragurmukhi = 2623; + e.imonospace = 65353; + e.increment = 8710; + e.infinity = 8734; + e.iniarmenian = 1387; + e.integral = 8747; + e.integralbottom = 8993; + e.integralbt = 8993; + e.integralex = 63733; + e.integraltop = 8992; + e.integraltp = 8992; + e.intersection = 8745; + e.intisquare = 13061; + e.invbullet = 9688; + e.invcircle = 9689; + e.invsmileface = 9787; + e.iocyrillic = 1105; + e.iogonek = 303; + e.iota = 953; + e.iotadieresis = 970; + e.iotadieresistonos = 912; + e.iotalatin = 617; + e.iotatonos = 943; + e.iparen = 9380; + e.irigurmukhi = 2674; + e.ismallhiragana = 12355; + e.ismallkatakana = 12451; + e.ismallkatakanahalfwidth = 65384; + e.issharbengali = 2554; + e.istroke = 616; + e.isuperior = 63213; + e.iterationhiragana = 12445; + e.iterationkatakana = 12541; + e.itilde = 297; + e.itildebelow = 7725; + e.iubopomofo = 12585; + e.iucyrillic = 1102; + e.ivowelsignbengali = 2495; + e.ivowelsigndeva = 2367; + e.ivowelsigngujarati = 2751; + e.izhitsacyrillic = 1141; + e.izhitsadblgravecyrillic = 1143; + e.j = 106; + e.jaarmenian = 1393; + e.jabengali = 2460; + e.jadeva = 2332; + e.jagujarati = 2716; + e.jagurmukhi = 2588; + e.jbopomofo = 12560; + e.jcaron = 496; + e.jcircle = 9433; + e.jcircumflex = 309; + e.jcrossedtail = 669; + e.jdotlessstroke = 607; + e.jecyrillic = 1112; + e.jeemarabic = 1580; + e.jeemfinalarabic = 65182; + e.jeeminitialarabic = 65183; + e.jeemmedialarabic = 65184; + e.jeharabic = 1688; + e.jehfinalarabic = 64395; + e.jhabengali = 2461; + e.jhadeva = 2333; + e.jhagujarati = 2717; + e.jhagurmukhi = 2589; + e.jheharmenian = 1403; + e.jis = 12292; + e.jmonospace = 65354; + e.jparen = 9381; + e.jsuperior = 690; + e.k = 107; + e.kabashkircyrillic = 1185; + e.kabengali = 2453; + e.kacute = 7729; + e.kacyrillic = 1082; + e.kadescendercyrillic = 1179; + e.kadeva = 2325; + e.kaf = 1499; + e.kafarabic = 1603; + e.kafdagesh = 64315; + e.kafdageshhebrew = 64315; + e.kaffinalarabic = 65242; + e.kafhebrew = 1499; + e.kafinitialarabic = 65243; + e.kafmedialarabic = 65244; + e.kafrafehebrew = 64333; + e.kagujarati = 2709; + e.kagurmukhi = 2581; + e.kahiragana = 12363; + e.kahookcyrillic = 1220; + e.kakatakana = 12459; + e.kakatakanahalfwidth = 65398; + e.kappa = 954; + e.kappasymbolgreek = 1008; + e.kapyeounmieumkorean = 12657; + e.kapyeounphieuphkorean = 12676; + e.kapyeounpieupkorean = 12664; + e.kapyeounssangpieupkorean = 12665; + e.karoriisquare = 13069; + e.kashidaautoarabic = 1600; + e.kashidaautonosidebearingarabic = 1600; + e.kasmallkatakana = 12533; + e.kasquare = 13188; + e.kasraarabic = 1616; + e.kasratanarabic = 1613; + e.kastrokecyrillic = 1183; + e.katahiraprolongmarkhalfwidth = 65392; + e.kaverticalstrokecyrillic = 1181; + e.kbopomofo = 12558; + e.kcalsquare = 13193; + e.kcaron = 489; + e.kcedilla = 311; + e.kcircle = 9434; + e.kcommaaccent = 311; + e.kdotbelow = 7731; + e.keharmenian = 1412; + e.kehiragana = 12369; + e.kekatakana = 12465; + e.kekatakanahalfwidth = 65401; + e.kenarmenian = 1391; + e.kesmallkatakana = 12534; + e.kgreenlandic = 312; + e.khabengali = 2454; + e.khacyrillic = 1093; + e.khadeva = 2326; + e.khagujarati = 2710; + e.khagurmukhi = 2582; + e.khaharabic = 1582; + e.khahfinalarabic = 65190; + e.khahinitialarabic = 65191; + e.khahmedialarabic = 65192; + e.kheicoptic = 999; + e.khhadeva = 2393; + e.khhagurmukhi = 2649; + e.khieukhacirclekorean = 12920; + e.khieukhaparenkorean = 12824; + e.khieukhcirclekorean = 12906; + e.khieukhkorean = 12619; + e.khieukhparenkorean = 12810; + e.khokhaithai = 3586; + e.khokhonthai = 3589; + e.khokhuatthai = 3587; + e.khokhwaithai = 3588; + e.khomutthai = 3675; + e.khook = 409; + e.khorakhangthai = 3590; + e.khzsquare = 13201; + e.kihiragana = 12365; + e.kikatakana = 12461; + e.kikatakanahalfwidth = 65399; + e.kiroguramusquare = 13077; + e.kiromeetorusquare = 13078; + e.kirosquare = 13076; + e.kiyeokacirclekorean = 12910; + e.kiyeokaparenkorean = 12814; + e.kiyeokcirclekorean = 12896; + e.kiyeokkorean = 12593; + e.kiyeokparenkorean = 12800; + e.kiyeoksioskorean = 12595; + e.kjecyrillic = 1116; + e.klinebelow = 7733; + e.klsquare = 13208; + e.kmcubedsquare = 13222; + e.kmonospace = 65355; + e.kmsquaredsquare = 13218; + e.kohiragana = 12371; + e.kohmsquare = 13248; + e.kokaithai = 3585; + e.kokatakana = 12467; + e.kokatakanahalfwidth = 65402; + e.kooposquare = 13086; + e.koppacyrillic = 1153; + e.koreanstandardsymbol = 12927; + e.koroniscmb = 835; + e.kparen = 9382; + e.kpasquare = 13226; + e.ksicyrillic = 1135; + e.ktsquare = 13263; + e.kturned = 670; + e.kuhiragana = 12367; + e.kukatakana = 12463; + e.kukatakanahalfwidth = 65400; + e.kvsquare = 13240; + e.kwsquare = 13246; + e.l = 108; + e.labengali = 2482; + e.lacute = 314; + e.ladeva = 2354; + e.lagujarati = 2738; + e.lagurmukhi = 2610; + e.lakkhangyaothai = 3653; + e.lamaleffinalarabic = 65276; + e.lamalefhamzaabovefinalarabic = 65272; + e.lamalefhamzaaboveisolatedarabic = 65271; + e.lamalefhamzabelowfinalarabic = 65274; + e.lamalefhamzabelowisolatedarabic = 65273; + e.lamalefisolatedarabic = 65275; + e.lamalefmaddaabovefinalarabic = 65270; + e.lamalefmaddaaboveisolatedarabic = 65269; + e.lamarabic = 1604; + e.lambda = 955; + e.lambdastroke = 411; + e.lamed = 1500; + e.lameddagesh = 64316; + e.lameddageshhebrew = 64316; + e.lamedhebrew = 1500; + e.lamfinalarabic = 65246; + e.lamhahinitialarabic = 64714; + e.laminitialarabic = 65247; + e.lamjeeminitialarabic = 64713; + e.lamkhahinitialarabic = 64715; + e.lamlamhehisolatedarabic = 65010; + e.lammedialarabic = 65248; + e.lammeemhahinitialarabic = 64904; + e.lammeeminitialarabic = 64716; + e.largecircle = 9711; + e.lbar = 410; + e.lbelt = 620; + e.lbopomofo = 12556; + e.lcaron = 318; + e.lcedilla = 316; + e.lcircle = 9435; + e.lcircumflexbelow = 7741; + e.lcommaaccent = 316; + e.ldot = 320; + e.ldotaccent = 320; + e.ldotbelow = 7735; + e.ldotbelowmacron = 7737; + e.leftangleabovecmb = 794; + e.lefttackbelowcmb = 792; + e.less = 60; + e.lessequal = 8804; + e.lessequalorgreater = 8922; + e.lessmonospace = 65308; + e.lessorequivalent = 8818; + e.lessorgreater = 8822; + e.lessoverequal = 8806; + e.lesssmall = 65124; + e.lezh = 622; + e.lfblock = 9612; + e.lhookretroflex = 621; + e.lira = 8356; + e.liwnarmenian = 1388; + e.lj = 457; + e.ljecyrillic = 1113; + e.ll = 63168; + e.lladeva = 2355; + e.llagujarati = 2739; + e.llinebelow = 7739; + e.llladeva = 2356; + e.llvocalicbengali = 2529; + e.llvocalicdeva = 2401; + e.llvocalicvowelsignbengali = 2531; + e.llvocalicvowelsigndeva = 2403; + e.lmiddletilde = 619; + e.lmonospace = 65356; + e.lmsquare = 13264; + e.lochulathai = 3628; + e.logicaland = 8743; + e.logicalnot = 172; + e.logicalnotreversed = 8976; + e.logicalor = 8744; + e.lolingthai = 3621; + e.longs = 383; + e.lowlinecenterline = 65102; + e.lowlinecmb = 818; + e.lowlinedashed = 65101; + e.lozenge = 9674; + e.lparen = 9383; + e.lslash = 322; + e.lsquare = 8467; + e.lsuperior = 63214; + e.ltshade = 9617; + e.luthai = 3622; + e.lvocalicbengali = 2444; + e.lvocalicdeva = 2316; + e.lvocalicvowelsignbengali = 2530; + e.lvocalicvowelsigndeva = 2402; + e.lxsquare = 13267; + e.m = 109; + e.mabengali = 2478; + e.macron = 175; + e.macronbelowcmb = 817; + e.macroncmb = 772; + e.macronlowmod = 717; + e.macronmonospace = 65507; + e.macute = 7743; + e.madeva = 2350; + e.magujarati = 2734; + e.magurmukhi = 2606; + e.mahapakhhebrew = 1444; + e.mahapakhlefthebrew = 1444; + e.mahiragana = 12414; + e.maichattawalowleftthai = 63637; + e.maichattawalowrightthai = 63636; + e.maichattawathai = 3659; + e.maichattawaupperleftthai = 63635; + e.maieklowleftthai = 63628; + e.maieklowrightthai = 63627; + e.maiekthai = 3656; + e.maiekupperleftthai = 63626; + e.maihanakatleftthai = 63620; + e.maihanakatthai = 3633; + e.maitaikhuleftthai = 63625; + e.maitaikhuthai = 3655; + e.maitholowleftthai = 63631; + e.maitholowrightthai = 63630; + e.maithothai = 3657; + e.maithoupperleftthai = 63629; + e.maitrilowleftthai = 63634; + e.maitrilowrightthai = 63633; + e.maitrithai = 3658; + e.maitriupperleftthai = 63632; + e.maiyamokthai = 3654; + e.makatakana = 12510; + e.makatakanahalfwidth = 65423; + e.male = 9794; + e.mansyonsquare = 13127; + e.maqafhebrew = 1470; + e.mars = 9794; + e.masoracirclehebrew = 1455; + e.masquare = 13187; + e.mbopomofo = 12551; + e.mbsquare = 13268; + e.mcircle = 9436; + e.mcubedsquare = 13221; + e.mdotaccent = 7745; + e.mdotbelow = 7747; + e.meemarabic = 1605; + e.meemfinalarabic = 65250; + e.meeminitialarabic = 65251; + e.meemmedialarabic = 65252; + e.meemmeeminitialarabic = 64721; + e.meemmeemisolatedarabic = 64584; + e.meetorusquare = 13133; + e.mehiragana = 12417; + e.meizierasquare = 13182; + e.mekatakana = 12513; + e.mekatakanahalfwidth = 65426; + e.mem = 1502; + e.memdagesh = 64318; + e.memdageshhebrew = 64318; + e.memhebrew = 1502; + e.menarmenian = 1396; + e.merkhahebrew = 1445; + e.merkhakefulahebrew = 1446; + e.merkhakefulalefthebrew = 1446; + e.merkhalefthebrew = 1445; + e.mhook = 625; + e.mhzsquare = 13202; + e.middledotkatakanahalfwidth = 65381; + e.middot = 183; + e.mieumacirclekorean = 12914; + e.mieumaparenkorean = 12818; + e.mieumcirclekorean = 12900; + e.mieumkorean = 12609; + e.mieumpansioskorean = 12656; + e.mieumparenkorean = 12804; + e.mieumpieupkorean = 12654; + e.mieumsioskorean = 12655; + e.mihiragana = 12415; + e.mikatakana = 12511; + e.mikatakanahalfwidth = 65424; + e.minus = 8722; + e.minusbelowcmb = 800; + e.minuscircle = 8854; + e.minusmod = 727; + e.minusplus = 8723; + e.minute = 8242; + e.miribaarusquare = 13130; + e.mirisquare = 13129; + e.mlonglegturned = 624; + e.mlsquare = 13206; + e.mmcubedsquare = 13219; + e.mmonospace = 65357; + e.mmsquaredsquare = 13215; + e.mohiragana = 12418; + e.mohmsquare = 13249; + e.mokatakana = 12514; + e.mokatakanahalfwidth = 65427; + e.molsquare = 13270; + e.momathai = 3617; + e.moverssquare = 13223; + e.moverssquaredsquare = 13224; + e.mparen = 9384; + e.mpasquare = 13227; + e.mssquare = 13235; + e.msuperior = 63215; + e.mturned = 623; + e.mu = 181; + e.mu1 = 181; + e.muasquare = 13186; + e.muchgreater = 8811; + e.muchless = 8810; + e.mufsquare = 13196; + e.mugreek = 956; + e.mugsquare = 13197; + e.muhiragana = 12416; + e.mukatakana = 12512; + e.mukatakanahalfwidth = 65425; + e.mulsquare = 13205; + e.multiply = 215; + e.mumsquare = 13211; + e.munahhebrew = 1443; + e.munahlefthebrew = 1443; + e.musicalnote = 9834; + e.musicalnotedbl = 9835; + e.musicflatsign = 9837; + e.musicsharpsign = 9839; + e.mussquare = 13234; + e.muvsquare = 13238; + e.muwsquare = 13244; + e.mvmegasquare = 13241; + e.mvsquare = 13239; + e.mwmegasquare = 13247; + e.mwsquare = 13245; + e.n = 110; + e.nabengali = 2472; + e.nabla = 8711; + e.nacute = 324; + e.nadeva = 2344; + e.nagujarati = 2728; + e.nagurmukhi = 2600; + e.nahiragana = 12394; + e.nakatakana = 12490; + e.nakatakanahalfwidth = 65413; + e.napostrophe = 329; + e.nasquare = 13185; + e.nbopomofo = 12555; + e.nbspace = 160; + e.ncaron = 328; + e.ncedilla = 326; + e.ncircle = 9437; + e.ncircumflexbelow = 7755; + e.ncommaaccent = 326; + e.ndotaccent = 7749; + e.ndotbelow = 7751; + e.nehiragana = 12397; + e.nekatakana = 12493; + e.nekatakanahalfwidth = 65416; + e.newsheqelsign = 8362; + e.nfsquare = 13195; + e.ngabengali = 2457; + e.ngadeva = 2329; + e.ngagujarati = 2713; + e.ngagurmukhi = 2585; + e.ngonguthai = 3591; + e.nhiragana = 12435; + e.nhookleft = 626; + e.nhookretroflex = 627; + e.nieunacirclekorean = 12911; + e.nieunaparenkorean = 12815; + e.nieuncieuckorean = 12597; + e.nieuncirclekorean = 12897; + e.nieunhieuhkorean = 12598; + e.nieunkorean = 12596; + e.nieunpansioskorean = 12648; + e.nieunparenkorean = 12801; + e.nieunsioskorean = 12647; + e.nieuntikeutkorean = 12646; + e.nihiragana = 12395; + e.nikatakana = 12491; + e.nikatakanahalfwidth = 65414; + e.nikhahitleftthai = 63641; + e.nikhahitthai = 3661; + e.nine = 57; + e.ninearabic = 1641; + e.ninebengali = 2543; + e.ninecircle = 9320; + e.ninecircleinversesansserif = 10130; + e.ninedeva = 2415; + e.ninegujarati = 2799; + e.ninegurmukhi = 2671; + e.ninehackarabic = 1641; + e.ninehangzhou = 12329; + e.nineideographicparen = 12840; + e.nineinferior = 8329; + e.ninemonospace = 65305; + e.nineoldstyle = 63289; + e.nineparen = 9340; + e.nineperiod = 9360; + e.ninepersian = 1785; + e.nineroman = 8568; + e.ninesuperior = 8313; + e.nineteencircle = 9330; + e.nineteenparen = 9350; + e.nineteenperiod = 9370; + e.ninethai = 3673; + e.nj = 460; + e.njecyrillic = 1114; + e.nkatakana = 12531; + e.nkatakanahalfwidth = 65437; + e.nlegrightlong = 414; + e.nlinebelow = 7753; + e.nmonospace = 65358; + e.nmsquare = 13210; + e.nnabengali = 2467; + e.nnadeva = 2339; + e.nnagujarati = 2723; + e.nnagurmukhi = 2595; + e.nnnadeva = 2345; + e.nohiragana = 12398; + e.nokatakana = 12494; + e.nokatakanahalfwidth = 65417; + e.nonbreakingspace = 160; + e.nonenthai = 3603; + e.nonuthai = 3609; + e.noonarabic = 1606; + e.noonfinalarabic = 65254; + e.noonghunnaarabic = 1722; + e.noonghunnafinalarabic = 64415; + e.nooninitialarabic = 65255; + e.noonjeeminitialarabic = 64722; + e.noonjeemisolatedarabic = 64587; + e.noonmedialarabic = 65256; + e.noonmeeminitialarabic = 64725; + e.noonmeemisolatedarabic = 64590; + e.noonnoonfinalarabic = 64653; + e.notcontains = 8716; + e.notelement = 8713; + e.notelementof = 8713; + e.notequal = 8800; + e.notgreater = 8815; + e.notgreaternorequal = 8817; + e.notgreaternorless = 8825; + e.notidentical = 8802; + e.notless = 8814; + e.notlessnorequal = 8816; + e.notparallel = 8742; + e.notprecedes = 8832; + e.notsubset = 8836; + e.notsucceeds = 8833; + e.notsuperset = 8837; + e.nowarmenian = 1398; + e.nparen = 9385; + e.nssquare = 13233; + e.nsuperior = 8319; + e.ntilde = 241; + e.nu = 957; + e.nuhiragana = 12396; + e.nukatakana = 12492; + e.nukatakanahalfwidth = 65415; + e.nuktabengali = 2492; + e.nuktadeva = 2364; + e.nuktagujarati = 2748; + e.nuktagurmukhi = 2620; + e.numbersign = 35; + e.numbersignmonospace = 65283; + e.numbersignsmall = 65119; + e.numeralsigngreek = 884; + e.numeralsignlowergreek = 885; + e.numero = 8470; + e.nun = 1504; + e.nundagesh = 64320; + e.nundageshhebrew = 64320; + e.nunhebrew = 1504; + e.nvsquare = 13237; + e.nwsquare = 13243; + e.nyabengali = 2462; + e.nyadeva = 2334; + e.nyagujarati = 2718; + e.nyagurmukhi = 2590; + e.o = 111; + e.oacute = 243; + e.oangthai = 3629; + e.obarred = 629; + e.obarredcyrillic = 1257; + e.obarreddieresiscyrillic = 1259; + e.obengali = 2451; + e.obopomofo = 12571; + e.obreve = 335; + e.ocandradeva = 2321; + e.ocandragujarati = 2705; + e.ocandravowelsigndeva = 2377; + e.ocandravowelsigngujarati = 2761; + e.ocaron = 466; + e.ocircle = 9438; + e.ocircumflex = 244; + e.ocircumflexacute = 7889; + e.ocircumflexdotbelow = 7897; + e.ocircumflexgrave = 7891; + e.ocircumflexhookabove = 7893; + e.ocircumflextilde = 7895; + e.ocyrillic = 1086; + e.odblacute = 337; + e.odblgrave = 525; + e.odeva = 2323; + e.odieresis = 246; + e.odieresiscyrillic = 1255; + e.odotbelow = 7885; + e.oe = 339; + e.oekorean = 12634; + e.ogonek = 731; + e.ogonekcmb = 808; + e.ograve = 242; + e.ogujarati = 2707; + e.oharmenian = 1413; + e.ohiragana = 12362; + e.ohookabove = 7887; + e.ohorn = 417; + e.ohornacute = 7899; + e.ohorndotbelow = 7907; + e.ohorngrave = 7901; + e.ohornhookabove = 7903; + e.ohorntilde = 7905; + e.ohungarumlaut = 337; + e.oi = 419; + e.oinvertedbreve = 527; + e.okatakana = 12458; + e.okatakanahalfwidth = 65397; + e.okorean = 12631; + e.olehebrew = 1451; + e.omacron = 333; + e.omacronacute = 7763; + e.omacrongrave = 7761; + e.omdeva = 2384; + e.omega = 969; + e.omega1 = 982; + e.omegacyrillic = 1121; + e.omegalatinclosed = 631; + e.omegaroundcyrillic = 1147; + e.omegatitlocyrillic = 1149; + e.omegatonos = 974; + e.omgujarati = 2768; + e.omicron = 959; + e.omicrontonos = 972; + e.omonospace = 65359; + e.one = 49; + e.onearabic = 1633; + e.onebengali = 2535; + e.onecircle = 9312; + e.onecircleinversesansserif = 10122; + e.onedeva = 2407; + e.onedotenleader = 8228; + e.oneeighth = 8539; + e.onefitted = 63196; + e.onegujarati = 2791; + e.onegurmukhi = 2663; + e.onehackarabic = 1633; + e.onehalf = 189; + e.onehangzhou = 12321; + e.oneideographicparen = 12832; + e.oneinferior = 8321; + e.onemonospace = 65297; + e.onenumeratorbengali = 2548; + e.oneoldstyle = 63281; + e.oneparen = 9332; + e.oneperiod = 9352; + e.onepersian = 1777; + e.onequarter = 188; + e.oneroman = 8560; + e.onesuperior = 185; + e.onethai = 3665; + e.onethird = 8531; + e.oogonek = 491; + e.oogonekmacron = 493; + e.oogurmukhi = 2579; + e.oomatragurmukhi = 2635; + e.oopen = 596; + e.oparen = 9386; + e.openbullet = 9702; + e.option = 8997; + e.ordfeminine = 170; + e.ordmasculine = 186; + e.orthogonal = 8735; + e.oshortdeva = 2322; + e.oshortvowelsigndeva = 2378; + e.oslash = 248; + e.oslashacute = 511; + e.osmallhiragana = 12361; + e.osmallkatakana = 12457; + e.osmallkatakanahalfwidth = 65387; + e.ostrokeacute = 511; + e.osuperior = 63216; + e.otcyrillic = 1151; + e.otilde = 245; + e.otildeacute = 7757; + e.otildedieresis = 7759; + e.oubopomofo = 12577; + e.overline = 8254; + e.overlinecenterline = 65098; + e.overlinecmb = 773; + e.overlinedashed = 65097; + e.overlinedblwavy = 65100; + e.overlinewavy = 65099; + e.overscore = 175; + e.ovowelsignbengali = 2507; + e.ovowelsigndeva = 2379; + e.ovowelsigngujarati = 2763; + e.p = 112; + e.paampssquare = 13184; + e.paasentosquare = 13099; + e.pabengali = 2474; + e.pacute = 7765; + e.padeva = 2346; + e.pagedown = 8671; + e.pageup = 8670; + e.pagujarati = 2730; + e.pagurmukhi = 2602; + e.pahiragana = 12401; + e.paiyannoithai = 3631; + e.pakatakana = 12497; + e.palatalizationcyrilliccmb = 1156; + e.palochkacyrillic = 1216; + e.pansioskorean = 12671; + e.paragraph = 182; + e.parallel = 8741; + e.parenleft = 40; + e.parenleftaltonearabic = 64830; + e.parenleftbt = 63725; + e.parenleftex = 63724; + e.parenleftinferior = 8333; + e.parenleftmonospace = 65288; + e.parenleftsmall = 65113; + e.parenleftsuperior = 8317; + e.parenlefttp = 63723; + e.parenleftvertical = 65077; + e.parenright = 41; + e.parenrightaltonearabic = 64831; + e.parenrightbt = 63736; + e.parenrightex = 63735; + e.parenrightinferior = 8334; + e.parenrightmonospace = 65289; + e.parenrightsmall = 65114; + e.parenrightsuperior = 8318; + e.parenrighttp = 63734; + e.parenrightvertical = 65078; + e.partialdiff = 8706; + e.paseqhebrew = 1472; + e.pashtahebrew = 1433; + e.pasquare = 13225; + e.patah = 1463; + e.patah11 = 1463; + e.patah1d = 1463; + e.patah2a = 1463; + e.patahhebrew = 1463; + e.patahnarrowhebrew = 1463; + e.patahquarterhebrew = 1463; + e.patahwidehebrew = 1463; + e.pazerhebrew = 1441; + e.pbopomofo = 12550; + e.pcircle = 9439; + e.pdotaccent = 7767; + e.pe = 1508; + e.pecyrillic = 1087; + e.pedagesh = 64324; + e.pedageshhebrew = 64324; + e.peezisquare = 13115; + e.pefinaldageshhebrew = 64323; + e.peharabic = 1662; + e.peharmenian = 1402; + e.pehebrew = 1508; + e.pehfinalarabic = 64343; + e.pehinitialarabic = 64344; + e.pehiragana = 12410; + e.pehmedialarabic = 64345; + e.pekatakana = 12506; + e.pemiddlehookcyrillic = 1191; + e.perafehebrew = 64334; + e.percent = 37; + e.percentarabic = 1642; + e.percentmonospace = 65285; + e.percentsmall = 65130; + e.period = 46; + e.periodarmenian = 1417; + e.periodcentered = 183; + e.periodhalfwidth = 65377; + e.periodinferior = 63207; + e.periodmonospace = 65294; + e.periodsmall = 65106; + e.periodsuperior = 63208; + e.perispomenigreekcmb = 834; + e.perpendicular = 8869; + e.perthousand = 8240; + e.peseta = 8359; + e.pfsquare = 13194; + e.phabengali = 2475; + e.phadeva = 2347; + e.phagujarati = 2731; + e.phagurmukhi = 2603; + e.phi = 966; + e.phi1 = 981; + e.phieuphacirclekorean = 12922; + e.phieuphaparenkorean = 12826; + e.phieuphcirclekorean = 12908; + e.phieuphkorean = 12621; + e.phieuphparenkorean = 12812; + e.philatin = 632; + e.phinthuthai = 3642; + e.phisymbolgreek = 981; + e.phook = 421; + e.phophanthai = 3614; + e.phophungthai = 3612; + e.phosamphaothai = 3616; + e.pi = 960; + e.pieupacirclekorean = 12915; + e.pieupaparenkorean = 12819; + e.pieupcieuckorean = 12662; + e.pieupcirclekorean = 12901; + e.pieupkiyeokkorean = 12658; + e.pieupkorean = 12610; + e.pieupparenkorean = 12805; + e.pieupsioskiyeokkorean = 12660; + e.pieupsioskorean = 12612; + e.pieupsiostikeutkorean = 12661; + e.pieupthieuthkorean = 12663; + e.pieuptikeutkorean = 12659; + e.pihiragana = 12404; + e.pikatakana = 12500; + e.pisymbolgreek = 982; + e.piwrarmenian = 1411; + e.planckover2pi = 8463; + e.planckover2pi1 = 8463; + e.plus = 43; + e.plusbelowcmb = 799; + e.pluscircle = 8853; + e.plusminus = 177; + e.plusmod = 726; + e.plusmonospace = 65291; + e.plussmall = 65122; + e.plussuperior = 8314; + e.pmonospace = 65360; + e.pmsquare = 13272; + e.pohiragana = 12413; + e.pointingindexdownwhite = 9759; + e.pointingindexleftwhite = 9756; + e.pointingindexrightwhite = 9758; + e.pointingindexupwhite = 9757; + e.pokatakana = 12509; + e.poplathai = 3611; + e.postalmark = 12306; + e.postalmarkface = 12320; + e.pparen = 9387; + e.precedes = 8826; + e.prescription = 8478; + e.primemod = 697; + e.primereversed = 8245; + e.product = 8719; + e.projective = 8965; + e.prolongedkana = 12540; + e.propellor = 8984; + e.propersubset = 8834; + e.propersuperset = 8835; + e.proportion = 8759; + e.proportional = 8733; + e.psi = 968; + e.psicyrillic = 1137; + e.psilipneumatacyrilliccmb = 1158; + e.pssquare = 13232; + e.puhiragana = 12407; + e.pukatakana = 12503; + e.pvsquare = 13236; + e.pwsquare = 13242; + e.q = 113; + e.qadeva = 2392; + e.qadmahebrew = 1448; + e.qafarabic = 1602; + e.qaffinalarabic = 65238; + e.qafinitialarabic = 65239; + e.qafmedialarabic = 65240; + e.qamats = 1464; + e.qamats10 = 1464; + e.qamats1a = 1464; + e.qamats1c = 1464; + e.qamats27 = 1464; + e.qamats29 = 1464; + e.qamats33 = 1464; + e.qamatsde = 1464; + e.qamatshebrew = 1464; + e.qamatsnarrowhebrew = 1464; + e.qamatsqatanhebrew = 1464; + e.qamatsqatannarrowhebrew = 1464; + e.qamatsqatanquarterhebrew = 1464; + e.qamatsqatanwidehebrew = 1464; + e.qamatsquarterhebrew = 1464; + e.qamatswidehebrew = 1464; + e.qarneyparahebrew = 1439; + e.qbopomofo = 12561; + e.qcircle = 9440; + e.qhook = 672; + e.qmonospace = 65361; + e.qof = 1511; + e.qofdagesh = 64327; + e.qofdageshhebrew = 64327; + e.qofhebrew = 1511; + e.qparen = 9388; + e.quarternote = 9833; + e.qubuts = 1467; + e.qubuts18 = 1467; + e.qubuts25 = 1467; + e.qubuts31 = 1467; + e.qubutshebrew = 1467; + e.qubutsnarrowhebrew = 1467; + e.qubutsquarterhebrew = 1467; + e.qubutswidehebrew = 1467; + e.question = 63; + e.questionarabic = 1567; + e.questionarmenian = 1374; + e.questiondown = 191; + e.questiondownsmall = 63423; + e.questiongreek = 894; + e.questionmonospace = 65311; + e.questionsmall = 63295; + e.quotedbl = 34; + e.quotedblbase = 8222; + e.quotedblleft = 8220; + e.quotedblmonospace = 65282; + e.quotedblprime = 12318; + e.quotedblprimereversed = 12317; + e.quotedblright = 8221; + e.quoteleft = 8216; + e.quoteleftreversed = 8219; + e.quotereversed = 8219; + e.quoteright = 8217; + e.quoterightn = 329; + e.quotesinglbase = 8218; + e.quotesingle = 39; + e.quotesinglemonospace = 65287; + e.r = 114; + e.raarmenian = 1404; + e.rabengali = 2480; + e.racute = 341; + e.radeva = 2352; + e.radical = 8730; + e.radicalex = 63717; + e.radoverssquare = 13230; + e.radoverssquaredsquare = 13231; + e.radsquare = 13229; + e.rafe = 1471; + e.rafehebrew = 1471; + e.ragujarati = 2736; + e.ragurmukhi = 2608; + e.rahiragana = 12425; + e.rakatakana = 12521; + e.rakatakanahalfwidth = 65431; + e.ralowerdiagonalbengali = 2545; + e.ramiddlediagonalbengali = 2544; + e.ramshorn = 612; + e.ratio = 8758; + e.rbopomofo = 12566; + e.rcaron = 345; + e.rcedilla = 343; + e.rcircle = 9441; + e.rcommaaccent = 343; + e.rdblgrave = 529; + e.rdotaccent = 7769; + e.rdotbelow = 7771; + e.rdotbelowmacron = 7773; + e.referencemark = 8251; + e.reflexsubset = 8838; + e.reflexsuperset = 8839; + e.registered = 174; + e.registersans = 63720; + e.registerserif = 63194; + e.reharabic = 1585; + e.reharmenian = 1408; + e.rehfinalarabic = 65198; + e.rehiragana = 12428; + e.rekatakana = 12524; + e.rekatakanahalfwidth = 65434; + e.resh = 1512; + e.reshdageshhebrew = 64328; + e.reshhebrew = 1512; + e.reversedtilde = 8765; + e.reviahebrew = 1431; + e.reviamugrashhebrew = 1431; + e.revlogicalnot = 8976; + e.rfishhook = 638; + e.rfishhookreversed = 639; + e.rhabengali = 2525; + e.rhadeva = 2397; + e.rho = 961; + e.rhook = 637; + e.rhookturned = 635; + e.rhookturnedsuperior = 693; + e.rhosymbolgreek = 1009; + e.rhotichookmod = 734; + e.rieulacirclekorean = 12913; + e.rieulaparenkorean = 12817; + e.rieulcirclekorean = 12899; + e.rieulhieuhkorean = 12608; + e.rieulkiyeokkorean = 12602; + e.rieulkiyeoksioskorean = 12649; + e.rieulkorean = 12601; + e.rieulmieumkorean = 12603; + e.rieulpansioskorean = 12652; + e.rieulparenkorean = 12803; + e.rieulphieuphkorean = 12607; + e.rieulpieupkorean = 12604; + e.rieulpieupsioskorean = 12651; + e.rieulsioskorean = 12605; + e.rieulthieuthkorean = 12606; + e.rieultikeutkorean = 12650; + e.rieulyeorinhieuhkorean = 12653; + e.rightangle = 8735; + e.righttackbelowcmb = 793; + e.righttriangle = 8895; + e.rihiragana = 12426; + e.rikatakana = 12522; + e.rikatakanahalfwidth = 65432; + e.ring = 730; + e.ringbelowcmb = 805; + e.ringcmb = 778; + e.ringhalfleft = 703; + e.ringhalfleftarmenian = 1369; + e.ringhalfleftbelowcmb = 796; + e.ringhalfleftcentered = 723; + e.ringhalfright = 702; + e.ringhalfrightbelowcmb = 825; + e.ringhalfrightcentered = 722; + e.rinvertedbreve = 531; + e.rittorusquare = 13137; + e.rlinebelow = 7775; + e.rlongleg = 636; + e.rlonglegturned = 634; + e.rmonospace = 65362; + e.rohiragana = 12429; + e.rokatakana = 12525; + e.rokatakanahalfwidth = 65435; + e.roruathai = 3619; + e.rparen = 9389; + e.rrabengali = 2524; + e.rradeva = 2353; + e.rragurmukhi = 2652; + e.rreharabic = 1681; + e.rrehfinalarabic = 64397; + e.rrvocalicbengali = 2528; + e.rrvocalicdeva = 2400; + e.rrvocalicgujarati = 2784; + e.rrvocalicvowelsignbengali = 2500; + e.rrvocalicvowelsigndeva = 2372; + e.rrvocalicvowelsigngujarati = 2756; + e.rsuperior = 63217; + e.rtblock = 9616; + e.rturned = 633; + e.rturnedsuperior = 692; + e.ruhiragana = 12427; + e.rukatakana = 12523; + e.rukatakanahalfwidth = 65433; + e.rupeemarkbengali = 2546; + e.rupeesignbengali = 2547; + e.rupiah = 63197; + e.ruthai = 3620; + e.rvocalicbengali = 2443; + e.rvocalicdeva = 2315; + e.rvocalicgujarati = 2699; + e.rvocalicvowelsignbengali = 2499; + e.rvocalicvowelsigndeva = 2371; + e.rvocalicvowelsigngujarati = 2755; + e.s = 115; + e.sabengali = 2488; + e.sacute = 347; + e.sacutedotaccent = 7781; + e.sadarabic = 1589; + e.sadeva = 2360; + e.sadfinalarabic = 65210; + e.sadinitialarabic = 65211; + e.sadmedialarabic = 65212; + e.sagujarati = 2744; + e.sagurmukhi = 2616; + e.sahiragana = 12373; + e.sakatakana = 12469; + e.sakatakanahalfwidth = 65403; + e.sallallahoualayhewasallamarabic = 65018; + e.samekh = 1505; + e.samekhdagesh = 64321; + e.samekhdageshhebrew = 64321; + e.samekhhebrew = 1505; + e.saraaathai = 3634; + e.saraaethai = 3649; + e.saraaimaimalaithai = 3652; + e.saraaimaimuanthai = 3651; + e.saraamthai = 3635; + e.saraathai = 3632; + e.saraethai = 3648; + e.saraiileftthai = 63622; + e.saraiithai = 3637; + e.saraileftthai = 63621; + e.saraithai = 3636; + e.saraothai = 3650; + e.saraueeleftthai = 63624; + e.saraueethai = 3639; + e.saraueleftthai = 63623; + e.sarauethai = 3638; + e.sarauthai = 3640; + e.sarauuthai = 3641; + e.sbopomofo = 12569; + e.scaron = 353; + e.scarondotaccent = 7783; + e.scedilla = 351; + e.schwa = 601; + e.schwacyrillic = 1241; + e.schwadieresiscyrillic = 1243; + e.schwahook = 602; + e.scircle = 9442; + e.scircumflex = 349; + e.scommaaccent = 537; + e.sdotaccent = 7777; + e.sdotbelow = 7779; + e.sdotbelowdotaccent = 7785; + e.seagullbelowcmb = 828; + e.second = 8243; + e.secondtonechinese = 714; + e.section = 167; + e.seenarabic = 1587; + e.seenfinalarabic = 65202; + e.seeninitialarabic = 65203; + e.seenmedialarabic = 65204; + e.segol = 1462; + e.segol13 = 1462; + e.segol1f = 1462; + e.segol2c = 1462; + e.segolhebrew = 1462; + e.segolnarrowhebrew = 1462; + e.segolquarterhebrew = 1462; + e.segoltahebrew = 1426; + e.segolwidehebrew = 1462; + e.seharmenian = 1405; + e.sehiragana = 12379; + e.sekatakana = 12475; + e.sekatakanahalfwidth = 65406; + e.semicolon = 59; + e.semicolonarabic = 1563; + e.semicolonmonospace = 65307; + e.semicolonsmall = 65108; + e.semivoicedmarkkana = 12444; + e.semivoicedmarkkanahalfwidth = 65439; + e.sentisquare = 13090; + e.sentosquare = 13091; + e.seven = 55; + e.sevenarabic = 1639; + e.sevenbengali = 2541; + e.sevencircle = 9318; + e.sevencircleinversesansserif = 10128; + e.sevendeva = 2413; + e.seveneighths = 8542; + e.sevengujarati = 2797; + e.sevengurmukhi = 2669; + e.sevenhackarabic = 1639; + e.sevenhangzhou = 12327; + e.sevenideographicparen = 12838; + e.seveninferior = 8327; + e.sevenmonospace = 65303; + e.sevenoldstyle = 63287; + e.sevenparen = 9338; + e.sevenperiod = 9358; + e.sevenpersian = 1783; + e.sevenroman = 8566; + e.sevensuperior = 8311; + e.seventeencircle = 9328; + e.seventeenparen = 9348; + e.seventeenperiod = 9368; + e.seventhai = 3671; + e.sfthyphen = 173; + e.shaarmenian = 1399; + e.shabengali = 2486; + e.shacyrillic = 1096; + e.shaddaarabic = 1617; + e.shaddadammaarabic = 64609; + e.shaddadammatanarabic = 64606; + e.shaddafathaarabic = 64608; + e.shaddakasraarabic = 64610; + e.shaddakasratanarabic = 64607; + e.shade = 9618; + e.shadedark = 9619; + e.shadelight = 9617; + e.shademedium = 9618; + e.shadeva = 2358; + e.shagujarati = 2742; + e.shagurmukhi = 2614; + e.shalshelethebrew = 1427; + e.shbopomofo = 12565; + e.shchacyrillic = 1097; + e.sheenarabic = 1588; + e.sheenfinalarabic = 65206; + e.sheeninitialarabic = 65207; + e.sheenmedialarabic = 65208; + e.sheicoptic = 995; + e.sheqel = 8362; + e.sheqelhebrew = 8362; + e.sheva = 1456; + e.sheva115 = 1456; + e.sheva15 = 1456; + e.sheva22 = 1456; + e.sheva2e = 1456; + e.shevahebrew = 1456; + e.shevanarrowhebrew = 1456; + e.shevaquarterhebrew = 1456; + e.shevawidehebrew = 1456; + e.shhacyrillic = 1211; + e.shimacoptic = 1005; + e.shin = 1513; + e.shindagesh = 64329; + e.shindageshhebrew = 64329; + e.shindageshshindot = 64300; + e.shindageshshindothebrew = 64300; + e.shindageshsindot = 64301; + e.shindageshsindothebrew = 64301; + e.shindothebrew = 1473; + e.shinhebrew = 1513; + e.shinshindot = 64298; + e.shinshindothebrew = 64298; + e.shinsindot = 64299; + e.shinsindothebrew = 64299; + e.shook = 642; + e.sigma = 963; + e.sigma1 = 962; + e.sigmafinal = 962; + e.sigmalunatesymbolgreek = 1010; + e.sihiragana = 12375; + e.sikatakana = 12471; + e.sikatakanahalfwidth = 65404; + e.siluqhebrew = 1469; + e.siluqlefthebrew = 1469; + e.similar = 8764; + e.sindothebrew = 1474; + e.siosacirclekorean = 12916; + e.siosaparenkorean = 12820; + e.sioscieuckorean = 12670; + e.sioscirclekorean = 12902; + e.sioskiyeokkorean = 12666; + e.sioskorean = 12613; + e.siosnieunkorean = 12667; + e.siosparenkorean = 12806; + e.siospieupkorean = 12669; + e.siostikeutkorean = 12668; + e.six = 54; + e.sixarabic = 1638; + e.sixbengali = 2540; + e.sixcircle = 9317; + e.sixcircleinversesansserif = 10127; + e.sixdeva = 2412; + e.sixgujarati = 2796; + e.sixgurmukhi = 2668; + e.sixhackarabic = 1638; + e.sixhangzhou = 12326; + e.sixideographicparen = 12837; + e.sixinferior = 8326; + e.sixmonospace = 65302; + e.sixoldstyle = 63286; + e.sixparen = 9337; + e.sixperiod = 9357; + e.sixpersian = 1782; + e.sixroman = 8565; + e.sixsuperior = 8310; + e.sixteencircle = 9327; + e.sixteencurrencydenominatorbengali = 2553; + e.sixteenparen = 9347; + e.sixteenperiod = 9367; + e.sixthai = 3670; + e.slash = 47; + e.slashmonospace = 65295; + e.slong = 383; + e.slongdotaccent = 7835; + e.smileface = 9786; + e.smonospace = 65363; + e.sofpasuqhebrew = 1475; + e.softhyphen = 173; + e.softsigncyrillic = 1100; + e.sohiragana = 12381; + e.sokatakana = 12477; + e.sokatakanahalfwidth = 65407; + e.soliduslongoverlaycmb = 824; + e.solidusshortoverlaycmb = 823; + e.sorusithai = 3625; + e.sosalathai = 3624; + e.sosothai = 3595; + e.sosuathai = 3626; + e.space = 32; + e.spacehackarabic = 32; + e.spade = 9824; + e.spadesuitblack = 9824; + e.spadesuitwhite = 9828; + e.sparen = 9390; + e.squarebelowcmb = 827; + e.squarecc = 13252; + e.squarecm = 13213; + e.squarediagonalcrosshatchfill = 9641; + e.squarehorizontalfill = 9636; + e.squarekg = 13199; + e.squarekm = 13214; + e.squarekmcapital = 13262; + e.squareln = 13265; + e.squarelog = 13266; + e.squaremg = 13198; + e.squaremil = 13269; + e.squaremm = 13212; + e.squaremsquared = 13217; + e.squareorthogonalcrosshatchfill = 9638; + e.squareupperlefttolowerrightfill = 9639; + e.squareupperrighttolowerleftfill = 9640; + e.squareverticalfill = 9637; + e.squarewhitewithsmallblack = 9635; + e.srsquare = 13275; + e.ssabengali = 2487; + e.ssadeva = 2359; + e.ssagujarati = 2743; + e.ssangcieuckorean = 12617; + e.ssanghieuhkorean = 12677; + e.ssangieungkorean = 12672; + e.ssangkiyeokkorean = 12594; + e.ssangnieunkorean = 12645; + e.ssangpieupkorean = 12611; + e.ssangsioskorean = 12614; + e.ssangtikeutkorean = 12600; + e.ssuperior = 63218; + e.sterling = 163; + e.sterlingmonospace = 65505; + e.strokelongoverlaycmb = 822; + e.strokeshortoverlaycmb = 821; + e.subset = 8834; + e.subsetnotequal = 8842; + e.subsetorequal = 8838; + e.succeeds = 8827; + e.suchthat = 8715; + e.suhiragana = 12377; + e.sukatakana = 12473; + e.sukatakanahalfwidth = 65405; + e.sukunarabic = 1618; + e.summation = 8721; + e.sun = 9788; + e.superset = 8835; + e.supersetnotequal = 8843; + e.supersetorequal = 8839; + e.svsquare = 13276; + e.syouwaerasquare = 13180; + e.t = 116; + e.tabengali = 2468; + e.tackdown = 8868; + e.tackleft = 8867; + e.tadeva = 2340; + e.tagujarati = 2724; + e.tagurmukhi = 2596; + e.taharabic = 1591; + e.tahfinalarabic = 65218; + e.tahinitialarabic = 65219; + e.tahiragana = 12383; + e.tahmedialarabic = 65220; + e.taisyouerasquare = 13181; + e.takatakana = 12479; + e.takatakanahalfwidth = 65408; + e.tatweelarabic = 1600; + e.tau = 964; + e.tav = 1514; + e.tavdages = 64330; + e.tavdagesh = 64330; + e.tavdageshhebrew = 64330; + e.tavhebrew = 1514; + e.tbar = 359; + e.tbopomofo = 12554; + e.tcaron = 357; + e.tccurl = 680; + e.tcedilla = 355; + e.tcheharabic = 1670; + e.tchehfinalarabic = 64379; + e.tchehinitialarabic = 64380; + e.tchehmedialarabic = 64381; + e.tcircle = 9443; + e.tcircumflexbelow = 7793; + e.tcommaaccent = 355; + e.tdieresis = 7831; + e.tdotaccent = 7787; + e.tdotbelow = 7789; + e.tecyrillic = 1090; + e.tedescendercyrillic = 1197; + e.teharabic = 1578; + e.tehfinalarabic = 65174; + e.tehhahinitialarabic = 64674; + e.tehhahisolatedarabic = 64524; + e.tehinitialarabic = 65175; + e.tehiragana = 12390; + e.tehjeeminitialarabic = 64673; + e.tehjeemisolatedarabic = 64523; + e.tehmarbutaarabic = 1577; + e.tehmarbutafinalarabic = 65172; + e.tehmedialarabic = 65176; + e.tehmeeminitialarabic = 64676; + e.tehmeemisolatedarabic = 64526; + e.tehnoonfinalarabic = 64627; + e.tekatakana = 12486; + e.tekatakanahalfwidth = 65411; + e.telephone = 8481; + e.telephoneblack = 9742; + e.telishagedolahebrew = 1440; + e.telishaqetanahebrew = 1449; + e.tencircle = 9321; + e.tenideographicparen = 12841; + e.tenparen = 9341; + e.tenperiod = 9361; + e.tenroman = 8569; + e.tesh = 679; + e.tet = 1496; + e.tetdagesh = 64312; + e.tetdageshhebrew = 64312; + e.tethebrew = 1496; + e.tetsecyrillic = 1205; + e.tevirhebrew = 1435; + e.tevirlefthebrew = 1435; + e.thabengali = 2469; + e.thadeva = 2341; + e.thagujarati = 2725; + e.thagurmukhi = 2597; + e.thalarabic = 1584; + e.thalfinalarabic = 65196; + e.thanthakhatlowleftthai = 63640; + e.thanthakhatlowrightthai = 63639; + e.thanthakhatthai = 3660; + e.thanthakhatupperleftthai = 63638; + e.theharabic = 1579; + e.thehfinalarabic = 65178; + e.thehinitialarabic = 65179; + e.thehmedialarabic = 65180; + e.thereexists = 8707; + e.therefore = 8756; + e.theta = 952; + e.theta1 = 977; + e.thetasymbolgreek = 977; + e.thieuthacirclekorean = 12921; + e.thieuthaparenkorean = 12825; + e.thieuthcirclekorean = 12907; + e.thieuthkorean = 12620; + e.thieuthparenkorean = 12811; + e.thirteencircle = 9324; + e.thirteenparen = 9344; + e.thirteenperiod = 9364; + e.thonangmonthothai = 3601; + e.thook = 429; + e.thophuthaothai = 3602; + e.thorn = 254; + e.thothahanthai = 3607; + e.thothanthai = 3600; + e.thothongthai = 3608; + e.thothungthai = 3606; + e.thousandcyrillic = 1154; + e.thousandsseparatorarabic = 1644; + e.thousandsseparatorpersian = 1644; + e.three = 51; + e.threearabic = 1635; + e.threebengali = 2537; + e.threecircle = 9314; + e.threecircleinversesansserif = 10124; + e.threedeva = 2409; + e.threeeighths = 8540; + e.threegujarati = 2793; + e.threegurmukhi = 2665; + e.threehackarabic = 1635; + e.threehangzhou = 12323; + e.threeideographicparen = 12834; + e.threeinferior = 8323; + e.threemonospace = 65299; + e.threenumeratorbengali = 2550; + e.threeoldstyle = 63283; + e.threeparen = 9334; + e.threeperiod = 9354; + e.threepersian = 1779; + e.threequarters = 190; + e.threequartersemdash = 63198; + e.threeroman = 8562; + e.threesuperior = 179; + e.threethai = 3667; + e.thzsquare = 13204; + e.tihiragana = 12385; + e.tikatakana = 12481; + e.tikatakanahalfwidth = 65409; + e.tikeutacirclekorean = 12912; + e.tikeutaparenkorean = 12816; + e.tikeutcirclekorean = 12898; + e.tikeutkorean = 12599; + e.tikeutparenkorean = 12802; + e.tilde = 732; + e.tildebelowcmb = 816; + e.tildecmb = 771; + e.tildecomb = 771; + e.tildedoublecmb = 864; + e.tildeoperator = 8764; + e.tildeoverlaycmb = 820; + e.tildeverticalcmb = 830; + e.timescircle = 8855; + e.tipehahebrew = 1430; + e.tipehalefthebrew = 1430; + e.tippigurmukhi = 2672; + e.titlocyrilliccmb = 1155; + e.tiwnarmenian = 1407; + e.tlinebelow = 7791; + e.tmonospace = 65364; + e.toarmenian = 1385; + e.tohiragana = 12392; + e.tokatakana = 12488; + e.tokatakanahalfwidth = 65412; + e.tonebarextrahighmod = 741; + e.tonebarextralowmod = 745; + e.tonebarhighmod = 742; + e.tonebarlowmod = 744; + e.tonebarmidmod = 743; + e.tonefive = 445; + e.tonesix = 389; + e.tonetwo = 424; + e.tonos = 900; + e.tonsquare = 13095; + e.topatakthai = 3599; + e.tortoiseshellbracketleft = 12308; + e.tortoiseshellbracketleftsmall = 65117; + e.tortoiseshellbracketleftvertical = 65081; + e.tortoiseshellbracketright = 12309; + e.tortoiseshellbracketrightsmall = 65118; + e.tortoiseshellbracketrightvertical = 65082; + e.totaothai = 3605; + e.tpalatalhook = 427; + e.tparen = 9391; + e.trademark = 8482; + e.trademarksans = 63722; + e.trademarkserif = 63195; + e.tretroflexhook = 648; + e.triagdn = 9660; + e.triaglf = 9668; + e.triagrt = 9658; + e.triagup = 9650; + e.ts = 678; + e.tsadi = 1510; + e.tsadidagesh = 64326; + e.tsadidageshhebrew = 64326; + e.tsadihebrew = 1510; + e.tsecyrillic = 1094; + e.tsere = 1461; + e.tsere12 = 1461; + e.tsere1e = 1461; + e.tsere2b = 1461; + e.tserehebrew = 1461; + e.tserenarrowhebrew = 1461; + e.tserequarterhebrew = 1461; + e.tserewidehebrew = 1461; + e.tshecyrillic = 1115; + e.tsuperior = 63219; + e.ttabengali = 2463; + e.ttadeva = 2335; + e.ttagujarati = 2719; + e.ttagurmukhi = 2591; + e.tteharabic = 1657; + e.ttehfinalarabic = 64359; + e.ttehinitialarabic = 64360; + e.ttehmedialarabic = 64361; + e.tthabengali = 2464; + e.tthadeva = 2336; + e.tthagujarati = 2720; + e.tthagurmukhi = 2592; + e.tturned = 647; + e.tuhiragana = 12388; + e.tukatakana = 12484; + e.tukatakanahalfwidth = 65410; + e.tusmallhiragana = 12387; + e.tusmallkatakana = 12483; + e.tusmallkatakanahalfwidth = 65391; + e.twelvecircle = 9323; + e.twelveparen = 9343; + e.twelveperiod = 9363; + e.twelveroman = 8571; + e.twentycircle = 9331; + e.twentyhangzhou = 21316; + e.twentyparen = 9351; + e.twentyperiod = 9371; + e.two = 50; + e.twoarabic = 1634; + e.twobengali = 2536; + e.twocircle = 9313; + e.twocircleinversesansserif = 10123; + e.twodeva = 2408; + e.twodotenleader = 8229; + e.twodotleader = 8229; + e.twodotleadervertical = 65072; + e.twogujarati = 2792; + e.twogurmukhi = 2664; + e.twohackarabic = 1634; + e.twohangzhou = 12322; + e.twoideographicparen = 12833; + e.twoinferior = 8322; + e.twomonospace = 65298; + e.twonumeratorbengali = 2549; + e.twooldstyle = 63282; + e.twoparen = 9333; + e.twoperiod = 9353; + e.twopersian = 1778; + e.tworoman = 8561; + e.twostroke = 443; + e.twosuperior = 178; + e.twothai = 3666; + e.twothirds = 8532; + e.u = 117; + e.uacute = 250; + e.ubar = 649; + e.ubengali = 2441; + e.ubopomofo = 12584; + e.ubreve = 365; + e.ucaron = 468; + e.ucircle = 9444; + e.ucircumflex = 251; + e.ucircumflexbelow = 7799; + e.ucyrillic = 1091; + e.udattadeva = 2385; + e.udblacute = 369; + e.udblgrave = 533; + e.udeva = 2313; + e.udieresis = 252; + e.udieresisacute = 472; + e.udieresisbelow = 7795; + e.udieresiscaron = 474; + e.udieresiscyrillic = 1265; + e.udieresisgrave = 476; + e.udieresismacron = 470; + e.udotbelow = 7909; + e.ugrave = 249; + e.ugujarati = 2697; + e.ugurmukhi = 2569; + e.uhiragana = 12358; + e.uhookabove = 7911; + e.uhorn = 432; + e.uhornacute = 7913; + e.uhorndotbelow = 7921; + e.uhorngrave = 7915; + e.uhornhookabove = 7917; + e.uhorntilde = 7919; + e.uhungarumlaut = 369; + e.uhungarumlautcyrillic = 1267; + e.uinvertedbreve = 535; + e.ukatakana = 12454; + e.ukatakanahalfwidth = 65395; + e.ukcyrillic = 1145; + e.ukorean = 12636; + e.umacron = 363; + e.umacroncyrillic = 1263; + e.umacrondieresis = 7803; + e.umatragurmukhi = 2625; + e.umonospace = 65365; + e.underscore = 95; + e.underscoredbl = 8215; + e.underscoremonospace = 65343; + e.underscorevertical = 65075; + e.underscorewavy = 65103; + e.union = 8746; + e.universal = 8704; + e.uogonek = 371; + e.uparen = 9392; + e.upblock = 9600; + e.upperdothebrew = 1476; + e.upsilon = 965; + e.upsilondieresis = 971; + e.upsilondieresistonos = 944; + e.upsilonlatin = 650; + e.upsilontonos = 973; + e.uptackbelowcmb = 797; + e.uptackmod = 724; + e.uragurmukhi = 2675; + e.uring = 367; + e.ushortcyrillic = 1118; + e.usmallhiragana = 12357; + e.usmallkatakana = 12453; + e.usmallkatakanahalfwidth = 65385; + e.ustraightcyrillic = 1199; + e.ustraightstrokecyrillic = 1201; + e.utilde = 361; + e.utildeacute = 7801; + e.utildebelow = 7797; + e.uubengali = 2442; + e.uudeva = 2314; + e.uugujarati = 2698; + e.uugurmukhi = 2570; + e.uumatragurmukhi = 2626; + e.uuvowelsignbengali = 2498; + e.uuvowelsigndeva = 2370; + e.uuvowelsigngujarati = 2754; + e.uvowelsignbengali = 2497; + e.uvowelsigndeva = 2369; + e.uvowelsigngujarati = 2753; + e.v = 118; + e.vadeva = 2357; + e.vagujarati = 2741; + e.vagurmukhi = 2613; + e.vakatakana = 12535; + e.vav = 1493; + e.vavdagesh = 64309; + e.vavdagesh65 = 64309; + e.vavdageshhebrew = 64309; + e.vavhebrew = 1493; + e.vavholam = 64331; + e.vavholamhebrew = 64331; + e.vavvavhebrew = 1520; + e.vavyodhebrew = 1521; + e.vcircle = 9445; + e.vdotbelow = 7807; + e.vecyrillic = 1074; + e.veharabic = 1700; + e.vehfinalarabic = 64363; + e.vehinitialarabic = 64364; + e.vehmedialarabic = 64365; + e.vekatakana = 12537; + e.venus = 9792; + e.verticalbar = 124; + e.verticallineabovecmb = 781; + e.verticallinebelowcmb = 809; + e.verticallinelowmod = 716; + e.verticallinemod = 712; + e.vewarmenian = 1406; + e.vhook = 651; + e.vikatakana = 12536; + e.viramabengali = 2509; + e.viramadeva = 2381; + e.viramagujarati = 2765; + e.visargabengali = 2435; + e.visargadeva = 2307; + e.visargagujarati = 2691; + e.vmonospace = 65366; + e.voarmenian = 1400; + e.voicediterationhiragana = 12446; + e.voicediterationkatakana = 12542; + e.voicedmarkkana = 12443; + e.voicedmarkkanahalfwidth = 65438; + e.vokatakana = 12538; + e.vparen = 9393; + e.vtilde = 7805; + e.vturned = 652; + e.vuhiragana = 12436; + e.vukatakana = 12532; + e.w = 119; + e.wacute = 7811; + e.waekorean = 12633; + e.wahiragana = 12431; + e.wakatakana = 12527; + e.wakatakanahalfwidth = 65436; + e.wakorean = 12632; + e.wasmallhiragana = 12430; + e.wasmallkatakana = 12526; + e.wattosquare = 13143; + e.wavedash = 12316; + e.wavyunderscorevertical = 65076; + e.wawarabic = 1608; + e.wawfinalarabic = 65262; + e.wawhamzaabovearabic = 1572; + e.wawhamzaabovefinalarabic = 65158; + e.wbsquare = 13277; + e.wcircle = 9446; + e.wcircumflex = 373; + e.wdieresis = 7813; + e.wdotaccent = 7815; + e.wdotbelow = 7817; + e.wehiragana = 12433; + e.weierstrass = 8472; + e.wekatakana = 12529; + e.wekorean = 12638; + e.weokorean = 12637; + e.wgrave = 7809; + e.whitebullet = 9702; + e.whitecircle = 9675; + e.whitecircleinverse = 9689; + e.whitecornerbracketleft = 12302; + e.whitecornerbracketleftvertical = 65091; + e.whitecornerbracketright = 12303; + e.whitecornerbracketrightvertical = 65092; + e.whitediamond = 9671; + e.whitediamondcontainingblacksmalldiamond = 9672; + e.whitedownpointingsmalltriangle = 9663; + e.whitedownpointingtriangle = 9661; + e.whiteleftpointingsmalltriangle = 9667; + e.whiteleftpointingtriangle = 9665; + e.whitelenticularbracketleft = 12310; + e.whitelenticularbracketright = 12311; + e.whiterightpointingsmalltriangle = 9657; + e.whiterightpointingtriangle = 9655; + e.whitesmallsquare = 9643; + e.whitesmilingface = 9786; + e.whitesquare = 9633; + e.whitestar = 9734; + e.whitetelephone = 9743; + e.whitetortoiseshellbracketleft = 12312; + e.whitetortoiseshellbracketright = 12313; + e.whiteuppointingsmalltriangle = 9653; + e.whiteuppointingtriangle = 9651; + e.wihiragana = 12432; + e.wikatakana = 12528; + e.wikorean = 12639; + e.wmonospace = 65367; + e.wohiragana = 12434; + e.wokatakana = 12530; + e.wokatakanahalfwidth = 65382; + e.won = 8361; + e.wonmonospace = 65510; + e.wowaenthai = 3623; + e.wparen = 9394; + e.wring = 7832; + e.wsuperior = 695; + e.wturned = 653; + e.wynn = 447; + e.x = 120; + e.xabovecmb = 829; + e.xbopomofo = 12562; + e.xcircle = 9447; + e.xdieresis = 7821; + e.xdotaccent = 7819; + e.xeharmenian = 1389; + e.xi = 958; + e.xmonospace = 65368; + e.xparen = 9395; + e.xsuperior = 739; + e.y = 121; + e.yaadosquare = 13134; + e.yabengali = 2479; + e.yacute = 253; + e.yadeva = 2351; + e.yaekorean = 12626; + e.yagujarati = 2735; + e.yagurmukhi = 2607; + e.yahiragana = 12420; + e.yakatakana = 12516; + e.yakatakanahalfwidth = 65428; + e.yakorean = 12625; + e.yamakkanthai = 3662; + e.yasmallhiragana = 12419; + e.yasmallkatakana = 12515; + e.yasmallkatakanahalfwidth = 65388; + e.yatcyrillic = 1123; + e.ycircle = 9448; + e.ycircumflex = 375; + e.ydieresis = 255; + e.ydotaccent = 7823; + e.ydotbelow = 7925; + e.yeharabic = 1610; + e.yehbarreearabic = 1746; + e.yehbarreefinalarabic = 64431; + e.yehfinalarabic = 65266; + e.yehhamzaabovearabic = 1574; + e.yehhamzaabovefinalarabic = 65162; + e.yehhamzaaboveinitialarabic = 65163; + e.yehhamzaabovemedialarabic = 65164; + e.yehinitialarabic = 65267; + e.yehmedialarabic = 65268; + e.yehmeeminitialarabic = 64733; + e.yehmeemisolatedarabic = 64600; + e.yehnoonfinalarabic = 64660; + e.yehthreedotsbelowarabic = 1745; + e.yekorean = 12630; + e.yen = 165; + e.yenmonospace = 65509; + e.yeokorean = 12629; + e.yeorinhieuhkorean = 12678; + e.yerahbenyomohebrew = 1450; + e.yerahbenyomolefthebrew = 1450; + e.yericyrillic = 1099; + e.yerudieresiscyrillic = 1273; + e.yesieungkorean = 12673; + e.yesieungpansioskorean = 12675; + e.yesieungsioskorean = 12674; + e.yetivhebrew = 1434; + e.ygrave = 7923; + e.yhook = 436; + e.yhookabove = 7927; + e.yiarmenian = 1397; + e.yicyrillic = 1111; + e.yikorean = 12642; + e.yinyang = 9775; + e.yiwnarmenian = 1410; + e.ymonospace = 65369; + e.yod = 1497; + e.yoddagesh = 64313; + e.yoddageshhebrew = 64313; + e.yodhebrew = 1497; + e.yodyodhebrew = 1522; + e.yodyodpatahhebrew = 64287; + e.yohiragana = 12424; + e.yoikorean = 12681; + e.yokatakana = 12520; + e.yokatakanahalfwidth = 65430; + e.yokorean = 12635; + e.yosmallhiragana = 12423; + e.yosmallkatakana = 12519; + e.yosmallkatakanahalfwidth = 65390; + e.yotgreek = 1011; + e.yoyaekorean = 12680; + e.yoyakorean = 12679; + e.yoyakthai = 3618; + e.yoyingthai = 3597; + e.yparen = 9396; + e.ypogegrammeni = 890; + e.ypogegrammenigreekcmb = 837; + e.yr = 422; + e.yring = 7833; + e.ysuperior = 696; + e.ytilde = 7929; + e.yturned = 654; + e.yuhiragana = 12422; + e.yuikorean = 12684; + e.yukatakana = 12518; + e.yukatakanahalfwidth = 65429; + e.yukorean = 12640; + e.yusbigcyrillic = 1131; + e.yusbigiotifiedcyrillic = 1133; + e.yuslittlecyrillic = 1127; + e.yuslittleiotifiedcyrillic = 1129; + e.yusmallhiragana = 12421; + e.yusmallkatakana = 12517; + e.yusmallkatakanahalfwidth = 65389; + e.yuyekorean = 12683; + e.yuyeokorean = 12682; + e.yyabengali = 2527; + e.yyadeva = 2399; + e.z = 122; + e.zaarmenian = 1382; + e.zacute = 378; + e.zadeva = 2395; + e.zagurmukhi = 2651; + e.zaharabic = 1592; + e.zahfinalarabic = 65222; + e.zahinitialarabic = 65223; + e.zahiragana = 12374; + e.zahmedialarabic = 65224; + e.zainarabic = 1586; + e.zainfinalarabic = 65200; + e.zakatakana = 12470; + e.zaqefgadolhebrew = 1429; + e.zaqefqatanhebrew = 1428; + e.zarqahebrew = 1432; + e.zayin = 1494; + e.zayindagesh = 64310; + e.zayindageshhebrew = 64310; + e.zayinhebrew = 1494; + e.zbopomofo = 12567; + e.zcaron = 382; + e.zcircle = 9449; + e.zcircumflex = 7825; + e.zcurl = 657; + e.zdot = 380; + e.zdotaccent = 380; + e.zdotbelow = 7827; + e.zecyrillic = 1079; + e.zedescendercyrillic = 1177; + e.zedieresiscyrillic = 1247; + e.zehiragana = 12380; + e.zekatakana = 12476; + e.zero = 48; + e.zeroarabic = 1632; + e.zerobengali = 2534; + e.zerodeva = 2406; + e.zerogujarati = 2790; + e.zerogurmukhi = 2662; + e.zerohackarabic = 1632; + e.zeroinferior = 8320; + e.zeromonospace = 65296; + e.zerooldstyle = 63280; + e.zeropersian = 1776; + e.zerosuperior = 8304; + e.zerothai = 3664; + e.zerowidthjoiner = 65279; + e.zerowidthnonjoiner = 8204; + e.zerowidthspace = 8203; + e.zeta = 950; + e.zhbopomofo = 12563; + e.zhearmenian = 1386; + e.zhebrevecyrillic = 1218; + e.zhecyrillic = 1078; + e.zhedescendercyrillic = 1175; + e.zhedieresiscyrillic = 1245; + e.zihiragana = 12376; + e.zikatakana = 12472; + e.zinorhebrew = 1454; + e.zlinebelow = 7829; + e.zmonospace = 65370; + e.zohiragana = 12382; + e.zokatakana = 12478; + e.zparen = 9397; + e.zretroflexhook = 656; + e.zstroke = 438; + e.zuhiragana = 12378; + e.zukatakana = 12474; + e[".notdef"] = 0; + e.angbracketleftbig = 9001; + e.angbracketleftBig = 9001; + e.angbracketleftbigg = 9001; + e.angbracketleftBigg = 9001; + e.angbracketrightBig = 9002; + e.angbracketrightbig = 9002; + e.angbracketrightBigg = 9002; + e.angbracketrightbigg = 9002; + e.arrowhookleft = 8618; + e.arrowhookright = 8617; + e.arrowlefttophalf = 8636; + e.arrowleftbothalf = 8637; + e.arrownortheast = 8599; + e.arrownorthwest = 8598; + e.arrowrighttophalf = 8640; + e.arrowrightbothalf = 8641; + e.arrowsoutheast = 8600; + e.arrowsouthwest = 8601; + e.backslashbig = 8726; + e.backslashBig = 8726; + e.backslashBigg = 8726; + e.backslashbigg = 8726; + e.bardbl = 8214; + e.bracehtipdownleft = 65079; + e.bracehtipdownright = 65079; + e.bracehtipupleft = 65080; + e.bracehtipupright = 65080; + e.braceleftBig = 123; + e.braceleftbig = 123; + e.braceleftbigg = 123; + e.braceleftBigg = 123; + e.bracerightBig = 125; + e.bracerightbig = 125; + e.bracerightbigg = 125; + e.bracerightBigg = 125; + e.bracketleftbig = 91; + e.bracketleftBig = 91; + e.bracketleftbigg = 91; + e.bracketleftBigg = 91; + e.bracketrightBig = 93; + e.bracketrightbig = 93; + e.bracketrightbigg = 93; + e.bracketrightBigg = 93; + e.ceilingleftbig = 8968; + e.ceilingleftBig = 8968; + e.ceilingleftBigg = 8968; + e.ceilingleftbigg = 8968; + e.ceilingrightbig = 8969; + e.ceilingrightBig = 8969; + e.ceilingrightbigg = 8969; + e.ceilingrightBigg = 8969; + e.circledotdisplay = 8857; + e.circledottext = 8857; + e.circlemultiplydisplay = 8855; + e.circlemultiplytext = 8855; + e.circleplusdisplay = 8853; + e.circleplustext = 8853; + e.contintegraldisplay = 8750; + e.contintegraltext = 8750; + e.coproductdisplay = 8720; + e.coproducttext = 8720; + e.floorleftBig = 8970; + e.floorleftbig = 8970; + e.floorleftbigg = 8970; + e.floorleftBigg = 8970; + e.floorrightbig = 8971; + e.floorrightBig = 8971; + e.floorrightBigg = 8971; + e.floorrightbigg = 8971; + e.hatwide = 770; + e.hatwider = 770; + e.hatwidest = 770; + e.intercal = 7488; + e.integraldisplay = 8747; + e.integraltext = 8747; + e.intersectiondisplay = 8898; + e.intersectiontext = 8898; + e.logicalanddisplay = 8743; + e.logicalandtext = 8743; + e.logicalordisplay = 8744; + e.logicalortext = 8744; + e.parenleftBig = 40; + e.parenleftbig = 40; + e.parenleftBigg = 40; + e.parenleftbigg = 40; + e.parenrightBig = 41; + e.parenrightbig = 41; + e.parenrightBigg = 41; + e.parenrightbigg = 41; + e.prime = 8242; + e.productdisplay = 8719; + e.producttext = 8719; + e.radicalbig = 8730; + e.radicalBig = 8730; + e.radicalBigg = 8730; + e.radicalbigg = 8730; + e.radicalbt = 8730; + e.radicaltp = 8730; + e.radicalvertex = 8730; + e.slashbig = 47; + e.slashBig = 47; + e.slashBigg = 47; + e.slashbigg = 47; + e.summationdisplay = 8721; + e.summationtext = 8721; + e.tildewide = 732; + e.tildewider = 732; + e.tildewidest = 732; + e.uniondisplay = 8899; + e.unionmultidisplay = 8846; + e.unionmultitext = 8846; + e.unionsqdisplay = 8852; + e.unionsqtext = 8852; + e.uniontext = 8899; + e.vextenddouble = 8741; + e.vextendsingle = 8739; + }), + Gi = getLookupTableFactory(function (e) { + e.space = 32; + e.a1 = 9985; + e.a2 = 9986; + e.a202 = 9987; + e.a3 = 9988; + e.a4 = 9742; + e.a5 = 9990; + e.a119 = 9991; + e.a118 = 9992; + e.a117 = 9993; + e.a11 = 9755; + e.a12 = 9758; + e.a13 = 9996; + e.a14 = 9997; + e.a15 = 9998; + e.a16 = 9999; + e.a105 = 1e4; + e.a17 = 10001; + e.a18 = 10002; + e.a19 = 10003; + e.a20 = 10004; + e.a21 = 10005; + e.a22 = 10006; + e.a23 = 10007; + e.a24 = 10008; + e.a25 = 10009; + e.a26 = 10010; + e.a27 = 10011; + e.a28 = 10012; + e.a6 = 10013; + e.a7 = 10014; + e.a8 = 10015; + e.a9 = 10016; + e.a10 = 10017; + e.a29 = 10018; + e.a30 = 10019; + e.a31 = 10020; + e.a32 = 10021; + e.a33 = 10022; + e.a34 = 10023; + e.a35 = 9733; + e.a36 = 10025; + e.a37 = 10026; + e.a38 = 10027; + e.a39 = 10028; + e.a40 = 10029; + e.a41 = 10030; + e.a42 = 10031; + e.a43 = 10032; + e.a44 = 10033; + e.a45 = 10034; + e.a46 = 10035; + e.a47 = 10036; + e.a48 = 10037; + e.a49 = 10038; + e.a50 = 10039; + e.a51 = 10040; + e.a52 = 10041; + e.a53 = 10042; + e.a54 = 10043; + e.a55 = 10044; + e.a56 = 10045; + e.a57 = 10046; + e.a58 = 10047; + e.a59 = 10048; + e.a60 = 10049; + e.a61 = 10050; + e.a62 = 10051; + e.a63 = 10052; + e.a64 = 10053; + e.a65 = 10054; + e.a66 = 10055; + e.a67 = 10056; + e.a68 = 10057; + e.a69 = 10058; + e.a70 = 10059; + e.a71 = 9679; + e.a72 = 10061; + e.a73 = 9632; + e.a74 = 10063; + e.a203 = 10064; + e.a75 = 10065; + e.a204 = 10066; + e.a76 = 9650; + e.a77 = 9660; + e.a78 = 9670; + e.a79 = 10070; + e.a81 = 9687; + e.a82 = 10072; + e.a83 = 10073; + e.a84 = 10074; + e.a97 = 10075; + e.a98 = 10076; + e.a99 = 10077; + e.a100 = 10078; + e.a101 = 10081; + e.a102 = 10082; + e.a103 = 10083; + e.a104 = 10084; + e.a106 = 10085; + e.a107 = 10086; + e.a108 = 10087; + e.a112 = 9827; + e.a111 = 9830; + e.a110 = 9829; + e.a109 = 9824; + e.a120 = 9312; + e.a121 = 9313; + e.a122 = 9314; + e.a123 = 9315; + e.a124 = 9316; + e.a125 = 9317; + e.a126 = 9318; + e.a127 = 9319; + e.a128 = 9320; + e.a129 = 9321; + e.a130 = 10102; + e.a131 = 10103; + e.a132 = 10104; + e.a133 = 10105; + e.a134 = 10106; + e.a135 = 10107; + e.a136 = 10108; + e.a137 = 10109; + e.a138 = 10110; + e.a139 = 10111; + e.a140 = 10112; + e.a141 = 10113; + e.a142 = 10114; + e.a143 = 10115; + e.a144 = 10116; + e.a145 = 10117; + e.a146 = 10118; + e.a147 = 10119; + e.a148 = 10120; + e.a149 = 10121; + e.a150 = 10122; + e.a151 = 10123; + e.a152 = 10124; + e.a153 = 10125; + e.a154 = 10126; + e.a155 = 10127; + e.a156 = 10128; + e.a157 = 10129; + e.a158 = 10130; + e.a159 = 10131; + e.a160 = 10132; + e.a161 = 8594; + e.a163 = 8596; + e.a164 = 8597; + e.a196 = 10136; + e.a165 = 10137; + e.a192 = 10138; + e.a166 = 10139; + e.a167 = 10140; + e.a168 = 10141; + e.a169 = 10142; + e.a170 = 10143; + e.a171 = 10144; + e.a172 = 10145; + e.a173 = 10146; + e.a162 = 10147; + e.a174 = 10148; + e.a175 = 10149; + e.a176 = 10150; + e.a177 = 10151; + e.a178 = 10152; + e.a179 = 10153; + e.a193 = 10154; + e.a180 = 10155; + e.a199 = 10156; + e.a181 = 10157; + e.a200 = 10158; + e.a182 = 10159; + e.a201 = 10161; + e.a183 = 10162; + e.a184 = 10163; + e.a197 = 10164; + e.a185 = 10165; + e.a194 = 10166; + e.a198 = 10167; + e.a186 = 10168; + e.a195 = 10169; + e.a187 = 10170; + e.a188 = 10171; + e.a189 = 10172; + e.a190 = 10173; + e.a191 = 10174; + e.a89 = 10088; + e.a90 = 10089; + e.a93 = 10090; + e.a94 = 10091; + e.a91 = 10092; + e.a92 = 10093; + e.a205 = 10094; + e.a85 = 10095; + e.a206 = 10096; + e.a86 = 10097; + e.a87 = 10098; + e.a88 = 10099; + e.a95 = 10100; + e.a96 = 10101; + e[".notdef"] = 0; + }), + xi = getLookupTableFactory(function (e) { + e[63721] = 169; + e[63193] = 169; + e[63720] = 174; + e[63194] = 174; + e[63722] = 8482; + e[63195] = 8482; + e[63729] = 9127; + e[63730] = 9128; + e[63731] = 9129; + e[63740] = 9131; + e[63741] = 9132; + e[63742] = 9133; + e[63726] = 9121; + e[63727] = 9122; + e[63728] = 9123; + e[63737] = 9124; + e[63738] = 9125; + e[63739] = 9126; + e[63723] = 9115; + e[63724] = 9116; + e[63725] = 9117; + e[63734] = 9118; + e[63735] = 9119; + e[63736] = 9120; + }); +function getUnicodeForGlyph(e, t) { + let i = t[e]; + if (void 0 !== i) return i; + if (!e) return -1; + if ("u" === e[0]) { + const t = e.length; + let a; + if (7 === t && "n" === e[1] && "i" === e[2]) a = e.substring(3); + else { + if (!(t >= 5 && t <= 7)) return -1; + a = e.substring(1); + } + if (a === a.toUpperCase()) { + i = parseInt(a, 16); + if (i >= 0) return i; + } + } + return -1; +} +const Mi = [ + [0, 127], + [128, 255], + [256, 383], + [384, 591], + [592, 687, 7424, 7551, 7552, 7615], + [688, 767, 42752, 42783], + [768, 879, 7616, 7679], + [880, 1023], + [11392, 11519], + [1024, 1279, 1280, 1327, 11744, 11775, 42560, 42655], + [1328, 1423], + [1424, 1535], + [42240, 42559], + [1536, 1791, 1872, 1919], + [1984, 2047], + [2304, 2431], + [2432, 2559], + [2560, 2687], + [2688, 2815], + [2816, 2943], + [2944, 3071], + [3072, 3199], + [3200, 3327], + [3328, 3455], + [3584, 3711], + [3712, 3839], + [4256, 4351, 11520, 11567], + [6912, 7039], + [4352, 4607], + [7680, 7935, 11360, 11391, 42784, 43007], + [7936, 8191], + [8192, 8303, 11776, 11903], + [8304, 8351], + [8352, 8399], + [8400, 8447], + [8448, 8527], + [8528, 8591], + [8592, 8703, 10224, 10239, 10496, 10623, 11008, 11263], + [8704, 8959, 10752, 11007, 10176, 10223, 10624, 10751], + [8960, 9215], + [9216, 9279], + [9280, 9311], + [9312, 9471], + [9472, 9599], + [9600, 9631], + [9632, 9727], + [9728, 9983], + [9984, 10175], + [12288, 12351], + [12352, 12447], + [12448, 12543, 12784, 12799], + [12544, 12591, 12704, 12735], + [12592, 12687], + [43072, 43135], + [12800, 13055], + [13056, 13311], + [44032, 55215], + [55296, 57343], + [67840, 67871], + [ + 19968, 40959, 11904, 12031, 12032, 12255, 12272, 12287, 13312, 19903, + 131072, 173791, 12688, 12703, + ], + [57344, 63743], + [12736, 12783, 63744, 64255, 194560, 195103], + [64256, 64335], + [64336, 65023], + [65056, 65071], + [65040, 65055], + [65104, 65135], + [65136, 65279], + [65280, 65519], + [65520, 65535], + [3840, 4095], + [1792, 1871], + [1920, 1983], + [3456, 3583], + [4096, 4255], + [4608, 4991, 4992, 5023, 11648, 11743], + [5024, 5119], + [5120, 5759], + [5760, 5791], + [5792, 5887], + [6016, 6143], + [6144, 6319], + [10240, 10495], + [40960, 42127], + [5888, 5919, 5920, 5951, 5952, 5983, 5984, 6015], + [66304, 66351], + [66352, 66383], + [66560, 66639], + [118784, 119039, 119040, 119295, 119296, 119375], + [119808, 120831], + [1044480, 1048573], + [65024, 65039, 917760, 917999], + [917504, 917631], + [6400, 6479], + [6480, 6527], + [6528, 6623], + [6656, 6687], + [11264, 11359], + [11568, 11647], + [19904, 19967], + [43008, 43055], + [65536, 65663, 65664, 65791, 65792, 65855], + [65856, 65935], + [66432, 66463], + [66464, 66527], + [66640, 66687], + [66688, 66735], + [67584, 67647], + [68096, 68191], + [119552, 119647], + [73728, 74751, 74752, 74879], + [119648, 119679], + [7040, 7103], + [7168, 7247], + [7248, 7295], + [43136, 43231], + [43264, 43311], + [43312, 43359], + [43520, 43615], + [65936, 65999], + [66e3, 66047], + [66208, 66271, 66176, 66207, 67872, 67903], + [127024, 127135, 126976, 127023], +]; +function getUnicodeRangeFor(e, t = -1) { + if (-1 !== t) { + const i = Mi[t]; + for (let a = 0, s = i.length; a < s; a += 2) + if (e >= i[a] && e <= i[a + 1]) return t; + } + for (let t = 0, i = Mi.length; t < i; t++) { + const i = Mi[t]; + for (let a = 0, s = i.length; a < s; a += 2) + if (e >= i[a] && e <= i[a + 1]) return t; + } + return -1; +} +const Hi = new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$", "u"), + Ji = new Map(); +const Yi = !0, + vi = 1, + Ki = 2, + Ti = 4, + qi = 32, + Oi = [ + ".notdef", + ".null", + "nonmarkingreturn", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "Adieresis", + "Aring", + "Ccedilla", + "Eacute", + "Ntilde", + "Odieresis", + "Udieresis", + "aacute", + "agrave", + "acircumflex", + "adieresis", + "atilde", + "aring", + "ccedilla", + "eacute", + "egrave", + "ecircumflex", + "edieresis", + "iacute", + "igrave", + "icircumflex", + "idieresis", + "ntilde", + "oacute", + "ograve", + "ocircumflex", + "odieresis", + "otilde", + "uacute", + "ugrave", + "ucircumflex", + "udieresis", + "dagger", + "degree", + "cent", + "sterling", + "section", + "bullet", + "paragraph", + "germandbls", + "registered", + "copyright", + "trademark", + "acute", + "dieresis", + "notequal", + "AE", + "Oslash", + "infinity", + "plusminus", + "lessequal", + "greaterequal", + "yen", + "mu", + "partialdiff", + "summation", + "product", + "pi", + "integral", + "ordfeminine", + "ordmasculine", + "Omega", + "ae", + "oslash", + "questiondown", + "exclamdown", + "logicalnot", + "radical", + "florin", + "approxequal", + "Delta", + "guillemotleft", + "guillemotright", + "ellipsis", + "nonbreakingspace", + "Agrave", + "Atilde", + "Otilde", + "OE", + "oe", + "endash", + "emdash", + "quotedblleft", + "quotedblright", + "quoteleft", + "quoteright", + "divide", + "lozenge", + "ydieresis", + "Ydieresis", + "fraction", + "currency", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "daggerdbl", + "periodcentered", + "quotesinglbase", + "quotedblbase", + "perthousand", + "Acircumflex", + "Ecircumflex", + "Aacute", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Oacute", + "Ocircumflex", + "apple", + "Ograve", + "Uacute", + "Ucircumflex", + "Ugrave", + "dotlessi", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "Lslash", + "lslash", + "Scaron", + "scaron", + "Zcaron", + "zcaron", + "brokenbar", + "Eth", + "eth", + "Yacute", + "yacute", + "Thorn", + "thorn", + "minus", + "multiply", + "onesuperior", + "twosuperior", + "threesuperior", + "onehalf", + "onequarter", + "threequarters", + "franc", + "Gbreve", + "gbreve", + "Idotaccent", + "Scedilla", + "scedilla", + "Cacute", + "cacute", + "Ccaron", + "ccaron", + "dcroat", + ]; +function recoverGlyphName(e, t) { + if (void 0 !== t[e]) return e; + const i = getUnicodeForGlyph(e, t); + if (-1 !== i) for (const e in t) if (t[e] === i) return e; + info("Unable to recover a standard glyph name for: " + e); + return e; +} +function type1FontGlyphMapping(e, t, i) { + const a = Object.create(null); + let s, r, n; + const g = !!(e.flags & Ti); + if (e.isInternalFont) { + n = t; + for (r = 0; r < n.length; r++) { + s = i.indexOf(n[r]); + a[r] = s >= 0 ? s : 0; + } + } else if (e.baseEncodingName) { + n = getEncoding(e.baseEncodingName); + for (r = 0; r < n.length; r++) { + s = i.indexOf(n[r]); + a[r] = s >= 0 ? s : 0; + } + } else if (g) for (r in t) a[r] = t[r]; + else { + n = fi; + for (r = 0; r < n.length; r++) { + s = i.indexOf(n[r]); + a[r] = s >= 0 ? s : 0; + } + } + const o = e.differences; + let c; + if (o) + for (r in o) { + const e = o[r]; + s = i.indexOf(e); + if (-1 === s) { + c || (c = Ni()); + const t = recoverGlyphName(e, c); + t !== e && (s = i.indexOf(t)); + } + a[r] = s >= 0 ? s : 0; + } + return a; +} +function normalizeFontName(e) { + return e.replaceAll(/[,_]/g, "-").replaceAll(/\s/g, ""); +} +const Pi = getLookupTableFactory(function (e) { + e["Times-Roman"] = "Times-Roman"; + e.Helvetica = "Helvetica"; + e.Courier = "Courier"; + e.Symbol = "Symbol"; + e["Times-Bold"] = "Times-Bold"; + e["Helvetica-Bold"] = "Helvetica-Bold"; + e["Courier-Bold"] = "Courier-Bold"; + e.ZapfDingbats = "ZapfDingbats"; + e["Times-Italic"] = "Times-Italic"; + e["Helvetica-Oblique"] = "Helvetica-Oblique"; + e["Courier-Oblique"] = "Courier-Oblique"; + e["Times-BoldItalic"] = "Times-BoldItalic"; + e["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; + e["Courier-BoldOblique"] = "Courier-BoldOblique"; + e.ArialNarrow = "Helvetica"; + e["ArialNarrow-Bold"] = "Helvetica-Bold"; + e["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; + e["ArialNarrow-Italic"] = "Helvetica-Oblique"; + e.ArialBlack = "Helvetica"; + e["ArialBlack-Bold"] = "Helvetica-Bold"; + e["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; + e["ArialBlack-Italic"] = "Helvetica-Oblique"; + e["Arial-Black"] = "Helvetica"; + e["Arial-Black-Bold"] = "Helvetica-Bold"; + e["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; + e["Arial-Black-Italic"] = "Helvetica-Oblique"; + e.Arial = "Helvetica"; + e["Arial-Bold"] = "Helvetica-Bold"; + e["Arial-BoldItalic"] = "Helvetica-BoldOblique"; + e["Arial-Italic"] = "Helvetica-Oblique"; + e.ArialMT = "Helvetica"; + e["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; + e["Arial-BoldMT"] = "Helvetica-Bold"; + e["Arial-ItalicMT"] = "Helvetica-Oblique"; + e["Arial-BoldItalicMT-BoldItalic"] = "Helvetica-BoldOblique"; + e["Arial-BoldMT-Bold"] = "Helvetica-Bold"; + e["Arial-ItalicMT-Italic"] = "Helvetica-Oblique"; + e.ArialUnicodeMS = "Helvetica"; + e["ArialUnicodeMS-Bold"] = "Helvetica-Bold"; + e["ArialUnicodeMS-BoldItalic"] = "Helvetica-BoldOblique"; + e["ArialUnicodeMS-Italic"] = "Helvetica-Oblique"; + e["Courier-BoldItalic"] = "Courier-BoldOblique"; + e["Courier-Italic"] = "Courier-Oblique"; + e.CourierNew = "Courier"; + e["CourierNew-Bold"] = "Courier-Bold"; + e["CourierNew-BoldItalic"] = "Courier-BoldOblique"; + e["CourierNew-Italic"] = "Courier-Oblique"; + e["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; + e["CourierNewPS-BoldMT"] = "Courier-Bold"; + e["CourierNewPS-ItalicMT"] = "Courier-Oblique"; + e.CourierNewPSMT = "Courier"; + e["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; + e["Helvetica-Italic"] = "Helvetica-Oblique"; + e["Symbol-Bold"] = "Symbol"; + e["Symbol-BoldItalic"] = "Symbol"; + e["Symbol-Italic"] = "Symbol"; + e.TimesNewRoman = "Times-Roman"; + e["TimesNewRoman-Bold"] = "Times-Bold"; + e["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; + e["TimesNewRoman-Italic"] = "Times-Italic"; + e.TimesNewRomanPS = "Times-Roman"; + e["TimesNewRomanPS-Bold"] = "Times-Bold"; + e["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; + e["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; + e["TimesNewRomanPS-BoldMT"] = "Times-Bold"; + e["TimesNewRomanPS-Italic"] = "Times-Italic"; + e["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; + e.TimesNewRomanPSMT = "Times-Roman"; + e["TimesNewRomanPSMT-Bold"] = "Times-Bold"; + e["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; + e["TimesNewRomanPSMT-Italic"] = "Times-Italic"; + }), + Wi = getLookupTableFactory(function (e) { + e.Courier = "FoxitFixed.pfb"; + e["Courier-Bold"] = "FoxitFixedBold.pfb"; + e["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb"; + e["Courier-Oblique"] = "FoxitFixedItalic.pfb"; + e.Helvetica = "LiberationSans-Regular.ttf"; + e["Helvetica-Bold"] = "LiberationSans-Bold.ttf"; + e["Helvetica-BoldOblique"] = "LiberationSans-BoldItalic.ttf"; + e["Helvetica-Oblique"] = "LiberationSans-Italic.ttf"; + e["Times-Roman"] = "FoxitSerif.pfb"; + e["Times-Bold"] = "FoxitSerifBold.pfb"; + e["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb"; + e["Times-Italic"] = "FoxitSerifItalic.pfb"; + e.Symbol = "FoxitSymbol.pfb"; + e.ZapfDingbats = "FoxitDingbats.pfb"; + e["LiberationSans-Regular"] = "LiberationSans-Regular.ttf"; + e["LiberationSans-Bold"] = "LiberationSans-Bold.ttf"; + e["LiberationSans-Italic"] = "LiberationSans-Italic.ttf"; + e["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf"; + }), + ji = getLookupTableFactory(function (e) { + e.Calibri = "Helvetica"; + e["Calibri-Bold"] = "Helvetica-Bold"; + e["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; + e["Calibri-Italic"] = "Helvetica-Oblique"; + e.CenturyGothic = "Helvetica"; + e["CenturyGothic-Bold"] = "Helvetica-Bold"; + e["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; + e["CenturyGothic-Italic"] = "Helvetica-Oblique"; + e.ComicSansMS = "Comic Sans MS"; + e["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; + e["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; + e["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; + e.Impact = "Helvetica"; + e["ItcSymbol-Bold"] = "Helvetica-Bold"; + e["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique"; + e["ItcSymbol-Book"] = "Helvetica"; + e["ItcSymbol-BookItalic"] = "Helvetica-Oblique"; + e["ItcSymbol-Medium"] = "Helvetica"; + e["ItcSymbol-MediumItalic"] = "Helvetica-Oblique"; + e.LucidaConsole = "Courier"; + e["LucidaConsole-Bold"] = "Courier-Bold"; + e["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; + e["LucidaConsole-Italic"] = "Courier-Oblique"; + e["LucidaSans-Demi"] = "Helvetica-Bold"; + e["MS-Gothic"] = "MS Gothic"; + e["MS-Gothic-Bold"] = "MS Gothic-Bold"; + e["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; + e["MS-Gothic-Italic"] = "MS Gothic-Italic"; + e["MS-Mincho"] = "MS Mincho"; + e["MS-Mincho-Bold"] = "MS Mincho-Bold"; + e["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; + e["MS-Mincho-Italic"] = "MS Mincho-Italic"; + e["MS-PGothic"] = "MS PGothic"; + e["MS-PGothic-Bold"] = "MS PGothic-Bold"; + e["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; + e["MS-PGothic-Italic"] = "MS PGothic-Italic"; + e["MS-PMincho"] = "MS PMincho"; + e["MS-PMincho-Bold"] = "MS PMincho-Bold"; + e["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; + e["MS-PMincho-Italic"] = "MS PMincho-Italic"; + e.NuptialScript = "Times-Italic"; + e.SegoeUISymbol = "Helvetica"; + }), + Xi = getLookupTableFactory(function (e) { + e["Adobe Jenson"] = !0; + e["Adobe Text"] = !0; + e.Albertus = !0; + e.Aldus = !0; + e.Alexandria = !0; + e.Algerian = !0; + e["American Typewriter"] = !0; + e.Antiqua = !0; + e.Apex = !0; + e.Arno = !0; + e.Aster = !0; + e.Aurora = !0; + e.Baskerville = !0; + e.Bell = !0; + e.Bembo = !0; + e["Bembo Schoolbook"] = !0; + e.Benguiat = !0; + e["Berkeley Old Style"] = !0; + e["Bernhard Modern"] = !0; + e["Berthold City"] = !0; + e.Bodoni = !0; + e["Bauer Bodoni"] = !0; + e["Book Antiqua"] = !0; + e.Bookman = !0; + e["Bordeaux Roman"] = !0; + e["Californian FB"] = !0; + e.Calisto = !0; + e.Calvert = !0; + e.Capitals = !0; + e.Cambria = !0; + e.Cartier = !0; + e.Caslon = !0; + e.Catull = !0; + e.Centaur = !0; + e["Century Old Style"] = !0; + e["Century Schoolbook"] = !0; + e.Chaparral = !0; + e["Charis SIL"] = !0; + e.Cheltenham = !0; + e["Cholla Slab"] = !0; + e.Clarendon = !0; + e.Clearface = !0; + e.Cochin = !0; + e.Colonna = !0; + e["Computer Modern"] = !0; + e["Concrete Roman"] = !0; + e.Constantia = !0; + e["Cooper Black"] = !0; + e.Corona = !0; + e.Ecotype = !0; + e.Egyptienne = !0; + e.Elephant = !0; + e.Excelsior = !0; + e.Fairfield = !0; + e["FF Scala"] = !0; + e.Folkard = !0; + e.Footlight = !0; + e.FreeSerif = !0; + e["Friz Quadrata"] = !0; + e.Garamond = !0; + e.Gentium = !0; + e.Georgia = !0; + e.Gloucester = !0; + e["Goudy Old Style"] = !0; + e["Goudy Schoolbook"] = !0; + e["Goudy Pro Font"] = !0; + e.Granjon = !0; + e["Guardian Egyptian"] = !0; + e.Heather = !0; + e.Hercules = !0; + e["High Tower Text"] = !0; + e.Hiroshige = !0; + e["Hoefler Text"] = !0; + e["Humana Serif"] = !0; + e.Imprint = !0; + e["Ionic No. 5"] = !0; + e.Janson = !0; + e.Joanna = !0; + e.Korinna = !0; + e.Lexicon = !0; + e.LiberationSerif = !0; + e["Liberation Serif"] = !0; + e["Linux Libertine"] = !0; + e.Literaturnaya = !0; + e.Lucida = !0; + e["Lucida Bright"] = !0; + e.Melior = !0; + e.Memphis = !0; + e.Miller = !0; + e.Minion = !0; + e.Modern = !0; + e["Mona Lisa"] = !0; + e["Mrs Eaves"] = !0; + e["MS Serif"] = !0; + e["Museo Slab"] = !0; + e["New York"] = !0; + e["Nimbus Roman"] = !0; + e["NPS Rawlinson Roadway"] = !0; + e.NuptialScript = !0; + e.Palatino = !0; + e.Perpetua = !0; + e.Plantin = !0; + e["Plantin Schoolbook"] = !0; + e.Playbill = !0; + e["Poor Richard"] = !0; + e["Rawlinson Roadway"] = !0; + e.Renault = !0; + e.Requiem = !0; + e.Rockwell = !0; + e.Roman = !0; + e["Rotis Serif"] = !0; + e.Sabon = !0; + e.Scala = !0; + e.Seagull = !0; + e.Sistina = !0; + e.Souvenir = !0; + e.STIX = !0; + e["Stone Informal"] = !0; + e["Stone Serif"] = !0; + e.Sylfaen = !0; + e.Times = !0; + e.Trajan = !0; + e["Trinité"] = !0; + e["Trump Mediaeval"] = !0; + e.Utopia = !0; + e["Vale Type"] = !0; + e["Bitstream Vera"] = !0; + e["Vera Serif"] = !0; + e.Versailles = !0; + e.Wanted = !0; + e.Weiss = !0; + e["Wide Latin"] = !0; + e.Windsor = !0; + e.XITS = !0; + }), + Zi = getLookupTableFactory(function (e) { + e.Dingbats = !0; + e.Symbol = !0; + e.ZapfDingbats = !0; + e.Wingdings = !0; + e["Wingdings-Bold"] = !0; + e["Wingdings-Regular"] = !0; + }), + Vi = getLookupTableFactory(function (e) { + e[2] = 10; + e[3] = 32; + e[4] = 33; + e[5] = 34; + e[6] = 35; + e[7] = 36; + e[8] = 37; + e[9] = 38; + e[10] = 39; + e[11] = 40; + e[12] = 41; + e[13] = 42; + e[14] = 43; + e[15] = 44; + e[16] = 45; + e[17] = 46; + e[18] = 47; + e[19] = 48; + e[20] = 49; + e[21] = 50; + e[22] = 51; + e[23] = 52; + e[24] = 53; + e[25] = 54; + e[26] = 55; + e[27] = 56; + e[28] = 57; + e[29] = 58; + e[30] = 894; + e[31] = 60; + e[32] = 61; + e[33] = 62; + e[34] = 63; + e[35] = 64; + e[36] = 65; + e[37] = 66; + e[38] = 67; + e[39] = 68; + e[40] = 69; + e[41] = 70; + e[42] = 71; + e[43] = 72; + e[44] = 73; + e[45] = 74; + e[46] = 75; + e[47] = 76; + e[48] = 77; + e[49] = 78; + e[50] = 79; + e[51] = 80; + e[52] = 81; + e[53] = 82; + e[54] = 83; + e[55] = 84; + e[56] = 85; + e[57] = 86; + e[58] = 87; + e[59] = 88; + e[60] = 89; + e[61] = 90; + e[62] = 91; + e[63] = 92; + e[64] = 93; + e[65] = 94; + e[66] = 95; + e[67] = 96; + e[68] = 97; + e[69] = 98; + e[70] = 99; + e[71] = 100; + e[72] = 101; + e[73] = 102; + e[74] = 103; + e[75] = 104; + e[76] = 105; + e[77] = 106; + e[78] = 107; + e[79] = 108; + e[80] = 109; + e[81] = 110; + e[82] = 111; + e[83] = 112; + e[84] = 113; + e[85] = 114; + e[86] = 115; + e[87] = 116; + e[88] = 117; + e[89] = 118; + e[90] = 119; + e[91] = 120; + e[92] = 121; + e[93] = 122; + e[94] = 123; + e[95] = 124; + e[96] = 125; + e[97] = 126; + e[98] = 196; + e[99] = 197; + e[100] = 199; + e[101] = 201; + e[102] = 209; + e[103] = 214; + e[104] = 220; + e[105] = 225; + e[106] = 224; + e[107] = 226; + e[108] = 228; + e[109] = 227; + e[110] = 229; + e[111] = 231; + e[112] = 233; + e[113] = 232; + e[114] = 234; + e[115] = 235; + e[116] = 237; + e[117] = 236; + e[118] = 238; + e[119] = 239; + e[120] = 241; + e[121] = 243; + e[122] = 242; + e[123] = 244; + e[124] = 246; + e[125] = 245; + e[126] = 250; + e[127] = 249; + e[128] = 251; + e[129] = 252; + e[130] = 8224; + e[131] = 176; + e[132] = 162; + e[133] = 163; + e[134] = 167; + e[135] = 8226; + e[136] = 182; + e[137] = 223; + e[138] = 174; + e[139] = 169; + e[140] = 8482; + e[141] = 180; + e[142] = 168; + e[143] = 8800; + e[144] = 198; + e[145] = 216; + e[146] = 8734; + e[147] = 177; + e[148] = 8804; + e[149] = 8805; + e[150] = 165; + e[151] = 181; + e[152] = 8706; + e[153] = 8721; + e[154] = 8719; + e[156] = 8747; + e[157] = 170; + e[158] = 186; + e[159] = 8486; + e[160] = 230; + e[161] = 248; + e[162] = 191; + e[163] = 161; + e[164] = 172; + e[165] = 8730; + e[166] = 402; + e[167] = 8776; + e[168] = 8710; + e[169] = 171; + e[170] = 187; + e[171] = 8230; + e[179] = 8220; + e[180] = 8221; + e[181] = 8216; + e[182] = 8217; + e[200] = 193; + e[203] = 205; + e[207] = 211; + e[210] = 218; + e[223] = 711; + e[224] = 321; + e[225] = 322; + e[226] = 352; + e[227] = 353; + e[228] = 381; + e[229] = 382; + e[233] = 221; + e[234] = 253; + e[252] = 263; + e[253] = 268; + e[254] = 269; + e[258] = 258; + e[260] = 260; + e[261] = 261; + e[265] = 280; + e[266] = 281; + e[267] = 282; + e[268] = 283; + e[269] = 313; + e[275] = 323; + e[276] = 324; + e[278] = 328; + e[283] = 344; + e[284] = 345; + e[285] = 346; + e[286] = 347; + e[292] = 367; + e[295] = 377; + e[296] = 378; + e[298] = 380; + e[305] = 963; + e[306] = 964; + e[307] = 966; + e[308] = 8215; + e[309] = 8252; + e[310] = 8319; + e[311] = 8359; + e[312] = 8592; + e[313] = 8593; + e[337] = 9552; + e[493] = 1039; + e[494] = 1040; + e[672] = 1488; + e[673] = 1489; + e[674] = 1490; + e[675] = 1491; + e[676] = 1492; + e[677] = 1493; + e[678] = 1494; + e[679] = 1495; + e[680] = 1496; + e[681] = 1497; + e[682] = 1498; + e[683] = 1499; + e[684] = 1500; + e[685] = 1501; + e[686] = 1502; + e[687] = 1503; + e[688] = 1504; + e[689] = 1505; + e[690] = 1506; + e[691] = 1507; + e[692] = 1508; + e[693] = 1509; + e[694] = 1510; + e[695] = 1511; + e[696] = 1512; + e[697] = 1513; + e[698] = 1514; + e[705] = 1524; + e[706] = 8362; + e[710] = 64288; + e[711] = 64298; + e[759] = 1617; + e[761] = 1776; + e[763] = 1778; + e[775] = 1652; + e[777] = 1764; + e[778] = 1780; + e[779] = 1781; + e[780] = 1782; + e[782] = 771; + e[783] = 64726; + e[786] = 8363; + e[788] = 8532; + e[790] = 768; + e[791] = 769; + e[792] = 768; + e[795] = 803; + e[797] = 64336; + e[798] = 64337; + e[799] = 64342; + e[800] = 64343; + e[801] = 64344; + e[802] = 64345; + e[803] = 64362; + e[804] = 64363; + e[805] = 64364; + e[2424] = 7821; + e[2425] = 7822; + e[2426] = 7823; + e[2427] = 7824; + e[2428] = 7825; + e[2429] = 7826; + e[2430] = 7827; + e[2433] = 7682; + e[2678] = 8045; + e[2679] = 8046; + e[2830] = 1552; + e[2838] = 686; + e[2840] = 751; + e[2842] = 753; + e[2843] = 754; + e[2844] = 755; + e[2846] = 757; + e[2856] = 767; + e[2857] = 848; + e[2858] = 849; + e[2862] = 853; + e[2863] = 854; + e[2864] = 855; + e[2865] = 861; + e[2866] = 862; + e[2906] = 7460; + e[2908] = 7462; + e[2909] = 7463; + e[2910] = 7464; + e[2912] = 7466; + e[2913] = 7467; + e[2914] = 7468; + e[2916] = 7470; + e[2917] = 7471; + e[2918] = 7472; + e[2920] = 7474; + e[2921] = 7475; + e[2922] = 7476; + e[2924] = 7478; + e[2925] = 7479; + e[2926] = 7480; + e[2928] = 7482; + e[2929] = 7483; + e[2930] = 7484; + e[2932] = 7486; + e[2933] = 7487; + e[2934] = 7488; + e[2936] = 7490; + e[2937] = 7491; + e[2938] = 7492; + e[2940] = 7494; + e[2941] = 7495; + e[2942] = 7496; + e[2944] = 7498; + e[2946] = 7500; + e[2948] = 7502; + e[2950] = 7504; + e[2951] = 7505; + e[2952] = 7506; + e[2954] = 7508; + e[2955] = 7509; + e[2956] = 7510; + e[2958] = 7512; + e[2959] = 7513; + e[2960] = 7514; + e[2962] = 7516; + e[2963] = 7517; + e[2964] = 7518; + e[2966] = 7520; + e[2967] = 7521; + e[2968] = 7522; + e[2970] = 7524; + e[2971] = 7525; + e[2972] = 7526; + e[2974] = 7528; + e[2975] = 7529; + e[2976] = 7530; + e[2978] = 1537; + e[2979] = 1538; + e[2980] = 1539; + e[2982] = 1549; + e[2983] = 1551; + e[2984] = 1552; + e[2986] = 1554; + e[2987] = 1555; + e[2988] = 1556; + e[2990] = 1623; + e[2991] = 1624; + e[2995] = 1775; + e[2999] = 1791; + e[3002] = 64290; + e[3003] = 64291; + e[3004] = 64292; + e[3006] = 64294; + e[3007] = 64295; + e[3008] = 64296; + e[3011] = 1900; + e[3014] = 8223; + e[3015] = 8244; + e[3017] = 7532; + e[3018] = 7533; + e[3019] = 7534; + e[3075] = 7590; + e[3076] = 7591; + e[3079] = 7594; + e[3080] = 7595; + e[3083] = 7598; + e[3084] = 7599; + e[3087] = 7602; + e[3088] = 7603; + e[3091] = 7606; + e[3092] = 7607; + e[3095] = 7610; + e[3096] = 7611; + e[3099] = 7614; + e[3100] = 7615; + e[3103] = 7618; + e[3104] = 7619; + e[3107] = 8337; + e[3108] = 8338; + e[3116] = 1884; + e[3119] = 1885; + e[3120] = 1885; + e[3123] = 1886; + e[3124] = 1886; + e[3127] = 1887; + e[3128] = 1887; + e[3131] = 1888; + e[3132] = 1888; + e[3135] = 1889; + e[3136] = 1889; + e[3139] = 1890; + e[3140] = 1890; + e[3143] = 1891; + e[3144] = 1891; + e[3147] = 1892; + e[3148] = 1892; + e[3153] = 580; + e[3154] = 581; + e[3157] = 584; + e[3158] = 585; + e[3161] = 588; + e[3162] = 589; + e[3165] = 891; + e[3166] = 892; + e[3169] = 1274; + e[3170] = 1275; + e[3173] = 1278; + e[3174] = 1279; + e[3181] = 7622; + e[3182] = 7623; + e[3282] = 11799; + e[3316] = 578; + e[3379] = 42785; + e[3393] = 1159; + e[3416] = 8377; + }), + zi = getLookupTableFactory(function (e) { + e[227] = 322; + e[264] = 261; + e[291] = 346; + }), + _i = getLookupTableFactory(function (e) { + e[1] = 32; + e[4] = 65; + e[5] = 192; + e[6] = 193; + e[9] = 196; + e[17] = 66; + e[18] = 67; + e[21] = 268; + e[24] = 68; + e[28] = 69; + e[29] = 200; + e[30] = 201; + e[32] = 282; + e[38] = 70; + e[39] = 71; + e[44] = 72; + e[47] = 73; + e[48] = 204; + e[49] = 205; + e[58] = 74; + e[60] = 75; + e[62] = 76; + e[68] = 77; + e[69] = 78; + e[75] = 79; + e[76] = 210; + e[80] = 214; + e[87] = 80; + e[89] = 81; + e[90] = 82; + e[92] = 344; + e[94] = 83; + e[97] = 352; + e[100] = 84; + e[104] = 85; + e[109] = 220; + e[115] = 86; + e[116] = 87; + e[121] = 88; + e[122] = 89; + e[124] = 221; + e[127] = 90; + e[129] = 381; + e[258] = 97; + e[259] = 224; + e[260] = 225; + e[263] = 228; + e[268] = 261; + e[271] = 98; + e[272] = 99; + e[273] = 263; + e[275] = 269; + e[282] = 100; + e[286] = 101; + e[287] = 232; + e[288] = 233; + e[290] = 283; + e[295] = 281; + e[296] = 102; + e[336] = 103; + e[346] = 104; + e[349] = 105; + e[350] = 236; + e[351] = 237; + e[361] = 106; + e[364] = 107; + e[367] = 108; + e[371] = 322; + e[373] = 109; + e[374] = 110; + e[381] = 111; + e[382] = 242; + e[383] = 243; + e[386] = 246; + e[393] = 112; + e[395] = 113; + e[396] = 114; + e[398] = 345; + e[400] = 115; + e[401] = 347; + e[403] = 353; + e[410] = 116; + e[437] = 117; + e[442] = 252; + e[448] = 118; + e[449] = 119; + e[454] = 120; + e[455] = 121; + e[457] = 253; + e[460] = 122; + e[462] = 382; + e[463] = 380; + e[853] = 44; + e[855] = 58; + e[856] = 46; + e[876] = 47; + e[878] = 45; + e[882] = 45; + e[894] = 40; + e[895] = 41; + e[896] = 91; + e[897] = 93; + e[923] = 64; + e[1004] = 48; + e[1005] = 49; + e[1006] = 50; + e[1007] = 51; + e[1008] = 52; + e[1009] = 53; + e[1010] = 54; + e[1011] = 55; + e[1012] = 56; + e[1013] = 57; + e[1081] = 37; + e[1085] = 43; + e[1086] = 45; + }); +function getStandardFontName(e) { + const t = normalizeFontName(e); + return Pi()[t]; +} +function isKnownFontName(e) { + const t = normalizeFontName(e); + return !!(Pi()[t] || ji()[t] || Xi()[t] || Zi()[t]); +} +class ToUnicodeMap { + constructor(e = []) { + this._map = e; + } + get length() { + return this._map.length; + } + forEach(e) { + for (const t in this._map) e(t, this._map[t].charCodeAt(0)); + } + has(e) { + return void 0 !== this._map[e]; + } + get(e) { + return this._map[e]; + } + charCodeOf(e) { + const t = this._map; + if (t.length <= 65536) return t.indexOf(e); + for (const i in t) if (t[i] === e) return 0 | i; + return -1; + } + amend(e) { + for (const t in e) this._map[t] = e[t]; + } +} +class IdentityToUnicodeMap { + constructor(e, t) { + this.firstChar = e; + this.lastChar = t; + } + get length() { + return this.lastChar + 1 - this.firstChar; + } + forEach(e) { + for (let t = this.firstChar, i = this.lastChar; t <= i; t++) e(t, t); + } + has(e) { + return this.firstChar <= e && e <= this.lastChar; + } + get(e) { + if (this.firstChar <= e && e <= this.lastChar) + return String.fromCharCode(e); + } + charCodeOf(e) { + return Number.isInteger(e) && e >= this.firstChar && e <= this.lastChar + ? e + : -1; + } + amend(e) { + unreachable("Should not call amend()"); + } +} +class CFFFont { + constructor(e, t) { + this.properties = t; + const i = new CFFParser(e, t, Yi); + this.cff = i.parse(); + this.cff.duplicateFirstGlyph(); + const a = new CFFCompiler(this.cff); + this.seacs = this.cff.seacs; + try { + this.data = a.compile(); + } catch { + warn("Failed to compile font " + t.loadedName); + this.data = e; + } + this._createBuiltInEncoding(); + } + get numGlyphs() { + return this.cff.charStrings.count; + } + getCharset() { + return this.cff.charset.charset; + } + getGlyphMapping() { + const e = this.cff, + t = this.properties, + { cidToGidMap: i, cMap: a } = t, + s = e.charset.charset; + let r, n; + if (t.composite) { + let t, g; + if (i?.length > 0) { + t = Object.create(null); + for (let e = 0, a = i.length; e < a; e++) { + const a = i[e]; + void 0 !== a && (t[a] = e); + } + } + r = Object.create(null); + if (e.isCIDFont) + for (n = 0; n < s.length; n++) { + const e = s[n]; + g = a.charCodeOf(e); + void 0 !== t?.[g] && (g = t[g]); + r[g] = n; + } + else + for (n = 0; n < e.charStrings.count; n++) { + g = a.charCodeOf(n); + r[g] = n; + } + return r; + } + let g = e.encoding ? e.encoding.encoding : null; + t.isInternalFont && (g = t.defaultEncoding); + r = type1FontGlyphMapping(t, g, s); + return r; + } + hasGlyphId(e) { + return this.cff.hasGlyphId(e); + } + _createBuiltInEncoding() { + const { charset: e, encoding: t } = this.cff; + if (!e || !t) return; + const i = e.charset, + a = t.encoding, + s = []; + for (const e in a) { + const t = a[e]; + if (t >= 0) { + const a = i[t]; + a && (s[e] = a); + } + } + s.length > 0 && (this.properties.builtInEncoding = s); + } +} +function getUint32(e, t) { + return ((e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3]) >>> 0; +} +function getUint16(e, t) { + return (e[t] << 8) | e[t + 1]; +} +function getInt16(e, t) { + return ((e[t] << 24) | (e[t + 1] << 16)) >> 16; +} +function getInt8(e, t) { + return (e[t] << 24) >> 24; +} +function getFloat214(e, t) { + return getInt16(e, t) / 16384; +} +function getSubroutineBias(e) { + const t = e.length; + let i = 32768; + t < 1240 ? (i = 107) : t < 33900 && (i = 1131); + return i; +} +function parseCmap(e, t, i) { + const a = + 1 === getUint16(e, t + 2) ? getUint32(e, t + 8) : getUint32(e, t + 16), + s = getUint16(e, t + a); + let r, n, g; + if (4 === s) { + getUint16(e, t + a + 2); + const i = getUint16(e, t + a + 6) >> 1; + n = t + a + 14; + r = []; + for (g = 0; g < i; g++, n += 2) r[g] = { end: getUint16(e, n) }; + n += 2; + for (g = 0; g < i; g++, n += 2) r[g].start = getUint16(e, n); + for (g = 0; g < i; g++, n += 2) r[g].idDelta = getUint16(e, n); + for (g = 0; g < i; g++, n += 2) { + let t = getUint16(e, n); + if (0 !== t) { + r[g].ids = []; + for (let i = 0, a = r[g].end - r[g].start + 1; i < a; i++) { + r[g].ids[i] = getUint16(e, n + t); + t += 2; + } + } + } + return r; + } + if (12 === s) { + const i = getUint32(e, t + a + 12); + n = t + a + 16; + r = []; + for (g = 0; g < i; g++) { + t = getUint32(e, n); + r.push({ + start: t, + end: getUint32(e, n + 4), + idDelta: getUint32(e, n + 8) - t, + }); + n += 12; + } + return r; + } + throw new FormatError(`unsupported cmap: ${s}`); +} +function parseCff(e, t, i, a) { + const s = new CFFParser(new Stream(e, t, i - t), {}, a).parse(); + return { + glyphs: s.charStrings.objects, + subrs: s.topDict.privateDict?.subrsIndex?.objects, + gsubrs: s.globalSubrIndex?.objects, + isCFFCIDFont: s.isCIDFont, + fdSelect: s.fdSelect, + fdArray: s.fdArray, + }; +} +function lookupCmap(e, t) { + const i = t.codePointAt(0); + let a = 0, + s = 0, + r = e.length - 1; + for (; s < r; ) { + const t = (s + r + 1) >> 1; + i < e[t].start ? (r = t - 1) : (s = t); + } + e[s].start <= i && + i <= e[s].end && + (a = (e[s].idDelta + (e[s].ids ? e[s].ids[i - e[s].start] : i)) & 65535); + return { charCode: i, glyphId: a }; +} +function compileGlyf(e, t, i) { + function moveTo(e, i) { + t.add(Ct, [e, i]); + } + function lineTo(e, i) { + t.add(ht, [e, i]); + } + function quadraticCurveTo(e, i, a, s) { + t.add(Bt, [e, i, a, s]); + } + let a = 0; + const s = getInt16(e, a); + let r, + n = 0, + g = 0; + a += 10; + if (s < 0) + do { + r = getUint16(e, a); + const s = getUint16(e, a + 2); + a += 4; + let o, c; + if (1 & r) { + if (2 & r) { + o = getInt16(e, a); + c = getInt16(e, a + 2); + } else { + o = getUint16(e, a); + c = getUint16(e, a + 2); + } + a += 4; + } else if (2 & r) { + o = getInt8(e, a++); + c = getInt8(e, a++); + } else { + o = e[a++]; + c = e[a++]; + } + if (2 & r) { + n = o; + g = c; + } else { + n = 0; + g = 0; + } + let C = 1, + h = 1, + l = 0, + Q = 0; + if (8 & r) { + C = h = getFloat214(e, a); + a += 2; + } else if (64 & r) { + C = getFloat214(e, a); + h = getFloat214(e, a + 2); + a += 4; + } else if (128 & r) { + C = getFloat214(e, a); + l = getFloat214(e, a + 2); + Q = getFloat214(e, a + 4); + h = getFloat214(e, a + 6); + a += 8; + } + const E = i.glyphs[s]; + if (E) { + t.add(Qt); + t.add(ut, [C, l, Q, h, n, g]); + compileGlyf(E, t, i); + t.add(lt); + } + } while (32 & r); + else { + const t = []; + let i, o; + for (i = 0; i < s; i++) { + t.push(getUint16(e, a)); + a += 2; + } + a += 2 + getUint16(e, a); + const c = t.at(-1) + 1, + C = []; + for (; C.length < c; ) { + r = e[a++]; + let t = 1; + 8 & r && (t += e[a++]); + for (; t-- > 0; ) C.push({ flags: r }); + } + for (i = 0; i < c; i++) { + switch (18 & C[i].flags) { + case 0: + n += getInt16(e, a); + a += 2; + break; + case 2: + n -= e[a++]; + break; + case 18: + n += e[a++]; + } + C[i].x = n; + } + for (i = 0; i < c; i++) { + switch (36 & C[i].flags) { + case 0: + g += getInt16(e, a); + a += 2; + break; + case 4: + g -= e[a++]; + break; + case 36: + g += e[a++]; + } + C[i].y = g; + } + let h = 0; + for (a = 0; a < s; a++) { + const e = t[a], + s = C.slice(h, e + 1); + if (1 & s[0].flags) s.push(s[0]); + else if (1 & s.at(-1).flags) s.unshift(s.at(-1)); + else { + const e = { + flags: 1, + x: (s[0].x + s.at(-1).x) / 2, + y: (s[0].y + s.at(-1).y) / 2, + }; + s.unshift(e); + s.push(e); + } + moveTo(s[0].x, s[0].y); + for (i = 1, o = s.length; i < o; i++) + if (1 & s[i].flags) lineTo(s[i].x, s[i].y); + else if (1 & s[i + 1].flags) { + quadraticCurveTo(s[i].x, s[i].y, s[i + 1].x, s[i + 1].y); + i++; + } else + quadraticCurveTo( + s[i].x, + s[i].y, + (s[i].x + s[i + 1].x) / 2, + (s[i].y + s[i + 1].y) / 2, + ); + h = e + 1; + } + } +} +function compileCharString(e, t, i, a) { + function moveTo(e, i) { + t.add(Ct, [e, i]); + } + function lineTo(e, i) { + t.add(ht, [e, i]); + } + function bezierCurveTo(e, i, a, s, r, n) { + t.add(ct, [e, i, a, s, r, n]); + } + const s = []; + let r = 0, + n = 0, + g = 0; + !(function parse(e) { + let o = 0; + for (; o < e.length; ) { + let c, + C, + h, + l, + Q, + E, + u, + d, + f, + p = !1, + m = e[o++]; + switch (m) { + case 1: + case 3: + case 18: + case 23: + g += s.length >> 1; + p = !0; + break; + case 4: + n += s.pop(); + moveTo(r, n); + p = !0; + break; + case 5: + for (; s.length > 0; ) { + r += s.shift(); + n += s.shift(); + lineTo(r, n); + } + break; + case 6: + for (; s.length > 0; ) { + r += s.shift(); + lineTo(r, n); + if (0 === s.length) break; + n += s.shift(); + lineTo(r, n); + } + break; + case 7: + for (; s.length > 0; ) { + n += s.shift(); + lineTo(r, n); + if (0 === s.length) break; + r += s.shift(); + lineTo(r, n); + } + break; + case 8: + for (; s.length > 0; ) { + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + } + break; + case 10: + d = s.pop(); + f = null; + if (i.isCFFCIDFont) { + const e = i.fdSelect.getFDIndex(a); + if (e >= 0 && e < i.fdArray.length) { + const t = i.fdArray[e]; + let a; + t.privateDict?.subrsIndex && + (a = t.privateDict.subrsIndex.objects); + if (a) { + d += getSubroutineBias(a); + f = a[d]; + } + } else warn("Invalid fd index for glyph index."); + } else f = i.subrs[d + i.subrsBias]; + f && parse(f); + break; + case 11: + return; + case 12: + m = e[o++]; + switch (m) { + case 34: + c = r + s.shift(); + C = c + s.shift(); + Q = n + s.shift(); + r = C + s.shift(); + bezierCurveTo(c, n, C, Q, r, Q); + c = r + s.shift(); + C = c + s.shift(); + r = C + s.shift(); + bezierCurveTo(c, Q, C, n, r, n); + break; + case 35: + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + s.pop(); + break; + case 36: + c = r + s.shift(); + Q = n + s.shift(); + C = c + s.shift(); + E = Q + s.shift(); + r = C + s.shift(); + bezierCurveTo(c, Q, C, E, r, E); + c = r + s.shift(); + C = c + s.shift(); + u = E + s.shift(); + r = C + s.shift(); + bezierCurveTo(c, E, C, u, r, n); + break; + case 37: + const e = r, + t = n; + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C; + n = l; + Math.abs(r - e) > Math.abs(n - t) + ? (r += s.shift()) + : (n += s.shift()); + bezierCurveTo(c, h, C, l, r, n); + break; + default: + throw new FormatError(`unknown operator: 12 ${m}`); + } + break; + case 14: + if (s.length >= 4) { + const e = s.pop(), + a = s.pop(); + n = s.pop(); + r = s.pop(); + t.add(Qt); + t.add(dt, [r, n]); + let g = lookupCmap( + i.cmap, + String.fromCharCode(i.glyphNameMap[fi[e]]), + ); + compileCharString(i.glyphs[g.glyphId], t, i, g.glyphId); + t.add(lt); + g = lookupCmap(i.cmap, String.fromCharCode(i.glyphNameMap[fi[a]])); + compileCharString(i.glyphs[g.glyphId], t, i, g.glyphId); + } + return; + case 19: + case 20: + g += s.length >> 1; + o += (g + 7) >> 3; + p = !0; + break; + case 21: + n += s.pop(); + r += s.pop(); + moveTo(r, n); + p = !0; + break; + case 22: + r += s.pop(); + moveTo(r, n); + p = !0; + break; + case 24: + for (; s.length > 2; ) { + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + } + r += s.shift(); + n += s.shift(); + lineTo(r, n); + break; + case 25: + for (; s.length > 6; ) { + r += s.shift(); + n += s.shift(); + lineTo(r, n); + } + c = r + s.shift(); + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + break; + case 26: + s.length % 2 && (r += s.shift()); + for (; s.length > 0; ) { + c = r; + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C; + n = l + s.shift(); + bezierCurveTo(c, h, C, l, r, n); + } + break; + case 27: + s.length % 2 && (n += s.shift()); + for (; s.length > 0; ) { + c = r + s.shift(); + h = n; + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l; + bezierCurveTo(c, h, C, l, r, n); + } + break; + case 28: + s.push(((e[o] << 24) | (e[o + 1] << 16)) >> 16); + o += 2; + break; + case 29: + d = s.pop() + i.gsubrsBias; + f = i.gsubrs[d]; + f && parse(f); + break; + case 30: + for (; s.length > 0; ) { + c = r; + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + (1 === s.length ? s.shift() : 0); + bezierCurveTo(c, h, C, l, r, n); + if (0 === s.length) break; + c = r + s.shift(); + h = n; + C = c + s.shift(); + l = h + s.shift(); + n = l + s.shift(); + r = C + (1 === s.length ? s.shift() : 0); + bezierCurveTo(c, h, C, l, r, n); + } + break; + case 31: + for (; s.length > 0; ) { + c = r + s.shift(); + h = n; + C = c + s.shift(); + l = h + s.shift(); + n = l + s.shift(); + r = C + (1 === s.length ? s.shift() : 0); + bezierCurveTo(c, h, C, l, r, n); + if (0 === s.length) break; + c = r; + h = n + s.shift(); + C = c + s.shift(); + l = h + s.shift(); + r = C + s.shift(); + n = l + (1 === s.length ? s.shift() : 0); + bezierCurveTo(c, h, C, l, r, n); + } + break; + default: + if (m < 32) throw new FormatError(`unknown operator: ${m}`); + if (m < 247) s.push(m - 139); + else if (m < 251) s.push(256 * (m - 247) + e[o++] + 108); + else if (m < 255) s.push(256 * -(m - 251) - e[o++] - 108); + else { + s.push( + ((e[o] << 24) | (e[o + 1] << 16) | (e[o + 2] << 8) | e[o + 3]) / + 65536, + ); + o += 4; + } + } + p && (s.length = 0); + } + })(e); +} +const $i = []; +class Commands { + cmds = []; + add(e, t) { + if (t) + if (isNumberArray(t, null)) this.cmds.push(e, ...t); + else { + warn(`Commands.add - "${e}" has at least one non-number arg: "${t}".`); + const i = t.map((e) => ("number" == typeof e ? e : 0)); + this.cmds.push(e, ...i); + } + else this.cmds.push(e); + } +} +class CompiledFont { + constructor(e) { + this.constructor === CompiledFont && + unreachable("Cannot initialize CompiledFont."); + this.fontMatrix = e; + this.compiledGlyphs = Object.create(null); + this.compiledCharCodeToGlyphId = Object.create(null); + } + getPathJs(e) { + const { charCode: t, glyphId: i } = lookupCmap(this.cmap, e); + let a, + s = this.compiledGlyphs[i]; + if (!s) { + try { + s = this.compileGlyph(this.glyphs[i], i); + } catch (e) { + s = $i; + a = e; + } + this.compiledGlyphs[i] = s; + } + this.compiledCharCodeToGlyphId[t] ??= i; + if (a) throw a; + return s; + } + compileGlyph(e, t) { + if (!e || 0 === e.length || 14 === e[0]) return $i; + let i = this.fontMatrix; + if (this.isCFFCIDFont) { + const e = this.fdSelect.getFDIndex(t); + if (e >= 0 && e < this.fdArray.length) { + i = this.fdArray[e].getByName("FontMatrix") || a; + } else warn("Invalid fd index for glyph index."); + } + const s = new Commands(); + s.add(Qt); + s.add(ut, i.slice()); + s.add(Et); + this.compileGlyphImpl(e, s, t); + s.add(lt); + return s.cmds; + } + compileGlyphImpl() { + unreachable("Children classes should implement this."); + } + hasBuiltPath(e) { + const { charCode: t, glyphId: i } = lookupCmap(this.cmap, e); + return ( + void 0 !== this.compiledGlyphs[i] && + void 0 !== this.compiledCharCodeToGlyphId[t] + ); + } +} +class TrueTypeCompiled extends CompiledFont { + constructor(e, t, i) { + super(i || [488e-6, 0, 0, 488e-6, 0, 0]); + this.glyphs = e; + this.cmap = t; + } + compileGlyphImpl(e, t) { + compileGlyf(e, t, this); + } +} +class Type2Compiled extends CompiledFont { + constructor(e, t, i, a) { + super(i || [0.001, 0, 0, 0.001, 0, 0]); + this.glyphs = e.glyphs; + this.gsubrs = e.gsubrs || []; + this.subrs = e.subrs || []; + this.cmap = t; + this.glyphNameMap = a || Ni(); + this.gsubrsBias = getSubroutineBias(this.gsubrs); + this.subrsBias = getSubroutineBias(this.subrs); + this.isCFFCIDFont = e.isCFFCIDFont; + this.fdSelect = e.fdSelect; + this.fdArray = e.fdArray; + } + compileGlyphImpl(e, t, i) { + compileCharString(e, t, this, i); + } +} +class FontRendererFactory { + static create(e, t) { + const i = new Uint8Array(e.data); + let a, s, r, n, g, o; + const c = getUint16(i, 4); + for (let e = 0, C = 12; e < c; e++, C += 16) { + const e = bytesToString(i.subarray(C, C + 4)), + c = getUint32(i, C + 8), + h = getUint32(i, C + 12); + switch (e) { + case "cmap": + a = parseCmap(i, c); + break; + case "glyf": + s = i.subarray(c, c + h); + break; + case "loca": + r = i.subarray(c, c + h); + break; + case "head": + o = getUint16(i, c + 18); + g = getUint16(i, c + 50); + break; + case "CFF ": + n = parseCff(i, c, c + h, t); + } + } + if (s) { + const t = o ? [1 / o, 0, 0, 1 / o, 0, 0] : e.fontMatrix; + return new TrueTypeCompiled( + (function parseGlyfTable(e, t, i) { + let a, s; + if (i) { + a = 4; + s = getUint32; + } else { + a = 2; + s = (e, t) => 2 * getUint16(e, t); + } + const r = []; + let n = s(t, 0); + for (let i = a; i < t.length; i += a) { + const a = s(t, i); + r.push(e.subarray(n, a)); + n = a; + } + return r; + })(s, r, g), + a, + t, + ); + } + return new Type2Compiled(n, a, e.fontMatrix, e.glyphNameMap); + } +} +const Aa = getLookupTableFactory(function (e) { + e.Courier = 600; + e["Courier-Bold"] = 600; + e["Courier-BoldOblique"] = 600; + e["Courier-Oblique"] = 600; + e.Helvetica = getLookupTableFactory(function (e) { + e.space = 278; + e.exclam = 278; + e.quotedbl = 355; + e.numbersign = 556; + e.dollar = 556; + e.percent = 889; + e.ampersand = 667; + e.quoteright = 222; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 389; + e.plus = 584; + e.comma = 278; + e.hyphen = 333; + e.period = 278; + e.slash = 278; + e.zero = 556; + e.one = 556; + e.two = 556; + e.three = 556; + e.four = 556; + e.five = 556; + e.six = 556; + e.seven = 556; + e.eight = 556; + e.nine = 556; + e.colon = 278; + e.semicolon = 278; + e.less = 584; + e.equal = 584; + e.greater = 584; + e.question = 556; + e.at = 1015; + e.A = 667; + e.B = 667; + e.C = 722; + e.D = 722; + e.E = 667; + e.F = 611; + e.G = 778; + e.H = 722; + e.I = 278; + e.J = 500; + e.K = 667; + e.L = 556; + e.M = 833; + e.N = 722; + e.O = 778; + e.P = 667; + e.Q = 778; + e.R = 722; + e.S = 667; + e.T = 611; + e.U = 722; + e.V = 667; + e.W = 944; + e.X = 667; + e.Y = 667; + e.Z = 611; + e.bracketleft = 278; + e.backslash = 278; + e.bracketright = 278; + e.asciicircum = 469; + e.underscore = 556; + e.quoteleft = 222; + e.a = 556; + e.b = 556; + e.c = 500; + e.d = 556; + e.e = 556; + e.f = 278; + e.g = 556; + e.h = 556; + e.i = 222; + e.j = 222; + e.k = 500; + e.l = 222; + e.m = 833; + e.n = 556; + e.o = 556; + e.p = 556; + e.q = 556; + e.r = 333; + e.s = 500; + e.t = 278; + e.u = 556; + e.v = 500; + e.w = 722; + e.x = 500; + e.y = 500; + e.z = 500; + e.braceleft = 334; + e.bar = 260; + e.braceright = 334; + e.asciitilde = 584; + e.exclamdown = 333; + e.cent = 556; + e.sterling = 556; + e.fraction = 167; + e.yen = 556; + e.florin = 556; + e.section = 556; + e.currency = 556; + e.quotesingle = 191; + e.quotedblleft = 333; + e.guillemotleft = 556; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 500; + e.fl = 500; + e.endash = 556; + e.dagger = 556; + e.daggerdbl = 556; + e.periodcentered = 278; + e.paragraph = 537; + e.bullet = 350; + e.quotesinglbase = 222; + e.quotedblbase = 333; + e.quotedblright = 333; + e.guillemotright = 556; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 611; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 1e3; + e.ordfeminine = 370; + e.Lslash = 556; + e.Oslash = 778; + e.OE = 1e3; + e.ordmasculine = 365; + e.ae = 889; + e.dotlessi = 278; + e.lslash = 222; + e.oslash = 611; + e.oe = 944; + e.germandbls = 611; + e.Idieresis = 278; + e.eacute = 556; + e.abreve = 556; + e.uhungarumlaut = 556; + e.ecaron = 556; + e.Ydieresis = 667; + e.divide = 584; + e.Yacute = 667; + e.Acircumflex = 667; + e.aacute = 556; + e.Ucircumflex = 722; + e.yacute = 500; + e.scommaaccent = 500; + e.ecircumflex = 556; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 556; + e.Uacute = 722; + e.uogonek = 556; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 737; + e.Emacron = 667; + e.ccaron = 500; + e.aring = 556; + e.Ncommaaccent = 722; + e.lacute = 222; + e.agrave = 556; + e.Tcommaaccent = 611; + e.Cacute = 722; + e.atilde = 556; + e.Edotaccent = 667; + e.scaron = 500; + e.scedilla = 500; + e.iacute = 278; + e.lozenge = 471; + e.Rcaron = 722; + e.Gcommaaccent = 778; + e.ucircumflex = 556; + e.acircumflex = 556; + e.Amacron = 667; + e.rcaron = 333; + e.ccedilla = 500; + e.Zdotaccent = 611; + e.Thorn = 667; + e.Omacron = 778; + e.Racute = 722; + e.Sacute = 667; + e.dcaron = 643; + e.Umacron = 722; + e.uring = 556; + e.threesuperior = 333; + e.Ograve = 778; + e.Agrave = 667; + e.Abreve = 667; + e.multiply = 584; + e.uacute = 556; + e.Tcaron = 611; + e.partialdiff = 476; + e.ydieresis = 500; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 556; + e.edieresis = 556; + e.cacute = 500; + e.nacute = 556; + e.umacron = 556; + e.Ncaron = 722; + e.Iacute = 278; + e.plusminus = 584; + e.brokenbar = 260; + e.registered = 737; + e.Gbreve = 778; + e.Idotaccent = 278; + e.summation = 600; + e.Egrave = 667; + e.racute = 333; + e.omacron = 556; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 722; + e.lcommaaccent = 222; + e.tcaron = 317; + e.eogonek = 556; + e.Uogonek = 722; + e.Aacute = 667; + e.Adieresis = 667; + e.egrave = 556; + e.zacute = 500; + e.iogonek = 222; + e.Oacute = 778; + e.oacute = 556; + e.amacron = 556; + e.sacute = 500; + e.idieresis = 278; + e.Ocircumflex = 778; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 556; + e.twosuperior = 333; + e.Odieresis = 778; + e.mu = 556; + e.igrave = 278; + e.ohungarumlaut = 556; + e.Eogonek = 667; + e.dcroat = 556; + e.threequarters = 834; + e.Scedilla = 667; + e.lcaron = 299; + e.Kcommaaccent = 667; + e.Lacute = 556; + e.trademark = 1e3; + e.edotaccent = 556; + e.Igrave = 278; + e.Imacron = 278; + e.Lcaron = 556; + e.onehalf = 834; + e.lessequal = 549; + e.ocircumflex = 556; + e.ntilde = 556; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 556; + e.gbreve = 556; + e.onequarter = 834; + e.Scaron = 667; + e.Scommaaccent = 667; + e.Ohungarumlaut = 778; + e.degree = 400; + e.ograve = 556; + e.Ccaron = 722; + e.ugrave = 556; + e.radical = 453; + e.Dcaron = 722; + e.rcommaaccent = 333; + e.Ntilde = 722; + e.otilde = 556; + e.Rcommaaccent = 722; + e.Lcommaaccent = 556; + e.Atilde = 667; + e.Aogonek = 667; + e.Aring = 667; + e.Otilde = 778; + e.zdotaccent = 500; + e.Ecaron = 667; + e.Iogonek = 278; + e.kcommaaccent = 500; + e.minus = 584; + e.Icircumflex = 278; + e.ncaron = 556; + e.tcommaaccent = 278; + e.logicalnot = 584; + e.odieresis = 556; + e.udieresis = 556; + e.notequal = 549; + e.gcommaaccent = 556; + e.eth = 556; + e.zcaron = 500; + e.ncommaaccent = 556; + e.onesuperior = 333; + e.imacron = 278; + e.Euro = 556; + }); + e["Helvetica-Bold"] = getLookupTableFactory(function (e) { + e.space = 278; + e.exclam = 333; + e.quotedbl = 474; + e.numbersign = 556; + e.dollar = 556; + e.percent = 889; + e.ampersand = 722; + e.quoteright = 278; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 389; + e.plus = 584; + e.comma = 278; + e.hyphen = 333; + e.period = 278; + e.slash = 278; + e.zero = 556; + e.one = 556; + e.two = 556; + e.three = 556; + e.four = 556; + e.five = 556; + e.six = 556; + e.seven = 556; + e.eight = 556; + e.nine = 556; + e.colon = 333; + e.semicolon = 333; + e.less = 584; + e.equal = 584; + e.greater = 584; + e.question = 611; + e.at = 975; + e.A = 722; + e.B = 722; + e.C = 722; + e.D = 722; + e.E = 667; + e.F = 611; + e.G = 778; + e.H = 722; + e.I = 278; + e.J = 556; + e.K = 722; + e.L = 611; + e.M = 833; + e.N = 722; + e.O = 778; + e.P = 667; + e.Q = 778; + e.R = 722; + e.S = 667; + e.T = 611; + e.U = 722; + e.V = 667; + e.W = 944; + e.X = 667; + e.Y = 667; + e.Z = 611; + e.bracketleft = 333; + e.backslash = 278; + e.bracketright = 333; + e.asciicircum = 584; + e.underscore = 556; + e.quoteleft = 278; + e.a = 556; + e.b = 611; + e.c = 556; + e.d = 611; + e.e = 556; + e.f = 333; + e.g = 611; + e.h = 611; + e.i = 278; + e.j = 278; + e.k = 556; + e.l = 278; + e.m = 889; + e.n = 611; + e.o = 611; + e.p = 611; + e.q = 611; + e.r = 389; + e.s = 556; + e.t = 333; + e.u = 611; + e.v = 556; + e.w = 778; + e.x = 556; + e.y = 556; + e.z = 500; + e.braceleft = 389; + e.bar = 280; + e.braceright = 389; + e.asciitilde = 584; + e.exclamdown = 333; + e.cent = 556; + e.sterling = 556; + e.fraction = 167; + e.yen = 556; + e.florin = 556; + e.section = 556; + e.currency = 556; + e.quotesingle = 238; + e.quotedblleft = 500; + e.guillemotleft = 556; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 611; + e.fl = 611; + e.endash = 556; + e.dagger = 556; + e.daggerdbl = 556; + e.periodcentered = 278; + e.paragraph = 556; + e.bullet = 350; + e.quotesinglbase = 278; + e.quotedblbase = 500; + e.quotedblright = 500; + e.guillemotright = 556; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 611; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 1e3; + e.ordfeminine = 370; + e.Lslash = 611; + e.Oslash = 778; + e.OE = 1e3; + e.ordmasculine = 365; + e.ae = 889; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 611; + e.oe = 944; + e.germandbls = 611; + e.Idieresis = 278; + e.eacute = 556; + e.abreve = 556; + e.uhungarumlaut = 611; + e.ecaron = 556; + e.Ydieresis = 667; + e.divide = 584; + e.Yacute = 667; + e.Acircumflex = 722; + e.aacute = 556; + e.Ucircumflex = 722; + e.yacute = 556; + e.scommaaccent = 556; + e.ecircumflex = 556; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 556; + e.Uacute = 722; + e.uogonek = 611; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 737; + e.Emacron = 667; + e.ccaron = 556; + e.aring = 556; + e.Ncommaaccent = 722; + e.lacute = 278; + e.agrave = 556; + e.Tcommaaccent = 611; + e.Cacute = 722; + e.atilde = 556; + e.Edotaccent = 667; + e.scaron = 556; + e.scedilla = 556; + e.iacute = 278; + e.lozenge = 494; + e.Rcaron = 722; + e.Gcommaaccent = 778; + e.ucircumflex = 611; + e.acircumflex = 556; + e.Amacron = 722; + e.rcaron = 389; + e.ccedilla = 556; + e.Zdotaccent = 611; + e.Thorn = 667; + e.Omacron = 778; + e.Racute = 722; + e.Sacute = 667; + e.dcaron = 743; + e.Umacron = 722; + e.uring = 611; + e.threesuperior = 333; + e.Ograve = 778; + e.Agrave = 722; + e.Abreve = 722; + e.multiply = 584; + e.uacute = 611; + e.Tcaron = 611; + e.partialdiff = 494; + e.ydieresis = 556; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 556; + e.edieresis = 556; + e.cacute = 556; + e.nacute = 611; + e.umacron = 611; + e.Ncaron = 722; + e.Iacute = 278; + e.plusminus = 584; + e.brokenbar = 280; + e.registered = 737; + e.Gbreve = 778; + e.Idotaccent = 278; + e.summation = 600; + e.Egrave = 667; + e.racute = 389; + e.omacron = 611; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 722; + e.lcommaaccent = 278; + e.tcaron = 389; + e.eogonek = 556; + e.Uogonek = 722; + e.Aacute = 722; + e.Adieresis = 722; + e.egrave = 556; + e.zacute = 500; + e.iogonek = 278; + e.Oacute = 778; + e.oacute = 611; + e.amacron = 556; + e.sacute = 556; + e.idieresis = 278; + e.Ocircumflex = 778; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 611; + e.twosuperior = 333; + e.Odieresis = 778; + e.mu = 611; + e.igrave = 278; + e.ohungarumlaut = 611; + e.Eogonek = 667; + e.dcroat = 611; + e.threequarters = 834; + e.Scedilla = 667; + e.lcaron = 400; + e.Kcommaaccent = 722; + e.Lacute = 611; + e.trademark = 1e3; + e.edotaccent = 556; + e.Igrave = 278; + e.Imacron = 278; + e.Lcaron = 611; + e.onehalf = 834; + e.lessequal = 549; + e.ocircumflex = 611; + e.ntilde = 611; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 556; + e.gbreve = 611; + e.onequarter = 834; + e.Scaron = 667; + e.Scommaaccent = 667; + e.Ohungarumlaut = 778; + e.degree = 400; + e.ograve = 611; + e.Ccaron = 722; + e.ugrave = 611; + e.radical = 549; + e.Dcaron = 722; + e.rcommaaccent = 389; + e.Ntilde = 722; + e.otilde = 611; + e.Rcommaaccent = 722; + e.Lcommaaccent = 611; + e.Atilde = 722; + e.Aogonek = 722; + e.Aring = 722; + e.Otilde = 778; + e.zdotaccent = 500; + e.Ecaron = 667; + e.Iogonek = 278; + e.kcommaaccent = 556; + e.minus = 584; + e.Icircumflex = 278; + e.ncaron = 611; + e.tcommaaccent = 333; + e.logicalnot = 584; + e.odieresis = 611; + e.udieresis = 611; + e.notequal = 549; + e.gcommaaccent = 611; + e.eth = 611; + e.zcaron = 500; + e.ncommaaccent = 611; + e.onesuperior = 333; + e.imacron = 278; + e.Euro = 556; + }); + e["Helvetica-BoldOblique"] = getLookupTableFactory(function (e) { + e.space = 278; + e.exclam = 333; + e.quotedbl = 474; + e.numbersign = 556; + e.dollar = 556; + e.percent = 889; + e.ampersand = 722; + e.quoteright = 278; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 389; + e.plus = 584; + e.comma = 278; + e.hyphen = 333; + e.period = 278; + e.slash = 278; + e.zero = 556; + e.one = 556; + e.two = 556; + e.three = 556; + e.four = 556; + e.five = 556; + e.six = 556; + e.seven = 556; + e.eight = 556; + e.nine = 556; + e.colon = 333; + e.semicolon = 333; + e.less = 584; + e.equal = 584; + e.greater = 584; + e.question = 611; + e.at = 975; + e.A = 722; + e.B = 722; + e.C = 722; + e.D = 722; + e.E = 667; + e.F = 611; + e.G = 778; + e.H = 722; + e.I = 278; + e.J = 556; + e.K = 722; + e.L = 611; + e.M = 833; + e.N = 722; + e.O = 778; + e.P = 667; + e.Q = 778; + e.R = 722; + e.S = 667; + e.T = 611; + e.U = 722; + e.V = 667; + e.W = 944; + e.X = 667; + e.Y = 667; + e.Z = 611; + e.bracketleft = 333; + e.backslash = 278; + e.bracketright = 333; + e.asciicircum = 584; + e.underscore = 556; + e.quoteleft = 278; + e.a = 556; + e.b = 611; + e.c = 556; + e.d = 611; + e.e = 556; + e.f = 333; + e.g = 611; + e.h = 611; + e.i = 278; + e.j = 278; + e.k = 556; + e.l = 278; + e.m = 889; + e.n = 611; + e.o = 611; + e.p = 611; + e.q = 611; + e.r = 389; + e.s = 556; + e.t = 333; + e.u = 611; + e.v = 556; + e.w = 778; + e.x = 556; + e.y = 556; + e.z = 500; + e.braceleft = 389; + e.bar = 280; + e.braceright = 389; + e.asciitilde = 584; + e.exclamdown = 333; + e.cent = 556; + e.sterling = 556; + e.fraction = 167; + e.yen = 556; + e.florin = 556; + e.section = 556; + e.currency = 556; + e.quotesingle = 238; + e.quotedblleft = 500; + e.guillemotleft = 556; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 611; + e.fl = 611; + e.endash = 556; + e.dagger = 556; + e.daggerdbl = 556; + e.periodcentered = 278; + e.paragraph = 556; + e.bullet = 350; + e.quotesinglbase = 278; + e.quotedblbase = 500; + e.quotedblright = 500; + e.guillemotright = 556; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 611; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 1e3; + e.ordfeminine = 370; + e.Lslash = 611; + e.Oslash = 778; + e.OE = 1e3; + e.ordmasculine = 365; + e.ae = 889; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 611; + e.oe = 944; + e.germandbls = 611; + e.Idieresis = 278; + e.eacute = 556; + e.abreve = 556; + e.uhungarumlaut = 611; + e.ecaron = 556; + e.Ydieresis = 667; + e.divide = 584; + e.Yacute = 667; + e.Acircumflex = 722; + e.aacute = 556; + e.Ucircumflex = 722; + e.yacute = 556; + e.scommaaccent = 556; + e.ecircumflex = 556; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 556; + e.Uacute = 722; + e.uogonek = 611; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 737; + e.Emacron = 667; + e.ccaron = 556; + e.aring = 556; + e.Ncommaaccent = 722; + e.lacute = 278; + e.agrave = 556; + e.Tcommaaccent = 611; + e.Cacute = 722; + e.atilde = 556; + e.Edotaccent = 667; + e.scaron = 556; + e.scedilla = 556; + e.iacute = 278; + e.lozenge = 494; + e.Rcaron = 722; + e.Gcommaaccent = 778; + e.ucircumflex = 611; + e.acircumflex = 556; + e.Amacron = 722; + e.rcaron = 389; + e.ccedilla = 556; + e.Zdotaccent = 611; + e.Thorn = 667; + e.Omacron = 778; + e.Racute = 722; + e.Sacute = 667; + e.dcaron = 743; + e.Umacron = 722; + e.uring = 611; + e.threesuperior = 333; + e.Ograve = 778; + e.Agrave = 722; + e.Abreve = 722; + e.multiply = 584; + e.uacute = 611; + e.Tcaron = 611; + e.partialdiff = 494; + e.ydieresis = 556; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 556; + e.edieresis = 556; + e.cacute = 556; + e.nacute = 611; + e.umacron = 611; + e.Ncaron = 722; + e.Iacute = 278; + e.plusminus = 584; + e.brokenbar = 280; + e.registered = 737; + e.Gbreve = 778; + e.Idotaccent = 278; + e.summation = 600; + e.Egrave = 667; + e.racute = 389; + e.omacron = 611; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 722; + e.lcommaaccent = 278; + e.tcaron = 389; + e.eogonek = 556; + e.Uogonek = 722; + e.Aacute = 722; + e.Adieresis = 722; + e.egrave = 556; + e.zacute = 500; + e.iogonek = 278; + e.Oacute = 778; + e.oacute = 611; + e.amacron = 556; + e.sacute = 556; + e.idieresis = 278; + e.Ocircumflex = 778; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 611; + e.twosuperior = 333; + e.Odieresis = 778; + e.mu = 611; + e.igrave = 278; + e.ohungarumlaut = 611; + e.Eogonek = 667; + e.dcroat = 611; + e.threequarters = 834; + e.Scedilla = 667; + e.lcaron = 400; + e.Kcommaaccent = 722; + e.Lacute = 611; + e.trademark = 1e3; + e.edotaccent = 556; + e.Igrave = 278; + e.Imacron = 278; + e.Lcaron = 611; + e.onehalf = 834; + e.lessequal = 549; + e.ocircumflex = 611; + e.ntilde = 611; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 556; + e.gbreve = 611; + e.onequarter = 834; + e.Scaron = 667; + e.Scommaaccent = 667; + e.Ohungarumlaut = 778; + e.degree = 400; + e.ograve = 611; + e.Ccaron = 722; + e.ugrave = 611; + e.radical = 549; + e.Dcaron = 722; + e.rcommaaccent = 389; + e.Ntilde = 722; + e.otilde = 611; + e.Rcommaaccent = 722; + e.Lcommaaccent = 611; + e.Atilde = 722; + e.Aogonek = 722; + e.Aring = 722; + e.Otilde = 778; + e.zdotaccent = 500; + e.Ecaron = 667; + e.Iogonek = 278; + e.kcommaaccent = 556; + e.minus = 584; + e.Icircumflex = 278; + e.ncaron = 611; + e.tcommaaccent = 333; + e.logicalnot = 584; + e.odieresis = 611; + e.udieresis = 611; + e.notequal = 549; + e.gcommaaccent = 611; + e.eth = 611; + e.zcaron = 500; + e.ncommaaccent = 611; + e.onesuperior = 333; + e.imacron = 278; + e.Euro = 556; + }); + e["Helvetica-Oblique"] = getLookupTableFactory(function (e) { + e.space = 278; + e.exclam = 278; + e.quotedbl = 355; + e.numbersign = 556; + e.dollar = 556; + e.percent = 889; + e.ampersand = 667; + e.quoteright = 222; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 389; + e.plus = 584; + e.comma = 278; + e.hyphen = 333; + e.period = 278; + e.slash = 278; + e.zero = 556; + e.one = 556; + e.two = 556; + e.three = 556; + e.four = 556; + e.five = 556; + e.six = 556; + e.seven = 556; + e.eight = 556; + e.nine = 556; + e.colon = 278; + e.semicolon = 278; + e.less = 584; + e.equal = 584; + e.greater = 584; + e.question = 556; + e.at = 1015; + e.A = 667; + e.B = 667; + e.C = 722; + e.D = 722; + e.E = 667; + e.F = 611; + e.G = 778; + e.H = 722; + e.I = 278; + e.J = 500; + e.K = 667; + e.L = 556; + e.M = 833; + e.N = 722; + e.O = 778; + e.P = 667; + e.Q = 778; + e.R = 722; + e.S = 667; + e.T = 611; + e.U = 722; + e.V = 667; + e.W = 944; + e.X = 667; + e.Y = 667; + e.Z = 611; + e.bracketleft = 278; + e.backslash = 278; + e.bracketright = 278; + e.asciicircum = 469; + e.underscore = 556; + e.quoteleft = 222; + e.a = 556; + e.b = 556; + e.c = 500; + e.d = 556; + e.e = 556; + e.f = 278; + e.g = 556; + e.h = 556; + e.i = 222; + e.j = 222; + e.k = 500; + e.l = 222; + e.m = 833; + e.n = 556; + e.o = 556; + e.p = 556; + e.q = 556; + e.r = 333; + e.s = 500; + e.t = 278; + e.u = 556; + e.v = 500; + e.w = 722; + e.x = 500; + e.y = 500; + e.z = 500; + e.braceleft = 334; + e.bar = 260; + e.braceright = 334; + e.asciitilde = 584; + e.exclamdown = 333; + e.cent = 556; + e.sterling = 556; + e.fraction = 167; + e.yen = 556; + e.florin = 556; + e.section = 556; + e.currency = 556; + e.quotesingle = 191; + e.quotedblleft = 333; + e.guillemotleft = 556; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 500; + e.fl = 500; + e.endash = 556; + e.dagger = 556; + e.daggerdbl = 556; + e.periodcentered = 278; + e.paragraph = 537; + e.bullet = 350; + e.quotesinglbase = 222; + e.quotedblbase = 333; + e.quotedblright = 333; + e.guillemotright = 556; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 611; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 1e3; + e.ordfeminine = 370; + e.Lslash = 556; + e.Oslash = 778; + e.OE = 1e3; + e.ordmasculine = 365; + e.ae = 889; + e.dotlessi = 278; + e.lslash = 222; + e.oslash = 611; + e.oe = 944; + e.germandbls = 611; + e.Idieresis = 278; + e.eacute = 556; + e.abreve = 556; + e.uhungarumlaut = 556; + e.ecaron = 556; + e.Ydieresis = 667; + e.divide = 584; + e.Yacute = 667; + e.Acircumflex = 667; + e.aacute = 556; + e.Ucircumflex = 722; + e.yacute = 500; + e.scommaaccent = 500; + e.ecircumflex = 556; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 556; + e.Uacute = 722; + e.uogonek = 556; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 737; + e.Emacron = 667; + e.ccaron = 500; + e.aring = 556; + e.Ncommaaccent = 722; + e.lacute = 222; + e.agrave = 556; + e.Tcommaaccent = 611; + e.Cacute = 722; + e.atilde = 556; + e.Edotaccent = 667; + e.scaron = 500; + e.scedilla = 500; + e.iacute = 278; + e.lozenge = 471; + e.Rcaron = 722; + e.Gcommaaccent = 778; + e.ucircumflex = 556; + e.acircumflex = 556; + e.Amacron = 667; + e.rcaron = 333; + e.ccedilla = 500; + e.Zdotaccent = 611; + e.Thorn = 667; + e.Omacron = 778; + e.Racute = 722; + e.Sacute = 667; + e.dcaron = 643; + e.Umacron = 722; + e.uring = 556; + e.threesuperior = 333; + e.Ograve = 778; + e.Agrave = 667; + e.Abreve = 667; + e.multiply = 584; + e.uacute = 556; + e.Tcaron = 611; + e.partialdiff = 476; + e.ydieresis = 500; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 556; + e.edieresis = 556; + e.cacute = 500; + e.nacute = 556; + e.umacron = 556; + e.Ncaron = 722; + e.Iacute = 278; + e.plusminus = 584; + e.brokenbar = 260; + e.registered = 737; + e.Gbreve = 778; + e.Idotaccent = 278; + e.summation = 600; + e.Egrave = 667; + e.racute = 333; + e.omacron = 556; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 722; + e.lcommaaccent = 222; + e.tcaron = 317; + e.eogonek = 556; + e.Uogonek = 722; + e.Aacute = 667; + e.Adieresis = 667; + e.egrave = 556; + e.zacute = 500; + e.iogonek = 222; + e.Oacute = 778; + e.oacute = 556; + e.amacron = 556; + e.sacute = 500; + e.idieresis = 278; + e.Ocircumflex = 778; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 556; + e.twosuperior = 333; + e.Odieresis = 778; + e.mu = 556; + e.igrave = 278; + e.ohungarumlaut = 556; + e.Eogonek = 667; + e.dcroat = 556; + e.threequarters = 834; + e.Scedilla = 667; + e.lcaron = 299; + e.Kcommaaccent = 667; + e.Lacute = 556; + e.trademark = 1e3; + e.edotaccent = 556; + e.Igrave = 278; + e.Imacron = 278; + e.Lcaron = 556; + e.onehalf = 834; + e.lessequal = 549; + e.ocircumflex = 556; + e.ntilde = 556; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 556; + e.gbreve = 556; + e.onequarter = 834; + e.Scaron = 667; + e.Scommaaccent = 667; + e.Ohungarumlaut = 778; + e.degree = 400; + e.ograve = 556; + e.Ccaron = 722; + e.ugrave = 556; + e.radical = 453; + e.Dcaron = 722; + e.rcommaaccent = 333; + e.Ntilde = 722; + e.otilde = 556; + e.Rcommaaccent = 722; + e.Lcommaaccent = 556; + e.Atilde = 667; + e.Aogonek = 667; + e.Aring = 667; + e.Otilde = 778; + e.zdotaccent = 500; + e.Ecaron = 667; + e.Iogonek = 278; + e.kcommaaccent = 500; + e.minus = 584; + e.Icircumflex = 278; + e.ncaron = 556; + e.tcommaaccent = 278; + e.logicalnot = 584; + e.odieresis = 556; + e.udieresis = 556; + e.notequal = 549; + e.gcommaaccent = 556; + e.eth = 556; + e.zcaron = 500; + e.ncommaaccent = 556; + e.onesuperior = 333; + e.imacron = 278; + e.Euro = 556; + }); + e.Symbol = getLookupTableFactory(function (e) { + e.space = 250; + e.exclam = 333; + e.universal = 713; + e.numbersign = 500; + e.existential = 549; + e.percent = 833; + e.ampersand = 778; + e.suchthat = 439; + e.parenleft = 333; + e.parenright = 333; + e.asteriskmath = 500; + e.plus = 549; + e.comma = 250; + e.minus = 549; + e.period = 250; + e.slash = 278; + e.zero = 500; + e.one = 500; + e.two = 500; + e.three = 500; + e.four = 500; + e.five = 500; + e.six = 500; + e.seven = 500; + e.eight = 500; + e.nine = 500; + e.colon = 278; + e.semicolon = 278; + e.less = 549; + e.equal = 549; + e.greater = 549; + e.question = 444; + e.congruent = 549; + e.Alpha = 722; + e.Beta = 667; + e.Chi = 722; + e.Delta = 612; + e.Epsilon = 611; + e.Phi = 763; + e.Gamma = 603; + e.Eta = 722; + e.Iota = 333; + e.theta1 = 631; + e.Kappa = 722; + e.Lambda = 686; + e.Mu = 889; + e.Nu = 722; + e.Omicron = 722; + e.Pi = 768; + e.Theta = 741; + e.Rho = 556; + e.Sigma = 592; + e.Tau = 611; + e.Upsilon = 690; + e.sigma1 = 439; + e.Omega = 768; + e.Xi = 645; + e.Psi = 795; + e.Zeta = 611; + e.bracketleft = 333; + e.therefore = 863; + e.bracketright = 333; + e.perpendicular = 658; + e.underscore = 500; + e.radicalex = 500; + e.alpha = 631; + e.beta = 549; + e.chi = 549; + e.delta = 494; + e.epsilon = 439; + e.phi = 521; + e.gamma = 411; + e.eta = 603; + e.iota = 329; + e.phi1 = 603; + e.kappa = 549; + e.lambda = 549; + e.mu = 576; + e.nu = 521; + e.omicron = 549; + e.pi = 549; + e.theta = 521; + e.rho = 549; + e.sigma = 603; + e.tau = 439; + e.upsilon = 576; + e.omega1 = 713; + e.omega = 686; + e.xi = 493; + e.psi = 686; + e.zeta = 494; + e.braceleft = 480; + e.bar = 200; + e.braceright = 480; + e.similar = 549; + e.Euro = 750; + e.Upsilon1 = 620; + e.minute = 247; + e.lessequal = 549; + e.fraction = 167; + e.infinity = 713; + e.florin = 500; + e.club = 753; + e.diamond = 753; + e.heart = 753; + e.spade = 753; + e.arrowboth = 1042; + e.arrowleft = 987; + e.arrowup = 603; + e.arrowright = 987; + e.arrowdown = 603; + e.degree = 400; + e.plusminus = 549; + e.second = 411; + e.greaterequal = 549; + e.multiply = 549; + e.proportional = 713; + e.partialdiff = 494; + e.bullet = 460; + e.divide = 549; + e.notequal = 549; + e.equivalence = 549; + e.approxequal = 549; + e.ellipsis = 1e3; + e.arrowvertex = 603; + e.arrowhorizex = 1e3; + e.carriagereturn = 658; + e.aleph = 823; + e.Ifraktur = 686; + e.Rfraktur = 795; + e.weierstrass = 987; + e.circlemultiply = 768; + e.circleplus = 768; + e.emptyset = 823; + e.intersection = 768; + e.union = 768; + e.propersuperset = 713; + e.reflexsuperset = 713; + e.notsubset = 713; + e.propersubset = 713; + e.reflexsubset = 713; + e.element = 713; + e.notelement = 713; + e.angle = 768; + e.gradient = 713; + e.registerserif = 790; + e.copyrightserif = 790; + e.trademarkserif = 890; + e.product = 823; + e.radical = 549; + e.dotmath = 250; + e.logicalnot = 713; + e.logicaland = 603; + e.logicalor = 603; + e.arrowdblboth = 1042; + e.arrowdblleft = 987; + e.arrowdblup = 603; + e.arrowdblright = 987; + e.arrowdbldown = 603; + e.lozenge = 494; + e.angleleft = 329; + e.registersans = 790; + e.copyrightsans = 790; + e.trademarksans = 786; + e.summation = 713; + e.parenlefttp = 384; + e.parenleftex = 384; + e.parenleftbt = 384; + e.bracketlefttp = 384; + e.bracketleftex = 384; + e.bracketleftbt = 384; + e.bracelefttp = 494; + e.braceleftmid = 494; + e.braceleftbt = 494; + e.braceex = 494; + e.angleright = 329; + e.integral = 274; + e.integraltp = 686; + e.integralex = 686; + e.integralbt = 686; + e.parenrighttp = 384; + e.parenrightex = 384; + e.parenrightbt = 384; + e.bracketrighttp = 384; + e.bracketrightex = 384; + e.bracketrightbt = 384; + e.bracerighttp = 494; + e.bracerightmid = 494; + e.bracerightbt = 494; + e.apple = 790; + }); + e["Times-Roman"] = getLookupTableFactory(function (e) { + e.space = 250; + e.exclam = 333; + e.quotedbl = 408; + e.numbersign = 500; + e.dollar = 500; + e.percent = 833; + e.ampersand = 778; + e.quoteright = 333; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 500; + e.plus = 564; + e.comma = 250; + e.hyphen = 333; + e.period = 250; + e.slash = 278; + e.zero = 500; + e.one = 500; + e.two = 500; + e.three = 500; + e.four = 500; + e.five = 500; + e.six = 500; + e.seven = 500; + e.eight = 500; + e.nine = 500; + e.colon = 278; + e.semicolon = 278; + e.less = 564; + e.equal = 564; + e.greater = 564; + e.question = 444; + e.at = 921; + e.A = 722; + e.B = 667; + e.C = 667; + e.D = 722; + e.E = 611; + e.F = 556; + e.G = 722; + e.H = 722; + e.I = 333; + e.J = 389; + e.K = 722; + e.L = 611; + e.M = 889; + e.N = 722; + e.O = 722; + e.P = 556; + e.Q = 722; + e.R = 667; + e.S = 556; + e.T = 611; + e.U = 722; + e.V = 722; + e.W = 944; + e.X = 722; + e.Y = 722; + e.Z = 611; + e.bracketleft = 333; + e.backslash = 278; + e.bracketright = 333; + e.asciicircum = 469; + e.underscore = 500; + e.quoteleft = 333; + e.a = 444; + e.b = 500; + e.c = 444; + e.d = 500; + e.e = 444; + e.f = 333; + e.g = 500; + e.h = 500; + e.i = 278; + e.j = 278; + e.k = 500; + e.l = 278; + e.m = 778; + e.n = 500; + e.o = 500; + e.p = 500; + e.q = 500; + e.r = 333; + e.s = 389; + e.t = 278; + e.u = 500; + e.v = 500; + e.w = 722; + e.x = 500; + e.y = 500; + e.z = 444; + e.braceleft = 480; + e.bar = 200; + e.braceright = 480; + e.asciitilde = 541; + e.exclamdown = 333; + e.cent = 500; + e.sterling = 500; + e.fraction = 167; + e.yen = 500; + e.florin = 500; + e.section = 500; + e.currency = 500; + e.quotesingle = 180; + e.quotedblleft = 444; + e.guillemotleft = 500; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 556; + e.fl = 556; + e.endash = 500; + e.dagger = 500; + e.daggerdbl = 500; + e.periodcentered = 250; + e.paragraph = 453; + e.bullet = 350; + e.quotesinglbase = 333; + e.quotedblbase = 444; + e.quotedblright = 444; + e.guillemotright = 500; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 444; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 889; + e.ordfeminine = 276; + e.Lslash = 611; + e.Oslash = 722; + e.OE = 889; + e.ordmasculine = 310; + e.ae = 667; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 500; + e.oe = 722; + e.germandbls = 500; + e.Idieresis = 333; + e.eacute = 444; + e.abreve = 444; + e.uhungarumlaut = 500; + e.ecaron = 444; + e.Ydieresis = 722; + e.divide = 564; + e.Yacute = 722; + e.Acircumflex = 722; + e.aacute = 444; + e.Ucircumflex = 722; + e.yacute = 500; + e.scommaaccent = 389; + e.ecircumflex = 444; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 444; + e.Uacute = 722; + e.uogonek = 500; + e.Edieresis = 611; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 760; + e.Emacron = 611; + e.ccaron = 444; + e.aring = 444; + e.Ncommaaccent = 722; + e.lacute = 278; + e.agrave = 444; + e.Tcommaaccent = 611; + e.Cacute = 667; + e.atilde = 444; + e.Edotaccent = 611; + e.scaron = 389; + e.scedilla = 389; + e.iacute = 278; + e.lozenge = 471; + e.Rcaron = 667; + e.Gcommaaccent = 722; + e.ucircumflex = 500; + e.acircumflex = 444; + e.Amacron = 722; + e.rcaron = 333; + e.ccedilla = 444; + e.Zdotaccent = 611; + e.Thorn = 556; + e.Omacron = 722; + e.Racute = 667; + e.Sacute = 556; + e.dcaron = 588; + e.Umacron = 722; + e.uring = 500; + e.threesuperior = 300; + e.Ograve = 722; + e.Agrave = 722; + e.Abreve = 722; + e.multiply = 564; + e.uacute = 500; + e.Tcaron = 611; + e.partialdiff = 476; + e.ydieresis = 500; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 611; + e.adieresis = 444; + e.edieresis = 444; + e.cacute = 444; + e.nacute = 500; + e.umacron = 500; + e.Ncaron = 722; + e.Iacute = 333; + e.plusminus = 564; + e.brokenbar = 200; + e.registered = 760; + e.Gbreve = 722; + e.Idotaccent = 333; + e.summation = 600; + e.Egrave = 611; + e.racute = 333; + e.omacron = 500; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 667; + e.lcommaaccent = 278; + e.tcaron = 326; + e.eogonek = 444; + e.Uogonek = 722; + e.Aacute = 722; + e.Adieresis = 722; + e.egrave = 444; + e.zacute = 444; + e.iogonek = 278; + e.Oacute = 722; + e.oacute = 500; + e.amacron = 444; + e.sacute = 389; + e.idieresis = 278; + e.Ocircumflex = 722; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 500; + e.twosuperior = 300; + e.Odieresis = 722; + e.mu = 500; + e.igrave = 278; + e.ohungarumlaut = 500; + e.Eogonek = 611; + e.dcroat = 500; + e.threequarters = 750; + e.Scedilla = 556; + e.lcaron = 344; + e.Kcommaaccent = 722; + e.Lacute = 611; + e.trademark = 980; + e.edotaccent = 444; + e.Igrave = 333; + e.Imacron = 333; + e.Lcaron = 611; + e.onehalf = 750; + e.lessequal = 549; + e.ocircumflex = 500; + e.ntilde = 500; + e.Uhungarumlaut = 722; + e.Eacute = 611; + e.emacron = 444; + e.gbreve = 500; + e.onequarter = 750; + e.Scaron = 556; + e.Scommaaccent = 556; + e.Ohungarumlaut = 722; + e.degree = 400; + e.ograve = 500; + e.Ccaron = 667; + e.ugrave = 500; + e.radical = 453; + e.Dcaron = 722; + e.rcommaaccent = 333; + e.Ntilde = 722; + e.otilde = 500; + e.Rcommaaccent = 667; + e.Lcommaaccent = 611; + e.Atilde = 722; + e.Aogonek = 722; + e.Aring = 722; + e.Otilde = 722; + e.zdotaccent = 444; + e.Ecaron = 611; + e.Iogonek = 333; + e.kcommaaccent = 500; + e.minus = 564; + e.Icircumflex = 333; + e.ncaron = 500; + e.tcommaaccent = 278; + e.logicalnot = 564; + e.odieresis = 500; + e.udieresis = 500; + e.notequal = 549; + e.gcommaaccent = 500; + e.eth = 500; + e.zcaron = 444; + e.ncommaaccent = 500; + e.onesuperior = 300; + e.imacron = 278; + e.Euro = 500; + }); + e["Times-Bold"] = getLookupTableFactory(function (e) { + e.space = 250; + e.exclam = 333; + e.quotedbl = 555; + e.numbersign = 500; + e.dollar = 500; + e.percent = 1e3; + e.ampersand = 833; + e.quoteright = 333; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 500; + e.plus = 570; + e.comma = 250; + e.hyphen = 333; + e.period = 250; + e.slash = 278; + e.zero = 500; + e.one = 500; + e.two = 500; + e.three = 500; + e.four = 500; + e.five = 500; + e.six = 500; + e.seven = 500; + e.eight = 500; + e.nine = 500; + e.colon = 333; + e.semicolon = 333; + e.less = 570; + e.equal = 570; + e.greater = 570; + e.question = 500; + e.at = 930; + e.A = 722; + e.B = 667; + e.C = 722; + e.D = 722; + e.E = 667; + e.F = 611; + e.G = 778; + e.H = 778; + e.I = 389; + e.J = 500; + e.K = 778; + e.L = 667; + e.M = 944; + e.N = 722; + e.O = 778; + e.P = 611; + e.Q = 778; + e.R = 722; + e.S = 556; + e.T = 667; + e.U = 722; + e.V = 722; + e.W = 1e3; + e.X = 722; + e.Y = 722; + e.Z = 667; + e.bracketleft = 333; + e.backslash = 278; + e.bracketright = 333; + e.asciicircum = 581; + e.underscore = 500; + e.quoteleft = 333; + e.a = 500; + e.b = 556; + e.c = 444; + e.d = 556; + e.e = 444; + e.f = 333; + e.g = 500; + e.h = 556; + e.i = 278; + e.j = 333; + e.k = 556; + e.l = 278; + e.m = 833; + e.n = 556; + e.o = 500; + e.p = 556; + e.q = 556; + e.r = 444; + e.s = 389; + e.t = 333; + e.u = 556; + e.v = 500; + e.w = 722; + e.x = 500; + e.y = 500; + e.z = 444; + e.braceleft = 394; + e.bar = 220; + e.braceright = 394; + e.asciitilde = 520; + e.exclamdown = 333; + e.cent = 500; + e.sterling = 500; + e.fraction = 167; + e.yen = 500; + e.florin = 500; + e.section = 500; + e.currency = 500; + e.quotesingle = 278; + e.quotedblleft = 500; + e.guillemotleft = 500; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 556; + e.fl = 556; + e.endash = 500; + e.dagger = 500; + e.daggerdbl = 500; + e.periodcentered = 250; + e.paragraph = 540; + e.bullet = 350; + e.quotesinglbase = 333; + e.quotedblbase = 500; + e.quotedblright = 500; + e.guillemotright = 500; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 500; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 1e3; + e.ordfeminine = 300; + e.Lslash = 667; + e.Oslash = 778; + e.OE = 1e3; + e.ordmasculine = 330; + e.ae = 722; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 500; + e.oe = 722; + e.germandbls = 556; + e.Idieresis = 389; + e.eacute = 444; + e.abreve = 500; + e.uhungarumlaut = 556; + e.ecaron = 444; + e.Ydieresis = 722; + e.divide = 570; + e.Yacute = 722; + e.Acircumflex = 722; + e.aacute = 500; + e.Ucircumflex = 722; + e.yacute = 500; + e.scommaaccent = 389; + e.ecircumflex = 444; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 500; + e.Uacute = 722; + e.uogonek = 556; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 747; + e.Emacron = 667; + e.ccaron = 444; + e.aring = 500; + e.Ncommaaccent = 722; + e.lacute = 278; + e.agrave = 500; + e.Tcommaaccent = 667; + e.Cacute = 722; + e.atilde = 500; + e.Edotaccent = 667; + e.scaron = 389; + e.scedilla = 389; + e.iacute = 278; + e.lozenge = 494; + e.Rcaron = 722; + e.Gcommaaccent = 778; + e.ucircumflex = 556; + e.acircumflex = 500; + e.Amacron = 722; + e.rcaron = 444; + e.ccedilla = 444; + e.Zdotaccent = 667; + e.Thorn = 611; + e.Omacron = 778; + e.Racute = 722; + e.Sacute = 556; + e.dcaron = 672; + e.Umacron = 722; + e.uring = 556; + e.threesuperior = 300; + e.Ograve = 778; + e.Agrave = 722; + e.Abreve = 722; + e.multiply = 570; + e.uacute = 556; + e.Tcaron = 667; + e.partialdiff = 494; + e.ydieresis = 500; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 500; + e.edieresis = 444; + e.cacute = 444; + e.nacute = 556; + e.umacron = 556; + e.Ncaron = 722; + e.Iacute = 389; + e.plusminus = 570; + e.brokenbar = 220; + e.registered = 747; + e.Gbreve = 778; + e.Idotaccent = 389; + e.summation = 600; + e.Egrave = 667; + e.racute = 444; + e.omacron = 500; + e.Zacute = 667; + e.Zcaron = 667; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 722; + e.lcommaaccent = 278; + e.tcaron = 416; + e.eogonek = 444; + e.Uogonek = 722; + e.Aacute = 722; + e.Adieresis = 722; + e.egrave = 444; + e.zacute = 444; + e.iogonek = 278; + e.Oacute = 778; + e.oacute = 500; + e.amacron = 500; + e.sacute = 389; + e.idieresis = 278; + e.Ocircumflex = 778; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 556; + e.twosuperior = 300; + e.Odieresis = 778; + e.mu = 556; + e.igrave = 278; + e.ohungarumlaut = 500; + e.Eogonek = 667; + e.dcroat = 556; + e.threequarters = 750; + e.Scedilla = 556; + e.lcaron = 394; + e.Kcommaaccent = 778; + e.Lacute = 667; + e.trademark = 1e3; + e.edotaccent = 444; + e.Igrave = 389; + e.Imacron = 389; + e.Lcaron = 667; + e.onehalf = 750; + e.lessequal = 549; + e.ocircumflex = 500; + e.ntilde = 556; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 444; + e.gbreve = 500; + e.onequarter = 750; + e.Scaron = 556; + e.Scommaaccent = 556; + e.Ohungarumlaut = 778; + e.degree = 400; + e.ograve = 500; + e.Ccaron = 722; + e.ugrave = 556; + e.radical = 549; + e.Dcaron = 722; + e.rcommaaccent = 444; + e.Ntilde = 722; + e.otilde = 500; + e.Rcommaaccent = 722; + e.Lcommaaccent = 667; + e.Atilde = 722; + e.Aogonek = 722; + e.Aring = 722; + e.Otilde = 778; + e.zdotaccent = 444; + e.Ecaron = 667; + e.Iogonek = 389; + e.kcommaaccent = 556; + e.minus = 570; + e.Icircumflex = 389; + e.ncaron = 556; + e.tcommaaccent = 333; + e.logicalnot = 570; + e.odieresis = 500; + e.udieresis = 556; + e.notequal = 549; + e.gcommaaccent = 500; + e.eth = 500; + e.zcaron = 444; + e.ncommaaccent = 556; + e.onesuperior = 300; + e.imacron = 278; + e.Euro = 500; + }); + e["Times-BoldItalic"] = getLookupTableFactory(function (e) { + e.space = 250; + e.exclam = 389; + e.quotedbl = 555; + e.numbersign = 500; + e.dollar = 500; + e.percent = 833; + e.ampersand = 778; + e.quoteright = 333; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 500; + e.plus = 570; + e.comma = 250; + e.hyphen = 333; + e.period = 250; + e.slash = 278; + e.zero = 500; + e.one = 500; + e.two = 500; + e.three = 500; + e.four = 500; + e.five = 500; + e.six = 500; + e.seven = 500; + e.eight = 500; + e.nine = 500; + e.colon = 333; + e.semicolon = 333; + e.less = 570; + e.equal = 570; + e.greater = 570; + e.question = 500; + e.at = 832; + e.A = 667; + e.B = 667; + e.C = 667; + e.D = 722; + e.E = 667; + e.F = 667; + e.G = 722; + e.H = 778; + e.I = 389; + e.J = 500; + e.K = 667; + e.L = 611; + e.M = 889; + e.N = 722; + e.O = 722; + e.P = 611; + e.Q = 722; + e.R = 667; + e.S = 556; + e.T = 611; + e.U = 722; + e.V = 667; + e.W = 889; + e.X = 667; + e.Y = 611; + e.Z = 611; + e.bracketleft = 333; + e.backslash = 278; + e.bracketright = 333; + e.asciicircum = 570; + e.underscore = 500; + e.quoteleft = 333; + e.a = 500; + e.b = 500; + e.c = 444; + e.d = 500; + e.e = 444; + e.f = 333; + e.g = 500; + e.h = 556; + e.i = 278; + e.j = 278; + e.k = 500; + e.l = 278; + e.m = 778; + e.n = 556; + e.o = 500; + e.p = 500; + e.q = 500; + e.r = 389; + e.s = 389; + e.t = 278; + e.u = 556; + e.v = 444; + e.w = 667; + e.x = 500; + e.y = 444; + e.z = 389; + e.braceleft = 348; + e.bar = 220; + e.braceright = 348; + e.asciitilde = 570; + e.exclamdown = 389; + e.cent = 500; + e.sterling = 500; + e.fraction = 167; + e.yen = 500; + e.florin = 500; + e.section = 500; + e.currency = 500; + e.quotesingle = 278; + e.quotedblleft = 500; + e.guillemotleft = 500; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 556; + e.fl = 556; + e.endash = 500; + e.dagger = 500; + e.daggerdbl = 500; + e.periodcentered = 250; + e.paragraph = 500; + e.bullet = 350; + e.quotesinglbase = 333; + e.quotedblbase = 500; + e.quotedblright = 500; + e.guillemotright = 500; + e.ellipsis = 1e3; + e.perthousand = 1e3; + e.questiondown = 500; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 1e3; + e.AE = 944; + e.ordfeminine = 266; + e.Lslash = 611; + e.Oslash = 722; + e.OE = 944; + e.ordmasculine = 300; + e.ae = 722; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 500; + e.oe = 722; + e.germandbls = 500; + e.Idieresis = 389; + e.eacute = 444; + e.abreve = 500; + e.uhungarumlaut = 556; + e.ecaron = 444; + e.Ydieresis = 611; + e.divide = 570; + e.Yacute = 611; + e.Acircumflex = 667; + e.aacute = 500; + e.Ucircumflex = 722; + e.yacute = 444; + e.scommaaccent = 389; + e.ecircumflex = 444; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 500; + e.Uacute = 722; + e.uogonek = 556; + e.Edieresis = 667; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 747; + e.Emacron = 667; + e.ccaron = 444; + e.aring = 500; + e.Ncommaaccent = 722; + e.lacute = 278; + e.agrave = 500; + e.Tcommaaccent = 611; + e.Cacute = 667; + e.atilde = 500; + e.Edotaccent = 667; + e.scaron = 389; + e.scedilla = 389; + e.iacute = 278; + e.lozenge = 494; + e.Rcaron = 667; + e.Gcommaaccent = 722; + e.ucircumflex = 556; + e.acircumflex = 500; + e.Amacron = 667; + e.rcaron = 389; + e.ccedilla = 444; + e.Zdotaccent = 611; + e.Thorn = 611; + e.Omacron = 722; + e.Racute = 667; + e.Sacute = 556; + e.dcaron = 608; + e.Umacron = 722; + e.uring = 556; + e.threesuperior = 300; + e.Ograve = 722; + e.Agrave = 667; + e.Abreve = 667; + e.multiply = 570; + e.uacute = 556; + e.Tcaron = 611; + e.partialdiff = 494; + e.ydieresis = 444; + e.Nacute = 722; + e.icircumflex = 278; + e.Ecircumflex = 667; + e.adieresis = 500; + e.edieresis = 444; + e.cacute = 444; + e.nacute = 556; + e.umacron = 556; + e.Ncaron = 722; + e.Iacute = 389; + e.plusminus = 570; + e.brokenbar = 220; + e.registered = 747; + e.Gbreve = 722; + e.Idotaccent = 389; + e.summation = 600; + e.Egrave = 667; + e.racute = 389; + e.omacron = 500; + e.Zacute = 611; + e.Zcaron = 611; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 667; + e.lcommaaccent = 278; + e.tcaron = 366; + e.eogonek = 444; + e.Uogonek = 722; + e.Aacute = 667; + e.Adieresis = 667; + e.egrave = 444; + e.zacute = 389; + e.iogonek = 278; + e.Oacute = 722; + e.oacute = 500; + e.amacron = 500; + e.sacute = 389; + e.idieresis = 278; + e.Ocircumflex = 722; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 500; + e.twosuperior = 300; + e.Odieresis = 722; + e.mu = 576; + e.igrave = 278; + e.ohungarumlaut = 500; + e.Eogonek = 667; + e.dcroat = 500; + e.threequarters = 750; + e.Scedilla = 556; + e.lcaron = 382; + e.Kcommaaccent = 667; + e.Lacute = 611; + e.trademark = 1e3; + e.edotaccent = 444; + e.Igrave = 389; + e.Imacron = 389; + e.Lcaron = 611; + e.onehalf = 750; + e.lessequal = 549; + e.ocircumflex = 500; + e.ntilde = 556; + e.Uhungarumlaut = 722; + e.Eacute = 667; + e.emacron = 444; + e.gbreve = 500; + e.onequarter = 750; + e.Scaron = 556; + e.Scommaaccent = 556; + e.Ohungarumlaut = 722; + e.degree = 400; + e.ograve = 500; + e.Ccaron = 667; + e.ugrave = 556; + e.radical = 549; + e.Dcaron = 722; + e.rcommaaccent = 389; + e.Ntilde = 722; + e.otilde = 500; + e.Rcommaaccent = 667; + e.Lcommaaccent = 611; + e.Atilde = 667; + e.Aogonek = 667; + e.Aring = 667; + e.Otilde = 722; + e.zdotaccent = 389; + e.Ecaron = 667; + e.Iogonek = 389; + e.kcommaaccent = 500; + e.minus = 606; + e.Icircumflex = 389; + e.ncaron = 556; + e.tcommaaccent = 278; + e.logicalnot = 606; + e.odieresis = 500; + e.udieresis = 556; + e.notequal = 549; + e.gcommaaccent = 500; + e.eth = 500; + e.zcaron = 389; + e.ncommaaccent = 556; + e.onesuperior = 300; + e.imacron = 278; + e.Euro = 500; + }); + e["Times-Italic"] = getLookupTableFactory(function (e) { + e.space = 250; + e.exclam = 333; + e.quotedbl = 420; + e.numbersign = 500; + e.dollar = 500; + e.percent = 833; + e.ampersand = 778; + e.quoteright = 333; + e.parenleft = 333; + e.parenright = 333; + e.asterisk = 500; + e.plus = 675; + e.comma = 250; + e.hyphen = 333; + e.period = 250; + e.slash = 278; + e.zero = 500; + e.one = 500; + e.two = 500; + e.three = 500; + e.four = 500; + e.five = 500; + e.six = 500; + e.seven = 500; + e.eight = 500; + e.nine = 500; + e.colon = 333; + e.semicolon = 333; + e.less = 675; + e.equal = 675; + e.greater = 675; + e.question = 500; + e.at = 920; + e.A = 611; + e.B = 611; + e.C = 667; + e.D = 722; + e.E = 611; + e.F = 611; + e.G = 722; + e.H = 722; + e.I = 333; + e.J = 444; + e.K = 667; + e.L = 556; + e.M = 833; + e.N = 667; + e.O = 722; + e.P = 611; + e.Q = 722; + e.R = 611; + e.S = 500; + e.T = 556; + e.U = 722; + e.V = 611; + e.W = 833; + e.X = 611; + e.Y = 556; + e.Z = 556; + e.bracketleft = 389; + e.backslash = 278; + e.bracketright = 389; + e.asciicircum = 422; + e.underscore = 500; + e.quoteleft = 333; + e.a = 500; + e.b = 500; + e.c = 444; + e.d = 500; + e.e = 444; + e.f = 278; + e.g = 500; + e.h = 500; + e.i = 278; + e.j = 278; + e.k = 444; + e.l = 278; + e.m = 722; + e.n = 500; + e.o = 500; + e.p = 500; + e.q = 500; + e.r = 389; + e.s = 389; + e.t = 278; + e.u = 500; + e.v = 444; + e.w = 667; + e.x = 444; + e.y = 444; + e.z = 389; + e.braceleft = 400; + e.bar = 275; + e.braceright = 400; + e.asciitilde = 541; + e.exclamdown = 389; + e.cent = 500; + e.sterling = 500; + e.fraction = 167; + e.yen = 500; + e.florin = 500; + e.section = 500; + e.currency = 500; + e.quotesingle = 214; + e.quotedblleft = 556; + e.guillemotleft = 500; + e.guilsinglleft = 333; + e.guilsinglright = 333; + e.fi = 500; + e.fl = 500; + e.endash = 500; + e.dagger = 500; + e.daggerdbl = 500; + e.periodcentered = 250; + e.paragraph = 523; + e.bullet = 350; + e.quotesinglbase = 333; + e.quotedblbase = 556; + e.quotedblright = 556; + e.guillemotright = 500; + e.ellipsis = 889; + e.perthousand = 1e3; + e.questiondown = 500; + e.grave = 333; + e.acute = 333; + e.circumflex = 333; + e.tilde = 333; + e.macron = 333; + e.breve = 333; + e.dotaccent = 333; + e.dieresis = 333; + e.ring = 333; + e.cedilla = 333; + e.hungarumlaut = 333; + e.ogonek = 333; + e.caron = 333; + e.emdash = 889; + e.AE = 889; + e.ordfeminine = 276; + e.Lslash = 556; + e.Oslash = 722; + e.OE = 944; + e.ordmasculine = 310; + e.ae = 667; + e.dotlessi = 278; + e.lslash = 278; + e.oslash = 500; + e.oe = 667; + e.germandbls = 500; + e.Idieresis = 333; + e.eacute = 444; + e.abreve = 500; + e.uhungarumlaut = 500; + e.ecaron = 444; + e.Ydieresis = 556; + e.divide = 675; + e.Yacute = 556; + e.Acircumflex = 611; + e.aacute = 500; + e.Ucircumflex = 722; + e.yacute = 444; + e.scommaaccent = 389; + e.ecircumflex = 444; + e.Uring = 722; + e.Udieresis = 722; + e.aogonek = 500; + e.Uacute = 722; + e.uogonek = 500; + e.Edieresis = 611; + e.Dcroat = 722; + e.commaaccent = 250; + e.copyright = 760; + e.Emacron = 611; + e.ccaron = 444; + e.aring = 500; + e.Ncommaaccent = 667; + e.lacute = 278; + e.agrave = 500; + e.Tcommaaccent = 556; + e.Cacute = 667; + e.atilde = 500; + e.Edotaccent = 611; + e.scaron = 389; + e.scedilla = 389; + e.iacute = 278; + e.lozenge = 471; + e.Rcaron = 611; + e.Gcommaaccent = 722; + e.ucircumflex = 500; + e.acircumflex = 500; + e.Amacron = 611; + e.rcaron = 389; + e.ccedilla = 444; + e.Zdotaccent = 556; + e.Thorn = 611; + e.Omacron = 722; + e.Racute = 611; + e.Sacute = 500; + e.dcaron = 544; + e.Umacron = 722; + e.uring = 500; + e.threesuperior = 300; + e.Ograve = 722; + e.Agrave = 611; + e.Abreve = 611; + e.multiply = 675; + e.uacute = 500; + e.Tcaron = 556; + e.partialdiff = 476; + e.ydieresis = 444; + e.Nacute = 667; + e.icircumflex = 278; + e.Ecircumflex = 611; + e.adieresis = 500; + e.edieresis = 444; + e.cacute = 444; + e.nacute = 500; + e.umacron = 500; + e.Ncaron = 667; + e.Iacute = 333; + e.plusminus = 675; + e.brokenbar = 275; + e.registered = 760; + e.Gbreve = 722; + e.Idotaccent = 333; + e.summation = 600; + e.Egrave = 611; + e.racute = 389; + e.omacron = 500; + e.Zacute = 556; + e.Zcaron = 556; + e.greaterequal = 549; + e.Eth = 722; + e.Ccedilla = 667; + e.lcommaaccent = 278; + e.tcaron = 300; + e.eogonek = 444; + e.Uogonek = 722; + e.Aacute = 611; + e.Adieresis = 611; + e.egrave = 444; + e.zacute = 389; + e.iogonek = 278; + e.Oacute = 722; + e.oacute = 500; + e.amacron = 500; + e.sacute = 389; + e.idieresis = 278; + e.Ocircumflex = 722; + e.Ugrave = 722; + e.Delta = 612; + e.thorn = 500; + e.twosuperior = 300; + e.Odieresis = 722; + e.mu = 500; + e.igrave = 278; + e.ohungarumlaut = 500; + e.Eogonek = 611; + e.dcroat = 500; + e.threequarters = 750; + e.Scedilla = 500; + e.lcaron = 300; + e.Kcommaaccent = 667; + e.Lacute = 556; + e.trademark = 980; + e.edotaccent = 444; + e.Igrave = 333; + e.Imacron = 333; + e.Lcaron = 611; + e.onehalf = 750; + e.lessequal = 549; + e.ocircumflex = 500; + e.ntilde = 500; + e.Uhungarumlaut = 722; + e.Eacute = 611; + e.emacron = 444; + e.gbreve = 500; + e.onequarter = 750; + e.Scaron = 500; + e.Scommaaccent = 500; + e.Ohungarumlaut = 722; + e.degree = 400; + e.ograve = 500; + e.Ccaron = 667; + e.ugrave = 500; + e.radical = 453; + e.Dcaron = 722; + e.rcommaaccent = 389; + e.Ntilde = 667; + e.otilde = 500; + e.Rcommaaccent = 611; + e.Lcommaaccent = 556; + e.Atilde = 611; + e.Aogonek = 611; + e.Aring = 611; + e.Otilde = 722; + e.zdotaccent = 389; + e.Ecaron = 611; + e.Iogonek = 333; + e.kcommaaccent = 444; + e.minus = 675; + e.Icircumflex = 333; + e.ncaron = 500; + e.tcommaaccent = 278; + e.logicalnot = 675; + e.odieresis = 500; + e.udieresis = 500; + e.notequal = 549; + e.gcommaaccent = 500; + e.eth = 500; + e.zcaron = 389; + e.ncommaaccent = 500; + e.onesuperior = 300; + e.imacron = 278; + e.Euro = 500; + }); + e.ZapfDingbats = getLookupTableFactory(function (e) { + e.space = 278; + e.a1 = 974; + e.a2 = 961; + e.a202 = 974; + e.a3 = 980; + e.a4 = 719; + e.a5 = 789; + e.a119 = 790; + e.a118 = 791; + e.a117 = 690; + e.a11 = 960; + e.a12 = 939; + e.a13 = 549; + e.a14 = 855; + e.a15 = 911; + e.a16 = 933; + e.a105 = 911; + e.a17 = 945; + e.a18 = 974; + e.a19 = 755; + e.a20 = 846; + e.a21 = 762; + e.a22 = 761; + e.a23 = 571; + e.a24 = 677; + e.a25 = 763; + e.a26 = 760; + e.a27 = 759; + e.a28 = 754; + e.a6 = 494; + e.a7 = 552; + e.a8 = 537; + e.a9 = 577; + e.a10 = 692; + e.a29 = 786; + e.a30 = 788; + e.a31 = 788; + e.a32 = 790; + e.a33 = 793; + e.a34 = 794; + e.a35 = 816; + e.a36 = 823; + e.a37 = 789; + e.a38 = 841; + e.a39 = 823; + e.a40 = 833; + e.a41 = 816; + e.a42 = 831; + e.a43 = 923; + e.a44 = 744; + e.a45 = 723; + e.a46 = 749; + e.a47 = 790; + e.a48 = 792; + e.a49 = 695; + e.a50 = 776; + e.a51 = 768; + e.a52 = 792; + e.a53 = 759; + e.a54 = 707; + e.a55 = 708; + e.a56 = 682; + e.a57 = 701; + e.a58 = 826; + e.a59 = 815; + e.a60 = 789; + e.a61 = 789; + e.a62 = 707; + e.a63 = 687; + e.a64 = 696; + e.a65 = 689; + e.a66 = 786; + e.a67 = 787; + e.a68 = 713; + e.a69 = 791; + e.a70 = 785; + e.a71 = 791; + e.a72 = 873; + e.a73 = 761; + e.a74 = 762; + e.a203 = 762; + e.a75 = 759; + e.a204 = 759; + e.a76 = 892; + e.a77 = 892; + e.a78 = 788; + e.a79 = 784; + e.a81 = 438; + e.a82 = 138; + e.a83 = 277; + e.a84 = 415; + e.a97 = 392; + e.a98 = 392; + e.a99 = 668; + e.a100 = 668; + e.a89 = 390; + e.a90 = 390; + e.a93 = 317; + e.a94 = 317; + e.a91 = 276; + e.a92 = 276; + e.a205 = 509; + e.a85 = 509; + e.a206 = 410; + e.a86 = 410; + e.a87 = 234; + e.a88 = 234; + e.a95 = 334; + e.a96 = 334; + e.a101 = 732; + e.a102 = 544; + e.a103 = 544; + e.a104 = 910; + e.a106 = 667; + e.a107 = 760; + e.a108 = 760; + e.a112 = 776; + e.a111 = 595; + e.a110 = 694; + e.a109 = 626; + e.a120 = 788; + e.a121 = 788; + e.a122 = 788; + e.a123 = 788; + e.a124 = 788; + e.a125 = 788; + e.a126 = 788; + e.a127 = 788; + e.a128 = 788; + e.a129 = 788; + e.a130 = 788; + e.a131 = 788; + e.a132 = 788; + e.a133 = 788; + e.a134 = 788; + e.a135 = 788; + e.a136 = 788; + e.a137 = 788; + e.a138 = 788; + e.a139 = 788; + e.a140 = 788; + e.a141 = 788; + e.a142 = 788; + e.a143 = 788; + e.a144 = 788; + e.a145 = 788; + e.a146 = 788; + e.a147 = 788; + e.a148 = 788; + e.a149 = 788; + e.a150 = 788; + e.a151 = 788; + e.a152 = 788; + e.a153 = 788; + e.a154 = 788; + e.a155 = 788; + e.a156 = 788; + e.a157 = 788; + e.a158 = 788; + e.a159 = 788; + e.a160 = 894; + e.a161 = 838; + e.a163 = 1016; + e.a164 = 458; + e.a196 = 748; + e.a165 = 924; + e.a192 = 748; + e.a166 = 918; + e.a167 = 927; + e.a168 = 928; + e.a169 = 928; + e.a170 = 834; + e.a171 = 873; + e.a172 = 828; + e.a173 = 924; + e.a162 = 924; + e.a174 = 917; + e.a175 = 930; + e.a176 = 931; + e.a177 = 463; + e.a178 = 883; + e.a179 = 836; + e.a193 = 836; + e.a180 = 867; + e.a199 = 867; + e.a181 = 696; + e.a200 = 696; + e.a182 = 874; + e.a201 = 874; + e.a183 = 760; + e.a184 = 946; + e.a197 = 771; + e.a185 = 865; + e.a194 = 771; + e.a198 = 888; + e.a186 = 967; + e.a195 = 888; + e.a187 = 831; + e.a188 = 873; + e.a189 = 927; + e.a190 = 970; + e.a191 = 918; + }); + }), + ea = getLookupTableFactory(function (e) { + e.Courier = { ascent: 629, descent: -157, capHeight: 562, xHeight: -426 }; + e["Courier-Bold"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 439, + }; + e["Courier-Oblique"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 426, + }; + e["Courier-BoldOblique"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 426, + }; + e.Helvetica = { ascent: 718, descent: -207, capHeight: 718, xHeight: 523 }; + e["Helvetica-Bold"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 532, + }; + e["Helvetica-Oblique"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 523, + }; + e["Helvetica-BoldOblique"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 532, + }; + e["Times-Roman"] = { + ascent: 683, + descent: -217, + capHeight: 662, + xHeight: 450, + }; + e["Times-Bold"] = { + ascent: 683, + descent: -217, + capHeight: 676, + xHeight: 461, + }; + e["Times-Italic"] = { + ascent: 683, + descent: -217, + capHeight: 653, + xHeight: 441, + }; + e["Times-BoldItalic"] = { + ascent: 683, + descent: -217, + capHeight: 669, + xHeight: 462, + }; + e.Symbol = { + ascent: Math.NaN, + descent: Math.NaN, + capHeight: Math.NaN, + xHeight: Math.NaN, + }; + e.ZapfDingbats = { + ascent: Math.NaN, + descent: Math.NaN, + capHeight: Math.NaN, + xHeight: Math.NaN, + }; + }); +class GlyfTable { + constructor({ + glyfTable: e, + isGlyphLocationsLong: t, + locaTable: i, + numGlyphs: a, + }) { + this.glyphs = []; + const s = new DataView(i.buffer, i.byteOffset, i.byteLength), + r = new DataView(e.buffer, e.byteOffset, e.byteLength), + n = t ? 4 : 2; + let g = t ? s.getUint32(0) : 2 * s.getUint16(0), + o = 0; + for (let e = 0; e < a; e++) { + o += n; + const e = t ? s.getUint32(o) : 2 * s.getUint16(o); + if (e === g) { + this.glyphs.push(new Glyph({})); + continue; + } + const i = Glyph.parse(g, r); + this.glyphs.push(i); + g = e; + } + } + getSize() { + return this.glyphs.reduce((e, t) => e + ((t.getSize() + 3) & -4), 0); + } + write() { + const e = this.getSize(), + t = new DataView(new ArrayBuffer(e)), + i = e > 131070, + a = i ? 4 : 2, + s = new DataView(new ArrayBuffer((this.glyphs.length + 1) * a)); + i ? s.setUint32(0, 0) : s.setUint16(0, 0); + let r = 0, + n = 0; + for (const e of this.glyphs) { + r += e.write(r, t); + r = (r + 3) & -4; + n += a; + i ? s.setUint32(n, r) : s.setUint16(n, r >> 1); + } + return { + isLocationLong: i, + loca: new Uint8Array(s.buffer), + glyf: new Uint8Array(t.buffer), + }; + } + scale(e) { + for (let t = 0, i = this.glyphs.length; t < i; t++) + this.glyphs[t].scale(e[t]); + } +} +class Glyph { + constructor({ header: e = null, simple: t = null, composites: i = null }) { + this.header = e; + this.simple = t; + this.composites = i; + } + static parse(e, t) { + const [i, a] = GlyphHeader.parse(e, t); + e += i; + if (a.numberOfContours < 0) { + const i = []; + for (;;) { + const [a, s] = CompositeGlyph.parse(e, t); + e += a; + i.push(s); + if (!(32 & s.flags)) break; + } + return new Glyph({ header: a, composites: i }); + } + const s = SimpleGlyph.parse(e, t, a.numberOfContours); + return new Glyph({ header: a, simple: s }); + } + getSize() { + if (!this.header) return 0; + const e = this.simple + ? this.simple.getSize() + : this.composites.reduce((e, t) => e + t.getSize(), 0); + return this.header.getSize() + e; + } + write(e, t) { + if (!this.header) return 0; + const i = e; + e += this.header.write(e, t); + if (this.simple) e += this.simple.write(e, t); + else for (const i of this.composites) e += i.write(e, t); + return e - i; + } + scale(e) { + if (!this.header) return; + const t = (this.header.xMin + this.header.xMax) / 2; + this.header.scale(t, e); + if (this.simple) this.simple.scale(t, e); + else for (const i of this.composites) i.scale(t, e); + } +} +class GlyphHeader { + constructor({ numberOfContours: e, xMin: t, yMin: i, xMax: a, yMax: s }) { + this.numberOfContours = e; + this.xMin = t; + this.yMin = i; + this.xMax = a; + this.yMax = s; + } + static parse(e, t) { + return [ + 10, + new GlyphHeader({ + numberOfContours: t.getInt16(e), + xMin: t.getInt16(e + 2), + yMin: t.getInt16(e + 4), + xMax: t.getInt16(e + 6), + yMax: t.getInt16(e + 8), + }), + ]; + } + getSize() { + return 10; + } + write(e, t) { + t.setInt16(e, this.numberOfContours); + t.setInt16(e + 2, this.xMin); + t.setInt16(e + 4, this.yMin); + t.setInt16(e + 6, this.xMax); + t.setInt16(e + 8, this.yMax); + return 10; + } + scale(e, t) { + this.xMin = Math.round(e + (this.xMin - e) * t); + this.xMax = Math.round(e + (this.xMax - e) * t); + } +} +class Contour { + constructor({ flags: e, xCoordinates: t, yCoordinates: i }) { + this.xCoordinates = t; + this.yCoordinates = i; + this.flags = e; + } +} +class SimpleGlyph { + constructor({ contours: e, instructions: t }) { + this.contours = e; + this.instructions = t; + } + static parse(e, t, i) { + const a = []; + for (let s = 0; s < i; s++) { + const i = t.getUint16(e); + e += 2; + a.push(i); + } + const s = a[i - 1] + 1, + r = t.getUint16(e); + e += 2; + const n = new Uint8Array(t).slice(e, e + r); + e += r; + const g = []; + for (let i = 0; i < s; e++, i++) { + let a = t.getUint8(e); + g.push(a); + if (8 & a) { + const s = t.getUint8(++e); + a ^= 8; + for (let e = 0; e < s; e++) g.push(a); + i += s; + } + } + const o = []; + let c = [], + C = [], + h = []; + const l = []; + let Q = 0, + E = 0; + for (let i = 0; i < s; i++) { + const s = g[i]; + if (2 & s) { + const i = t.getUint8(e++); + E += 16 & s ? i : -i; + c.push(E); + } else if (16 & s) c.push(E); + else { + E += t.getInt16(e); + e += 2; + c.push(E); + } + if (a[Q] === i) { + Q++; + o.push(c); + c = []; + } + } + E = 0; + Q = 0; + for (let i = 0; i < s; i++) { + const s = g[i]; + if (4 & s) { + const i = t.getUint8(e++); + E += 32 & s ? i : -i; + C.push(E); + } else if (32 & s) C.push(E); + else { + E += t.getInt16(e); + e += 2; + C.push(E); + } + h.push((1 & s) | (64 & s)); + if (a[Q] === i) { + c = o[Q]; + Q++; + l.push(new Contour({ flags: h, xCoordinates: c, yCoordinates: C })); + C = []; + h = []; + } + } + return new SimpleGlyph({ contours: l, instructions: n }); + } + getSize() { + let e = 2 * this.contours.length + 2 + this.instructions.length, + t = 0, + i = 0; + for (const a of this.contours) { + e += a.flags.length; + for (let s = 0, r = a.xCoordinates.length; s < r; s++) { + const r = a.xCoordinates[s], + n = a.yCoordinates[s]; + let g = Math.abs(r - t); + g > 255 ? (e += 2) : g > 0 && (e += 1); + t = r; + g = Math.abs(n - i); + g > 255 ? (e += 2) : g > 0 && (e += 1); + i = n; + } + } + return e; + } + write(e, t) { + const i = e, + a = [], + s = [], + r = []; + let n = 0, + g = 0; + for (const i of this.contours) { + for (let e = 0, t = i.xCoordinates.length; e < t; e++) { + let t = i.flags[e]; + const o = i.xCoordinates[e]; + let c = o - n; + if (0 === c) { + t |= 16; + a.push(0); + } else { + const e = Math.abs(c); + if (e <= 255) { + t |= c >= 0 ? 18 : 2; + a.push(e); + } else a.push(c); + } + n = o; + const C = i.yCoordinates[e]; + c = C - g; + if (0 === c) { + t |= 32; + s.push(0); + } else { + const e = Math.abs(c); + if (e <= 255) { + t |= c >= 0 ? 36 : 4; + s.push(e); + } else s.push(c); + } + g = C; + r.push(t); + } + t.setUint16(e, a.length - 1); + e += 2; + } + t.setUint16(e, this.instructions.length); + e += 2; + if (this.instructions.length) { + new Uint8Array(t.buffer, 0, t.buffer.byteLength).set( + this.instructions, + e, + ); + e += this.instructions.length; + } + for (const i of r) t.setUint8(e++, i); + for (let i = 0, s = a.length; i < s; i++) { + const s = a[i], + n = r[i]; + if (2 & n) t.setUint8(e++, s); + else if (!(16 & n)) { + t.setInt16(e, s); + e += 2; + } + } + for (let i = 0, a = s.length; i < a; i++) { + const a = s[i], + n = r[i]; + if (4 & n) t.setUint8(e++, a); + else if (!(32 & n)) { + t.setInt16(e, a); + e += 2; + } + } + return e - i; + } + scale(e, t) { + for (const i of this.contours) + if (0 !== i.xCoordinates.length) + for (let a = 0, s = i.xCoordinates.length; a < s; a++) + i.xCoordinates[a] = Math.round(e + (i.xCoordinates[a] - e) * t); + } +} +class CompositeGlyph { + constructor({ + flags: e, + glyphIndex: t, + argument1: i, + argument2: a, + transf: s, + instructions: r, + }) { + this.flags = e; + this.glyphIndex = t; + this.argument1 = i; + this.argument2 = a; + this.transf = s; + this.instructions = r; + } + static parse(e, t) { + const i = e, + a = []; + let s = t.getUint16(e); + const r = t.getUint16(e + 2); + e += 4; + let n, g; + if (1 & s) { + if (2 & s) { + n = t.getInt16(e); + g = t.getInt16(e + 2); + } else { + n = t.getUint16(e); + g = t.getUint16(e + 2); + } + e += 4; + s ^= 1; + } else { + if (2 & s) { + n = t.getInt8(e); + g = t.getInt8(e + 1); + } else { + n = t.getUint8(e); + g = t.getUint8(e + 1); + } + e += 2; + } + if (8 & s) { + a.push(t.getUint16(e)); + e += 2; + } else if (64 & s) { + a.push(t.getUint16(e), t.getUint16(e + 2)); + e += 4; + } else if (128 & s) { + a.push( + t.getUint16(e), + t.getUint16(e + 2), + t.getUint16(e + 4), + t.getUint16(e + 6), + ); + e += 8; + } + let o = null; + if (256 & s) { + const i = t.getUint16(e); + e += 2; + o = new Uint8Array(t).slice(e, e + i); + e += i; + } + return [ + e - i, + new CompositeGlyph({ + flags: s, + glyphIndex: r, + argument1: n, + argument2: g, + transf: a, + instructions: o, + }), + ]; + } + getSize() { + let e = 4 + 2 * this.transf.length; + 256 & this.flags && (e += 2 + this.instructions.length); + e += 2; + 2 & this.flags + ? (this.argument1 >= -128 && + this.argument1 <= 127 && + this.argument2 >= -128 && + this.argument2 <= 127) || + (e += 2) + : (this.argument1 >= 0 && + this.argument1 <= 255 && + this.argument2 >= 0 && + this.argument2 <= 255) || + (e += 2); + return e; + } + write(e, t) { + const i = e; + 2 & this.flags + ? (this.argument1 >= -128 && + this.argument1 <= 127 && + this.argument2 >= -128 && + this.argument2 <= 127) || + (this.flags |= 1) + : (this.argument1 >= 0 && + this.argument1 <= 255 && + this.argument2 >= 0 && + this.argument2 <= 255) || + (this.flags |= 1); + t.setUint16(e, this.flags); + t.setUint16(e + 2, this.glyphIndex); + e += 4; + if (1 & this.flags) { + if (2 & this.flags) { + t.setInt16(e, this.argument1); + t.setInt16(e + 2, this.argument2); + } else { + t.setUint16(e, this.argument1); + t.setUint16(e + 2, this.argument2); + } + e += 4; + } else { + t.setUint8(e, this.argument1); + t.setUint8(e + 1, this.argument2); + e += 2; + } + if (256 & this.flags) { + t.setUint16(e, this.instructions.length); + e += 2; + if (this.instructions.length) { + new Uint8Array(t.buffer, 0, t.buffer.byteLength).set( + this.instructions, + e, + ); + e += this.instructions.length; + } + } + return e - i; + } + scale(e, t) {} +} +function writeInt16(e, t, i) { + e[t] = (i >> 8) & 255; + e[t + 1] = 255 & i; +} +function writeInt32(e, t, i) { + e[t] = (i >> 24) & 255; + e[t + 1] = (i >> 16) & 255; + e[t + 2] = (i >> 8) & 255; + e[t + 3] = 255 & i; +} +function writeData(e, t, i) { + if (i instanceof Uint8Array) e.set(i, t); + else if ("string" == typeof i) + for (let a = 0, s = i.length; a < s; a++) e[t++] = 255 & i.charCodeAt(a); + else for (const a of i) e[t++] = 255 & a; +} +class OpenTypeFileBuilder { + constructor(e) { + this.sfnt = e; + this.tables = Object.create(null); + } + static getSearchParams(e, t) { + let i = 1, + a = 0; + for (; (i ^ e) > i; ) { + i <<= 1; + a++; + } + const s = i * t; + return { range: s, entry: a, rangeShift: t * e - s }; + } + toArray() { + let e = this.sfnt; + const t = this.tables, + i = Object.keys(t); + i.sort(); + const a = i.length; + let s, + r, + n, + g, + o, + c = 12 + 16 * a; + const C = [c]; + for (s = 0; s < a; s++) { + g = t[i[s]]; + c += ((g.length + 3) & -4) >>> 0; + C.push(c); + } + const h = new Uint8Array(c); + for (s = 0; s < a; s++) { + g = t[i[s]]; + writeData(h, C[s], g); + } + "true" === e && (e = string32(65536)); + h[0] = 255 & e.charCodeAt(0); + h[1] = 255 & e.charCodeAt(1); + h[2] = 255 & e.charCodeAt(2); + h[3] = 255 & e.charCodeAt(3); + writeInt16(h, 4, a); + const l = OpenTypeFileBuilder.getSearchParams(a, 16); + writeInt16(h, 6, l.range); + writeInt16(h, 8, l.entry); + writeInt16(h, 10, l.rangeShift); + c = 12; + for (s = 0; s < a; s++) { + o = i[s]; + h[c] = 255 & o.charCodeAt(0); + h[c + 1] = 255 & o.charCodeAt(1); + h[c + 2] = 255 & o.charCodeAt(2); + h[c + 3] = 255 & o.charCodeAt(3); + let e = 0; + for (r = C[s], n = C[s + 1]; r < n; r += 4) { + e = (e + readUint32(h, r)) >>> 0; + } + writeInt32(h, c + 4, e); + writeInt32(h, c + 8, C[s]); + writeInt32(h, c + 12, t[o].length); + c += 16; + } + return h; + } + addTable(e, t) { + if (e in this.tables) throw new Error("Table " + e + " already exists"); + this.tables[e] = t; + } +} +const ta = [4], + ia = [5], + aa = [6], + sa = [7], + ra = [8], + na = [12, 35], + ga = [14], + oa = [21], + Ia = [22], + ca = [30], + Ca = [31]; +class Type1CharString { + constructor() { + this.width = 0; + this.lsb = 0; + this.flexing = !1; + this.output = []; + this.stack = []; + } + convert(e, t, i) { + const a = e.length; + let s, + r, + n, + g = !1; + for (let o = 0; o < a; o++) { + let a = e[o]; + if (a < 32) { + 12 === a && (a = (a << 8) + e[++o]); + switch (a) { + case 1: + case 3: + case 9: + case 3072: + case 3073: + case 3074: + case 3105: + this.stack = []; + break; + case 4: + if (this.flexing) { + if (this.stack.length < 1) { + g = !0; + break; + } + const e = this.stack.pop(); + this.stack.push(0, e); + break; + } + g = this.executeCommand(1, ta); + break; + case 5: + g = this.executeCommand(2, ia); + break; + case 6: + g = this.executeCommand(1, aa); + break; + case 7: + g = this.executeCommand(1, sa); + break; + case 8: + g = this.executeCommand(6, ra); + break; + case 10: + if (this.stack.length < 1) { + g = !0; + break; + } + n = this.stack.pop(); + if (!t[n]) { + g = !0; + break; + } + g = this.convert(t[n], t, i); + break; + case 11: + return g; + case 13: + if (this.stack.length < 2) { + g = !0; + break; + } + s = this.stack.pop(); + r = this.stack.pop(); + this.lsb = r; + this.width = s; + this.stack.push(s, r); + g = this.executeCommand(2, Ia); + break; + case 14: + this.output.push(ga[0]); + break; + case 21: + if (this.flexing) break; + g = this.executeCommand(2, oa); + break; + case 22: + if (this.flexing) { + this.stack.push(0); + break; + } + g = this.executeCommand(1, Ia); + break; + case 30: + g = this.executeCommand(4, ca); + break; + case 31: + g = this.executeCommand(4, Ca); + break; + case 3078: + if (i) { + const e = this.stack.at(-5); + this.seac = this.stack.splice(-4, 4); + this.seac[0] += this.lsb - e; + g = this.executeCommand(0, ga); + } else g = this.executeCommand(4, ga); + break; + case 3079: + if (this.stack.length < 4) { + g = !0; + break; + } + this.stack.pop(); + s = this.stack.pop(); + const e = this.stack.pop(); + r = this.stack.pop(); + this.lsb = r; + this.width = s; + this.stack.push(s, r, e); + g = this.executeCommand(3, oa); + break; + case 3084: + if (this.stack.length < 2) { + g = !0; + break; + } + const o = this.stack.pop(), + c = this.stack.pop(); + this.stack.push(c / o); + break; + case 3088: + if (this.stack.length < 2) { + g = !0; + break; + } + n = this.stack.pop(); + const C = this.stack.pop(); + if (0 === n && 3 === C) { + const e = this.stack.splice(-17, 17); + this.stack.push( + e[2] + e[0], + e[3] + e[1], + e[4], + e[5], + e[6], + e[7], + e[8], + e[9], + e[10], + e[11], + e[12], + e[13], + e[14], + ); + g = this.executeCommand(13, na, !0); + this.flexing = !1; + this.stack.push(e[15], e[16]); + } else 1 === n && 0 === C && (this.flexing = !0); + break; + case 3089: + break; + default: + warn('Unknown type 1 charstring command of "' + a + '"'); + } + if (g) break; + } else { + a <= 246 + ? (a -= 139) + : (a = + a <= 250 + ? 256 * (a - 247) + e[++o] + 108 + : a <= 254 + ? -256 * (a - 251) - e[++o] - 108 + : ((255 & e[++o]) << 24) | + ((255 & e[++o]) << 16) | + ((255 & e[++o]) << 8) | + ((255 & e[++o]) << 0)); + this.stack.push(a); + } + } + return g; + } + executeCommand(e, t, i) { + const a = this.stack.length; + if (e > a) return !0; + const s = a - e; + for (let e = s; e < a; e++) { + let t = this.stack[e]; + if (Number.isInteger(t)) this.output.push(28, (t >> 8) & 255, 255 & t); + else { + t = (65536 * t) | 0; + this.output.push( + 255, + (t >> 24) & 255, + (t >> 16) & 255, + (t >> 8) & 255, + 255 & t, + ); + } + } + this.output.push(...t); + i ? this.stack.splice(s, e) : (this.stack.length = 0); + return !1; + } +} +function isHexDigit(e) { + return (e >= 48 && e <= 57) || (e >= 65 && e <= 70) || (e >= 97 && e <= 102); +} +function decrypt(e, t, i) { + if (i >= e.length) return new Uint8Array(0); + let a, + s, + r = 0 | t; + for (a = 0; a < i; a++) r = (52845 * (e[a] + r) + 22719) & 65535; + const n = e.length - i, + g = new Uint8Array(n); + for (a = i, s = 0; s < n; a++, s++) { + const t = e[a]; + g[s] = t ^ (r >> 8); + r = (52845 * (t + r) + 22719) & 65535; + } + return g; +} +function isSpecial(e) { + return ( + 47 === e || + 91 === e || + 93 === e || + 123 === e || + 125 === e || + 40 === e || + 41 === e + ); +} +class Type1Parser { + constructor(e, t, i) { + if (t) { + const t = e.getBytes(), + i = !( + (isHexDigit(t[0]) || isWhiteSpace(t[0])) && + isHexDigit(t[1]) && + isHexDigit(t[2]) && + isHexDigit(t[3]) && + isHexDigit(t[4]) && + isHexDigit(t[5]) && + isHexDigit(t[6]) && + isHexDigit(t[7]) + ); + e = new Stream( + i + ? decrypt(t, 55665, 4) + : (function decryptAscii(e, t, i) { + let a = 0 | t; + const s = e.length, + r = new Uint8Array(s >>> 1); + let n, g; + for (n = 0, g = 0; n < s; n++) { + const t = e[n]; + if (!isHexDigit(t)) continue; + n++; + let i; + for (; n < s && !isHexDigit((i = e[n])); ) n++; + if (n < s) { + const e = parseInt(String.fromCharCode(t, i), 16); + r[g++] = e ^ (a >> 8); + a = (52845 * (e + a) + 22719) & 65535; + } + } + return r.slice(i, g); + })(t, 55665, 4), + ); + } + this.seacAnalysisEnabled = !!i; + this.stream = e; + this.nextChar(); + } + readNumberArray() { + this.getToken(); + const e = []; + for (;;) { + const t = this.getToken(); + if (null === t || "]" === t || "}" === t) break; + e.push(parseFloat(t || 0)); + } + return e; + } + readNumber() { + const e = this.getToken(); + return parseFloat(e || 0); + } + readInt() { + const e = this.getToken(); + return 0 | parseInt(e || 0, 10); + } + readBoolean() { + return "true" === this.getToken() ? 1 : 0; + } + nextChar() { + return (this.currentChar = this.stream.getByte()); + } + prevChar() { + this.stream.skip(-2); + return (this.currentChar = this.stream.getByte()); + } + getToken() { + let e = !1, + t = this.currentChar; + for (;;) { + if (-1 === t) return null; + if (e) (10 !== t && 13 !== t) || (e = !1); + else if (37 === t) e = !0; + else if (!isWhiteSpace(t)) break; + t = this.nextChar(); + } + if (isSpecial(t)) { + this.nextChar(); + return String.fromCharCode(t); + } + let i = ""; + do { + i += String.fromCharCode(t); + t = this.nextChar(); + } while (t >= 0 && !isWhiteSpace(t) && !isSpecial(t)); + return i; + } + readCharStrings(e, t) { + return -1 === t ? e : decrypt(e, 4330, t); + } + extractFontProgram(e) { + const t = this.stream, + i = [], + a = [], + s = Object.create(null); + s.lenIV = 4; + const r = { subrs: [], charstrings: [], properties: { privateData: s } }; + let n, g, o, c; + for (; null !== (n = this.getToken()); ) + if ("/" === n) { + n = this.getToken(); + switch (n) { + case "CharStrings": + this.getToken(); + this.getToken(); + this.getToken(); + this.getToken(); + for (;;) { + n = this.getToken(); + if (null === n || "end" === n) break; + if ("/" !== n) continue; + const e = this.getToken(); + g = this.readInt(); + this.getToken(); + o = g > 0 ? t.getBytes(g) : new Uint8Array(0); + c = r.properties.privateData.lenIV; + const i = this.readCharStrings(o, c); + this.nextChar(); + n = this.getToken(); + "noaccess" === n ? this.getToken() : "/" === n && this.prevChar(); + a.push({ glyph: e, encoded: i }); + } + break; + case "Subrs": + this.readInt(); + this.getToken(); + for (; "dup" === this.getToken(); ) { + const e = this.readInt(); + g = this.readInt(); + this.getToken(); + o = g > 0 ? t.getBytes(g) : new Uint8Array(0); + c = r.properties.privateData.lenIV; + const a = this.readCharStrings(o, c); + this.nextChar(); + n = this.getToken(); + "noaccess" === n && this.getToken(); + i[e] = a; + } + break; + case "BlueValues": + case "OtherBlues": + case "FamilyBlues": + case "FamilyOtherBlues": + const e = this.readNumberArray(); + e.length > 0 && e.length, 0; + break; + case "StemSnapH": + case "StemSnapV": + r.properties.privateData[n] = this.readNumberArray(); + break; + case "StdHW": + case "StdVW": + r.properties.privateData[n] = this.readNumberArray()[0]; + break; + case "BlueShift": + case "lenIV": + case "BlueFuzz": + case "BlueScale": + case "LanguageGroup": + r.properties.privateData[n] = this.readNumber(); + break; + case "ExpansionFactor": + r.properties.privateData[n] = this.readNumber() || 0.06; + break; + case "ForceBold": + r.properties.privateData[n] = this.readBoolean(); + } + } + for (const { encoded: t, glyph: s } of a) { + const a = new Type1CharString(), + n = a.convert(t, i, this.seacAnalysisEnabled); + let g = a.output; + n && (g = [14]); + const o = { + glyphName: s, + charstring: g, + width: a.width, + lsb: a.lsb, + seac: a.seac, + }; + ".notdef" === s ? r.charstrings.unshift(o) : r.charstrings.push(o); + if (e.builtInEncoding) { + const t = e.builtInEncoding.indexOf(s); + t > -1 && + void 0 === e.widths[t] && + t >= e.firstChar && + t <= e.lastChar && + (e.widths[t] = a.width); + } + } + return r; + } + extractFontHeader(e) { + let t; + for (; null !== (t = this.getToken()); ) + if ("/" === t) { + t = this.getToken(); + switch (t) { + case "FontMatrix": + const i = this.readNumberArray(); + e.fontMatrix = i; + break; + case "Encoding": + const a = this.getToken(); + let s; + if (/^\d+$/.test(a)) { + s = []; + const e = 0 | parseInt(a, 10); + this.getToken(); + for (let i = 0; i < e; i++) { + t = this.getToken(); + for (; "dup" !== t && "def" !== t; ) { + t = this.getToken(); + if (null === t) return; + } + if ("def" === t) break; + const e = this.readInt(); + this.getToken(); + const i = this.getToken(); + s[e] = i; + this.getToken(); + } + } else s = getEncoding(a); + e.builtInEncoding = s; + break; + case "FontBBox": + const r = this.readNumberArray(); + e.ascent = Math.max(r[3], r[1]); + e.descent = Math.min(r[1], r[3]); + e.ascentScaled = !0; + } + } + } +} +function findBlock(e, t, i) { + const a = e.length, + s = t.length, + r = a - s; + let n = i, + g = !1; + for (; n < r; ) { + let i = 0; + for (; i < s && e[n + i] === t[i]; ) i++; + if (i >= s) { + n += i; + for (; n < a && isWhiteSpace(e[n]); ) n++; + g = !0; + break; + } + n++; + } + return { found: g, length: n }; +} +class Type1Font { + constructor(e, t, i) { + let a = i.length1, + s = i.length2, + r = t.peekBytes(6); + const n = 128 === r[0] && 1 === r[1]; + if (n) { + t.skip(6); + a = (r[5] << 24) | (r[4] << 16) | (r[3] << 8) | r[2]; + } + const g = (function getHeaderBlock(e, t) { + const i = [101, 101, 120, 101, 99], + a = e.pos; + let s, r, n, g; + try { + s = e.getBytes(t); + r = s.length; + } catch {} + if (r === t) { + n = findBlock(s, i, t - 2 * i.length); + if (n.found && n.length === t) + return { stream: new Stream(s), length: t }; + } + warn('Invalid "Length1" property in Type1 font -- trying to recover.'); + e.pos = a; + for (;;) { + n = findBlock(e.peekBytes(2048), i, 0); + if (0 === n.length) break; + e.pos += n.length; + if (n.found) { + g = e.pos - a; + break; + } + } + e.pos = a; + if (g) return { stream: new Stream(e.getBytes(g)), length: g }; + warn( + 'Unable to recover "Length1" property in Type1 font -- using as is.', + ); + return { stream: new Stream(e.getBytes(t)), length: t }; + })(t, a); + new Type1Parser(g.stream, !1, Yi).extractFontHeader(i); + if (n) { + r = t.getBytes(6); + s = (r[5] << 24) | (r[4] << 16) | (r[3] << 8) | r[2]; + } + const o = (function getEexecBlock(e, t) { + const i = e.getBytes(); + if (0 === i.length) + throw new FormatError("getEexecBlock - no font program found."); + return { stream: new Stream(i), length: i.length }; + })(t), + c = new Type1Parser(o.stream, !0, Yi).extractFontProgram(i); + for (const e in c.properties) i[e] = c.properties[e]; + const C = c.charstrings, + h = this.getType2Charstrings(C), + l = this.getType2Subrs(c.subrs); + this.charstrings = C; + this.data = this.wrap(e, h, this.charstrings, l, i); + this.seacs = this.getSeacs(c.charstrings); + } + get numGlyphs() { + return this.charstrings.length + 1; + } + getCharset() { + const e = [".notdef"]; + for (const { glyphName: t } of this.charstrings) e.push(t); + return e; + } + getGlyphMapping(e) { + const t = this.charstrings; + if (e.composite) { + const i = Object.create(null); + for (let a = 0, s = t.length; a < s; a++) { + i[e.cMap.charCodeOf(a)] = a + 1; + } + return i; + } + const i = [".notdef"]; + let a, s; + for (s = 0; s < t.length; s++) i.push(t[s].glyphName); + const r = e.builtInEncoding; + if (r) { + a = Object.create(null); + for (const e in r) { + s = i.indexOf(r[e]); + s >= 0 && (a[e] = s); + } + } + return type1FontGlyphMapping(e, a, i); + } + hasGlyphId(e) { + if (e < 0 || e >= this.numGlyphs) return !1; + if (0 === e) return !0; + return this.charstrings[e - 1].charstring.length > 0; + } + getSeacs(e) { + const t = []; + for (let i = 0, a = e.length; i < a; i++) { + const a = e[i]; + a.seac && (t[i + 1] = a.seac); + } + return t; + } + getType2Charstrings(e) { + const t = []; + for (const i of e) t.push(i.charstring); + return t; + } + getType2Subrs(e) { + let t = 0; + const i = e.length; + t = i < 1133 ? 107 : i < 33769 ? 1131 : 32768; + const a = []; + let s; + for (s = 0; s < t; s++) a.push([11]); + for (s = 0; s < i; s++) a.push(e[s]); + return a; + } + wrap(e, t, i, a, s) { + const r = new CFF(); + r.header = new CFFHeader(1, 0, 4, 4); + r.names = [e]; + const n = new CFFTopDict(); + n.setByName("version", 391); + n.setByName("Notice", 392); + n.setByName("FullName", 393); + n.setByName("FamilyName", 394); + n.setByName("Weight", 395); + n.setByName("Encoding", null); + n.setByName("FontMatrix", s.fontMatrix); + n.setByName("FontBBox", s.bbox); + n.setByName("charset", null); + n.setByName("CharStrings", null); + n.setByName("Private", null); + r.topDict = n; + const g = new CFFStrings(); + g.add("Version 0.11"); + g.add("See original notice"); + g.add(e); + g.add(e); + g.add("Medium"); + r.strings = g; + r.globalSubrIndex = new CFFIndex(); + const o = t.length, + c = [".notdef"]; + let C, h; + for (C = 0; C < o; C++) { + const e = i[C].glyphName; + -1 === wi.indexOf(e) && g.add(e); + c.push(e); + } + r.charset = new CFFCharset(!1, 0, c); + const l = new CFFIndex(); + l.add([139, 14]); + for (C = 0; C < o; C++) l.add(t[C]); + r.charStrings = l; + const Q = new CFFPrivateDict(); + Q.setByName("Subrs", null); + const E = [ + "BlueValues", + "OtherBlues", + "FamilyBlues", + "FamilyOtherBlues", + "StemSnapH", + "StemSnapV", + "BlueShift", + "BlueFuzz", + "BlueScale", + "LanguageGroup", + "ExpansionFactor", + "ForceBold", + "StdHW", + "StdVW", + ]; + for (C = 0, h = E.length; C < h; C++) { + const e = E[C]; + if (!(e in s.privateData)) continue; + const t = s.privateData[e]; + if (Array.isArray(t)) + for (let e = t.length - 1; e > 0; e--) t[e] -= t[e - 1]; + Q.setByName(e, t); + } + r.topDict.privateDict = Q; + const u = new CFFIndex(); + for (C = 0, h = a.length; C < h; C++) u.add(a[C]); + Q.subrsIndex = u; + return new CFFCompiler(r).compile(); + } +} +const ha = [ + [57344, 63743], + [1048576, 1114109], + ], + Ba = 1e3, + la = [ + "ascent", + "bbox", + "black", + "bold", + "charProcOperatorList", + "composite", + "cssFontInfo", + "data", + "defaultVMetrics", + "defaultWidth", + "descent", + "fallbackName", + "fontMatrix", + "isInvalidPDFjsFont", + "isType3Font", + "italic", + "loadedName", + "mimetype", + "missingFile", + "name", + "remeasure", + "subtype", + "systemFontInfo", + "type", + "vertical", + ], + Qa = [ + "cMap", + "defaultEncoding", + "differences", + "isMonospace", + "isSerifFont", + "isSymbolicFont", + "seacMap", + "toFontChar", + "toUnicode", + "vmetrics", + "widths", + ]; +function adjustWidths(e) { + if (!e.fontMatrix) return; + if (e.fontMatrix[0] === a[0]) return; + const t = 0.001 / e.fontMatrix[0], + i = e.widths; + for (const e in i) i[e] *= t; + e.defaultWidth *= t; +} +function amendFallbackToUnicode(e) { + if (!e.fallbackToUnicode) return; + if (e.toUnicode instanceof IdentityToUnicodeMap) return; + const t = []; + for (const i in e.fallbackToUnicode) + e.toUnicode.has(i) || (t[i] = e.fallbackToUnicode[i]); + t.length > 0 && e.toUnicode.amend(t); +} +class fonts_Glyph { + constructor(e, t, i, a, s, r, n, g, o) { + this.originalCharCode = e; + this.fontChar = t; + this.unicode = i; + this.accent = a; + this.width = s; + this.vmetric = r; + this.operatorListId = n; + this.isSpace = g; + this.isInFont = o; + } + get category() { + return shadow( + this, + "category", + (function getCharUnicodeCategory(e) { + const t = Ji.get(e); + if (t) return t; + const i = e.match(Hi), + a = { + isWhitespace: !!i?.[1], + isZeroWidthDiacritic: !!i?.[2], + isInvisibleFormatMark: !!i?.[3], + }; + Ji.set(e, a); + return a; + })(this.unicode), + !0, + ); + } +} +function int16(e, t) { + return (e << 8) + t; +} +function writeSignedInt16(e, t, i) { + e[t + 1] = i; + e[t] = i >>> 8; +} +function signedInt16(e, t) { + const i = (e << 8) + t; + return 32768 & i ? i - 65536 : i; +} +function string16(e) { + return String.fromCharCode((e >> 8) & 255, 255 & e); +} +function safeString16(e) { + e > 32767 ? (e = 32767) : e < -32768 && (e = -32768); + return String.fromCharCode((e >> 8) & 255, 255 & e); +} +function isTrueTypeCollectionFile(e) { + return "ttcf" === bytesToString(e.peekBytes(4)); +} +function getFontFileType(e, { type: t, subtype: i, composite: a }) { + let s, r; + if ( + (function isTrueTypeFile(e) { + const t = e.peekBytes(4); + return 65536 === readUint32(t, 0) || "true" === bytesToString(t); + })(e) || + isTrueTypeCollectionFile(e) + ) + s = a ? "CIDFontType2" : "TrueType"; + else if ( + (function isOpenTypeFile(e) { + return "OTTO" === bytesToString(e.peekBytes(4)); + })(e) + ) + s = a ? "CIDFontType2" : "OpenType"; + else if ( + (function isType1File(e) { + const t = e.peekBytes(2); + return (37 === t[0] && 33 === t[1]) || (128 === t[0] && 1 === t[1]); + })(e) + ) + s = a ? "CIDFontType0" : "MMType1" === t ? "MMType1" : "Type1"; + else if ( + (function isCFFFile(e) { + const t = e.peekBytes(4); + return t[0] >= 1 && t[3] >= 1 && t[3] <= 4; + })(e) + ) + if (a) { + s = "CIDFontType0"; + r = "CIDFontType0C"; + } else { + s = "MMType1" === t ? "MMType1" : "Type1"; + r = "Type1C"; + } + else { + warn("getFontFileType: Unable to detect correct font file Type/Subtype."); + s = t; + r = i; + } + return [s, r]; +} +function applyStandardFontGlyphMap(e, t) { + for (const i in t) e[+i] = t[i]; +} +function buildToFontChar(e, t, i) { + const a = []; + let s; + for (let i = 0, r = e.length; i < r; i++) { + s = getUnicodeForGlyph(e[i], t); + -1 !== s && (a[i] = s); + } + for (const e in i) { + s = getUnicodeForGlyph(i[e], t); + -1 !== s && (a[+e] = s); + } + return a; +} +function isMacNameRecord(e) { + return 1 === e.platform && 0 === e.encoding && 0 === e.language; +} +function isWinNameRecord(e) { + return 3 === e.platform && 1 === e.encoding && 1033 === e.language; +} +function convertCidString(e, t, i = !1) { + switch (t.length) { + case 1: + return t.charCodeAt(0); + case 2: + return (t.charCodeAt(0) << 8) | t.charCodeAt(1); + } + const a = `Unsupported CID string (charCode ${e}): "${t}".`; + if (i) throw new FormatError(a); + warn(a); + return t; +} +function adjustMapping(e, t, i, a) { + const s = Object.create(null), + r = new Map(), + n = [], + g = new Set(); + let o = 0; + let c = ha[o][0], + C = ha[o][1]; + for (const l in e) { + let Q = e[l]; + if (!t(Q)) continue; + if (c > C) { + o++; + if (o >= ha.length) { + warn("Ran out of space in font private use area."); + break; + } + c = ha[o][0]; + C = ha[o][1]; + } + const E = c++; + 0 === Q && (Q = i); + let u = a.get(l); + "string" == typeof u && (u = u.codePointAt(0)); + if ( + u && + !((h = u), + (ha[0][0] <= h && h <= ha[0][1]) || (ha[1][0] <= h && h <= ha[1][1])) && + !g.has(Q) + ) { + r.set(u, Q); + g.add(Q); + } + s[E] = Q; + n[l] = E; + } + var h; + return { + toFontChar: n, + charCodeToGlyphId: s, + toUnicodeExtraMap: r, + nextAvailableFontCharCode: c, + }; +} +function createCmapTable(e, t, i) { + const a = (function getRanges(e, t, i) { + const a = []; + for (const t in e) + e[t] >= i || a.push({ fontCharCode: 0 | t, glyphId: e[t] }); + if (t) + for (const [e, s] of t) + s >= i || a.push({ fontCharCode: e, glyphId: s }); + 0 === a.length && a.push({ fontCharCode: 0, glyphId: 0 }); + a.sort(function fontGetRangesSort(e, t) { + return e.fontCharCode - t.fontCharCode; + }); + const s = [], + r = a.length; + for (let e = 0; e < r; ) { + const t = a[e].fontCharCode, + i = [a[e].glyphId]; + ++e; + let n = t; + for (; e < r && n + 1 === a[e].fontCharCode; ) { + i.push(a[e].glyphId); + ++n; + ++e; + if (65535 === n) break; + } + s.push([t, n, i]); + } + return s; + })(e, t, i), + s = a.at(-1)[1] > 65535 ? 2 : 1; + let r, + n, + g, + o, + c = "\0\0" + string16(s) + "\0\0" + string32(4 + 8 * s); + for (r = a.length - 1; r >= 0 && !(a[r][0] <= 65535); --r); + const C = r + 1; + a[r][0] < 65535 && 65535 === a[r][1] && (a[r][1] = 65534); + const h = a[r][1] < 65535 ? 1 : 0, + l = C + h, + Q = OpenTypeFileBuilder.getSearchParams(l, 2); + let E, + u, + d, + f, + p = "", + m = "", + y = "", + w = "", + D = "", + b = 0; + for (r = 0, n = C; r < n; r++) { + E = a[r]; + u = E[0]; + d = E[1]; + p += string16(u); + m += string16(d); + f = E[2]; + let e = !0; + for (g = 1, o = f.length; g < o; ++g) + if (f[g] !== f[g - 1] + 1) { + e = !1; + break; + } + if (e) { + y += string16((f[0] - u) & 65535); + w += string16(0); + } else { + const e = 2 * (l - r) + 2 * b; + b += d - u + 1; + y += string16(0); + w += string16(e); + for (g = 0, o = f.length; g < o; ++g) D += string16(f[g]); + } + } + if (h > 0) { + m += "ÿÿ"; + p += "ÿÿ"; + y += "\0"; + w += "\0\0"; + } + const F = + "\0\0" + + string16(2 * l) + + string16(Q.range) + + string16(Q.entry) + + string16(Q.rangeShift) + + m + + "\0\0" + + p + + y + + w + + D; + let S = "", + k = ""; + if (s > 1) { + c += "\0\0\n" + string32(4 + 8 * s + 4 + F.length); + S = ""; + for (r = 0, n = a.length; r < n; r++) { + E = a[r]; + u = E[0]; + f = E[2]; + let e = f[0]; + for (g = 1, o = f.length; g < o; ++g) + if (f[g] !== f[g - 1] + 1) { + d = E[0] + g - 1; + S += string32(u) + string32(d) + string32(e); + u = d + 1; + e = f[g]; + } + S += string32(u) + string32(E[1]) + string32(e); + } + k = + "\0\f\0\0" + + string32(S.length + 16) + + "\0\0\0\0" + + string32(S.length / 12); + } + return c + "\0" + string16(F.length + 4) + F + k + S; +} +function createOS2Table(e, t, i) { + i ||= { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; + let a = 0, + s = 0, + r = 0, + n = 0, + g = null, + o = 0, + c = -1; + if (t) { + for (let e in t) { + e |= 0; + (g > e || !g) && (g = e); + o < e && (o = e); + c = getUnicodeRangeFor(e, c); + if (c < 32) a |= 1 << c; + else if (c < 64) s |= 1 << (c - 32); + else if (c < 96) r |= 1 << (c - 64); + else { + if (!(c < 123)) + throw new FormatError( + "Unicode ranges Bits > 123 are reserved for internal usage", + ); + n |= 1 << (c - 96); + } + } + o > 65535 && (o = 65535); + } else { + g = 0; + o = 255; + } + const C = e.bbox || [0, 0, 0, 0], + h = + i.unitsPerEm || + (e.fontMatrix + ? 1 / Math.max(...e.fontMatrix.slice(0, 4).map(Math.abs)) + : 1e3), + l = e.ascentScaled ? 1 : h / Ba, + Q = i.ascent || Math.round(l * (e.ascent || C[3])); + let E = i.descent || Math.round(l * (e.descent || C[1])); + E > 0 && e.descent > 0 && C[1] < 0 && (E = -E); + const u = i.yMax || Q, + d = -i.yMin || -E; + return ( + "\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0" + + String.fromCharCode(e.fixedPitch ? 9 : 0) + + "\0\0\0\0\0\0" + + string32(a) + + string32(s) + + string32(r) + + string32(n) + + "*21*" + + string16(e.italicAngle ? 1 : 0) + + string16(g || e.firstChar) + + string16(o || e.lastChar) + + string16(Q) + + string16(E) + + "\0d" + + string16(u) + + string16(d) + + "\0\0\0\0\0\0\0\0" + + string16(e.xHeight) + + string16(e.capHeight) + + string16(0) + + string16(g || e.firstChar) + + "\0" + ); +} +function createPostTable(e) { + return ( + "\0\0\0" + + string32(Math.floor(65536 * e.italicAngle)) + + "\0\0\0\0" + + string32(e.fixedPitch ? 1 : 0) + + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + ); +} +function createPostscriptName(e) { + return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63); +} +function createNameTable(e, t) { + t || (t = [[], []]); + const i = [ + t[0][0] || "Original licence", + t[0][1] || e, + t[0][2] || "Unknown", + t[0][3] || "uniqueID", + t[0][4] || e, + t[0][5] || "Version 0.11", + t[0][6] || createPostscriptName(e), + t[0][7] || "Unknown", + t[0][8] || "Unknown", + t[0][9] || "Unknown", + ], + a = []; + let s, r, n, g, o; + for (s = 0, r = i.length; s < r; s++) { + o = t[1][s] || i[s]; + const e = []; + for (n = 0, g = o.length; n < g; n++) e.push(string16(o.charCodeAt(n))); + a.push(e.join("")); + } + const c = [i, a], + C = ["\0", "\0"], + h = ["\0\0", "\0"], + l = ["\0\0", "\t"], + Q = i.length * C.length; + let E = "\0\0" + string16(Q) + string16(12 * Q + 6), + u = 0; + for (s = 0, r = C.length; s < r; s++) { + const e = c[s]; + for (n = 0, g = e.length; n < g; n++) { + o = e[n]; + E += C[s] + h[s] + l[s] + string16(n) + string16(o.length) + string16(u); + u += o.length; + } + } + E += i.join("") + a.join(""); + return E; +} +class Font { + constructor(e, t, i) { + this.name = e; + this.psName = null; + this.mimetype = null; + this.disableFontFace = !1; + this.loadedName = i.loadedName; + this.isType3Font = i.isType3Font; + this.missingFile = !1; + this.cssFontInfo = i.cssFontInfo; + this._charsCache = Object.create(null); + this._glyphCache = Object.create(null); + let a = !!(i.flags & Ki); + if (!a && !i.isSimulatedFlags) { + const t = e.replaceAll(/[,_]/g, "-").split("-", 1)[0], + i = Xi(); + for (const e of t.split("+")) + if (i[e]) { + a = !0; + break; + } + } + this.isSerifFont = a; + this.isSymbolicFont = !!(i.flags & Ti); + this.isMonospace = !!(i.flags & vi); + let { type: s, subtype: r } = i; + this.type = s; + this.subtype = r; + this.systemFontInfo = i.systemFontInfo; + const n = e.match(/^InvalidPDFjsFont_(.*)_\d+$/); + this.isInvalidPDFjsFont = !!n; + this.isInvalidPDFjsFont + ? (this.fallbackName = n[1]) + : this.isMonospace + ? (this.fallbackName = "monospace") + : this.isSerifFont + ? (this.fallbackName = "serif") + : (this.fallbackName = "sans-serif"); + if (this.systemFontInfo?.guessFallback) { + this.systemFontInfo.guessFallback = !1; + this.systemFontInfo.css += `,${this.fallbackName}`; + } + this.differences = i.differences; + this.widths = i.widths; + this.defaultWidth = i.defaultWidth; + this.composite = i.composite; + this.cMap = i.cMap; + this.capHeight = i.capHeight / Ba; + this.ascent = i.ascent / Ba; + this.descent = i.descent / Ba; + this.lineHeight = this.ascent - this.descent; + this.fontMatrix = i.fontMatrix; + this.bbox = i.bbox; + this.defaultEncoding = i.defaultEncoding; + this.toUnicode = i.toUnicode; + this.toFontChar = []; + if ("Type3" === i.type) { + for (let e = 0; e < 256; e++) + this.toFontChar[e] = this.differences[e] || i.defaultEncoding[e]; + return; + } + this.cidEncoding = i.cidEncoding || ""; + this.vertical = !!i.vertical; + if (this.vertical) { + this.vmetrics = i.vmetrics; + this.defaultVMetrics = i.defaultVMetrics; + } + if (!t || t.isEmpty) { + t && warn('Font file is empty in "' + e + '" (' + this.loadedName + ")"); + this.fallbackToSystemFont(i); + return; + } + [s, r] = getFontFileType(t, i); + (s === this.type && r === this.subtype) || + info( + `Inconsistent font file Type/SubType, expected: ${this.type}/${this.subtype} but found: ${s}/${r}.`, + ); + let g; + try { + switch (s) { + case "MMType1": + info("MMType1 font (" + e + "), falling back to Type1."); + case "Type1": + case "CIDFontType0": + this.mimetype = "font/opentype"; + const a = + "Type1C" === r || "CIDFontType0C" === r + ? new CFFFont(t, i) + : new Type1Font(e, t, i); + adjustWidths(i); + g = this.convert(e, a, i); + break; + case "OpenType": + case "TrueType": + case "CIDFontType2": + this.mimetype = "font/opentype"; + g = this.checkAndRepair(e, t, i); + if (this.isOpenType) { + adjustWidths(i); + s = "OpenType"; + } + break; + default: + throw new FormatError(`Font ${s} is not supported`); + } + } catch (e) { + warn(e); + this.fallbackToSystemFont(i); + return; + } + amendFallbackToUnicode(i); + this.data = g; + this.type = s; + this.subtype = r; + this.fontMatrix = i.fontMatrix; + this.widths = i.widths; + this.defaultWidth = i.defaultWidth; + this.toUnicode = i.toUnicode; + this.seacMap = i.seacMap; + } + get renderer() { + return shadow(this, "renderer", FontRendererFactory.create(this, Yi)); + } + exportData(e = !1) { + const t = e ? [...la, ...Qa] : la, + i = Object.create(null); + let a, s; + for (a of t) { + s = this[a]; + void 0 !== s && (i[a] = s); + } + return i; + } + fallbackToSystemFont(e) { + this.missingFile = !0; + const { name: t, type: i } = this; + let a = normalizeFontName(t); + const s = Pi(), + r = ji(), + n = !!s[a], + g = !(!r[a] || !s[r[a]]); + a = s[a] || r[a] || a; + const o = ea()[a]; + if (o) { + isNaN(this.ascent) && (this.ascent = o.ascent / Ba); + isNaN(this.descent) && (this.descent = o.descent / Ba); + isNaN(this.capHeight) && (this.capHeight = o.capHeight / Ba); + } + this.bold = /bold/gi.test(a); + this.italic = /oblique|italic/gi.test(a); + this.black = /Black/g.test(t); + const c = /Narrow/g.test(t); + this.remeasure = (!n || c) && Object.keys(this.widths).length > 0; + if ( + (n || g) && + "CIDFontType2" === i && + this.cidEncoding.startsWith("Identity-") + ) { + const i = e.cidToGidMap, + a = []; + applyStandardFontGlyphMap(a, Vi()); + /Arial-?Black/i.test(t) + ? applyStandardFontGlyphMap(a, zi()) + : /Calibri/i.test(t) && applyStandardFontGlyphMap(a, _i()); + if (i) { + for (const e in a) { + const t = a[e]; + void 0 !== i[t] && (a[+e] = i[t]); + } + i.length !== this.toUnicode.length && + e.hasIncludedToUnicodeMap && + this.toUnicode instanceof IdentityToUnicodeMap && + this.toUnicode.forEach(function (e, t) { + const s = a[e]; + void 0 === i[s] && (a[+e] = t); + }); + } + this.toUnicode instanceof IdentityToUnicodeMap || + this.toUnicode.forEach(function (e, t) { + a[+e] = t; + }); + this.toFontChar = a; + this.toUnicode = new ToUnicodeMap(a); + } else if (/Symbol/i.test(a)) + this.toFontChar = buildToFontChar(mi, Ni(), this.differences); + else if (/Dingbats/i.test(a)) + this.toFontChar = buildToFontChar(yi, Gi(), this.differences); + else if (n) { + const e = buildToFontChar(this.defaultEncoding, Ni(), this.differences); + "CIDFontType2" !== i || + this.cidEncoding.startsWith("Identity-") || + this.toUnicode instanceof IdentityToUnicodeMap || + this.toUnicode.forEach(function (t, i) { + e[+t] = i; + }); + this.toFontChar = e; + } else { + const e = Ni(), + i = []; + this.toUnicode.forEach((t, a) => { + if (!this.composite) { + const i = getUnicodeForGlyph( + this.differences[t] || this.defaultEncoding[t], + e, + ); + -1 !== i && (a = i); + } + i[+t] = a; + }); + this.composite && + this.toUnicode instanceof IdentityToUnicodeMap && + /Tahoma|Verdana/i.test(t) && + applyStandardFontGlyphMap(i, Vi()); + this.toFontChar = i; + } + amendFallbackToUnicode(e); + this.loadedName = a.split("-", 1)[0]; + } + checkAndRepair(e, t, i) { + const a = [ + "OS/2", + "cmap", + "head", + "hhea", + "hmtx", + "maxp", + "name", + "post", + "loca", + "glyf", + "fpgm", + "prep", + "cvt ", + "CFF ", + ]; + function readTables(e, t) { + const i = Object.create(null); + i["OS/2"] = null; + i.cmap = null; + i.head = null; + i.hhea = null; + i.hmtx = null; + i.maxp = null; + i.name = null; + i.post = null; + for (let s = 0; s < t; s++) { + const t = readTableEntry(e); + a.includes(t.tag) && 0 !== t.length && (i[t.tag] = t); + } + return i; + } + function readTableEntry(e) { + const t = e.getString(4), + i = e.getInt32() >>> 0, + a = e.getInt32() >>> 0, + s = e.getInt32() >>> 0, + r = e.pos; + e.pos = e.start || 0; + e.skip(a); + const n = e.getBytes(s); + e.pos = r; + if ("head" === t) { + n[8] = n[9] = n[10] = n[11] = 0; + n[17] |= 32; + } + return { tag: t, checksum: i, length: s, offset: a, data: n }; + } + function readOpenTypeHeader(e) { + return { + version: e.getString(4), + numTables: e.getUint16(), + searchRange: e.getUint16(), + entrySelector: e.getUint16(), + rangeShift: e.getUint16(), + }; + } + function sanitizeGlyph(e, t, i, a, s, r) { + const n = { length: 0, sizeOfInstructions: 0 }; + if (t < 0 || t >= e.length || i > e.length || i - t <= 12) return n; + const g = e.subarray(t, i), + o = signedInt16(g[2], g[3]), + c = signedInt16(g[4], g[5]), + C = signedInt16(g[6], g[7]), + h = signedInt16(g[8], g[9]); + if (o > C) { + writeSignedInt16(g, 2, C); + writeSignedInt16(g, 6, o); + } + if (c > h) { + writeSignedInt16(g, 4, h); + writeSignedInt16(g, 8, c); + } + const l = signedInt16(g[0], g[1]); + if (l < 0) { + if (l < -1) return n; + a.set(g, s); + n.length = g.length; + return n; + } + let Q, + E = 10, + u = 0; + for (Q = 0; Q < l; Q++) { + u = ((g[E] << 8) | g[E + 1]) + 1; + E += 2; + } + const d = E, + f = (g[E] << 8) | g[E + 1]; + n.sizeOfInstructions = f; + E += 2 + f; + const p = E; + let m = 0; + for (Q = 0; Q < u; Q++) { + const e = g[E++]; + 192 & e && (g[E - 1] = 63 & e); + let t = 2; + 2 & e ? (t = 1) : 16 & e && (t = 0); + let i = 2; + 4 & e ? (i = 1) : 32 & e && (i = 0); + const a = t + i; + m += a; + if (8 & e) { + const e = g[E++]; + 0 === e && (g[E - 1] ^= 8); + Q += e; + m += e * a; + } + } + if (0 === m) return n; + let y = E + m; + if (y > g.length) return n; + if (!r && f > 0) { + a.set(g.subarray(0, d), s); + a.set([0, 0], s + d); + a.set(g.subarray(p, y), s + d + 2); + y -= f; + g.length - y > 3 && (y = (y + 3) & -4); + n.length = y; + return n; + } + if (g.length - y > 3) { + y = (y + 3) & -4; + a.set(g.subarray(0, y), s); + n.length = y; + return n; + } + a.set(g, s); + n.length = g.length; + return n; + } + function readNameTable(e) { + const i = (t.start || 0) + e.offset; + t.pos = i; + const a = [[], []], + s = [], + r = e.length, + n = i + r; + if (0 !== t.getUint16() || r < 6) return [a, s]; + const g = t.getUint16(), + o = t.getUint16(); + let c, C; + for (c = 0; c < g && t.pos + 12 <= n; c++) { + const e = { + platform: t.getUint16(), + encoding: t.getUint16(), + language: t.getUint16(), + name: t.getUint16(), + length: t.getUint16(), + offset: t.getUint16(), + }; + (isMacNameRecord(e) || isWinNameRecord(e)) && s.push(e); + } + for (c = 0, C = s.length; c < C; c++) { + const e = s[c]; + if (e.length <= 0) continue; + const r = i + o + e.offset; + if (r + e.length > n) continue; + t.pos = r; + const g = e.name; + if (e.encoding) { + let i = ""; + for (let a = 0, s = e.length; a < s; a += 2) + i += String.fromCharCode(t.getUint16()); + a[1][g] = i; + } else a[0][g] = t.getString(e.length); + } + return [a, s]; + } + const s = [ + 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, + -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, + -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, + -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, + -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, + -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, + 0, -1, -1, -1, -2, + ]; + function sanitizeTTProgram(e, t) { + let i, + a, + r, + n, + g, + o = e.data, + c = 0, + C = 0, + h = 0; + const l = [], + Q = [], + E = []; + let u = t.tooComplexToFollowFunctions, + d = !1, + f = 0, + p = 0; + for (let e = o.length; c < e; ) { + const e = o[c++]; + if (64 === e) { + a = o[c++]; + if (d || p) c += a; + else for (i = 0; i < a; i++) l.push(o[c++]); + } else if (65 === e) { + a = o[c++]; + if (d || p) c += 2 * a; + else + for (i = 0; i < a; i++) { + r = o[c++]; + l.push((r << 8) | o[c++]); + } + } else if (176 == (248 & e)) { + a = e - 176 + 1; + if (d || p) c += a; + else for (i = 0; i < a; i++) l.push(o[c++]); + } else if (184 == (248 & e)) { + a = e - 184 + 1; + if (d || p) c += 2 * a; + else + for (i = 0; i < a; i++) { + r = o[c++]; + l.push((r << 8) | o[c++]); + } + } else if (43 !== e || u) + if (44 !== e || u) { + if (45 === e) + if (d) { + d = !1; + C = c; + } else { + g = Q.pop(); + if (!g) { + warn("TT: ENDF bad stack"); + t.hintsValid = !1; + return; + } + n = E.pop(); + o = g.data; + c = g.i; + t.functionsStackDeltas[n] = l.length - g.stackTop; + } + else if (137 === e) { + if (d || p) { + warn("TT: nested IDEFs not allowed"); + u = !0; + } + d = !0; + h = c; + } else if (88 === e) ++f; + else if (27 === e) p = f; + else if (89 === e) { + p === f && (p = 0); + --f; + } else if (28 === e && !d && !p) { + const e = l.at(-1); + e > 0 && (c += e - 1); + } + } else { + if (d || p) { + warn("TT: nested FDEFs not allowed"); + u = !0; + } + d = !0; + h = c; + n = l.pop(); + t.functionsDefined[n] = { data: o, i: c }; + } + else if (!d && !p) { + n = l.at(-1); + if (isNaN(n)) info("TT: CALL empty stack (or invalid entry)."); + else { + t.functionsUsed[n] = !0; + if (n in t.functionsStackDeltas) { + const e = l.length + t.functionsStackDeltas[n]; + if (e < 0) { + warn("TT: CALL invalid functions stack delta."); + t.hintsValid = !1; + return; + } + l.length = e; + } else if (n in t.functionsDefined && !E.includes(n)) { + Q.push({ data: o, i: c, stackTop: l.length - 1 }); + E.push(n); + g = t.functionsDefined[n]; + if (!g) { + warn("TT: CALL non-existent function"); + t.hintsValid = !1; + return; + } + o = g.data; + c = g.i; + } + } + } + if (!d && !p) { + let t = 0; + e <= 142 + ? (t = s[e]) + : e >= 192 && e <= 223 + ? (t = -1) + : e >= 224 && (t = -2); + if (e >= 113 && e <= 117) { + a = l.pop(); + isNaN(a) || (t = 2 * -a); + } + for (; t < 0 && l.length > 0; ) { + l.pop(); + t++; + } + for (; t > 0; ) { + l.push(NaN); + t--; + } + } + } + t.tooComplexToFollowFunctions = u; + const m = [o]; + c > o.length && m.push(new Uint8Array(c - o.length)); + if (h > C) { + warn("TT: complementing a missing function tail"); + m.push(new Uint8Array([34, 45])); + } + !(function foldTTTable(e, t) { + if (t.length > 1) { + let i, + a, + s = 0; + for (i = 0, a = t.length; i < a; i++) s += t[i].length; + s = (s + 3) & -4; + const r = new Uint8Array(s); + let n = 0; + for (i = 0, a = t.length; i < a; i++) { + r.set(t[i], n); + n += t[i].length; + } + e.data = r; + e.length = s; + } + })(e, m); + } + let r, n, g, o; + if ( + isTrueTypeCollectionFile((t = new Stream(new Uint8Array(t.getBytes())))) + ) { + const e = (function readTrueTypeCollectionData(e, t) { + const { numFonts: i, offsetTable: a } = + (function readTrueTypeCollectionHeader(e) { + const t = e.getString(4); + assert("ttcf" === t, "Must be a TrueType Collection font."); + const i = e.getUint16(), + a = e.getUint16(), + s = e.getInt32() >>> 0, + r = []; + for (let t = 0; t < s; t++) r.push(e.getInt32() >>> 0); + const n = { + ttcTag: t, + majorVersion: i, + minorVersion: a, + numFonts: s, + offsetTable: r, + }; + switch (i) { + case 1: + return n; + case 2: + n.dsigTag = e.getInt32() >>> 0; + n.dsigLength = e.getInt32() >>> 0; + n.dsigOffset = e.getInt32() >>> 0; + return n; + } + throw new FormatError( + `Invalid TrueType Collection majorVersion: ${i}.`, + ); + })(e), + s = t.split("+"); + let r; + for (let n = 0; n < i; n++) { + e.pos = (e.start || 0) + a[n]; + const i = readOpenTypeHeader(e), + g = readTables(e, i.numTables); + if (!g.name) + throw new FormatError( + 'TrueType Collection font must contain a "name" table.', + ); + const [o] = readNameTable(g.name); + for (let e = 0, a = o.length; e < a; e++) + for (let a = 0, n = o[e].length; a < n; a++) { + const n = o[e][a]?.replaceAll(/\s/g, ""); + if (n) { + if (n === t) return { header: i, tables: g }; + if (!(s.length < 2)) + for (const e of s) + n === e && (r = { name: e, header: i, tables: g }); + } + } + } + if (r) { + warn( + `TrueType Collection does not contain "${t}" font, falling back to "${r.name}" font instead.`, + ); + return { header: r.header, tables: r.tables }; + } + throw new FormatError( + `TrueType Collection does not contain "${t}" font.`, + ); + })(t, this.name); + r = e.header; + n = e.tables; + } else { + r = readOpenTypeHeader(t); + n = readTables(t, r.numTables); + } + const c = !n["CFF "]; + if (c) { + if (!n.loca) throw new FormatError('Required "loca" table is not found'); + if (!n.glyf) { + warn('Required "glyf" table is not found -- trying to recover.'); + n.glyf = { tag: "glyf", data: new Uint8Array(0) }; + } + this.isOpenType = !1; + } else { + const t = + i.composite && + (i.cidToGidMap?.length > 0 || !(i.cMap instanceof IdentityCMap)); + if ( + ("OTTO" === r.version && !t) || + !n.head || + !n.hhea || + !n.maxp || + !n.post + ) { + o = new Stream(n["CFF "].data); + g = new CFFFont(o, i); + adjustWidths(i); + return this.convert(e, g, i); + } + delete n.glyf; + delete n.loca; + delete n.fpgm; + delete n.prep; + delete n["cvt "]; + this.isOpenType = !0; + } + if (!n.maxp) throw new FormatError('Required "maxp" table is not found'); + t.pos = (t.start || 0) + n.maxp.offset; + let C = t.getInt32(); + const h = t.getUint16(); + if (65536 !== C && 20480 !== C) { + if (6 === n.maxp.length) C = 20480; + else { + if (!(n.maxp.length >= 32)) + throw new FormatError('"maxp" table has a wrong version number'); + C = 65536; + } + !(function writeUint32(e, t, i) { + e[t + 3] = 255 & i; + e[t + 2] = i >>> 8; + e[t + 1] = i >>> 16; + e[t] = i >>> 24; + })(n.maxp.data, 0, C); + } + if (i.scaleFactors?.length === h && c) { + const { scaleFactors: e } = i, + t = int16(n.head.data[50], n.head.data[51]), + a = new GlyfTable({ + glyfTable: n.glyf.data, + isGlyphLocationsLong: t, + locaTable: n.loca.data, + numGlyphs: h, + }); + a.scale(e); + const { glyf: s, loca: r, isLocationLong: g } = a.write(); + n.glyf.data = s; + n.loca.data = r; + if (g !== !!t) { + n.head.data[50] = 0; + n.head.data[51] = g ? 1 : 0; + } + const o = n.hmtx.data; + for (let t = 0; t < h; t++) { + const i = 4 * t, + a = Math.round(e[t] * int16(o[i], o[i + 1])); + o[i] = (a >> 8) & 255; + o[i + 1] = 255 & a; + writeSignedInt16( + o, + i + 2, + Math.round(e[t] * signedInt16(o[i + 2], o[i + 3])), + ); + } + } + let l = h + 1, + Q = !0; + if (l > 65535) { + Q = !1; + l = h; + warn("Not enough space in glyfs to duplicate first glyph."); + } + let E = 0, + u = 0; + if (C >= 65536 && n.maxp.length >= 32) { + t.pos += 8; + if (t.getUint16() > 2) { + n.maxp.data[14] = 0; + n.maxp.data[15] = 2; + } + t.pos += 4; + E = t.getUint16(); + t.pos += 4; + u = t.getUint16(); + } + n.maxp.data[4] = l >> 8; + n.maxp.data[5] = 255 & l; + const d = (function sanitizeTTPrograms(e, t, i, a) { + const s = { + functionsDefined: [], + functionsUsed: [], + functionsStackDeltas: [], + tooComplexToFollowFunctions: !1, + hintsValid: !0, + }; + e && sanitizeTTProgram(e, s); + t && sanitizeTTProgram(t, s); + e && + (function checkInvalidFunctions(e, t) { + if (!e.tooComplexToFollowFunctions) + if (e.functionsDefined.length > t) { + warn("TT: more functions defined than expected"); + e.hintsValid = !1; + } else + for (let i = 0, a = e.functionsUsed.length; i < a; i++) { + if (i > t) { + warn("TT: invalid function id: " + i); + e.hintsValid = !1; + return; + } + if (e.functionsUsed[i] && !e.functionsDefined[i]) { + warn("TT: undefined function: " + i); + e.hintsValid = !1; + return; + } + } + })(s, a); + if (i && 1 & i.length) { + const e = new Uint8Array(i.length + 1); + e.set(i.data); + i.data = e; + } + return s.hintsValid; + })(n.fpgm, n.prep, n["cvt "], E); + if (!d) { + delete n.fpgm; + delete n.prep; + delete n["cvt "]; + } + !(function sanitizeMetrics(e, t, i, a, s, r) { + if (!t) { + i && (i.data = null); + return; + } + e.pos = (e.start || 0) + t.offset; + e.pos += 4; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + e.pos += 2; + const n = e.getUint16(); + e.pos += 8; + e.pos += 2; + let g = e.getUint16(); + if (0 !== n) { + if (!(2 & int16(a.data[44], a.data[45]))) { + t.data[22] = 0; + t.data[23] = 0; + } + } + if (g > s) { + info( + `The numOfMetrics (${g}) should not be greater than the numGlyphs (${s}).`, + ); + g = s; + t.data[34] = (65280 & g) >> 8; + t.data[35] = 255 & g; + } + const o = s - g - ((i.length - 4 * g) >> 1); + if (o > 0) { + const e = new Uint8Array(i.length + 2 * o); + e.set(i.data); + if (r) { + e[i.length] = i.data[2]; + e[i.length + 1] = i.data[3]; + } + i.data = e; + } + })(t, n.hhea, n.hmtx, n.head, l, Q); + if (!n.head) throw new FormatError('Required "head" table is not found'); + !(function sanitizeHead(e, t, i) { + const a = e.data, + s = (function int32(e, t, i, a) { + return (e << 24) + (t << 16) + (i << 8) + a; + })(a[0], a[1], a[2], a[3]); + if (s >> 16 != 1) { + info("Attempting to fix invalid version in head table: " + s); + a[0] = 0; + a[1] = 1; + a[2] = 0; + a[3] = 0; + } + const r = int16(a[50], a[51]); + if (r < 0 || r > 1) { + info("Attempting to fix invalid indexToLocFormat in head table: " + r); + const e = t + 1; + if (i === e << 1) { + a[50] = 0; + a[51] = 0; + } else { + if (i !== e << 2) + throw new FormatError("Could not fix indexToLocFormat: " + r); + a[50] = 0; + a[51] = 1; + } + } + })(n.head, h, c ? n.loca.length : 0); + let f = Object.create(null); + if (c) { + const e = int16(n.head.data[50], n.head.data[51]), + t = (function sanitizeGlyphLocations(e, t, i, a, s, r, n) { + let g, o, c; + if (a) { + g = 4; + o = function fontItemDecodeLong(e, t) { + return ( + (e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3] + ); + }; + c = function fontItemEncodeLong(e, t, i) { + e[t] = (i >>> 24) & 255; + e[t + 1] = (i >> 16) & 255; + e[t + 2] = (i >> 8) & 255; + e[t + 3] = 255 & i; + }; + } else { + g = 2; + o = function fontItemDecode(e, t) { + return (e[t] << 9) | (e[t + 1] << 1); + }; + c = function fontItemEncode(e, t, i) { + e[t] = (i >> 9) & 255; + e[t + 1] = (i >> 1) & 255; + }; + } + const C = r ? i + 1 : i, + h = g * (1 + C), + l = new Uint8Array(h); + l.set(e.data.subarray(0, h)); + e.data = l; + const Q = t.data, + E = Q.length, + u = new Uint8Array(E); + let d, f; + const p = []; + for (d = 0, f = 0; d < i + 1; d++, f += g) { + let e = o(l, f); + e > E && (e = E); + p.push({ index: d, offset: e, endOffset: 0 }); + } + p.sort((e, t) => e.offset - t.offset); + for (d = 0; d < i; d++) p[d].endOffset = p[d + 1].offset; + p.sort((e, t) => e.index - t.index); + for (d = 0; d < i; d++) { + const { offset: e, endOffset: t } = p[d]; + if (0 !== e || 0 !== t) break; + const i = p[d + 1].offset; + if (0 !== i) { + p[d].endOffset = i; + break; + } + } + const m = p.at(-2); + 0 !== m.offset && 0 === m.endOffset && (m.endOffset = E); + const y = Object.create(null); + let w = 0; + c(l, 0, w); + for (d = 0, f = g; d < i; d++, f += g) { + const e = sanitizeGlyph(Q, p[d].offset, p[d].endOffset, u, w, s), + t = e.length; + 0 === t && (y[d] = !0); + e.sizeOfInstructions > n && (n = e.sizeOfInstructions); + w += t; + c(l, f, w); + } + if (0 === w) { + const e = new Uint8Array([ + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + ]); + for (d = 0, f = g; d < C; d++, f += g) c(l, f, e.length); + t.data = e; + } else if (r) { + const i = o(l, g); + if (u.length > i + w) t.data = u.subarray(0, i + w); + else { + t.data = new Uint8Array(i + w); + t.data.set(u.subarray(0, w)); + } + t.data.set(u.subarray(0, i), w); + c(e.data, l.length - g, w + i); + } else t.data = u.subarray(0, w); + return { missingGlyphs: y, maxSizeOfInstructions: n }; + })(n.loca, n.glyf, h, e, d, Q, u); + f = t.missingGlyphs; + if (C >= 65536 && n.maxp.length >= 32) { + n.maxp.data[26] = t.maxSizeOfInstructions >> 8; + n.maxp.data[27] = 255 & t.maxSizeOfInstructions; + } + } + if (!n.hhea) throw new FormatError('Required "hhea" table is not found'); + if (0 === n.hhea.data[10] && 0 === n.hhea.data[11]) { + n.hhea.data[10] = 255; + n.hhea.data[11] = 255; + } + const p = { + unitsPerEm: int16(n.head.data[18], n.head.data[19]), + yMax: signedInt16(n.head.data[42], n.head.data[43]), + yMin: signedInt16(n.head.data[38], n.head.data[39]), + ascent: signedInt16(n.hhea.data[4], n.hhea.data[5]), + descent: signedInt16(n.hhea.data[6], n.hhea.data[7]), + lineGap: signedInt16(n.hhea.data[8], n.hhea.data[9]), + }; + this.ascent = p.ascent / p.unitsPerEm; + this.descent = p.descent / p.unitsPerEm; + this.lineGap = p.lineGap / p.unitsPerEm; + if (this.cssFontInfo?.lineHeight) { + this.lineHeight = this.cssFontInfo.metrics.lineHeight; + this.lineGap = this.cssFontInfo.metrics.lineGap; + } else this.lineHeight = this.ascent - this.descent + this.lineGap; + n.post && + (function readPostScriptTable(e, i, a) { + const s = (t.start || 0) + e.offset; + t.pos = s; + const r = s + e.length, + n = t.getInt32(); + t.skip(28); + let g, + o, + c = !0; + switch (n) { + case 65536: + g = Oi; + break; + case 131072: + const e = t.getUint16(); + if (e !== a) { + c = !1; + break; + } + const s = []; + for (o = 0; o < e; ++o) { + const e = t.getUint16(); + if (e >= 32768) { + c = !1; + break; + } + s.push(e); + } + if (!c) break; + const C = [], + h = []; + for (; t.pos < r; ) { + const e = t.getByte(); + h.length = e; + for (o = 0; o < e; ++o) h[o] = String.fromCharCode(t.getByte()); + C.push(h.join("")); + } + g = []; + for (o = 0; o < e; ++o) { + const e = s[o]; + e < 258 ? g.push(Oi[e]) : g.push(C[e - 258]); + } + break; + case 196608: + break; + default: + warn("Unknown/unsupported post table version " + n); + c = !1; + i.defaultEncoding && (g = i.defaultEncoding); + } + i.glyphNames = g; + return c; + })(n.post, i, h); + n.post = { tag: "post", data: createPostTable(i) }; + const m = Object.create(null); + function hasGlyph(e) { + return !f[e]; + } + if (i.composite) { + const e = i.cidToGidMap || [], + t = 0 === e.length; + i.cMap.forEach(function (i, a) { + "string" == typeof a && (a = convertCidString(i, a, !0)); + if (a > 65535) throw new FormatError("Max size of CID is 65,535"); + let s = -1; + t ? (s = a) : void 0 !== e[a] && (s = e[a]); + s >= 0 && s < h && hasGlyph(s) && (m[i] = s); + }); + } else { + const e = (function readCmapTable(e, t, i, a) { + if (!e) { + warn("No cmap table available."); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: !1, + }; + } + let s, + r = (t.start || 0) + e.offset; + t.pos = r; + t.skip(2); + const n = t.getUint16(); + let g, + o = !1; + for (let e = 0; e < n; e++) { + const s = t.getUint16(), + r = t.getUint16(), + c = t.getInt32() >>> 0; + let C = !1; + if (g?.platformId !== s || g?.encodingId !== r) { + if (0 !== s || (0 !== r && 1 !== r && 3 !== r)) + if (1 === s && 0 === r) C = !0; + else if (3 !== s || 1 !== r || (!a && g)) { + if (i && 3 === s && 0 === r) { + C = !0; + let i = !0; + if (e < n - 1) { + const e = t.peekBytes(2); + int16(e[0], e[1]) < s && (i = !1); + } + i && (o = !0); + } + } else { + C = !0; + i || (o = !0); + } + else C = !0; + C && (g = { platformId: s, encodingId: r, offset: c }); + if (o) break; + } + } + g && (t.pos = r + g.offset); + if (!g || -1 === t.peekByte()) { + warn("Could not find a preferred cmap table."); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: !1, + }; + } + const c = t.getUint16(); + let C = !1; + const h = []; + let l, Q; + if (0 === c) { + t.skip(4); + for (l = 0; l < 256; l++) { + const e = t.getByte(); + e && h.push({ charCode: l, glyphId: e }); + } + C = !0; + } else if (2 === c) { + t.skip(4); + const e = []; + let i = 0; + for (let a = 0; a < 256; a++) { + const a = t.getUint16() >> 3; + e.push(a); + i = Math.max(a, i); + } + const a = []; + for (let e = 0; e <= i; e++) + a.push({ + firstCode: t.getUint16(), + entryCount: t.getUint16(), + idDelta: signedInt16(t.getByte(), t.getByte()), + idRangePos: t.pos + t.getUint16(), + }); + for (let i = 0; i < 256; i++) + if (0 === e[i]) { + t.pos = a[0].idRangePos + 2 * i; + Q = t.getUint16(); + h.push({ charCode: i, glyphId: Q }); + } else { + const s = a[e[i]]; + for (l = 0; l < s.entryCount; l++) { + const e = (i << 8) + l + s.firstCode; + t.pos = s.idRangePos + 2 * l; + Q = t.getUint16(); + 0 !== Q && (Q = (Q + s.idDelta) % 65536); + h.push({ charCode: e, glyphId: Q }); + } + } + } else if (4 === c) { + t.skip(4); + const e = t.getUint16() >> 1; + t.skip(6); + const i = []; + let a; + for (a = 0; a < e; a++) i.push({ end: t.getUint16() }); + t.skip(2); + for (a = 0; a < e; a++) i[a].start = t.getUint16(); + for (a = 0; a < e; a++) i[a].delta = t.getUint16(); + let n, + g = 0; + for (a = 0; a < e; a++) { + s = i[a]; + const r = t.getUint16(); + if (r) { + n = (r >> 1) - (e - a); + s.offsetIndex = n; + g = Math.max(g, n + s.end - s.start + 1); + } else s.offsetIndex = -1; + } + const o = []; + for (l = 0; l < g; l++) o.push(t.getUint16()); + for (a = 0; a < e; a++) { + s = i[a]; + r = s.start; + const e = s.end, + t = s.delta; + n = s.offsetIndex; + for (l = r; l <= e; l++) + if (65535 !== l) { + Q = n < 0 ? l : o[n + l - r]; + Q = (Q + t) & 65535; + h.push({ charCode: l, glyphId: Q }); + } + } + } else if (6 === c) { + t.skip(4); + const e = t.getUint16(), + i = t.getUint16(); + for (l = 0; l < i; l++) { + Q = t.getUint16(); + const i = e + l; + h.push({ charCode: i, glyphId: Q }); + } + } else { + if (12 !== c) { + warn("cmap table has unsupported format: " + c); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: !1, + }; + } + { + t.skip(10); + const e = t.getInt32() >>> 0; + for (l = 0; l < e; l++) { + const e = t.getInt32() >>> 0, + i = t.getInt32() >>> 0; + let a = t.getInt32() >>> 0; + for (let t = e; t <= i; t++) + h.push({ charCode: t, glyphId: a++ }); + } + } + } + h.sort(function (e, t) { + return e.charCode - t.charCode; + }); + for (let e = 1; e < h.length; e++) + if (h[e - 1].charCode === h[e].charCode) { + h.splice(e, 1); + e--; + } + return { + platformId: g.platformId, + encodingId: g.encodingId, + mappings: h, + hasShortCmap: C, + }; + })(n.cmap, t, this.isSymbolicFont, i.hasEncoding), + a = e.platformId, + s = e.encodingId, + r = e.mappings; + let g = [], + o = !1; + !i.hasEncoding || + ("MacRomanEncoding" !== i.baseEncodingName && + "WinAnsiEncoding" !== i.baseEncodingName) || + (g = getEncoding(i.baseEncodingName)); + if ( + i.hasEncoding && + !this.isSymbolicFont && + ((3 === a && 1 === s) || (1 === a && 0 === s)) + ) { + const e = Ni(); + for (let t = 0; t < 256; t++) { + let n; + n = + void 0 !== this.differences[t] + ? this.differences[t] + : g.length && "" !== g[t] + ? g[t] + : fi[t]; + if (!n) continue; + const o = recoverGlyphName(n, e); + let c; + 3 === a && 1 === s + ? (c = e[o]) + : 1 === a && 0 === s && (c = di.indexOf(o)); + if (void 0 === c) { + if ( + !i.glyphNames && + i.hasIncludedToUnicodeMap && + !(this.toUnicode instanceof IdentityToUnicodeMap) + ) { + const e = this.toUnicode.get(t); + e && (c = e.codePointAt(0)); + } + if (void 0 === c) continue; + } + for (const e of r) + if (e.charCode === c) { + m[t] = e.glyphId; + break; + } + } + } else if (0 === a) { + for (const e of r) m[e.charCode] = e.glyphId; + o = !0; + } else if (3 === a && 0 === s) + for (const e of r) { + let t = e.charCode; + t >= 61440 && t <= 61695 && (t &= 255); + m[t] = e.glyphId; + } + else for (const e of r) m[e.charCode] = e.glyphId; + if (i.glyphNames && (g.length || this.differences.length)) + for (let e = 0; e < 256; ++e) { + if (!o && void 0 !== m[e]) continue; + const t = this.differences[e] || g[e]; + if (!t) continue; + const a = i.glyphNames.indexOf(t); + a > 0 && hasGlyph(a) && (m[e] = a); + } + } + 0 === m.length && (m[0] = 0); + let y = l - 1; + Q || (y = 0); + if (!i.cssFontInfo) { + const e = adjustMapping(m, hasGlyph, y, this.toUnicode); + this.toFontChar = e.toFontChar; + n.cmap = { + tag: "cmap", + data: createCmapTable(e.charCodeToGlyphId, e.toUnicodeExtraMap, l), + }; + (n["OS/2"] && + (function validateOS2Table(e, t) { + t.pos = (t.start || 0) + e.offset; + const i = t.getUint16(); + t.skip(60); + const a = t.getUint16(); + if (i < 4 && 768 & a) return !1; + if (t.getUint16() > t.getUint16()) return !1; + t.skip(6); + if (0 === t.getUint16()) return !1; + e.data[8] = e.data[9] = 0; + return !0; + })(n["OS/2"], t)) || + (n["OS/2"] = { + tag: "OS/2", + data: createOS2Table(i, e.charCodeToGlyphId, p), + }); + } + if (!c) + try { + o = new Stream(n["CFF "].data); + g = new CFFParser(o, i, Yi).parse(); + g.duplicateFirstGlyph(); + const e = new CFFCompiler(g); + n["CFF "].data = e.compile(); + } catch { + warn("Failed to compile font " + i.loadedName); + } + if (n.name) { + const [t, a] = readNameTable(n.name); + n.name.data = createNameTable(e, t); + this.psName = t[0][6] || null; + i.composite || + (function adjustTrueTypeToUnicode(e, t, i) { + if (e.isInternalFont) return; + if (e.hasIncludedToUnicodeMap) return; + if (e.hasEncoding) return; + if (e.toUnicode instanceof IdentityToUnicodeMap) return; + if (!t) return; + if (0 === i.length) return; + if (e.defaultEncoding === pi) return; + for (const e of i) if (!isWinNameRecord(e)) return; + const a = pi, + s = [], + r = Ni(); + for (const e in a) { + const t = a[e]; + if ("" === t) continue; + const i = r[t]; + void 0 !== i && (s[e] = String.fromCharCode(i)); + } + s.length > 0 && e.toUnicode.amend(s); + })(i, this.isSymbolicFont, a); + } else n.name = { tag: "name", data: createNameTable(this.name) }; + const w = new OpenTypeFileBuilder(r.version); + for (const e in n) w.addTable(e, n[e].data); + return w.toArray(); + } + convert(e, t, i) { + i.fixedPitch = !1; + i.builtInEncoding && + (function adjustType1ToUnicode(e, t) { + if (e.isInternalFont) return; + if (e.hasIncludedToUnicodeMap) return; + if (t === e.defaultEncoding) return; + if (e.toUnicode instanceof IdentityToUnicodeMap) return; + const i = [], + a = Ni(); + for (const s in t) { + if ( + e.hasEncoding && + (e.baseEncodingName || void 0 !== e.differences[s]) + ) + continue; + const r = getUnicodeForGlyph(t[s], a); + -1 !== r && (i[s] = String.fromCharCode(r)); + } + i.length > 0 && e.toUnicode.amend(i); + })(i, i.builtInEncoding); + let s = 1; + t instanceof CFFFont && (s = t.numGlyphs - 1); + const r = t.getGlyphMapping(i); + let n = null, + g = r, + o = null; + if (!i.cssFontInfo) { + n = adjustMapping(r, t.hasGlyphId.bind(t), s, this.toUnicode); + this.toFontChar = n.toFontChar; + g = n.charCodeToGlyphId; + o = n.toUnicodeExtraMap; + } + const c = t.numGlyphs; + function getCharCodes(e, t) { + let i = null; + for (const a in e) t === e[a] && (i ||= []).push(0 | a); + return i; + } + function createCharCode(e, t) { + for (const i in e) if (t === e[i]) return 0 | i; + n.charCodeToGlyphId[n.nextAvailableFontCharCode] = t; + return n.nextAvailableFontCharCode++; + } + const C = t.seacs; + if (n && C?.length) { + const e = i.fontMatrix || a, + s = t.getCharset(), + g = Object.create(null); + for (let t in C) { + t |= 0; + const i = C[t], + a = fi[i[2]], + o = fi[i[3]], + c = s.indexOf(a), + h = s.indexOf(o); + if (c < 0 || h < 0) continue; + const l = { + x: i[0] * e[0] + i[1] * e[2] + e[4], + y: i[0] * e[1] + i[1] * e[3] + e[5], + }, + Q = getCharCodes(r, t); + if (Q) + for (const e of Q) { + const t = n.charCodeToGlyphId, + i = createCharCode(t, c), + a = createCharCode(t, h); + g[e] = { + baseFontCharCode: i, + accentFontCharCode: a, + accentOffset: l, + }; + } + } + i.seacMap = g; + } + const h = i.fontMatrix + ? 1 / Math.max(...i.fontMatrix.slice(0, 4).map(Math.abs)) + : 1e3, + l = new OpenTypeFileBuilder("OTTO"); + l.addTable("CFF ", t.data); + l.addTable("OS/2", createOS2Table(i, g)); + l.addTable("cmap", createCmapTable(g, o, c)); + l.addTable( + "head", + "\0\0\0\0\0\0\0\0\0\0_<õ\0\0" + + safeString16(h) + + "\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0" + + safeString16(i.descent) + + "ÿ" + + safeString16(i.ascent) + + string16(i.italicAngle ? 2 : 0) + + "\0\0\0\0\0\0\0", + ); + l.addTable( + "hhea", + "\0\0\0" + + safeString16(i.ascent) + + safeString16(i.descent) + + "\0\0ÿÿ\0\0\0\0\0\0" + + safeString16(i.capHeight) + + safeString16(Math.tan(i.italicAngle) * i.xHeight) + + "\0\0\0\0\0\0\0\0\0\0\0\0" + + string16(c), + ); + l.addTable( + "hmtx", + (function fontFieldsHmtx() { + const e = t.charstrings, + i = t.cff ? t.cff.widths : null; + let a = "\0\0\0\0"; + for (let t = 1, s = c; t < s; t++) { + let s = 0; + if (e) { + const i = e[t - 1]; + s = "width" in i ? i.width : 0; + } else i && (s = Math.ceil(i[t] || 0)); + a += string16(s) + string16(0); + } + return a; + })(), + ); + l.addTable("maxp", "\0\0P\0" + string16(c)); + l.addTable("name", createNameTable(e)); + l.addTable("post", createPostTable(i)); + return l.toArray(); + } + _charToGlyph(e, t = !1) { + let i, + a, + s, + r = this._glyphCache[e]; + if (r?.isSpace === t) return r; + let n = e; + if (this.cMap?.contains(e)) { + n = this.cMap.lookup(e); + "string" == typeof n && (n = convertCidString(e, n)); + } + a = this.widths[n]; + "number" != typeof a && (a = this.defaultWidth); + const g = this.vmetrics?.[n]; + let o = this.toUnicode.get(e) || e; + "number" == typeof o && (o = String.fromCharCode(o)); + let c = void 0 !== this.toFontChar[e]; + i = this.toFontChar[e] || e; + if (this.missingFile) { + const t = this.differences[e] || this.defaultEncoding[e]; + (".notdef" !== t && "" !== t) || "Type1" !== this.type || (i = 32); + i = (function mapSpecialUnicodeValues(e) { + return e >= 65520 && e <= 65535 + ? 0 + : e >= 62976 && e <= 63743 + ? xi()[e] || e + : 173 === e + ? 45 + : e; + })(i); + } + this.isType3Font && (s = i); + let C = null; + if (this.seacMap?.[e]) { + c = !0; + const t = this.seacMap[e]; + i = t.baseFontCharCode; + C = { + fontChar: String.fromCodePoint(t.accentFontCharCode), + offset: t.accentOffset, + }; + } + let h = ""; + "number" == typeof i && + (i <= 1114111 + ? (h = String.fromCodePoint(i)) + : warn(`charToGlyph - invalid fontCharCode: ${i}`)); + r = new fonts_Glyph(e, h, o, C, a, g, s, t, c); + return (this._glyphCache[e] = r); + } + charsToGlyphs(e) { + let t = this._charsCache[e]; + if (t) return t; + t = []; + if (this.cMap) { + const i = Object.create(null), + a = e.length; + let s = 0; + for (; s < a; ) { + this.cMap.readCharCode(e, s, i); + const { charcode: a, length: r } = i; + s += r; + const n = this._charToGlyph(a, 1 === r && 32 === e.charCodeAt(s - 1)); + t.push(n); + } + } else + for (let i = 0, a = e.length; i < a; ++i) { + const a = e.charCodeAt(i), + s = this._charToGlyph(a, 32 === a); + t.push(s); + } + return (this._charsCache[e] = t); + } + getCharPositions(e) { + const t = []; + if (this.cMap) { + const i = Object.create(null); + let a = 0; + for (; a < e.length; ) { + this.cMap.readCharCode(e, a, i); + const s = i.length; + t.push([a, a + s]); + a += s; + } + } else for (let i = 0, a = e.length; i < a; ++i) t.push([i, i + 1]); + return t; + } + get glyphCacheValues() { + return Object.values(this._glyphCache); + } + encodeString(e) { + const t = [], + i = [], + hasCurrentBufErrors = () => t.length % 2 == 1, + a = + this.toUnicode instanceof IdentityToUnicodeMap + ? (e) => this.toUnicode.charCodeOf(e) + : (e) => this.toUnicode.charCodeOf(String.fromCodePoint(e)); + for (let s = 0, r = e.length; s < r; s++) { + const r = e.codePointAt(s); + r > 55295 && (r < 57344 || r > 65533) && s++; + if (this.toUnicode) { + const e = a(r); + if (-1 !== e) { + if (hasCurrentBufErrors()) { + t.push(i.join("")); + i.length = 0; + } + for ( + let t = (this.cMap ? this.cMap.getCharCodeLength(e) : 1) - 1; + t >= 0; + t-- + ) + i.push(String.fromCharCode((e >> (8 * t)) & 255)); + continue; + } + } + if (!hasCurrentBufErrors()) { + t.push(i.join("")); + i.length = 0; + } + i.push(String.fromCodePoint(r)); + } + t.push(i.join("")); + return t; + } +} +class ErrorFont { + constructor(e) { + this.error = e; + this.loadedName = "g_font_error"; + this.missingFile = !0; + } + charsToGlyphs() { + return []; + } + encodeString(e) { + return [e]; + } + exportData(e = !1) { + return { error: this.error }; + } +} +const Ea = 2, + ua = 3, + da = 4, + fa = 5, + pa = 6, + ma = 7; +class Pattern { + constructor() { + unreachable("Cannot initialize Pattern."); + } + static parseShading(e, t, i, a, s) { + const r = e instanceof BaseStream ? e.dict : e, + n = r.get("ShadingType"); + try { + switch (n) { + case Ea: + case ua: + return new RadialAxialShading(r, t, i, a, s); + case da: + case fa: + case pa: + case ma: + return new MeshShading(e, t, i, a, s); + default: + throw new FormatError("Unsupported ShadingType: " + n); + } + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(e); + return new DummyShading(); + } + } +} +class BaseShading { + static SMALL_NUMBER = 1e-6; + constructor() { + this.constructor === BaseShading && + unreachable("Cannot initialize BaseShading."); + } + getIR() { + unreachable("Abstract method `getIR` called."); + } +} +class RadialAxialShading extends BaseShading { + constructor(e, t, i, a, s) { + super(); + this.shadingType = e.get("ShadingType"); + let r = 0; + this.shadingType === Ea ? (r = 4) : this.shadingType === ua && (r = 6); + this.coordsArr = e.getArray("Coords"); + if (!isNumberArray(this.coordsArr, r)) + throw new FormatError("RadialAxialShading: Invalid /Coords array."); + const n = ColorSpace.parse({ + cs: e.getRaw("CS") || e.getRaw("ColorSpace"), + xref: t, + resources: i, + pdfFunctionFactory: a, + localColorSpaceCache: s, + }); + this.bbox = lookupNormalRect(e.getArray("BBox"), null); + let g = 0, + o = 1; + const c = e.getArray("Domain"); + isNumberArray(c, 2) && ([g, o] = c); + let C = !1, + h = !1; + const l = e.getArray("Extend"); + (function isBooleanArray(e, t) { + return ( + Array.isArray(e) && + (null === t || e.length === t) && + e.every((e) => "boolean" == typeof e) + ); + })(l, 2) && ([C, h] = l); + if (!(this.shadingType !== ua || (C && h))) { + const [e, t, i, a, s, r] = this.coordsArr, + n = Math.hypot(e - a, t - s); + i <= r + n && r <= i + n && warn("Unsupported radial gradient."); + } + this.extendStart = C; + this.extendEnd = h; + const Q = e.getRaw("Function"), + E = a.createFromArray(Q), + u = (o - g) / 840, + d = (this.colorStops = []); + if (g >= o || u <= 0) { + info("Bad shading domain."); + return; + } + const f = new Float32Array(n.numComps), + p = new Float32Array(1); + let m, + y = 0; + p[0] = g; + E(p, 0, f, 0); + let w = n.getRgb(f, 0); + const D = Util.makeHexColor(w[0], w[1], w[2]); + d.push([0, D]); + let b = 1; + p[0] = g + u; + E(p, 0, f, 0); + let F = n.getRgb(f, 0), + S = F[0] - w[0] + 1, + k = F[1] - w[1] + 1, + R = F[2] - w[2] + 1, + N = F[0] - w[0] - 1, + G = F[1] - w[1] - 1, + x = F[2] - w[2] - 1; + for (let e = 2; e < 840; e++) { + p[0] = g + e * u; + E(p, 0, f, 0); + m = n.getRgb(f, 0); + const t = e - y; + S = Math.min(S, (m[0] - w[0] + 1) / t); + k = Math.min(k, (m[1] - w[1] + 1) / t); + R = Math.min(R, (m[2] - w[2] + 1) / t); + N = Math.max(N, (m[0] - w[0] - 1) / t); + G = Math.max(G, (m[1] - w[1] - 1) / t); + x = Math.max(x, (m[2] - w[2] - 1) / t); + if (!(N <= S && G <= k && x <= R)) { + const e = Util.makeHexColor(F[0], F[1], F[2]); + d.push([b / 840, e]); + S = m[0] - F[0] + 1; + k = m[1] - F[1] + 1; + R = m[2] - F[2] + 1; + N = m[0] - F[0] - 1; + G = m[1] - F[1] - 1; + x = m[2] - F[2] - 1; + y = b; + w = F; + } + b = e; + F = m; + } + const U = Util.makeHexColor(F[0], F[1], F[2]); + d.push([1, U]); + let M = "transparent"; + if (e.has("Background")) { + m = n.getRgb(e.get("Background"), 0); + M = Util.makeHexColor(m[0], m[1], m[2]); + } + if (!C) { + d.unshift([0, M]); + d[1][0] += BaseShading.SMALL_NUMBER; + } + if (!h) { + d.at(-1)[0] -= BaseShading.SMALL_NUMBER; + d.push([1, M]); + } + this.colorStops = d; + } + getIR() { + const { coordsArr: e, shadingType: t } = this; + let i, a, s, r, n; + if (t === Ea) { + a = [e[0], e[1]]; + s = [e[2], e[3]]; + r = null; + n = null; + i = "axial"; + } else if (t === ua) { + a = [e[0], e[1]]; + s = [e[3], e[4]]; + r = e[2]; + n = e[5]; + i = "radial"; + } else unreachable(`getPattern type unknown: ${t}`); + return ["RadialAxial", i, this.bbox, this.colorStops, a, s, r, n]; + } +} +class MeshStreamReader { + constructor(e, t) { + this.stream = e; + this.context = t; + this.buffer = 0; + this.bufferLength = 0; + const i = t.numComps; + this.tmpCompsBuf = new Float32Array(i); + const a = t.colorSpace.numComps; + this.tmpCsCompsBuf = t.colorFn ? new Float32Array(a) : this.tmpCompsBuf; + } + get hasData() { + if (this.stream.end) return this.stream.pos < this.stream.end; + if (this.bufferLength > 0) return !0; + const e = this.stream.getByte(); + if (e < 0) return !1; + this.buffer = e; + this.bufferLength = 8; + return !0; + } + readBits(e) { + let t = this.buffer, + i = this.bufferLength; + if (32 === e) { + if (0 === i) + return ( + ((this.stream.getByte() << 24) | + (this.stream.getByte() << 16) | + (this.stream.getByte() << 8) | + this.stream.getByte()) >>> + 0 + ); + t = + (t << 24) | + (this.stream.getByte() << 16) | + (this.stream.getByte() << 8) | + this.stream.getByte(); + const e = this.stream.getByte(); + this.buffer = e & ((1 << i) - 1); + return ((t << (8 - i)) | ((255 & e) >> i)) >>> 0; + } + if (8 === e && 0 === i) return this.stream.getByte(); + for (; i < e; ) { + t = (t << 8) | this.stream.getByte(); + i += 8; + } + i -= e; + this.bufferLength = i; + this.buffer = t & ((1 << i) - 1); + return t >> i; + } + align() { + this.buffer = 0; + this.bufferLength = 0; + } + readFlag() { + return this.readBits(this.context.bitsPerFlag); + } + readCoordinate() { + const e = this.context.bitsPerCoordinate, + t = this.readBits(e), + i = this.readBits(e), + a = this.context.decode, + s = e < 32 ? 1 / ((1 << e) - 1) : 2.3283064365386963e-10; + return [t * s * (a[1] - a[0]) + a[0], i * s * (a[3] - a[2]) + a[2]]; + } + readComponents() { + const e = this.context.numComps, + t = this.context.bitsPerComponent, + i = t < 32 ? 1 / ((1 << t) - 1) : 2.3283064365386963e-10, + a = this.context.decode, + s = this.tmpCompsBuf; + for (let r = 0, n = 4; r < e; r++, n += 2) { + const e = this.readBits(t); + s[r] = e * i * (a[n + 1] - a[n]) + a[n]; + } + const r = this.tmpCsCompsBuf; + this.context.colorFn && this.context.colorFn(s, 0, r, 0); + return this.context.colorSpace.getRgb(r, 0); + } +} +let ya = Object.create(null); +function getB(e) { + return (ya[e] ||= (function buildB(e) { + const t = []; + for (let i = 0; i <= e; i++) { + const a = i / e, + s = 1 - a; + t.push( + new Float32Array([s ** 3, 3 * a * s ** 2, 3 * a ** 2 * s, a ** 3]), + ); + } + return t; + })(e)); +} +class MeshShading extends BaseShading { + static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; + static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; + static TRIANGLE_DENSITY = 20; + constructor(e, t, i, a, s) { + super(); + if (!(e instanceof BaseStream)) + throw new FormatError("Mesh data is not a stream"); + const r = e.dict; + this.shadingType = r.get("ShadingType"); + this.bbox = lookupNormalRect(r.getArray("BBox"), null); + const n = ColorSpace.parse({ + cs: r.getRaw("CS") || r.getRaw("ColorSpace"), + xref: t, + resources: i, + pdfFunctionFactory: a, + localColorSpaceCache: s, + }); + this.background = r.has("Background") + ? n.getRgb(r.get("Background"), 0) + : null; + const g = r.getRaw("Function"), + o = g ? a.createFromArray(g) : null; + this.coords = []; + this.colors = []; + this.figures = []; + const c = { + bitsPerCoordinate: r.get("BitsPerCoordinate"), + bitsPerComponent: r.get("BitsPerComponent"), + bitsPerFlag: r.get("BitsPerFlag"), + decode: r.getArray("Decode"), + colorFn: o, + colorSpace: n, + numComps: o ? 1 : n.numComps, + }, + C = new MeshStreamReader(e, c); + let h = !1; + switch (this.shadingType) { + case da: + this._decodeType4Shading(C); + break; + case fa: + const e = 0 | r.get("VerticesPerRow"); + if (e < 2) throw new FormatError("Invalid VerticesPerRow"); + this._decodeType5Shading(C, e); + break; + case pa: + this._decodeType6Shading(C); + h = !0; + break; + case ma: + this._decodeType7Shading(C); + h = !0; + break; + default: + unreachable("Unsupported mesh type."); + } + if (h) { + this._updateBounds(); + for (let e = 0, t = this.figures.length; e < t; e++) + this._buildFigureFromPatch(e); + } + this._updateBounds(); + this._packData(); + } + _decodeType4Shading(e) { + const t = this.coords, + i = this.colors, + a = [], + s = []; + let r = 0; + for (; e.hasData; ) { + const n = e.readFlag(), + g = e.readCoordinate(), + o = e.readComponents(); + if (0 === r) { + if (!(0 <= n && n <= 2)) throw new FormatError("Unknown type4 flag"); + switch (n) { + case 0: + r = 3; + break; + case 1: + s.push(s.at(-2), s.at(-1)); + r = 1; + break; + case 2: + s.push(s.at(-3), s.at(-1)); + r = 1; + } + a.push(n); + } + s.push(t.length); + t.push(g); + i.push(o); + r--; + e.align(); + } + this.figures.push({ + type: "triangles", + coords: new Int32Array(s), + colors: new Int32Array(s), + }); + } + _decodeType5Shading(e, t) { + const i = this.coords, + a = this.colors, + s = []; + for (; e.hasData; ) { + const t = e.readCoordinate(), + r = e.readComponents(); + s.push(i.length); + i.push(t); + a.push(r); + } + this.figures.push({ + type: "lattice", + coords: new Int32Array(s), + colors: new Int32Array(s), + verticesPerRow: t, + }); + } + _decodeType6Shading(e) { + const t = this.coords, + i = this.colors, + a = new Int32Array(16), + s = new Int32Array(4); + for (; e.hasData; ) { + const r = e.readFlag(); + if (!(0 <= r && r <= 3)) throw new FormatError("Unknown type6 flag"); + const n = t.length; + for (let i = 0, a = 0 !== r ? 8 : 12; i < a; i++) + t.push(e.readCoordinate()); + const g = i.length; + for (let t = 0, a = 0 !== r ? 2 : 4; t < a; t++) + i.push(e.readComponents()); + let o, c, C, h; + switch (r) { + case 0: + a[12] = n + 3; + a[13] = n + 4; + a[14] = n + 5; + a[15] = n + 6; + a[8] = n + 2; + a[11] = n + 7; + a[4] = n + 1; + a[7] = n + 8; + a[0] = n; + a[1] = n + 11; + a[2] = n + 10; + a[3] = n + 9; + s[2] = g + 1; + s[3] = g + 2; + s[0] = g; + s[1] = g + 3; + break; + case 1: + o = a[12]; + c = a[13]; + C = a[14]; + h = a[15]; + a[12] = h; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = C; + a[11] = n + 3; + a[4] = c; + a[7] = n + 4; + a[0] = o; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + o = s[2]; + c = s[3]; + s[2] = c; + s[3] = g; + s[0] = o; + s[1] = g + 1; + break; + case 2: + o = a[15]; + c = a[11]; + a[12] = a[3]; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = a[7]; + a[11] = n + 3; + a[4] = c; + a[7] = n + 4; + a[0] = o; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + o = s[3]; + s[2] = s[1]; + s[3] = g; + s[0] = o; + s[1] = g + 1; + break; + case 3: + a[12] = a[0]; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = a[1]; + a[11] = n + 3; + a[4] = a[2]; + a[7] = n + 4; + a[0] = a[3]; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + s[2] = s[0]; + s[3] = g; + s[0] = s[1]; + s[1] = g + 1; + } + a[5] = t.length; + t.push([ + (-4 * t[a[0]][0] - + t[a[15]][0] + + 6 * (t[a[4]][0] + t[a[1]][0]) - + 2 * (t[a[12]][0] + t[a[3]][0]) + + 3 * (t[a[13]][0] + t[a[7]][0])) / + 9, + (-4 * t[a[0]][1] - + t[a[15]][1] + + 6 * (t[a[4]][1] + t[a[1]][1]) - + 2 * (t[a[12]][1] + t[a[3]][1]) + + 3 * (t[a[13]][1] + t[a[7]][1])) / + 9, + ]); + a[6] = t.length; + t.push([ + (-4 * t[a[3]][0] - + t[a[12]][0] + + 6 * (t[a[2]][0] + t[a[7]][0]) - + 2 * (t[a[0]][0] + t[a[15]][0]) + + 3 * (t[a[4]][0] + t[a[14]][0])) / + 9, + (-4 * t[a[3]][1] - + t[a[12]][1] + + 6 * (t[a[2]][1] + t[a[7]][1]) - + 2 * (t[a[0]][1] + t[a[15]][1]) + + 3 * (t[a[4]][1] + t[a[14]][1])) / + 9, + ]); + a[9] = t.length; + t.push([ + (-4 * t[a[12]][0] - + t[a[3]][0] + + 6 * (t[a[8]][0] + t[a[13]][0]) - + 2 * (t[a[0]][0] + t[a[15]][0]) + + 3 * (t[a[11]][0] + t[a[1]][0])) / + 9, + (-4 * t[a[12]][1] - + t[a[3]][1] + + 6 * (t[a[8]][1] + t[a[13]][1]) - + 2 * (t[a[0]][1] + t[a[15]][1]) + + 3 * (t[a[11]][1] + t[a[1]][1])) / + 9, + ]); + a[10] = t.length; + t.push([ + (-4 * t[a[15]][0] - + t[a[0]][0] + + 6 * (t[a[11]][0] + t[a[14]][0]) - + 2 * (t[a[12]][0] + t[a[3]][0]) + + 3 * (t[a[2]][0] + t[a[8]][0])) / + 9, + (-4 * t[a[15]][1] - + t[a[0]][1] + + 6 * (t[a[11]][1] + t[a[14]][1]) - + 2 * (t[a[12]][1] + t[a[3]][1]) + + 3 * (t[a[2]][1] + t[a[8]][1])) / + 9, + ]); + this.figures.push({ + type: "patch", + coords: new Int32Array(a), + colors: new Int32Array(s), + }); + } + } + _decodeType7Shading(e) { + const t = this.coords, + i = this.colors, + a = new Int32Array(16), + s = new Int32Array(4); + for (; e.hasData; ) { + const r = e.readFlag(); + if (!(0 <= r && r <= 3)) throw new FormatError("Unknown type7 flag"); + const n = t.length; + for (let i = 0, a = 0 !== r ? 12 : 16; i < a; i++) + t.push(e.readCoordinate()); + const g = i.length; + for (let t = 0, a = 0 !== r ? 2 : 4; t < a; t++) + i.push(e.readComponents()); + let o, c, C, h; + switch (r) { + case 0: + a[12] = n + 3; + a[13] = n + 4; + a[14] = n + 5; + a[15] = n + 6; + a[8] = n + 2; + a[9] = n + 13; + a[10] = n + 14; + a[11] = n + 7; + a[4] = n + 1; + a[5] = n + 12; + a[6] = n + 15; + a[7] = n + 8; + a[0] = n; + a[1] = n + 11; + a[2] = n + 10; + a[3] = n + 9; + s[2] = g + 1; + s[3] = g + 2; + s[0] = g; + s[1] = g + 3; + break; + case 1: + o = a[12]; + c = a[13]; + C = a[14]; + h = a[15]; + a[12] = h; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = C; + a[9] = n + 9; + a[10] = n + 10; + a[11] = n + 3; + a[4] = c; + a[5] = n + 8; + a[6] = n + 11; + a[7] = n + 4; + a[0] = o; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + o = s[2]; + c = s[3]; + s[2] = c; + s[3] = g; + s[0] = o; + s[1] = g + 1; + break; + case 2: + o = a[15]; + c = a[11]; + a[12] = a[3]; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = a[7]; + a[9] = n + 9; + a[10] = n + 10; + a[11] = n + 3; + a[4] = c; + a[5] = n + 8; + a[6] = n + 11; + a[7] = n + 4; + a[0] = o; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + o = s[3]; + s[2] = s[1]; + s[3] = g; + s[0] = o; + s[1] = g + 1; + break; + case 3: + a[12] = a[0]; + a[13] = n + 0; + a[14] = n + 1; + a[15] = n + 2; + a[8] = a[1]; + a[9] = n + 9; + a[10] = n + 10; + a[11] = n + 3; + a[4] = a[2]; + a[5] = n + 8; + a[6] = n + 11; + a[7] = n + 4; + a[0] = a[3]; + a[1] = n + 7; + a[2] = n + 6; + a[3] = n + 5; + s[2] = s[0]; + s[3] = g; + s[0] = s[1]; + s[1] = g + 1; + } + this.figures.push({ + type: "patch", + coords: new Int32Array(a), + colors: new Int32Array(s), + }); + } + } + _buildFigureFromPatch(e) { + const t = this.figures[e]; + assert("patch" === t.type, "Unexpected patch mesh figure"); + const i = this.coords, + a = this.colors, + s = t.coords, + r = t.colors, + n = Math.min(i[s[0]][0], i[s[3]][0], i[s[12]][0], i[s[15]][0]), + g = Math.min(i[s[0]][1], i[s[3]][1], i[s[12]][1], i[s[15]][1]), + o = Math.max(i[s[0]][0], i[s[3]][0], i[s[12]][0], i[s[15]][0]), + c = Math.max(i[s[0]][1], i[s[3]][1], i[s[12]][1], i[s[15]][1]); + let C = Math.ceil( + ((o - n) * MeshShading.TRIANGLE_DENSITY) / + (this.bounds[2] - this.bounds[0]), + ); + C = Math.max( + MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, + Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, C), + ); + let h = Math.ceil( + ((c - g) * MeshShading.TRIANGLE_DENSITY) / + (this.bounds[3] - this.bounds[1]), + ); + h = Math.max( + MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, + Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, h), + ); + const l = C + 1, + Q = new Int32Array((h + 1) * l), + E = new Int32Array((h + 1) * l); + let u = 0; + const d = new Uint8Array(3), + f = new Uint8Array(3), + p = a[r[0]], + m = a[r[1]], + y = a[r[2]], + w = a[r[3]], + D = getB(h), + b = getB(C); + for (let e = 0; e <= h; e++) { + d[0] = ((p[0] * (h - e) + y[0] * e) / h) | 0; + d[1] = ((p[1] * (h - e) + y[1] * e) / h) | 0; + d[2] = ((p[2] * (h - e) + y[2] * e) / h) | 0; + f[0] = ((m[0] * (h - e) + w[0] * e) / h) | 0; + f[1] = ((m[1] * (h - e) + w[1] * e) / h) | 0; + f[2] = ((m[2] * (h - e) + w[2] * e) / h) | 0; + for (let t = 0; t <= C; t++, u++) { + if (!((0 !== e && e !== h) || (0 !== t && t !== C))) continue; + let r = 0, + n = 0, + g = 0; + for (let a = 0; a <= 3; a++) + for (let o = 0; o <= 3; o++, g++) { + const c = D[e][a] * b[t][o]; + r += i[s[g]][0] * c; + n += i[s[g]][1] * c; + } + Q[u] = i.length; + i.push([r, n]); + E[u] = a.length; + const o = new Uint8Array(3); + o[0] = ((d[0] * (C - t) + f[0] * t) / C) | 0; + o[1] = ((d[1] * (C - t) + f[1] * t) / C) | 0; + o[2] = ((d[2] * (C - t) + f[2] * t) / C) | 0; + a.push(o); + } + } + Q[0] = s[0]; + E[0] = r[0]; + Q[C] = s[3]; + E[C] = r[1]; + Q[l * h] = s[12]; + E[l * h] = r[2]; + Q[l * h + C] = s[15]; + E[l * h + C] = r[3]; + this.figures[e] = { + type: "lattice", + coords: Q, + colors: E, + verticesPerRow: l, + }; + } + _updateBounds() { + let e = this.coords[0][0], + t = this.coords[0][1], + i = e, + a = t; + for (let s = 1, r = this.coords.length; s < r; s++) { + const r = this.coords[s][0], + n = this.coords[s][1]; + e = e > r ? r : e; + t = t > n ? n : t; + i = i < r ? r : i; + a = a < n ? n : a; + } + this.bounds = [e, t, i, a]; + } + _packData() { + let e, t, i, a; + const s = this.coords, + r = new Float32Array(2 * s.length); + for (e = 0, i = 0, t = s.length; e < t; e++) { + const t = s[e]; + r[i++] = t[0]; + r[i++] = t[1]; + } + this.coords = r; + const n = this.colors, + g = new Uint8Array(3 * n.length); + for (e = 0, i = 0, t = n.length; e < t; e++) { + const t = n[e]; + g[i++] = t[0]; + g[i++] = t[1]; + g[i++] = t[2]; + } + this.colors = g; + const o = this.figures; + for (e = 0, t = o.length; e < t; e++) { + const t = o[e], + s = t.coords, + r = t.colors; + for (i = 0, a = s.length; i < a; i++) { + s[i] *= 2; + r[i] *= 3; + } + } + } + getIR() { + const { bounds: e } = this; + if (e[2] - e[0] == 0 || e[3] - e[1] == 0) + throw new FormatError(`Invalid MeshShading bounds: [${e}].`); + return [ + "Mesh", + this.shadingType, + this.coords, + this.colors, + this.figures, + e, + this.bbox, + this.background, + ]; + } +} +class DummyShading extends BaseShading { + getIR() { + return ["Dummy"]; + } +} +function getTilingPatternIR(e, t, a) { + const s = lookupMatrix(t.getArray("Matrix"), i), + r = lookupNormalRect(t.getArray("BBox"), null); + if (!r || r[2] - r[0] == 0 || r[3] - r[1] == 0) + throw new FormatError("Invalid getTilingPatternIR /BBox array."); + const n = t.get("XStep"); + if ("number" != typeof n) + throw new FormatError("Invalid getTilingPatternIR /XStep value."); + const g = t.get("YStep"); + if ("number" != typeof g) + throw new FormatError("Invalid getTilingPatternIR /YStep value."); + const o = t.get("PaintType"); + if (!Number.isInteger(o)) + throw new FormatError("Invalid getTilingPatternIR /PaintType value."); + const c = t.get("TilingType"); + if (!Number.isInteger(c)) + throw new FormatError("Invalid getTilingPatternIR /TilingType value."); + return ["TilingPattern", a, e, s, r, n, g, o, c]; +} +const wa = [ + 1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, + 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, + 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, + 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, + 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, + 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, + 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, + 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, + 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, + 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, + 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, + 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, + 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, + 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, + 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, + 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, + 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, + 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, + 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, + 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, + 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, + 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, + 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, + 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, + 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, + 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, + 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, + 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, + 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, + 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, + 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, + 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, + 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, + 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, + 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, + 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, + 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, + 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, + 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, + 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, + 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, + 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, + 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, + 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, + 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, + 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, + 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, + 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, + 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, + 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, + 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, + 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, + 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, + 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, + 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, + 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, + 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, + 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, + 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + Da = { lineHeight: 1.2207, lineGap: 0.2207 }, + ba = [ + 1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, + 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, + 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, + 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, + 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, + 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, + 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, + 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, + 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, + 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, + 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, + 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, + 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, + 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, + 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, + 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, + 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, + 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, + 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, + 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, + 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, + 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, + 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, + 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, + 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, + 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, + 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, + 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, + 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, + 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, + 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, + 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, + 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, + 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, + 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, + 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, + 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, + 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, + 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, + 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, + 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, + 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, + 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, + 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, + 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, + 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, + 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, + 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, + 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, + 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, + 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, + 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, + 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, + 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, + 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, + 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, + 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, + 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, + 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, + 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + Fa = { lineHeight: 1.2207, lineGap: 0.2207 }, + Sa = [ + 1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, + 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, + 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, + 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, + 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, + 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, + 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, + 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, + 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, + 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, + 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, + 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, + 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, + 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, + 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, + 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, + 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, + 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, + 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, + 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, + 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, + 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, + 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, + 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, + 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, + 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, + 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, + 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, + 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, + 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, + 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, + 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, + 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, + 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, + 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, + 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, + 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, + 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, + 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, + 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, + 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, + 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, + 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, + 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, + 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, + 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, + 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, + 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, + 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, + 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, + 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, + 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, + 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, + 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, + 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, + 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, + 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, + 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, + 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + ka = { lineHeight: 1.2207, lineGap: 0.2207 }, + Ra = [ + 1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, + 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, + 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, + 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, + 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, + 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, + 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, + 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, + 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, + 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, + 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, + 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, + 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, + 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, + 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, + 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, + 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, + 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, + 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, + 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, + 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, + 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, + 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, + 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, + 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, + 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, + 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, + 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, + 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, + 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, + 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, + 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, + 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, + 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, + 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, + 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, + 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, + 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, + 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, + 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, + 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, + 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, + 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, + 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, + 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, + 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, + 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, + 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, + 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, + 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, + 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, + 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, + 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, + 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, + 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, + 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, + 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, + 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, + 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, + 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + Na = { lineHeight: 1.2207, lineGap: 0.2207 }, + Ga = [ + 0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, + 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, + 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, + 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, + 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, + 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, + 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, + 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, + 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, + 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, + 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, + 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, + 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, + 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, + 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, + 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, + 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, + 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, + 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, + 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, + 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, + 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, + 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, + 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, + 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, + 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, + 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, + 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, + 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, + 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, + 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, + 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, + 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, + 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, + 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, + 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, + 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, + 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, + 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, + 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, + 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, + 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, + 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, + 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, + 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, + 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, + 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, + 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, + 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, + 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, + 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, + 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, + 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, + 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, + 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, + 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, + 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, + 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, + 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, + 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, + 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, + 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, + 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, + 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, + 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, + 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + xa = { lineHeight: 1.2, lineGap: 0.2 }, + Ua = [ + 0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, + 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, + 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, + 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, + 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, + 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, + 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, + 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, + 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, + 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, + 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, + 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, + 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, + 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, + 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, + 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, + 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, + 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, + 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, + 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, + 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, + 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, + 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, + 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, + 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, + 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, + 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, + 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, + 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, + 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, + 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, + 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, + 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, + 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, + 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, + 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, + 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, + 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, + 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, + 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, + 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, + 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, + 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, + 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, + 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, + 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, + 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, + 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, + 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, + 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, + 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, + 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, + 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, + 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, + 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, + 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, + 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, + 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, + 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, + 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, + 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, + 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, + 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, + 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, + 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + ], + Ma = { lineHeight: 1.35, lineGap: 0.2 }, + La = [ + 0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, + 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, + 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, + 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, + 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, + 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, + 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, + 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, + 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, + 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, + 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, + 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, + 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, + 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, + 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, + 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, + 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, + 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, + 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, + 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, + 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, + 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, + 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, + 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, + 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, + 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, + 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, + 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, + 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, + 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, + 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, + 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, + 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, + 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, + 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, + 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, + 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, + 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, + 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, + 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, + 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, + 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, + 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, + 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, + 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, + 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, + 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, + 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, + 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, + 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, + 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, + 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, + 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, + 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, + 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, + 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, + 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, + 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, + 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, + 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, + 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, + 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, + ], + Ha = { lineHeight: 1.35, lineGap: 0.2 }, + Ja = [ + 0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, + 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, + 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, + 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, + 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, + 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, + 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, + 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, + 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, + 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, + 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, + 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, + 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, + 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, + 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, + 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, + 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, + 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, + 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, + 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, + 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, + 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, + 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, + 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, + 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, + 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, + 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, + 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, + 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, + 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, + 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, + 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, + 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, + 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, + 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, + 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, + 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, + 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, + 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, + 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, + 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, + 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, + 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, + 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, + 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, + 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, + 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, + 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, + 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, + 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, + 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, + 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, + 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, + 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, + 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, + 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, + 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, + 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, + 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, + 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, + 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, + 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, + 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, + 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, + 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, + 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, + 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, + 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + ], + Ya = { lineHeight: 1.2, lineGap: 0.2 }, + va = [ + 365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, + 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, + 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, + 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, + 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, + 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, + 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, + 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1e3, + 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, + 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, + 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, + 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, + 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, + 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, + 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, + 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, + 778, 611, 778, 611, 1e3, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, + 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, + 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, + 611, 500, 611, 500, 278, 556, 722, 556, 1e3, 889, 778, 611, 667, 556, 611, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, + 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, + 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, + 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, + 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, + 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, + 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, + 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, + 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, + 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, + 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, + 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, + 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1e3, + 1e3, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1e3, 1e3, 240, + 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1e3, + 768, 600, 834, 834, 834, 834, 1e3, 500, 1e3, 500, 1e3, 500, 500, 494, 612, + 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, + 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, + 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, + 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, + 333, 333, 333, 333, 333, 333, 333, + ], + Ka = [ + -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, + 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, + 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, + 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, + 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, + 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, + 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, + 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, + 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, + 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, + 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, + 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, + 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, + 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, + 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, + 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, + 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, + 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, + 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + ], + Ta = [ + 365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, + 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, + 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, + 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, + 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, + 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, + 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, + 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1e3, + 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, + 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, + 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, + 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, + 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, + 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, + 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, + 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, + 778, 611, 778, 611, 1e3, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, + 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, + 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, + 611, 500, 611, 500, 278, 556, 722, 556, 1e3, 889, 778, 611, 667, 556, 611, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, + 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, + 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, + 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, + 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, + 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, + 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, + 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, + 729, 708, 979, 989, 854, 1e3, 708, 719, 1042, 729, 556, 619, 604, 534, 618, + 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, + 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, + 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, + 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1e3, 1e3, + 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1e3, 1e3, 240, 479, + 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1e3, 768, + 600, 834, 834, 834, 834, 999, 500, 1e3, 500, 1e3, 500, 500, 494, 612, 823, + 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, + 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, + 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, + 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, + 333, 333, 333, 333, 333, 333, + ], + qa = [ + -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, + 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, + 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, + 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, + 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, + 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, + 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, + 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, + 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, + 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, + 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, + 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, + 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, + 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, + 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, + 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, + 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, + 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, + 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + ], + Oa = [ + 365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, + 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, + 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, + 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, + 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, + 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, + 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, + 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1e3, + 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, + 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, + 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, + 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, + 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, + 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, + 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, + 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, + 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, + 778, 556, 778, 556, 1e3, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, + 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, + 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, + 611, 500, 611, 500, 222, 556, 667, 556, 1e3, 889, 778, 611, 667, 500, 611, + 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, + 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, + 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, + 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, + 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, + 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, + 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, + 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, + 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, + 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, + 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, + 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, + 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1e3, 1e3, + 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1e3, 1e3, 188, 354, + 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1e3, 768, + 600, 834, 834, 834, 834, 1e3, 500, 998, 500, 1e3, 500, 500, 494, 612, 823, + 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, + 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, + 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, + 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, + 324, 324, 316, 328, 398, 285, + ], + Pa = [ + -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, + 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, + 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, + 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, + 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, + 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, + 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, + 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, + 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, + 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, + 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, + 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, + 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, + 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, + 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, + 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, + 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, + 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, + 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + ], + Wa = [ + 365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, + 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, + 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, + 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, + 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, + 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, + 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, + 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, + 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1e3, + 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, + 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, + 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, + 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, + 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, + 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, + 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, + 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, + 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, + 778, 556, 778, 556, 1e3, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, + 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, + 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, + 611, 500, 611, 500, 222, 556, 667, 556, 1e3, 889, 778, 611, 667, 500, 611, + 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, + 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, + 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, + 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, + 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, + 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, + 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, + 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, + 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, + 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, + 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, + 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, + 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1e3, 1e3, + 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1e3, 1e3, 188, 354, + 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1e3, 768, + 600, 834, 834, 834, 834, 1e3, 500, 1e3, 500, 1e3, 500, 500, 494, 612, 823, + 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, + 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, + 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, + 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, + 324, 324, 316, 328, 398, 285, + ], + ja = [ + -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, + 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, + 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, + 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, + 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, + 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, + 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, + 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, + 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, + 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, + 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, + 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, + 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, + 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, + 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, + 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, + 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, + 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, + 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, + 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, + 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, + ], + Xa = [ + 1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, + 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, + 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, + 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, + 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, + 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, + 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, + 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, + 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, + 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, + 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, + 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, + 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, + 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, + 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, + 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, + 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, + 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, + 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, + 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, + 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, + 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, + 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, + 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, + 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, + 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, + 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, + 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, + 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, + 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, + 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, + 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, + 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, + 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, + 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, + 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, + 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, + 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, + 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, + 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, + 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, + 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, + 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, + 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, + 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, + 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, + 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, + 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, + 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, + 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, + 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, + 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, + 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + Za = { lineHeight: 1.2, lineGap: 0.2 }, + Va = [ + 1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, + 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, + 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, + 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, + 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, + 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, + 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, + 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, + 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, + 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, + 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, + 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, + 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, + 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, + 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, + 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, + 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, + 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, + 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, + 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, + 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, + 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, + 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, + 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, + 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, + 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, + 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, + 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, + 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, + 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, + 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, + 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, + 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, + 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, + 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, + 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, + 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, + 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, + 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, + 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, + 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, + 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, + 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, + 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, + 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, + 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, + 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, + 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, + 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, + 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, + 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, + 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, + 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, + 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + za = { lineHeight: 1.2, lineGap: 0.2 }, + _a = [ + 1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, + 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, + 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, + 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, + 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, + 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, + 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, + 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, + 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, + 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, + 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, + 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, + 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, + 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, + 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, + 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, + 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, + 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, + 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, + 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, + 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, + 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, + 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, + 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, + 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, + 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, + 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, + 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, + 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, + 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, + 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, + 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, + 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, + 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, + 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, + 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, + 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, + 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, + 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, + 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, + 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, + 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, + 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, + 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, + 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, + 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, + 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, + 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, + 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, + 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, + 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, + 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + $a = { lineHeight: 1.2, lineGap: 0.2 }, + As = [ + 1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, + 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, + 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, + 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, + 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, + 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, + 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, + 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, + 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, + 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, + 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, + 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, + 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, + 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, + 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, + 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, + 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, + 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, + 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, + 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, + 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, + 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, + 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, + 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, + 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, + 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, + 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, + 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, + 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, + 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, + 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, + 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, + 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, + 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, + 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, + 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, + 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, + 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, + 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, + 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, + 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, + 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, + 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, + 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, + 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, + 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, + 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, + 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, + 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, + 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, + 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, + 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + es = { lineHeight: 1.2, lineGap: 0.2 }, + ts = [ + 1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, + 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, + 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, + 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, + 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, + 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, + 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, + 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, + 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, + 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, + 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, + 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, + 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, + 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, + 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, + 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, + 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, + 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, + 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, + 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, + 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, + 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, + 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, + 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, + 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, + 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, + 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, + 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, + 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, + 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, + 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, + 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, + 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, + 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, + 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, + 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, + 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, + 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, + 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, + 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, + 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, + 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, + 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, + 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, + 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, + 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, + 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, + 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, + 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, + 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, + 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, + 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, + 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, + 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, + 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, + 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, + 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, + 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, + 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, + 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, + ], + is = { lineHeight: 1.33008, lineGap: 0 }, + as = [ + 1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, + 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, + 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, + 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, + 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, + 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, + 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, + 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, + 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, + 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, + 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, + 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, + 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, + 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, + 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, + 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, + 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, + 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, + 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, + 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, + 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, + 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, + 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, + 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, + 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, + 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, + 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, + 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, + 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, + 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, + 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, + 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, + 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, + 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, + 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, + 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, + 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, + 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, + 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, + 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, + 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, + 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, + 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, + 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, + 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, + 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, + 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, + 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, + 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, + 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, + 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, + 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, + 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, + 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, + 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, + 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, + 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, + 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, + 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, + 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + ], + ss = { lineHeight: 1.33008, lineGap: 0 }, + rs = [ + 1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, + 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, + 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, + 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, + 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, + 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, + 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, + 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, + 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, + 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, + 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, + 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, + 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, + 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, + 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, + 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, + 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, + 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, + 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, + 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, + 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, + 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, + 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, + 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, + 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, + 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, + 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, + 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, + 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, + 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, + 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, + 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, + 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, + 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, + 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, + 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, + 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, + 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, + 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, + 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, + 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, + 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, + 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, + 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, + 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, + 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, + 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, + 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, + 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, + 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, + 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, + 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, + 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, + 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, + 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, + 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, + 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, + 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, + 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, + 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + ns = { lineHeight: 1.33008, lineGap: 0 }, + gs = [ + 1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, + 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, + 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, + 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, + 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, + 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, + 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, + 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, + 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, + 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, + 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, + 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, + 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, + 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, + 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, + 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, + 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, + 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, + 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, + 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, + 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, + 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, + 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, + 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, + 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, + 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, + 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, + 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, + 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, + 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, + 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, + 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, + 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, + 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, + 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, + 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, + 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, + 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, + 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, + 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, + 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, + 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, + 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, + 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, + 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, + 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, + 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, + 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, + 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, + 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, + 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, + 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, + 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, + 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, + 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, + 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, + 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, + 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, + 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, + 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + ], + os = { lineHeight: 1.33008, lineGap: 0 }, + Is = getLookupTableFactory(function (e) { + e["MyriadPro-Regular"] = e["PdfJS-Fallback-Regular"] = { + name: "LiberationSans-Regular", + factors: As, + baseWidths: Wa, + baseMapping: ja, + metrics: es, + }; + e["MyriadPro-Bold"] = e["PdfJS-Fallback-Bold"] = { + name: "LiberationSans-Bold", + factors: Xa, + baseWidths: va, + baseMapping: Ka, + metrics: Za, + }; + e["MyriadPro-It"] = + e["MyriadPro-Italic"] = + e["PdfJS-Fallback-Italic"] = + { + name: "LiberationSans-Italic", + factors: _a, + baseWidths: Oa, + baseMapping: Pa, + metrics: $a, + }; + e["MyriadPro-BoldIt"] = + e["MyriadPro-BoldItalic"] = + e["PdfJS-Fallback-BoldItalic"] = + { + name: "LiberationSans-BoldItalic", + factors: Va, + baseWidths: Ta, + baseMapping: qa, + metrics: za, + }; + e.ArialMT = + e.Arial = + e["Arial-Regular"] = + { name: "LiberationSans-Regular", baseWidths: Wa, baseMapping: ja }; + e["Arial-BoldMT"] = e["Arial-Bold"] = { + name: "LiberationSans-Bold", + baseWidths: va, + baseMapping: Ka, + }; + e["Arial-ItalicMT"] = e["Arial-Italic"] = { + name: "LiberationSans-Italic", + baseWidths: Oa, + baseMapping: Pa, + }; + e["Arial-BoldItalicMT"] = e["Arial-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + baseWidths: Ta, + baseMapping: qa, + }; + e["Calibri-Regular"] = { + name: "LiberationSans-Regular", + factors: Ra, + baseWidths: Wa, + baseMapping: ja, + metrics: Na, + }; + e["Calibri-Bold"] = { + name: "LiberationSans-Bold", + factors: wa, + baseWidths: va, + baseMapping: Ka, + metrics: Da, + }; + e["Calibri-Italic"] = { + name: "LiberationSans-Italic", + factors: Sa, + baseWidths: Oa, + baseMapping: Pa, + metrics: ka, + }; + e["Calibri-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: ba, + baseWidths: Ta, + baseMapping: qa, + metrics: Fa, + }; + e["Segoeui-Regular"] = { + name: "LiberationSans-Regular", + factors: gs, + baseWidths: Wa, + baseMapping: ja, + metrics: os, + }; + e["Segoeui-Bold"] = { + name: "LiberationSans-Bold", + factors: ts, + baseWidths: va, + baseMapping: Ka, + metrics: is, + }; + e["Segoeui-Italic"] = { + name: "LiberationSans-Italic", + factors: rs, + baseWidths: Oa, + baseMapping: Pa, + metrics: ns, + }; + e["Segoeui-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: as, + baseWidths: Ta, + baseMapping: qa, + metrics: ss, + }; + e["Helvetica-Regular"] = e.Helvetica = { + name: "LiberationSans-Regular", + factors: Ja, + baseWidths: Wa, + baseMapping: ja, + metrics: Ya, + }; + e["Helvetica-Bold"] = { + name: "LiberationSans-Bold", + factors: Ga, + baseWidths: va, + baseMapping: Ka, + metrics: xa, + }; + e["Helvetica-Italic"] = { + name: "LiberationSans-Italic", + factors: La, + baseWidths: Oa, + baseMapping: Pa, + metrics: Ha, + }; + e["Helvetica-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: Ua, + baseWidths: Ta, + baseMapping: qa, + metrics: Ma, + }; + }); +function getXfaFontName(e) { + const t = normalizeFontName(e); + return Is()[t]; +} +function getXfaFontDict(e) { + const t = (function getXfaFontWidths(e) { + const t = getXfaFontName(e); + if (!t) return null; + const { baseWidths: i, baseMapping: a, factors: s } = t, + r = s ? i.map((e, t) => e * s[t]) : i; + let n, + g = -2; + const o = []; + for (const [e, t] of a.map((e, t) => [e, t]).sort(([e], [t]) => e - t)) + if (-1 !== e) + if (e === g + 1) { + n.push(r[t]); + g += 1; + } else { + g = e; + n = [r[t]]; + o.push(e, n); + } + return o; + })(e), + i = new Dict(null); + i.set("BaseFont", Name.get(e)); + i.set("Type", Name.get("Font")); + i.set("Subtype", Name.get("CIDFontType2")); + i.set("Encoding", Name.get("Identity-H")); + i.set("CIDToGIDMap", Name.get("Identity")); + i.set("W", t); + i.set("FirstChar", t[0]); + i.set("LastChar", t.at(-2) + t.at(-1).length - 1); + const a = new Dict(null); + i.set("FontDescriptor", a); + const s = new Dict(null); + s.set("Ordering", "Identity"); + s.set("Registry", "Adobe"); + s.set("Supplement", 0); + i.set("CIDSystemInfo", s); + return i; +} +class PostScriptParser { + constructor(e) { + this.lexer = e; + this.operators = []; + this.token = null; + this.prev = null; + } + nextToken() { + this.prev = this.token; + this.token = this.lexer.getToken(); + } + accept(e) { + if (this.token.type === e) { + this.nextToken(); + return !0; + } + return !1; + } + expect(e) { + if (this.accept(e)) return !0; + throw new FormatError( + `Unexpected symbol: found ${this.token.type} expected ${e}.`, + ); + } + parse() { + this.nextToken(); + this.expect(cs.LBRACE); + this.parseBlock(); + this.expect(cs.RBRACE); + return this.operators; + } + parseBlock() { + for (;;) + if (this.accept(cs.NUMBER)) this.operators.push(this.prev.value); + else if (this.accept(cs.OPERATOR)) this.operators.push(this.prev.value); + else { + if (!this.accept(cs.LBRACE)) return; + this.parseCondition(); + } + } + parseCondition() { + const e = this.operators.length; + this.operators.push(null, null); + this.parseBlock(); + this.expect(cs.RBRACE); + if (this.accept(cs.IF)) { + this.operators[e] = this.operators.length; + this.operators[e + 1] = "jz"; + } else { + if (!this.accept(cs.LBRACE)) + throw new FormatError("PS Function: error parsing conditional."); + { + const t = this.operators.length; + this.operators.push(null, null); + const i = this.operators.length; + this.parseBlock(); + this.expect(cs.RBRACE); + this.expect(cs.IFELSE); + this.operators[t] = this.operators.length; + this.operators[t + 1] = "j"; + this.operators[e] = i; + this.operators[e + 1] = "jz"; + } + } + } +} +const cs = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; +class PostScriptToken { + static get opCache() { + return shadow(this, "opCache", Object.create(null)); + } + constructor(e, t) { + this.type = e; + this.value = t; + } + static getOperator(e) { + return (PostScriptToken.opCache[e] ||= new PostScriptToken(cs.OPERATOR, e)); + } + static get LBRACE() { + return shadow(this, "LBRACE", new PostScriptToken(cs.LBRACE, "{")); + } + static get RBRACE() { + return shadow(this, "RBRACE", new PostScriptToken(cs.RBRACE, "}")); + } + static get IF() { + return shadow(this, "IF", new PostScriptToken(cs.IF, "IF")); + } + static get IFELSE() { + return shadow(this, "IFELSE", new PostScriptToken(cs.IFELSE, "IFELSE")); + } +} +class PostScriptLexer { + constructor(e) { + this.stream = e; + this.nextChar(); + this.strBuf = []; + } + nextChar() { + return (this.currentChar = this.stream.getByte()); + } + getToken() { + let e = !1, + t = this.currentChar; + for (;;) { + if (t < 0) return pt; + if (e) (10 !== t && 13 !== t) || (e = !1); + else if (37 === t) e = !0; + else if (!isWhiteSpace(t)) break; + t = this.nextChar(); + } + switch (0 | t) { + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 43: + case 45: + case 46: + return new PostScriptToken(cs.NUMBER, this.getNumber()); + case 123: + this.nextChar(); + return PostScriptToken.LBRACE; + case 125: + this.nextChar(); + return PostScriptToken.RBRACE; + } + const i = this.strBuf; + i.length = 0; + i[0] = String.fromCharCode(t); + for ( + ; + (t = this.nextChar()) >= 0 && + ((t >= 65 && t <= 90) || (t >= 97 && t <= 122)); + + ) + i.push(String.fromCharCode(t)); + const a = i.join(""); + switch (a.toLowerCase()) { + case "if": + return PostScriptToken.IF; + case "ifelse": + return PostScriptToken.IFELSE; + default: + return PostScriptToken.getOperator(a); + } + } + getNumber() { + let e = this.currentChar; + const t = this.strBuf; + t.length = 0; + t[0] = String.fromCharCode(e); + for ( + ; + (e = this.nextChar()) >= 0 && + ((e >= 48 && e <= 57) || 45 === e || 46 === e); + + ) + t.push(String.fromCharCode(e)); + const i = parseFloat(t.join("")); + if (isNaN(i)) throw new FormatError(`Invalid floating point number: ${i}`); + return i; + } +} +class BaseLocalCache { + constructor(e) { + this.constructor === BaseLocalCache && + unreachable("Cannot initialize BaseLocalCache."); + this._onlyRefs = !0 === e?.onlyRefs; + if (!this._onlyRefs) { + this._nameRefMap = new Map(); + this._imageMap = new Map(); + } + this._imageCache = new RefSetCache(); + } + getByName(e) { + this._onlyRefs && unreachable("Should not call `getByName` method."); + const t = this._nameRefMap.get(e); + return t ? this.getByRef(t) : this._imageMap.get(e) || null; + } + getByRef(e) { + return this._imageCache.get(e) || null; + } + set(e, t, i) { + unreachable("Abstract method `set` called."); + } +} +class LocalImageCache extends BaseLocalCache { + set(e, t = null, i) { + if ("string" != typeof e) + throw new Error('LocalImageCache.set - expected "name" argument.'); + if (t) { + if (this._imageCache.has(t)) return; + this._nameRefMap.set(e, t); + this._imageCache.put(t, i); + } else this._imageMap.has(e) || this._imageMap.set(e, i); + } +} +class LocalColorSpaceCache extends BaseLocalCache { + set(e = null, t = null, i) { + if ("string" != typeof e && !t) + throw new Error( + 'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.', + ); + if (t) { + if (this._imageCache.has(t)) return; + null !== e && this._nameRefMap.set(e, t); + this._imageCache.put(t, i); + } else this._imageMap.has(e) || this._imageMap.set(e, i); + } +} +class LocalFunctionCache extends BaseLocalCache { + constructor(e) { + super({ onlyRefs: !0 }); + } + set(e = null, t, i) { + if (!t) + throw new Error('LocalFunctionCache.set - expected "ref" argument.'); + this._imageCache.has(t) || this._imageCache.put(t, i); + } +} +class LocalGStateCache extends BaseLocalCache { + set(e, t = null, i) { + if ("string" != typeof e) + throw new Error('LocalGStateCache.set - expected "name" argument.'); + if (t) { + if (this._imageCache.has(t)) return; + this._nameRefMap.set(e, t); + this._imageCache.put(t, i); + } else this._imageMap.has(e) || this._imageMap.set(e, i); + } +} +class LocalTilingPatternCache extends BaseLocalCache { + constructor(e) { + super({ onlyRefs: !0 }); + } + set(e = null, t, i) { + if (!t) + throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); + this._imageCache.has(t) || this._imageCache.put(t, i); + } +} +class RegionalImageCache extends BaseLocalCache { + constructor(e) { + super({ onlyRefs: !0 }); + } + set(e = null, t, i) { + if (!t) + throw new Error('RegionalImageCache.set - expected "ref" argument.'); + this._imageCache.has(t) || this._imageCache.put(t, i); + } +} +class GlobalImageCache { + static NUM_PAGES_THRESHOLD = 2; + static MIN_IMAGES_TO_CACHE = 10; + static MAX_BYTE_SIZE = 5e7; + #D = new RefSet(); + constructor() { + this._refCache = new RefSetCache(); + this._imageCache = new RefSetCache(); + } + get #b() { + let e = 0; + for (const t of this._imageCache) e += t.byteSize; + return e; + } + get #F() { + return ( + !(this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) && + !(this.#b < GlobalImageCache.MAX_BYTE_SIZE) + ); + } + shouldCache(e, t) { + let i = this._refCache.get(e); + if (!i) { + i = new Set(); + this._refCache.put(e, i); + } + i.add(t); + return ( + !(i.size < GlobalImageCache.NUM_PAGES_THRESHOLD) && + !(!this._imageCache.has(e) && this.#F) + ); + } + addDecodeFailed(e) { + this.#D.put(e); + } + hasDecodeFailed(e) { + return this.#D.has(e); + } + addByteSize(e, t) { + const i = this._imageCache.get(e); + i && (i.byteSize || (i.byteSize = t)); + } + getData(e, t) { + const i = this._refCache.get(e); + if (!i) return null; + if (i.size < GlobalImageCache.NUM_PAGES_THRESHOLD) return null; + const a = this._imageCache.get(e); + if (!a) return null; + i.add(t); + return a; + } + setData(e, t) { + if (!this._refCache.has(e)) + throw new Error( + 'GlobalImageCache.setData - expected "shouldCache" to have been called.', + ); + this._imageCache.has(e) || + (this.#F + ? warn("GlobalImageCache.setData - cache limit reached.") + : this._imageCache.put(e, t)); + } + clear(e = !1) { + if (!e) { + this.#D.clear(); + this._refCache.clear(); + } + this._imageCache.clear(); + } +} +class PDFFunctionFactory { + constructor({ xref: e, isEvalSupported: t = !0 }) { + this.xref = e; + this.isEvalSupported = !1 !== t; + } + create(e) { + const t = this.getCached(e); + if (t) return t; + const i = PDFFunction.parse({ + xref: this.xref, + isEvalSupported: this.isEvalSupported, + fn: e instanceof Ref ? this.xref.fetch(e) : e, + }); + this._cache(e, i); + return i; + } + createFromArray(e) { + const t = this.getCached(e); + if (t) return t; + const i = PDFFunction.parseArray({ + xref: this.xref, + isEvalSupported: this.isEvalSupported, + fnObj: e instanceof Ref ? this.xref.fetch(e) : e, + }); + this._cache(e, i); + return i; + } + getCached(e) { + let t; + e instanceof Ref + ? (t = e) + : e instanceof Dict + ? (t = e.objId) + : e instanceof BaseStream && (t = e.dict?.objId); + if (t) { + const e = this._localFunctionCache.getByRef(t); + if (e) return e; + } + return null; + } + _cache(e, t) { + if (!t) + throw new Error( + 'PDFFunctionFactory._cache - expected "parsedFunction" argument.', + ); + let i; + e instanceof Ref + ? (i = e) + : e instanceof Dict + ? (i = e.objId) + : e instanceof BaseStream && (i = e.dict?.objId); + i && this._localFunctionCache.set(null, i, t); + } + get _localFunctionCache() { + return shadow(this, "_localFunctionCache", new LocalFunctionCache()); + } +} +function toNumberArray(e) { + return Array.isArray(e) + ? isNumberArray(e, null) + ? e + : e.map((e) => +e) + : null; +} +class PDFFunction { + static getSampleArray(e, t, i, a) { + let s, + r, + n = 1; + for (s = 0, r = e.length; s < r; s++) n *= e[s]; + n *= t; + const g = new Array(n); + let o = 0, + c = 0; + const C = 1 / (2 ** i - 1), + h = a.getBytes((n * i + 7) / 8); + let l = 0; + for (s = 0; s < n; s++) { + for (; o < i; ) { + c <<= 8; + c |= h[l++]; + o += 8; + } + o -= i; + g[s] = (c >> o) * C; + c &= (1 << o) - 1; + } + return g; + } + static parse({ xref: e, isEvalSupported: t, fn: i }) { + const a = i.dict || i; + switch (a.get("FunctionType")) { + case 0: + return this.constructSampled({ + xref: e, + isEvalSupported: t, + fn: i, + dict: a, + }); + case 1: + break; + case 2: + return this.constructInterpolated({ + xref: e, + isEvalSupported: t, + dict: a, + }); + case 3: + return this.constructStiched({ xref: e, isEvalSupported: t, dict: a }); + case 4: + return this.constructPostScript({ + xref: e, + isEvalSupported: t, + fn: i, + dict: a, + }); + } + throw new FormatError("Unknown type of function"); + } + static parseArray({ xref: e, isEvalSupported: t, fnObj: i }) { + if (!Array.isArray(i)) + return this.parse({ xref: e, isEvalSupported: t, fn: i }); + const a = []; + for (const s of i) + a.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(s) })); + return function (e, t, i, s) { + for (let r = 0, n = a.length; r < n; r++) a[r](e, t, i, s + r); + }; + } + static constructSampled({ xref: e, isEvalSupported: t, fn: i, dict: a }) { + function toMultiArray(e) { + const t = e.length, + i = []; + let a = 0; + for (let s = 0; s < t; s += 2) i[a++] = [e[s], e[s + 1]]; + return i; + } + function interpolate(e, t, i, a, s) { + return a + ((s - a) / (i - t)) * (e - t); + } + let s = toNumberArray(a.getArray("Domain")), + r = toNumberArray(a.getArray("Range")); + if (!s || !r) throw new FormatError("No domain or range"); + const n = s.length / 2, + g = r.length / 2; + s = toMultiArray(s); + r = toMultiArray(r); + const o = toNumberArray(a.getArray("Size")), + c = a.get("BitsPerSample"), + C = a.get("Order") || 1; + 1 !== C && info("No support for cubic spline interpolation: " + C); + let h = toNumberArray(a.getArray("Encode")); + if (h) h = toMultiArray(h); + else { + h = []; + for (let e = 0; e < n; ++e) h.push([0, o[e] - 1]); + } + let l = toNumberArray(a.getArray("Decode")); + l = l ? toMultiArray(l) : r; + const Q = this.getSampleArray(o, g, c, i); + return function constructSampledFn(e, t, i, a) { + const c = 1 << n, + C = new Float64Array(c), + E = new Uint32Array(c); + let u, d; + for (d = 0; d < c; d++) C[d] = 1; + let f = g, + p = 1; + for (u = 0; u < n; ++u) { + const i = s[u][0], + a = s[u][1]; + let r = interpolate( + Math.min(Math.max(e[t + u], i), a), + i, + a, + h[u][0], + h[u][1], + ); + const n = o[u]; + r = Math.min(Math.max(r, 0), n - 1); + const g = r < n - 1 ? Math.floor(r) : r - 1, + l = g + 1 - r, + Q = r - g, + m = g * f, + y = m + f; + for (d = 0; d < c; d++) + if (d & p) { + C[d] *= Q; + E[d] += y; + } else { + C[d] *= l; + E[d] += m; + } + f *= n; + p <<= 1; + } + for (d = 0; d < g; ++d) { + let e = 0; + for (u = 0; u < c; u++) e += Q[E[u] + d] * C[u]; + e = interpolate(e, 0, 1, l[d][0], l[d][1]); + i[a + d] = Math.min(Math.max(e, r[d][0]), r[d][1]); + } + }; + } + static constructInterpolated({ xref: e, isEvalSupported: t, dict: i }) { + const a = toNumberArray(i.getArray("C0")) || [0], + s = toNumberArray(i.getArray("C1")) || [1], + r = i.get("N"), + n = []; + for (let e = 0, t = a.length; e < t; ++e) n.push(s[e] - a[e]); + const g = n.length; + return function constructInterpolatedFn(e, t, i, s) { + const o = 1 === r ? e[t] : e[t] ** r; + for (let e = 0; e < g; ++e) i[s + e] = a[e] + o * n[e]; + }; + } + static constructStiched({ xref: e, isEvalSupported: t, dict: i }) { + const a = toNumberArray(i.getArray("Domain")); + if (!a) throw new FormatError("No domain"); + if (1 !== a.length / 2) + throw new FormatError("Bad domain for stiched function"); + const s = []; + for (const a of i.get("Functions")) + s.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(a) })); + const r = toNumberArray(i.getArray("Bounds")), + n = toNumberArray(i.getArray("Encode")), + g = new Float32Array(1); + return function constructStichedFn(e, t, i, o) { + const c = (function constructStichedFromIRClip(e, t, i) { + e > i ? (e = i) : e < t && (e = t); + return e; + })(e[t], a[0], a[1]), + C = r.length; + let h; + for (h = 0; h < C && !(c < r[h]); ++h); + let l = a[0]; + h > 0 && (l = r[h - 1]); + let Q = a[1]; + h < r.length && (Q = r[h]); + const E = n[2 * h], + u = n[2 * h + 1]; + g[0] = l === Q ? E : E + ((c - l) * (u - E)) / (Q - l); + s[h](g, 0, i, o); + }; + } + static constructPostScript({ xref: e, isEvalSupported: t, fn: i, dict: a }) { + const s = toNumberArray(a.getArray("Domain")), + r = toNumberArray(a.getArray("Range")); + if (!s) throw new FormatError("No domain."); + if (!r) throw new FormatError("No range."); + const n = new PostScriptLexer(i), + g = new PostScriptParser(n).parse(); + if (t && FeatureTest.isEvalSupported) { + const e = new PostScriptCompiler().compile(g, s, r); + if (e) return new Function("src", "srcOffset", "dest", "destOffset", e); + } + info("Unable to compile PS function"); + const o = r.length >> 1, + c = s.length >> 1, + C = new PostScriptEvaluator(g), + h = Object.create(null); + let l = 8192; + const Q = new Float32Array(c); + return function constructPostScriptFn(e, t, i, a) { + let s, + n, + g = ""; + const E = Q; + for (s = 0; s < c; s++) { + n = e[t + s]; + E[s] = n; + g += n + "_"; + } + const u = h[g]; + if (void 0 !== u) { + i.set(u, a); + return; + } + const d = new Float32Array(o), + f = C.execute(E), + p = f.length - o; + for (s = 0; s < o; s++) { + n = f[p + s]; + let e = r[2 * s]; + if (n < e) n = e; + else { + e = r[2 * s + 1]; + n > e && (n = e); + } + d[s] = n; + } + if (l > 0) { + l--; + h[g] = d; + } + i.set(d, a); + }; + } +} +function isPDFFunction(e) { + let t; + if (e instanceof Dict) t = e; + else { + if (!(e instanceof BaseStream)) return !1; + t = e.dict; + } + return t.has("FunctionType"); +} +class PostScriptStack { + static MAX_STACK_SIZE = 100; + constructor(e) { + this.stack = e ? Array.from(e) : []; + } + push(e) { + if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) + throw new Error("PostScript function stack overflow."); + this.stack.push(e); + } + pop() { + if (this.stack.length <= 0) + throw new Error("PostScript function stack underflow."); + return this.stack.pop(); + } + copy(e) { + if (this.stack.length + e >= PostScriptStack.MAX_STACK_SIZE) + throw new Error("PostScript function stack overflow."); + const t = this.stack; + for (let i = t.length - e, a = e - 1; a >= 0; a--, i++) t.push(t[i]); + } + index(e) { + this.push(this.stack[this.stack.length - e - 1]); + } + roll(e, t) { + const i = this.stack, + a = i.length - e, + s = i.length - 1, + r = a + (t - Math.floor(t / e) * e); + for (let e = a, t = s; e < t; e++, t--) { + const a = i[e]; + i[e] = i[t]; + i[t] = a; + } + for (let e = a, t = r - 1; e < t; e++, t--) { + const a = i[e]; + i[e] = i[t]; + i[t] = a; + } + for (let e = r, t = s; e < t; e++, t--) { + const a = i[e]; + i[e] = i[t]; + i[t] = a; + } + } +} +class PostScriptEvaluator { + constructor(e) { + this.operators = e; + } + execute(e) { + const t = new PostScriptStack(e); + let i = 0; + const a = this.operators, + s = a.length; + let r, n, g; + for (; i < s; ) { + r = a[i++]; + if ("number" != typeof r) + switch (r) { + case "jz": + g = t.pop(); + n = t.pop(); + n || (i = g); + break; + case "j": + n = t.pop(); + i = n; + break; + case "abs": + n = t.pop(); + t.push(Math.abs(n)); + break; + case "add": + g = t.pop(); + n = t.pop(); + t.push(n + g); + break; + case "and": + g = t.pop(); + n = t.pop(); + "boolean" == typeof n && "boolean" == typeof g + ? t.push(n && g) + : t.push(n & g); + break; + case "atan": + g = t.pop(); + n = t.pop(); + n = (Math.atan2(n, g) / Math.PI) * 180; + n < 0 && (n += 360); + t.push(n); + break; + case "bitshift": + g = t.pop(); + n = t.pop(); + n > 0 ? t.push(n << g) : t.push(n >> g); + break; + case "ceiling": + n = t.pop(); + t.push(Math.ceil(n)); + break; + case "copy": + n = t.pop(); + t.copy(n); + break; + case "cos": + n = t.pop(); + t.push(Math.cos(((n % 360) / 180) * Math.PI)); + break; + case "cvi": + n = 0 | t.pop(); + t.push(n); + break; + case "cvr": + break; + case "div": + g = t.pop(); + n = t.pop(); + t.push(n / g); + break; + case "dup": + t.copy(1); + break; + case "eq": + g = t.pop(); + n = t.pop(); + t.push(n === g); + break; + case "exch": + t.roll(2, 1); + break; + case "exp": + g = t.pop(); + n = t.pop(); + t.push(n ** g); + break; + case "false": + t.push(!1); + break; + case "floor": + n = t.pop(); + t.push(Math.floor(n)); + break; + case "ge": + g = t.pop(); + n = t.pop(); + t.push(n >= g); + break; + case "gt": + g = t.pop(); + n = t.pop(); + t.push(n > g); + break; + case "idiv": + g = t.pop(); + n = t.pop(); + t.push((n / g) | 0); + break; + case "index": + n = t.pop(); + t.index(n); + break; + case "le": + g = t.pop(); + n = t.pop(); + t.push(n <= g); + break; + case "ln": + n = t.pop(); + t.push(Math.log(n)); + break; + case "log": + n = t.pop(); + t.push(Math.log10(n)); + break; + case "lt": + g = t.pop(); + n = t.pop(); + t.push(n < g); + break; + case "mod": + g = t.pop(); + n = t.pop(); + t.push(n % g); + break; + case "mul": + g = t.pop(); + n = t.pop(); + t.push(n * g); + break; + case "ne": + g = t.pop(); + n = t.pop(); + t.push(n !== g); + break; + case "neg": + n = t.pop(); + t.push(-n); + break; + case "not": + n = t.pop(); + "boolean" == typeof n ? t.push(!n) : t.push(~n); + break; + case "or": + g = t.pop(); + n = t.pop(); + "boolean" == typeof n && "boolean" == typeof g + ? t.push(n || g) + : t.push(n | g); + break; + case "pop": + t.pop(); + break; + case "roll": + g = t.pop(); + n = t.pop(); + t.roll(n, g); + break; + case "round": + n = t.pop(); + t.push(Math.round(n)); + break; + case "sin": + n = t.pop(); + t.push(Math.sin(((n % 360) / 180) * Math.PI)); + break; + case "sqrt": + n = t.pop(); + t.push(Math.sqrt(n)); + break; + case "sub": + g = t.pop(); + n = t.pop(); + t.push(n - g); + break; + case "true": + t.push(!0); + break; + case "truncate": + n = t.pop(); + n = n < 0 ? Math.ceil(n) : Math.floor(n); + t.push(n); + break; + case "xor": + g = t.pop(); + n = t.pop(); + "boolean" == typeof n && "boolean" == typeof g + ? t.push(n !== g) + : t.push(n ^ g); + break; + default: + throw new FormatError(`Unknown operator ${r}`); + } + else t.push(r); + } + return t.stack; + } +} +class AstNode { + constructor(e) { + this.type = e; + } + visit(e) { + unreachable("abstract method"); + } +} +class AstArgument extends AstNode { + constructor(e, t, i) { + super("args"); + this.index = e; + this.min = t; + this.max = i; + } + visit(e) { + e.visitArgument(this); + } +} +class AstLiteral extends AstNode { + constructor(e) { + super("literal"); + this.number = e; + this.min = e; + this.max = e; + } + visit(e) { + e.visitLiteral(this); + } +} +class AstBinaryOperation extends AstNode { + constructor(e, t, i, a, s) { + super("binary"); + this.op = e; + this.arg1 = t; + this.arg2 = i; + this.min = a; + this.max = s; + } + visit(e) { + e.visitBinaryOperation(this); + } +} +class AstMin extends AstNode { + constructor(e, t) { + super("max"); + this.arg = e; + this.min = e.min; + this.max = t; + } + visit(e) { + e.visitMin(this); + } +} +class AstVariable extends AstNode { + constructor(e, t, i) { + super("var"); + this.index = e; + this.min = t; + this.max = i; + } + visit(e) { + e.visitVariable(this); + } +} +class AstVariableDefinition extends AstNode { + constructor(e, t) { + super("definition"); + this.variable = e; + this.arg = t; + } + visit(e) { + e.visitVariableDefinition(this); + } +} +class ExpressionBuilderVisitor { + constructor() { + this.parts = []; + } + visitArgument(e) { + this.parts.push( + "Math.max(", + e.min, + ", Math.min(", + e.max, + ", src[srcOffset + ", + e.index, + "]))", + ); + } + visitVariable(e) { + this.parts.push("v", e.index); + } + visitLiteral(e) { + this.parts.push(e.number); + } + visitBinaryOperation(e) { + this.parts.push("("); + e.arg1.visit(this); + this.parts.push(" ", e.op, " "); + e.arg2.visit(this); + this.parts.push(")"); + } + visitVariableDefinition(e) { + this.parts.push("var "); + e.variable.visit(this); + this.parts.push(" = "); + e.arg.visit(this); + this.parts.push(";"); + } + visitMin(e) { + this.parts.push("Math.min("); + e.arg.visit(this); + this.parts.push(", ", e.max, ")"); + } + toString() { + return this.parts.join(""); + } +} +function buildAddOperation(e, t) { + return "literal" === t.type && 0 === t.number + ? e + : "literal" === e.type && 0 === e.number + ? t + : "literal" === t.type && "literal" === e.type + ? new AstLiteral(e.number + t.number) + : new AstBinaryOperation("+", e, t, e.min + t.min, e.max + t.max); +} +function buildMulOperation(e, t) { + if ("literal" === t.type) { + if (0 === t.number) return new AstLiteral(0); + if (1 === t.number) return e; + if ("literal" === e.type) return new AstLiteral(e.number * t.number); + } + if ("literal" === e.type) { + if (0 === e.number) return new AstLiteral(0); + if (1 === e.number) return t; + } + const i = Math.min( + e.min * t.min, + e.min * t.max, + e.max * t.min, + e.max * t.max, + ), + a = Math.max(e.min * t.min, e.min * t.max, e.max * t.min, e.max * t.max); + return new AstBinaryOperation("*", e, t, i, a); +} +function buildSubOperation(e, t) { + if ("literal" === t.type) { + if (0 === t.number) return e; + if ("literal" === e.type) return new AstLiteral(e.number - t.number); + } + return "binary" === t.type && + "-" === t.op && + "literal" === e.type && + 1 === e.number && + "literal" === t.arg1.type && + 1 === t.arg1.number + ? t.arg2 + : new AstBinaryOperation("-", e, t, e.min - t.max, e.max - t.min); +} +function buildMinOperation(e, t) { + return e.min >= t ? new AstLiteral(t) : e.max <= t ? e : new AstMin(e, t); +} +class PostScriptCompiler { + compile(e, t, i) { + const a = [], + s = [], + r = t.length >> 1, + n = i.length >> 1; + let g, + o, + c, + C, + h, + l, + Q, + E, + u = 0; + for (let e = 0; e < r; e++) + a.push(new AstArgument(e, t[2 * e], t[2 * e + 1])); + for (let t = 0, i = e.length; t < i; t++) { + E = e[t]; + if ("number" != typeof E) + switch (E) { + case "add": + if (a.length < 2) return null; + C = a.pop(); + c = a.pop(); + a.push(buildAddOperation(c, C)); + break; + case "cvr": + if (a.length < 1) return null; + break; + case "mul": + if (a.length < 2) return null; + C = a.pop(); + c = a.pop(); + a.push(buildMulOperation(c, C)); + break; + case "sub": + if (a.length < 2) return null; + C = a.pop(); + c = a.pop(); + a.push(buildSubOperation(c, C)); + break; + case "exch": + if (a.length < 2) return null; + h = a.pop(); + l = a.pop(); + a.push(h, l); + break; + case "pop": + if (a.length < 1) return null; + a.pop(); + break; + case "index": + if (a.length < 1) return null; + c = a.pop(); + if ("literal" !== c.type) return null; + g = c.number; + if (g < 0 || !Number.isInteger(g) || a.length < g) return null; + h = a[a.length - g - 1]; + if ("literal" === h.type || "var" === h.type) { + a.push(h); + break; + } + Q = new AstVariable(u++, h.min, h.max); + a[a.length - g - 1] = Q; + a.push(Q); + s.push(new AstVariableDefinition(Q, h)); + break; + case "dup": + if (a.length < 1) return null; + if ( + "number" == typeof e[t + 1] && + "gt" === e[t + 2] && + e[t + 3] === t + 7 && + "jz" === e[t + 4] && + "pop" === e[t + 5] && + e[t + 6] === e[t + 1] + ) { + c = a.pop(); + a.push(buildMinOperation(c, e[t + 1])); + t += 6; + break; + } + h = a.at(-1); + if ("literal" === h.type || "var" === h.type) { + a.push(h); + break; + } + Q = new AstVariable(u++, h.min, h.max); + a[a.length - 1] = Q; + a.push(Q); + s.push(new AstVariableDefinition(Q, h)); + break; + case "roll": + if (a.length < 2) return null; + C = a.pop(); + c = a.pop(); + if ("literal" !== C.type || "literal" !== c.type) return null; + o = C.number; + g = c.number; + if ( + g <= 0 || + !Number.isInteger(g) || + !Number.isInteger(o) || + a.length < g + ) + return null; + o = ((o % g) + g) % g; + if (0 === o) break; + a.push(...a.splice(a.length - g, g - o)); + break; + default: + return null; + } + else a.push(new AstLiteral(E)); + } + if (a.length !== n) return null; + const d = []; + for (const e of s) { + const t = new ExpressionBuilderVisitor(); + e.visit(t); + d.push(t.toString()); + } + for (let e = 0, t = a.length; e < t; e++) { + const t = a[e], + s = new ExpressionBuilderVisitor(); + t.visit(s); + const r = i[2 * e], + n = i[2 * e + 1], + g = [s.toString()]; + if (r > t.min) { + g.unshift("Math.max(", r, ", "); + g.push(")"); + } + if (n < t.max) { + g.unshift("Math.min(", n, ", "); + g.push(")"); + } + g.unshift("dest[destOffset + ", e, "] = "); + g.push(";"); + d.push(g.join("")); + } + return d.join("\n"); + } +} +const Cs = [ + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "S", + "B", + "S", + "WS", + "B", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "B", + "B", + "B", + "S", + "WS", + "ON", + "ON", + "ET", + "ET", + "ET", + "ON", + "ON", + "ON", + "ON", + "ON", + "ES", + "CS", + "ES", + "CS", + "CS", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "CS", + "ON", + "ON", + "ON", + "ON", + "ON", + "ON", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "ON", + "ON", + "ON", + "ON", + "ON", + "ON", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "ON", + "ON", + "ON", + "ON", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "B", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "CS", + "ON", + "ET", + "ET", + "ET", + "ET", + "ON", + "ON", + "ON", + "ON", + "L", + "ON", + "ON", + "BN", + "ON", + "ON", + "ET", + "ET", + "EN", + "EN", + "ON", + "L", + "ON", + "ON", + "ON", + "EN", + "L", + "ON", + "ON", + "ON", + "ON", + "ON", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "ON", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "ON", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + ], + hs = [ + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "ON", + "ON", + "AL", + "ET", + "ET", + "AL", + "CS", + "AL", + "ON", + "ON", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "ET", + "AN", + "AN", + "AL", + "AL", + "AL", + "NSM", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AN", + "ON", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "NSM", + "NSM", + "ON", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + ]; +function isOdd(e) { + return 0 != (1 & e); +} +function isEven(e) { + return 0 == (1 & e); +} +function findUnequal(e, t, i) { + let a, s; + for (a = t, s = e.length; a < s; ++a) if (e[a] !== i) return a; + return a; +} +function setValues(e, t, i, a) { + for (let s = t; s < i; ++s) e[s] = a; +} +function reverseValues(e, t, i) { + for (let a = t, s = i - 1; a < s; ++a, --s) { + const t = e[a]; + e[a] = e[s]; + e[s] = t; + } +} +function createBidiText(e, t, i = !1) { + let a = "ltr"; + i ? (a = "ttb") : t || (a = "rtl"); + return { str: e, dir: a }; +} +const Bs = [], + ls = []; +function bidi(e, t = -1, i = !1) { + let a = !0; + const s = e.length; + if (0 === s || i) return createBidiText(e, a, i); + Bs.length = s; + ls.length = s; + let r, + n, + g = 0; + for (r = 0; r < s; ++r) { + Bs[r] = e.charAt(r); + const t = e.charCodeAt(r); + let i = "L"; + if (t <= 255) i = Cs[t]; + else if (1424 <= t && t <= 1524) i = "R"; + else if (1536 <= t && t <= 1791) { + i = hs[255 & t]; + i || warn("Bidi: invalid Unicode character " + t.toString(16)); + } else + ((1792 <= t && t <= 2220) || + (64336 <= t && t <= 65023) || + (65136 <= t && t <= 65279)) && + (i = "AL"); + ("R" !== i && "AL" !== i && "AN" !== i) || g++; + ls[r] = i; + } + if (0 === g) { + a = !0; + return createBidiText(e, a); + } + if (-1 === t) + if (g / s < 0.3 && s > 4) { + a = !0; + t = 0; + } else { + a = !1; + t = 1; + } + const o = []; + for (r = 0; r < s; ++r) o[r] = t; + const c = isOdd(t) ? "R" : "L", + C = c, + h = C; + let l, + Q = C; + for (r = 0; r < s; ++r) "NSM" === ls[r] ? (ls[r] = Q) : (Q = ls[r]); + Q = C; + for (r = 0; r < s; ++r) { + l = ls[r]; + "EN" === l + ? (ls[r] = "AL" === Q ? "AN" : "EN") + : ("R" !== l && "L" !== l && "AL" !== l) || (Q = l); + } + for (r = 0; r < s; ++r) { + l = ls[r]; + "AL" === l && (ls[r] = "R"); + } + for (r = 1; r < s - 1; ++r) { + "ES" === ls[r] && + "EN" === ls[r - 1] && + "EN" === ls[r + 1] && + (ls[r] = "EN"); + "CS" !== ls[r] || + ("EN" !== ls[r - 1] && "AN" !== ls[r - 1]) || + ls[r + 1] !== ls[r - 1] || + (ls[r] = ls[r - 1]); + } + for (r = 0; r < s; ++r) + if ("EN" === ls[r]) { + for (let e = r - 1; e >= 0 && "ET" === ls[e]; --e) ls[e] = "EN"; + for (let e = r + 1; e < s && "ET" === ls[e]; ++e) ls[e] = "EN"; + } + for (r = 0; r < s; ++r) { + l = ls[r]; + ("WS" !== l && "ES" !== l && "ET" !== l && "CS" !== l) || (ls[r] = "ON"); + } + Q = C; + for (r = 0; r < s; ++r) { + l = ls[r]; + "EN" === l + ? (ls[r] = "L" === Q ? "L" : "EN") + : ("R" !== l && "L" !== l) || (Q = l); + } + for (r = 0; r < s; ++r) + if ("ON" === ls[r]) { + const e = findUnequal(ls, r + 1, "ON"); + let t = C; + r > 0 && (t = ls[r - 1]); + let i = h; + e + 1 < s && (i = ls[e + 1]); + "L" !== t && (t = "R"); + "L" !== i && (i = "R"); + t === i && setValues(ls, r, e, t); + r = e - 1; + } + for (r = 0; r < s; ++r) "ON" === ls[r] && (ls[r] = c); + for (r = 0; r < s; ++r) { + l = ls[r]; + isEven(o[r]) + ? "R" === l + ? (o[r] += 1) + : ("AN" !== l && "EN" !== l) || (o[r] += 2) + : ("L" !== l && "AN" !== l && "EN" !== l) || (o[r] += 1); + } + let E, + u = -1, + d = 99; + for (r = 0, n = o.length; r < n; ++r) { + E = o[r]; + u < E && (u = E); + d > E && isOdd(E) && (d = E); + } + for (E = u; E >= d; --E) { + let e = -1; + for (r = 0, n = o.length; r < n; ++r) + if (o[r] < E) { + if (e >= 0) { + reverseValues(Bs, e, r); + e = -1; + } + } else e < 0 && (e = r); + e >= 0 && reverseValues(Bs, e, o.length); + } + for (r = 0, n = Bs.length; r < n; ++r) { + const e = Bs[r]; + ("<" !== e && ">" !== e) || (Bs[r] = ""); + } + return createBidiText(Bs.join(""), a); +} +const Qs = { style: "normal", weight: "normal" }, + Es = { style: "normal", weight: "bold" }, + us = { style: "italic", weight: "normal" }, + ds = { style: "italic", weight: "bold" }, + fs = new Map([ + [ + "Times-Roman", + { + local: [ + "Times New Roman", + "Times-Roman", + "Times", + "Liberation Serif", + "Nimbus Roman", + "Nimbus Roman L", + "Tinos", + "Thorndale", + "TeX Gyre Termes", + "FreeSerif", + "Linux Libertine O", + "Libertinus Serif", + "DejaVu Serif", + "Bitstream Vera Serif", + "Ubuntu", + ], + style: Qs, + ultimate: "serif", + }, + ], + ["Times-Bold", { alias: "Times-Roman", style: Es, ultimate: "serif" }], + ["Times-Italic", { alias: "Times-Roman", style: us, ultimate: "serif" }], + [ + "Times-BoldItalic", + { alias: "Times-Roman", style: ds, ultimate: "serif" }, + ], + [ + "Helvetica", + { + local: [ + "Helvetica", + "Helvetica Neue", + "Arial", + "Arial Nova", + "Liberation Sans", + "Arimo", + "Nimbus Sans", + "Nimbus Sans L", + "A030", + "TeX Gyre Heros", + "FreeSans", + "DejaVu Sans", + "Albany", + "Bitstream Vera Sans", + "Arial Unicode MS", + "Microsoft Sans Serif", + "Apple Symbols", + "Cantarell", + ], + path: "LiberationSans-Regular.ttf", + style: Qs, + ultimate: "sans-serif", + }, + ], + [ + "Helvetica-Bold", + { + alias: "Helvetica", + path: "LiberationSans-Bold.ttf", + style: Es, + ultimate: "sans-serif", + }, + ], + [ + "Helvetica-Oblique", + { + alias: "Helvetica", + path: "LiberationSans-Italic.ttf", + style: us, + ultimate: "sans-serif", + }, + ], + [ + "Helvetica-BoldOblique", + { + alias: "Helvetica", + path: "LiberationSans-BoldItalic.ttf", + style: ds, + ultimate: "sans-serif", + }, + ], + [ + "Courier", + { + local: [ + "Courier", + "Courier New", + "Liberation Mono", + "Nimbus Mono", + "Nimbus Mono L", + "Cousine", + "Cumberland", + "TeX Gyre Cursor", + "FreeMono", + "Linux Libertine Mono O", + "Libertinus Mono", + ], + style: Qs, + ultimate: "monospace", + }, + ], + ["Courier-Bold", { alias: "Courier", style: Es, ultimate: "monospace" }], + ["Courier-Oblique", { alias: "Courier", style: us, ultimate: "monospace" }], + [ + "Courier-BoldOblique", + { alias: "Courier", style: ds, ultimate: "monospace" }, + ], + [ + "ArialBlack", + { + local: ["Arial Black"], + style: { style: "normal", weight: "900" }, + fallback: "Helvetica-Bold", + }, + ], + ["ArialBlack-Bold", { alias: "ArialBlack" }], + [ + "ArialBlack-Italic", + { + alias: "ArialBlack", + style: { style: "italic", weight: "900" }, + fallback: "Helvetica-BoldOblique", + }, + ], + ["ArialBlack-BoldItalic", { alias: "ArialBlack-Italic" }], + [ + "ArialNarrow", + { + local: [ + "Arial Narrow", + "Liberation Sans Narrow", + "Helvetica Condensed", + "Nimbus Sans Narrow", + "TeX Gyre Heros Cn", + ], + style: Qs, + fallback: "Helvetica", + }, + ], + [ + "ArialNarrow-Bold", + { alias: "ArialNarrow", style: Es, fallback: "Helvetica-Bold" }, + ], + [ + "ArialNarrow-Italic", + { alias: "ArialNarrow", style: us, fallback: "Helvetica-Oblique" }, + ], + [ + "ArialNarrow-BoldItalic", + { alias: "ArialNarrow", style: ds, fallback: "Helvetica-BoldOblique" }, + ], + [ + "Calibri", + { local: ["Calibri", "Carlito"], style: Qs, fallback: "Helvetica" }, + ], + [ + "Calibri-Bold", + { alias: "Calibri", style: Es, fallback: "Helvetica-Bold" }, + ], + [ + "Calibri-Italic", + { alias: "Calibri", style: us, fallback: "Helvetica-Oblique" }, + ], + [ + "Calibri-BoldItalic", + { alias: "Calibri", style: ds, fallback: "Helvetica-BoldOblique" }, + ], + ["Wingdings", { local: ["Wingdings", "URW Dingbats"], style: Qs }], + ["Wingdings-Regular", { alias: "Wingdings" }], + ["Wingdings-Bold", { alias: "Wingdings" }], + ]), + ps = new Map([["Arial-Black", "ArialBlack"]]); +function getFamilyName(e) { + const t = new Set([ + "thin", + "extralight", + "ultralight", + "demilight", + "semilight", + "light", + "book", + "regular", + "normal", + "medium", + "demibold", + "semibold", + "bold", + "extrabold", + "ultrabold", + "black", + "heavy", + "extrablack", + "ultrablack", + "roman", + "italic", + "oblique", + "ultracondensed", + "extracondensed", + "condensed", + "semicondensed", + "normal", + "semiexpanded", + "expanded", + "extraexpanded", + "ultraexpanded", + "bolditalic", + ]); + return e + .split(/[- ,+]+/g) + .filter((e) => !t.has(e.toLowerCase())) + .join(" "); +} +function generateFont( + { alias: e, local: t, path: i, fallback: a, style: s, ultimate: r }, + n, + g, + o = !0, + c = !0, + C = "", +) { + const h = { style: null, ultimate: null }; + if (t) { + const e = C ? ` ${C}` : ""; + for (const i of t) n.push(`local(${i}${e})`); + } + if (e) { + const t = fs.get(e), + r = + C || + (function getStyleToAppend(e) { + switch (e) { + case Es: + return "Bold"; + case us: + return "Italic"; + case ds: + return "Bold Italic"; + default: + if ("bold" === e?.weight) return "Bold"; + if ("italic" === e?.style) return "Italic"; + } + return ""; + })(s); + Object.assign(h, generateFont(t, n, g, o && !a, c && !i, r)); + } + s && (h.style = s); + r && (h.ultimate = r); + if (o && a) { + const e = fs.get(a), + { ultimate: t } = generateFont(e, n, g, o, c && !i, C); + h.ultimate ||= t; + } + c && i && g && n.push(`url(${g}${i})`); + return h; +} +function getFontSubstitution(e, t, i, a, s, r) { + if (a.startsWith("InvalidPDFjsFont_")) return null; + ("TrueType" !== r && "Type1" !== r) || + !/^[A-Z]{6}\+/.test(a) || + (a = a.slice(7)); + const n = (a = normalizeFontName(a)); + let g = e.get(n); + if (g) return g; + let o = fs.get(a); + if (!o) + for (const [e, t] of ps) + if (a.startsWith(e)) { + a = `${t}${a.substring(e.length)}`; + o = fs.get(a); + break; + } + let c = !1; + if (!o) { + o = fs.get(s); + c = !0; + } + const C = `${t.getDocId()}_s${t.createFontId()}`; + if (!o) { + if (!validateFontName(a)) { + warn(`Cannot substitute the font because of its name: ${a}`); + e.set(n, null); + return null; + } + const t = /bold/gi.test(a), + i = /oblique|italic/gi.test(a), + s = (t && i && ds) || (t && Es) || (i && us) || Qs; + g = { + css: `"${getFamilyName(a)}",${C}`, + guessFallback: !0, + loadedName: C, + baseFontName: a, + src: `local(${a})`, + style: s, + }; + e.set(n, g); + return g; + } + const h = []; + c && validateFontName(a) && h.push(`local(${a})`); + const { style: l, ultimate: Q } = generateFont(o, h, i), + E = null === Q, + u = E ? "" : `,${Q}`; + g = { + css: `"${getFamilyName(a)}",${C}${u}`, + guessFallback: E, + loadedName: C, + baseFontName: a, + src: h.join(","), + style: l, + }; + e.set(n, g); + return g; +} +class ImageResizer { + constructor(e, t) { + this._imgData = e; + this._isMask = t; + } + static needsToBeResized(e, t) { + if (e <= this._goodSquareLength && t <= this._goodSquareLength) return !1; + const { MAX_DIM: i } = this; + if (e > i || t > i) return !0; + const a = e * t; + if (this._hasMaxArea) return a > this.MAX_AREA; + if (a < this._goodSquareLength ** 2) return !1; + if (this._areGoodDims(e, t)) { + this._goodSquareLength = Math.max( + this._goodSquareLength, + Math.floor(Math.sqrt(e * t)), + ); + return !1; + } + this._goodSquareLength = this._guessMax(this._goodSquareLength, i, 128, 0); + return a > (this.MAX_AREA = this._goodSquareLength ** 2); + } + static get MAX_DIM() { + return shadow(this, "MAX_DIM", this._guessMax(2048, 65537, 0, 1)); + } + static get MAX_AREA() { + this._hasMaxArea = !0; + return shadow( + this, + "MAX_AREA", + this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, 128, 0) ** 2, + ); + } + static set MAX_AREA(e) { + if (e >= 0) { + this._hasMaxArea = !0; + shadow(this, "MAX_AREA", e); + } + } + static setMaxArea(e) { + this._hasMaxArea || (this.MAX_AREA = e >> 2); + } + static _areGoodDims(e, t) { + try { + const i = new OffscreenCanvas(e, t), + a = i.getContext("2d"); + a.fillRect(0, 0, 1, 1); + const s = a.getImageData(0, 0, 1, 1).data[3]; + i.width = i.height = 1; + return 0 !== s; + } catch { + return !1; + } + } + static _guessMax(e, t, i, a) { + for (; e + i + 1 < t; ) { + const i = Math.floor((e + t) / 2), + s = a || i; + this._areGoodDims(i, s) ? (e = i) : (t = i); + } + return e; + } + static async createImage(e, t = !1) { + return new ImageResizer(e, t)._createImage(); + } + async _createImage() { + const e = this._encodeBMP(), + t = new Blob([e.buffer], { type: "image/bmp" }), + i = createImageBitmap(t), + { MAX_AREA: a, MAX_DIM: s } = ImageResizer, + { _imgData: r } = this, + { width: n, height: g } = r, + o = Math.max(n / s, g / s, Math.sqrt((n * g) / a)), + c = Math.max(o, 2), + C = Math.round(10 * (o + 1.25)) / 10 / c, + h = Math.floor(Math.log2(C)), + l = new Array(h + 2).fill(2); + l[0] = c; + l.splice(-1, 1, C / (1 << h)); + let Q = n, + E = g, + u = await i; + for (const e of l) { + const t = Q, + i = E; + Q = Math.floor(Q / e) - 1; + E = Math.floor(E / e) - 1; + const a = new OffscreenCanvas(Q, E); + a.getContext("2d").drawImage(u, 0, 0, t, i, 0, 0, Q, E); + u = a.transferToImageBitmap(); + } + r.data = null; + r.bitmap = u; + r.width = Q; + r.height = E; + return r; + } + _encodeBMP() { + const { width: e, height: t, kind: i } = this._imgData; + let a, + s = this._imgData.data, + r = new Uint8Array(0), + n = r, + g = 0; + switch (i) { + case D: { + a = 1; + r = new Uint8Array( + this._isMask + ? [255, 255, 255, 255, 0, 0, 0, 0] + : [0, 0, 0, 0, 255, 255, 255, 255], + ); + const i = (e + 7) >> 3, + n = (i + 3) & -4; + if (i !== n) { + const e = new Uint8Array(n * t); + let a = 0; + for (let r = 0, g = t * i; r < g; r += i, a += n) + e.set(s.subarray(r, r + i), a); + s = e; + } + break; + } + case b: + a = 24; + if (3 & e) { + const i = 3 * e, + a = (i + 3) & -4, + r = a - i, + n = new Uint8Array(a * t); + let g = 0; + for (let e = 0, a = t * i; e < a; e += i) { + const t = s.subarray(e, e + i); + for (let e = 0; e < i; e += 3) { + n[g++] = t[e + 2]; + n[g++] = t[e + 1]; + n[g++] = t[e]; + } + g += r; + } + s = n; + } else + for (let e = 0, t = s.length; e < t; e += 3) { + const t = s[e]; + s[e] = s[e + 2]; + s[e + 2] = t; + } + break; + case F: + a = 32; + g = 3; + n = new Uint8Array(68); + const i = new DataView(n.buffer); + if (FeatureTest.isLittleEndian) { + i.setUint32(0, 255, !0); + i.setUint32(4, 65280, !0); + i.setUint32(8, 16711680, !0); + i.setUint32(12, 4278190080, !0); + } else { + i.setUint32(0, 4278190080, !0); + i.setUint32(4, 16711680, !0); + i.setUint32(8, 65280, !0); + i.setUint32(12, 255, !0); + } + break; + default: + throw new Error("invalid format"); + } + let o = 0; + const c = 40 + n.length, + C = 14 + c + r.length + s.length, + h = new Uint8Array(C), + l = new DataView(h.buffer); + l.setUint16(o, 19778, !0); + o += 2; + l.setUint32(o, C, !0); + o += 4; + l.setUint32(o, 0, !0); + o += 4; + l.setUint32(o, 14 + c + r.length, !0); + o += 4; + l.setUint32(o, c, !0); + o += 4; + l.setInt32(o, e, !0); + o += 4; + l.setInt32(o, -t, !0); + o += 4; + l.setUint16(o, 1, !0); + o += 2; + l.setUint16(o, a, !0); + o += 2; + l.setUint32(o, g, !0); + o += 4; + l.setUint32(o, 0, !0); + o += 4; + l.setInt32(o, 0, !0); + o += 4; + l.setInt32(o, 0, !0); + o += 4; + l.setUint32(o, r.length / 4, !0); + o += 4; + l.setUint32(o, 0, !0); + o += 4; + h.set(n, o); + o += n.length; + h.set(r, o); + o += r.length; + h.set(s, o); + return h; + } +} +ImageResizer._goodSquareLength = 2048; +const ms = 3285377520, + ys = 4294901760, + ws = 65535; +class MurmurHash3_64 { + constructor(e) { + this.h1 = e ? 4294967295 & e : ms; + this.h2 = e ? 4294967295 & e : ms; + } + update(e) { + let t, i; + if ("string" == typeof e) { + t = new Uint8Array(2 * e.length); + i = 0; + for (let a = 0, s = e.length; a < s; a++) { + const s = e.charCodeAt(a); + if (s <= 255) t[i++] = s; + else { + t[i++] = s >>> 8; + t[i++] = 255 & s; + } + } + } else { + if (!ArrayBuffer.isView(e)) + throw new Error("Invalid data format, must be a string or TypedArray."); + t = e.slice(); + i = t.byteLength; + } + const a = i >> 2, + s = i - 4 * a, + r = new Uint32Array(t.buffer, 0, a); + let n = 0, + g = 0, + o = this.h1, + c = this.h2; + const C = 3432918353, + h = 461845907, + l = 11601, + Q = 13715; + for (let e = 0; e < a; e++) + if (1 & e) { + n = r[e]; + n = ((n * C) & ys) | ((n * l) & ws); + n = (n << 15) | (n >>> 17); + n = ((n * h) & ys) | ((n * Q) & ws); + o ^= n; + o = (o << 13) | (o >>> 19); + o = 5 * o + 3864292196; + } else { + g = r[e]; + g = ((g * C) & ys) | ((g * l) & ws); + g = (g << 15) | (g >>> 17); + g = ((g * h) & ys) | ((g * Q) & ws); + c ^= g; + c = (c << 13) | (c >>> 19); + c = 5 * c + 3864292196; + } + n = 0; + switch (s) { + case 3: + n ^= t[4 * a + 2] << 16; + case 2: + n ^= t[4 * a + 1] << 8; + case 1: + n ^= t[4 * a]; + n = ((n * C) & ys) | ((n * l) & ws); + n = (n << 15) | (n >>> 17); + n = ((n * h) & ys) | ((n * Q) & ws); + 1 & a ? (o ^= n) : (c ^= n); + } + this.h1 = o; + this.h2 = c; + } + hexdigest() { + let e = this.h1, + t = this.h2; + e ^= t >>> 1; + e = ((3981806797 * e) & ys) | ((36045 * e) & ws); + t = + ((4283543511 * t) & ys) | + (((2950163797 * ((t << 16) | (e >>> 16))) & ys) >>> 16); + e ^= t >>> 1; + e = ((444984403 * e) & ys) | ((60499 * e) & ws); + t = + ((3301882366 * t) & ys) | + (((3120437893 * ((t << 16) | (e >>> 16))) & ys) >>> 16); + e ^= t >>> 1; + return ( + (e >>> 0).toString(16).padStart(8, "0") + + (t >>> 0).toString(16).padStart(8, "0") + ); + } +} +function addState(e, t, i, a, s) { + let r = e; + for (let e = 0, i = t.length - 1; e < i; e++) { + const i = t[e]; + r = r[i] ||= []; + } + r[t.at(-1)] = { checkFn: i, iterateFn: a, processFn: s }; +} +const Ds = []; +addState( + Ds, + [GA, UA, ze, xA], + null, + function iterateInlineImageGroup(e, t) { + const i = e.fnArray, + a = (t - (e.iCurr - 3)) % 4; + switch (a) { + case 0: + return i[t] === GA; + case 1: + return i[t] === UA; + case 2: + return i[t] === ze; + case 3: + return i[t] === xA; + } + throw new Error(`iterateInlineImageGroup - invalid pos: ${a}`); + }, + function foundInlineImageGroup(e, t) { + const i = e.fnArray, + a = e.argsArray, + s = e.iCurr, + r = s - 3, + n = s - 2, + g = s - 1, + o = Math.min(Math.floor((t - r) / 4), 200); + if (o < 10) return t - ((t - r) % 4); + let c = 0; + const C = []; + let h = 0, + l = 1, + Q = 1; + for (let e = 0; e < o; e++) { + const t = a[n + (e << 2)], + i = a[g + (e << 2)][0]; + if (l + i.width > 1e3) { + c = Math.max(c, l); + Q += h + 2; + l = 0; + h = 0; + } + C.push({ transform: t, x: l, y: Q, w: i.width, h: i.height }); + l += i.width + 2; + h = Math.max(h, i.height); + } + const E = Math.max(c, l) + 1, + u = Q + h + 1, + d = new Uint8Array(E * u * 4), + f = E << 2; + for (let e = 0; e < o; e++) { + const t = a[g + (e << 2)][0].data, + i = C[e].w << 2; + let s = 0, + r = (C[e].x + C[e].y * E) << 2; + d.set(t.subarray(0, i), r - f); + for (let a = 0, n = C[e].h; a < n; a++) { + d.set(t.subarray(s, s + i), r); + s += i; + r += f; + } + d.set(t.subarray(s - i, s), r); + for (; r >= 0; ) { + t[r - 4] = t[r]; + t[r - 3] = t[r + 1]; + t[r - 2] = t[r + 2]; + t[r - 1] = t[r + 3]; + t[r + i] = t[r + i - 4]; + t[r + i + 1] = t[r + i - 3]; + t[r + i + 2] = t[r + i - 2]; + t[r + i + 3] = t[r + i - 1]; + r -= f; + } + } + const p = { width: E, height: u }; + if (e.isOffscreenCanvasSupported) { + const e = new OffscreenCanvas(E, u); + e.getContext("2d").putImageData( + new ImageData(new Uint8ClampedArray(d.buffer), E, u), + 0, + 0, + ); + p.bitmap = e.transferToImageBitmap(); + p.data = null; + } else { + p.kind = F; + p.data = d; + } + i.splice(r, 4 * o, _e); + a.splice(r, 4 * o, [p, C]); + return r + 1; + }, +); +addState( + Ds, + [GA, UA, Xe, xA], + null, + function iterateImageMaskGroup(e, t) { + const i = e.fnArray, + a = (t - (e.iCurr - 3)) % 4; + switch (a) { + case 0: + return i[t] === GA; + case 1: + return i[t] === UA; + case 2: + return i[t] === Xe; + case 3: + return i[t] === xA; + } + throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`); + }, + function foundImageMaskGroup(e, t) { + const i = e.fnArray, + a = e.argsArray, + s = e.iCurr, + r = s - 3, + n = s - 2, + g = s - 1; + let o = Math.floor((t - r) / 4); + if (o < 10) return t - ((t - r) % 4); + let c, + C, + h = !1; + const l = a[g][0], + Q = a[n][0], + E = a[n][1], + u = a[n][2], + d = a[n][3]; + if (E === u) { + h = !0; + c = n + 4; + let e = g + 4; + for (let t = 1; t < o; t++, c += 4, e += 4) { + C = a[c]; + if ( + a[e][0] !== l || + C[0] !== Q || + C[1] !== E || + C[2] !== u || + C[3] !== d + ) { + t < 10 ? (h = !1) : (o = t); + break; + } + } + } + if (h) { + o = Math.min(o, 1e3); + const e = new Float32Array(2 * o); + c = n; + for (let t = 0; t < o; t++, c += 4) { + C = a[c]; + e[t << 1] = C[4]; + e[1 + (t << 1)] = C[5]; + } + i.splice(r, 4 * o, At); + a.splice(r, 4 * o, [l, Q, E, u, d, e]); + } else { + o = Math.min(o, 100); + const e = []; + for (let t = 0; t < o; t++) { + C = a[n + (t << 2)]; + const i = a[g + (t << 2)][0]; + e.push({ + data: i.data, + width: i.width, + height: i.height, + interpolate: i.interpolate, + count: i.count, + transform: C, + }); + } + i.splice(r, 4 * o, Ze); + a.splice(r, 4 * o, [e]); + } + return r + 1; + }, +); +addState( + Ds, + [GA, UA, Ve, xA], + function (e) { + const t = e.argsArray, + i = e.iCurr - 2; + return 0 === t[i][1] && 0 === t[i][2]; + }, + function iterateImageGroup(e, t) { + const i = e.fnArray, + a = e.argsArray, + s = (t - (e.iCurr - 3)) % 4; + switch (s) { + case 0: + return i[t] === GA; + case 1: + if (i[t] !== UA) return !1; + const s = e.iCurr - 2, + r = a[s][0], + n = a[s][3]; + return a[t][0] === r && 0 === a[t][1] && 0 === a[t][2] && a[t][3] === n; + case 2: + if (i[t] !== Ve) return !1; + const g = a[e.iCurr - 1][0]; + return a[t][0] === g; + case 3: + return i[t] === xA; + } + throw new Error(`iterateImageGroup - invalid pos: ${s}`); + }, + function (e, t) { + const i = e.fnArray, + a = e.argsArray, + s = e.iCurr, + r = s - 3, + n = s - 2, + g = a[s - 1][0], + o = a[n][0], + c = a[n][3], + C = Math.min(Math.floor((t - r) / 4), 1e3); + if (C < 3) return t - ((t - r) % 4); + const h = new Float32Array(2 * C); + let l = n; + for (let e = 0; e < C; e++, l += 4) { + const t = a[l]; + h[e << 1] = t[4]; + h[1 + (e << 1)] = t[5]; + } + const Q = [g, o, c, h]; + i.splice(r, 4 * C, $e); + a.splice(r, 4 * C, Q); + return r + 1; + }, +); +addState( + Ds, + [$A, se, Ie, Ce, Ae], + null, + function iterateShowTextGroup(e, t) { + const i = e.fnArray, + a = e.argsArray, + s = (t - (e.iCurr - 4)) % 5; + switch (s) { + case 0: + return i[t] === $A; + case 1: + return i[t] === se; + case 2: + return i[t] === Ie; + case 3: + if (i[t] !== Ce) return !1; + const s = e.iCurr - 3, + r = a[s][0], + n = a[s][1]; + return a[t][0] === r && a[t][1] === n; + case 4: + return i[t] === Ae; + } + throw new Error(`iterateShowTextGroup - invalid pos: ${s}`); + }, + function (e, t) { + const i = e.fnArray, + a = e.argsArray, + s = e.iCurr, + r = s - 4, + n = s - 3, + g = s - 2, + o = s - 1, + c = s, + C = a[n][0], + h = a[n][1]; + let l = Math.min(Math.floor((t - r) / 5), 1e3); + if (l < 3) return t - ((t - r) % 5); + let Q = r; + if ( + r >= 4 && + i[r - 4] === i[n] && + i[r - 3] === i[g] && + i[r - 2] === i[o] && + i[r - 1] === i[c] && + a[r - 4][0] === C && + a[r - 4][1] === h + ) { + l++; + Q -= 5; + } + let E = Q + 4; + for (let e = 1; e < l; e++) { + i.splice(E, 3); + a.splice(E, 3); + E += 2; + } + return E + 1; + }, +); +class NullOptimizer { + constructor(e) { + this.queue = e; + } + _optimize() {} + push(e, t) { + this.queue.fnArray.push(e); + this.queue.argsArray.push(t); + this._optimize(); + } + flush() {} + reset() {} +} +class QueueOptimizer extends NullOptimizer { + constructor(e) { + super(e); + this.state = null; + this.context = { + iCurr: 0, + fnArray: e.fnArray, + argsArray: e.argsArray, + isOffscreenCanvasSupported: !1, + }; + this.match = null; + this.lastProcessed = 0; + } + set isOffscreenCanvasSupported(e) { + this.context.isOffscreenCanvasSupported = e; + } + _optimize() { + const e = this.queue.fnArray; + let t = this.lastProcessed, + i = e.length, + a = this.state, + s = this.match; + if (!a && !s && t + 1 === i && !Ds[e[t]]) { + this.lastProcessed = i; + return; + } + const r = this.context; + for (; t < i; ) { + if (s) { + if ((0, s.iterateFn)(r, t)) { + t++; + continue; + } + t = (0, s.processFn)(r, t + 1); + i = e.length; + s = null; + a = null; + if (t >= i) break; + } + a = (a || Ds)[e[t]]; + if (a && !Array.isArray(a)) { + r.iCurr = t; + t++; + if (!a.checkFn || (0, a.checkFn)(r)) { + s = a; + a = null; + } else a = null; + } else t++; + } + this.state = a; + this.match = s; + this.lastProcessed = t; + } + flush() { + for (; this.match; ) { + const e = this.queue.fnArray.length; + this.lastProcessed = (0, this.match.processFn)(this.context, e); + this.match = null; + this.state = null; + this._optimize(); + } + } + reset() { + this.state = null; + this.match = null; + this.lastProcessed = 0; + } +} +class OperatorList { + static CHUNK_SIZE = 1e3; + static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5; + constructor(e = 0, t) { + this._streamSink = t; + this.fnArray = []; + this.argsArray = []; + this.optimizer = + !t || e & Q ? new NullOptimizer(this) : new QueueOptimizer(this); + this.dependencies = new Set(); + this._totalLength = 0; + this.weight = 0; + this._resolved = t ? null : Promise.resolve(); + } + set isOffscreenCanvasSupported(e) { + this.optimizer.isOffscreenCanvasSupported = e; + } + get length() { + return this.argsArray.length; + } + get ready() { + return this._resolved || this._streamSink.ready; + } + get totalLength() { + return this._totalLength + this.length; + } + addOp(e, t) { + this.optimizer.push(e, t); + this.weight++; + this._streamSink && + (this.weight >= OperatorList.CHUNK_SIZE || + (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && + (e === xA || e === Ae))) && + this.flush(); + } + addImageOps(e, t, i) { + void 0 !== i && this.addOp(Je, ["OC", i]); + this.addOp(e, t); + void 0 !== i && this.addOp(Ye, []); + } + addDependency(e) { + if (!this.dependencies.has(e)) { + this.dependencies.add(e); + this.addOp(yA, [e]); + } + } + addDependencies(e) { + for (const t of e) this.addDependency(t); + } + addOpList(e) { + if (e instanceof OperatorList) { + for (const t of e.dependencies) this.dependencies.add(t); + for (let t = 0, i = e.length; t < i; t++) + this.addOp(e.fnArray[t], e.argsArray[t]); + } else warn('addOpList - ignoring invalid "opList" parameter.'); + } + getIR() { + return { + fnArray: this.fnArray, + argsArray: this.argsArray, + length: this.length, + }; + } + get _transfers() { + const e = [], + { fnArray: t, argsArray: i, length: a } = this; + for (let s = 0; s < a; s++) + switch (t[s]) { + case ze: + case _e: + case Xe: + const t = i[s][0]; + !t.cached && + t.data?.buffer instanceof ArrayBuffer && + e.push(t.data.buffer); + } + return e; + } + flush(e = !1, t = null) { + this.optimizer.flush(); + const i = this.length; + this._totalLength += i; + this._streamSink.enqueue( + { + fnArray: this.fnArray, + argsArray: this.argsArray, + lastChunk: e, + separateAnnots: t, + length: i, + }, + 1, + this._transfers, + ); + this.dependencies.clear(); + this.fnArray.length = 0; + this.argsArray.length = 0; + this.weight = 0; + this.optimizer.reset(); + } +} +function decodeAndClamp(e, t, i, a) { + (e = t + e * i) < 0 ? (e = 0) : e > a && (e = a); + return e; +} +function resizeImageMask(e, t, i, a, s, r) { + const n = s * r; + let g; + g = + t <= 8 + ? new Uint8Array(n) + : t <= 16 + ? new Uint16Array(n) + : new Uint32Array(n); + const o = i / s, + c = a / r; + let C, + h, + l, + Q, + E = 0; + const u = new Uint16Array(s), + d = i; + for (C = 0; C < s; C++) u[C] = Math.floor(C * o); + for (C = 0; C < r; C++) { + l = Math.floor(C * c) * d; + for (h = 0; h < s; h++) { + Q = l + u[h]; + g[E++] = e[Q]; + } + } + return g; +} +class PDFImage { + constructor({ + xref: e, + res: t, + image: i, + isInline: a = !1, + smask: s = null, + mask: r = null, + isMask: n = !1, + pdfFunctionFactory: g, + localColorSpaceCache: o, + }) { + this.image = i; + const c = i.dict, + C = c.get("F", "Filter"); + let h; + if (C instanceof Name) h = C.name; + else if (Array.isArray(C)) { + const t = e.fetchIfRef(C[0]); + t instanceof Name && (h = t.name); + } + switch (h) { + case "JPXDecode": + ({ + width: i.width, + height: i.height, + componentsCount: i.numComps, + bitsPerComponent: i.bitsPerComponent, + } = JpxImage.parseImageProperties(i.stream)); + i.stream.reset(); + this.jpxDecoderOptions = { + numComponents: 0, + isIndexedColormap: !1, + smaskInData: c.has("SMaskInData"), + }; + break; + case "JBIG2Decode": + i.bitsPerComponent = 1; + i.numComps = 1; + } + let l = c.get("W", "Width"), + Q = c.get("H", "Height"); + if ( + Number.isInteger(i.width) && + i.width > 0 && + Number.isInteger(i.height) && + i.height > 0 && + (i.width !== l || i.height !== Q) + ) { + warn( + "PDFImage - using the Width/Height of the image data, rather than the image dictionary.", + ); + l = i.width; + Q = i.height; + } + if (l < 1 || Q < 1) + throw new FormatError(`Invalid image width: ${l} or height: ${Q}`); + this.width = l; + this.height = Q; + this.interpolate = c.get("I", "Interpolate"); + this.imageMask = c.get("IM", "ImageMask") || !1; + this.matte = c.get("Matte") || !1; + let E = i.bitsPerComponent; + if (!E) { + E = c.get("BPC", "BitsPerComponent"); + if (!E) { + if (!this.imageMask) + throw new FormatError( + `Bits per component missing in image: ${this.imageMask}`, + ); + E = 1; + } + } + this.bpc = E; + if (!this.imageMask) { + let s = c.getRaw("CS") || c.getRaw("ColorSpace"); + const r = !!s; + if (r) + this.jpxDecoderOptions?.smaskInData && (s = Name.get("DeviceRGBA")); + else if (this.jpxDecoderOptions) s = Name.get("DeviceRGBA"); + else + switch (i.numComps) { + case 1: + s = Name.get("DeviceGray"); + break; + case 3: + s = Name.get("DeviceRGB"); + break; + case 4: + s = Name.get("DeviceCMYK"); + break; + default: + throw new Error( + `Images with ${i.numComps} color components not supported.`, + ); + } + this.colorSpace = ColorSpace.parse({ + cs: s, + xref: e, + resources: a ? t : null, + pdfFunctionFactory: g, + localColorSpaceCache: o, + }); + this.numComps = this.colorSpace.numComps; + if (this.jpxDecoderOptions) { + this.jpxDecoderOptions.numComponents = r ? this.numComp : 0; + this.jpxDecoderOptions.isIndexedColormap = + "Indexed" === this.colorSpace.name; + } + } + this.decode = c.getArray("D", "Decode"); + this.needsDecode = !1; + if ( + this.decode && + ((this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, E)) || + (n && !ColorSpace.isDefaultDecode(this.decode, 1))) + ) { + this.needsDecode = !0; + const e = (1 << E) - 1; + this.decodeCoefficients = []; + this.decodeAddends = []; + const t = "Indexed" === this.colorSpace?.name; + for (let i = 0, a = 0; i < this.decode.length; i += 2, ++a) { + const s = this.decode[i], + r = this.decode[i + 1]; + this.decodeCoefficients[a] = t ? (r - s) / e : r - s; + this.decodeAddends[a] = t ? s : e * s; + } + } + if (s) + this.smask = new PDFImage({ + xref: e, + res: t, + image: s, + isInline: a, + pdfFunctionFactory: g, + localColorSpaceCache: o, + }); + else if (r) + if (r instanceof BaseStream) { + r.dict.get("IM", "ImageMask") + ? (this.mask = new PDFImage({ + xref: e, + res: t, + image: r, + isInline: a, + isMask: !0, + pdfFunctionFactory: g, + localColorSpaceCache: o, + })) + : warn("Ignoring /Mask in image without /ImageMask."); + } else this.mask = r; + } + static async buildImage({ + xref: e, + res: t, + image: i, + isInline: a = !1, + pdfFunctionFactory: s, + localColorSpaceCache: r, + }) { + const n = i; + let g = null, + o = null; + const c = i.dict.get("SMask"), + C = i.dict.get("Mask"); + c + ? c instanceof BaseStream + ? (g = c) + : warn("Unsupported /SMask format.") + : C && + (C instanceof BaseStream || Array.isArray(C) + ? (o = C) + : warn("Unsupported /Mask format.")); + return new PDFImage({ + xref: e, + res: t, + image: n, + isInline: a, + smask: g, + mask: o, + pdfFunctionFactory: s, + localColorSpaceCache: r, + }); + } + static createRawMask({ + imgArray: e, + width: t, + height: i, + imageIsFromDecodeStream: a, + inverseDecode: s, + interpolate: r, + }) { + const n = ((t + 7) >> 3) * i, + g = e.byteLength; + let o, c; + if (!a || (s && !(n === g))) + if (s) { + o = new Uint8Array(n); + o.set(e); + o.fill(255, g); + } else o = new Uint8Array(e); + else o = e; + if (s) for (c = 0; c < g; c++) o[c] ^= 255; + return { data: o, width: t, height: i, interpolate: r }; + } + static async createMask({ + imgArray: e, + width: t, + height: i, + imageIsFromDecodeStream: a, + inverseDecode: s, + interpolate: r, + isOffscreenCanvasSupported: n = !1, + }) { + const g = 1 === t && 1 === i && s === (0 === e.length || !!(128 & e[0])); + if (g) return { isSingleOpaquePixel: g }; + if (n) { + if (ImageResizer.needsToBeResized(t, i)) { + const a = new Uint8ClampedArray(t * i * 4); + convertBlackAndWhiteToRGBA({ + src: e, + dest: a, + width: t, + height: i, + nonBlackColor: 0, + inverseDecode: s, + }); + return ImageResizer.createImage({ + kind: F, + data: a, + width: t, + height: i, + interpolate: r, + }); + } + const a = new OffscreenCanvas(t, i), + n = a.getContext("2d"), + g = n.createImageData(t, i); + convertBlackAndWhiteToRGBA({ + src: e, + dest: g.data, + width: t, + height: i, + nonBlackColor: 0, + inverseDecode: s, + }); + n.putImageData(g, 0, 0); + return { + data: null, + width: t, + height: i, + interpolate: r, + bitmap: a.transferToImageBitmap(), + }; + } + return this.createRawMask({ + imgArray: e, + width: t, + height: i, + inverseDecode: s, + imageIsFromDecodeStream: a, + interpolate: r, + }); + } + get drawWidth() { + return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0); + } + get drawHeight() { + return Math.max( + this.height, + this.smask?.height || 0, + this.mask?.height || 0, + ); + } + decodeBuffer(e) { + const t = this.bpc, + i = this.numComps, + a = this.decodeAddends, + s = this.decodeCoefficients, + r = (1 << t) - 1; + let n, g; + if (1 === t) { + for (n = 0, g = e.length; n < g; n++) e[n] = +!e[n]; + return; + } + let o = 0; + for (n = 0, g = this.width * this.height; n < g; n++) + for (let t = 0; t < i; t++) { + e[o] = decodeAndClamp(e[o], a[t], s[t], r); + o++; + } + } + getComponents(e) { + const t = this.bpc; + if (8 === t) return e; + const i = this.width, + a = this.height, + s = this.numComps, + r = i * a * s; + let n, + g = 0; + n = + t <= 8 + ? new Uint8Array(r) + : t <= 16 + ? new Uint16Array(r) + : new Uint32Array(r); + const o = i * s, + c = (1 << t) - 1; + let C, + h, + l = 0; + if (1 === t) { + let t, i, s; + for (let r = 0; r < a; r++) { + i = l + (-8 & o); + s = l + o; + for (; l < i; ) { + h = e[g++]; + n[l] = (h >> 7) & 1; + n[l + 1] = (h >> 6) & 1; + n[l + 2] = (h >> 5) & 1; + n[l + 3] = (h >> 4) & 1; + n[l + 4] = (h >> 3) & 1; + n[l + 5] = (h >> 2) & 1; + n[l + 6] = (h >> 1) & 1; + n[l + 7] = 1 & h; + l += 8; + } + if (l < s) { + h = e[g++]; + t = 128; + for (; l < s; ) { + n[l++] = +!!(h & t); + t >>= 1; + } + } + } + } else { + let i = 0; + h = 0; + for (l = 0, C = r; l < C; ++l) { + if (l % o == 0) { + h = 0; + i = 0; + } + for (; i < t; ) { + h = (h << 8) | e[g++]; + i += 8; + } + const a = i - t; + let s = h >> a; + s < 0 ? (s = 0) : s > c && (s = c); + n[l] = s; + h &= (1 << a) - 1; + i = a; + } + } + return n; + } + async fillOpacity(e, t, i, a, s) { + const r = this.smask, + n = this.mask; + let g, o, c, C, h, l; + if (r) { + o = r.width; + c = r.height; + g = new Uint8ClampedArray(o * c); + await r.fillGrayBuffer(g); + (o === t && c === i) || (g = resizeImageMask(g, r.bpc, o, c, t, i)); + } else if (n) + if (n instanceof PDFImage) { + o = n.width; + c = n.height; + g = new Uint8ClampedArray(o * c); + n.numComps = 1; + await n.fillGrayBuffer(g); + for (C = 0, h = o * c; C < h; ++C) g[C] = 255 - g[C]; + (o === t && c === i) || (g = resizeImageMask(g, n.bpc, o, c, t, i)); + } else { + if (!Array.isArray(n)) throw new FormatError("Unknown mask format."); + { + g = new Uint8ClampedArray(t * i); + const e = this.numComps; + for (C = 0, h = t * i; C < h; ++C) { + let t = 0; + const i = C * e; + for (l = 0; l < e; ++l) { + const e = s[i + l], + a = 2 * l; + if (e < n[a] || e > n[a + 1]) { + t = 255; + break; + } + } + g[C] = t; + } + } + } + if (g) for (C = 0, l = 3, h = t * a; C < h; ++C, l += 4) e[l] = g[C]; + else for (C = 0, l = 3, h = t * a; C < h; ++C, l += 4) e[l] = 255; + } + undoPreblend(e, t, i) { + const a = this.smask?.matte; + if (!a) return; + const s = this.colorSpace.getRgb(a, 0), + r = s[0], + n = s[1], + g = s[2], + o = t * i * 4; + for (let t = 0; t < o; t += 4) { + const i = e[t + 3]; + if (0 === i) { + e[t] = 255; + e[t + 1] = 255; + e[t + 2] = 255; + continue; + } + const a = 255 / i; + e[t] = (e[t] - r) * a + r; + e[t + 1] = (e[t + 1] - n) * a + n; + e[t + 2] = (e[t + 2] - g) * a + g; + } + } + async createImageData(e = !1, t = !1) { + const i = this.drawWidth, + a = this.drawHeight, + s = { + width: i, + height: a, + interpolate: this.interpolate, + kind: 0, + data: null, + }, + r = this.numComps, + n = this.width, + g = this.height, + o = this.bpc, + c = (n * r * o + 7) >> 3, + C = t && ImageResizer.needsToBeResized(i, a); + if ("DeviceRGBA" === this.colorSpace.name) { + s.kind = F; + const e = (s.data = await this.getImageBytes(g * n * 4, {})); + return t + ? C + ? ImageResizer.createImage(s, !1) + : this.createBitmap(F, i, a, e) + : s; + } + if (!e) { + let e; + "DeviceGray" === this.colorSpace.name && 1 === o + ? (e = D) + : "DeviceRGB" !== this.colorSpace.name || + 8 !== o || + this.needsDecode || + (e = b); + if (e && !this.smask && !this.mask && i === n && a === g) { + const r = await this.getImageBytes(g * c, {}); + if (t) + return C + ? ImageResizer.createImage( + { + data: r, + kind: e, + width: i, + height: a, + interpolate: this.interpolate, + }, + this.needsDecode, + ) + : this.createBitmap(e, n, g, r); + s.kind = e; + s.data = r; + if (this.needsDecode) { + assert( + e === D, + "PDFImage.createImageData: The image must be grayscale.", + ); + const t = s.data; + for (let e = 0, i = t.length; e < i; e++) t[e] ^= 255; + } + return s; + } + if ( + this.image instanceof JpegStream && + !this.smask && + !this.mask && + !this.needsDecode + ) { + let e = g * c; + if (t && !C) { + let t = !1; + switch (this.colorSpace.name) { + case "DeviceGray": + e *= 4; + t = !0; + break; + case "DeviceRGB": + e = (e / 3) * 4; + t = !0; + break; + case "DeviceCMYK": + t = !0; + } + if (t) { + const t = await this.getImageBytes(e, { + drawWidth: i, + drawHeight: a, + forceRGBA: !0, + }); + return this.createBitmap(F, i, a, t); + } + } else + switch (this.colorSpace.name) { + case "DeviceGray": + e *= 3; + case "DeviceRGB": + case "DeviceCMYK": + s.kind = b; + s.data = await this.getImageBytes(e, { + drawWidth: i, + drawHeight: a, + forceRGB: !0, + }); + return C ? ImageResizer.createImage(s) : s; + } + } + } + const h = await this.getImageBytes(g * c, { internal: !0 }), + l = 0 | (((h.length / c) * a) / g), + Q = this.getComponents(h); + let E, u, d, f, p, m; + if (t && !C) { + d = new OffscreenCanvas(i, a); + f = d.getContext("2d"); + p = f.createImageData(i, a); + m = p.data; + } + s.kind = F; + if (e || this.smask || this.mask) { + (t && !C) || (m = new Uint8ClampedArray(i * a * 4)); + E = 1; + u = !0; + await this.fillOpacity(m, i, a, l, Q); + } else { + if (!t || C) { + s.kind = b; + m = new Uint8ClampedArray(i * a * 3); + E = 0; + } else { + new Uint32Array(m.buffer).fill( + FeatureTest.isLittleEndian ? 4278190080 : 255, + ); + E = 1; + } + u = !1; + } + this.needsDecode && this.decodeBuffer(Q); + this.colorSpace.fillRgb(m, n, g, i, a, l, o, Q, E); + u && this.undoPreblend(m, i, l); + if (t && !C) { + f.putImageData(p, 0, 0); + return { + data: null, + width: i, + height: a, + bitmap: d.transferToImageBitmap(), + interpolate: this.interpolate, + }; + } + s.data = m; + return C ? ImageResizer.createImage(s) : s; + } + async fillGrayBuffer(e) { + const t = this.numComps; + if (1 !== t) + throw new FormatError(`Reading gray scale from a color image: ${t}`); + const i = this.width, + a = this.height, + s = this.bpc, + r = (i * t * s + 7) >> 3, + n = await this.getImageBytes(a * r, { internal: !0 }), + g = this.getComponents(n); + let o, c; + if (1 === s) { + c = i * a; + if (this.needsDecode) for (o = 0; o < c; ++o) e[o] = (g[o] - 1) & 255; + else for (o = 0; o < c; ++o) e[o] = 255 & -g[o]; + return; + } + this.needsDecode && this.decodeBuffer(g); + c = i * a; + const C = 255 / ((1 << s) - 1); + for (o = 0; o < c; ++o) e[o] = C * g[o]; + } + createBitmap(e, t, i, a) { + const s = new OffscreenCanvas(t, i), + r = s.getContext("2d"); + let n; + if (e === F) n = new ImageData(a, t, i); + else { + n = r.createImageData(t, i); + convertToRGBA({ + kind: e, + src: a, + dest: new Uint32Array(n.data.buffer), + width: t, + height: i, + inverseDecode: this.needsDecode, + }); + } + r.putImageData(n, 0, 0); + return { + data: null, + width: t, + height: i, + bitmap: s.transferToImageBitmap(), + interpolate: this.interpolate, + }; + } + async getImageBytes( + e, + { + drawWidth: t, + drawHeight: i, + forceRGBA: a = !1, + forceRGB: s = !1, + internal: r = !1, + }, + ) { + this.image.reset(); + this.image.drawWidth = t || this.width; + this.image.drawHeight = i || this.height; + this.image.forceRGBA = !!a; + this.image.forceRGB = !!s; + const n = await this.image.getImageData(e, this.jpxDecoderOptions); + if (r || this.image instanceof DecodeStream) return n; + assert( + n instanceof Uint8Array, + 'PDFImage.getImageBytes: Unsupported "imageBytes" type.', + ); + return new Uint8Array(n); + } +} +const bs = Object.freeze({ + maxImageSize: -1, + disableFontFace: !1, + ignoreErrors: !1, + isEvalSupported: !0, + isOffscreenCanvasSupported: !1, + canvasMaxAreaInBytes: -1, + fontExtraProperties: !1, + useSystemFonts: !0, + cMapUrl: null, + standardFontDataUrl: null, + }), + Fs = 1, + Ss = 2, + ks = Promise.resolve(); +function normalizeBlendMode(e, t = !1) { + if (Array.isArray(e)) { + for (const t of e) { + const e = normalizeBlendMode(t, !0); + if (e) return e; + } + warn(`Unsupported blend mode Array: ${e}`); + return "source-over"; + } + if (!(e instanceof Name)) return t ? null : "source-over"; + switch (e.name) { + case "Normal": + case "Compatible": + return "source-over"; + case "Multiply": + return "multiply"; + case "Screen": + return "screen"; + case "Overlay": + return "overlay"; + case "Darken": + return "darken"; + case "Lighten": + return "lighten"; + case "ColorDodge": + return "color-dodge"; + case "ColorBurn": + return "color-burn"; + case "HardLight": + return "hard-light"; + case "SoftLight": + return "soft-light"; + case "Difference": + return "difference"; + case "Exclusion": + return "exclusion"; + case "Hue": + return "hue"; + case "Saturation": + return "saturation"; + case "Color": + return "color"; + case "Luminosity": + return "luminosity"; + } + if (t) return null; + warn(`Unsupported blend mode: ${e.name}`); + return "source-over"; +} +function addLocallyCachedImageOps(e, t) { + t.objId && e.addDependency(t.objId); + e.addImageOps(t.fn, t.args, t.optionalContent); + t.fn === Xe && t.args[0]?.count > 0 && t.args[0].count++; +} +class TimeSlotManager { + static TIME_SLOT_DURATION_MS = 20; + static CHECK_TIME_EVERY = 100; + constructor() { + this.reset(); + } + check() { + if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) return !1; + this.checked = 0; + return this.endTime <= Date.now(); + } + reset() { + this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; + this.checked = 0; + } +} +class PartialEvaluator { + constructor({ + xref: e, + handler: t, + pageIndex: i, + idFactory: a, + fontCache: s, + builtInCMapCache: r, + standardFontDataCache: n, + globalImageCache: g, + systemFontCache: o, + options: c = null, + }) { + this.xref = e; + this.handler = t; + this.pageIndex = i; + this.idFactory = a; + this.fontCache = s; + this.builtInCMapCache = r; + this.standardFontDataCache = n; + this.globalImageCache = g; + this.systemFontCache = o; + this.options = c || bs; + this.type3FontRefs = null; + this._regionalImageCache = new RegionalImageCache(); + this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); + ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes); + } + get _pdfFunctionFactory() { + return shadow( + this, + "_pdfFunctionFactory", + new PDFFunctionFactory({ + xref: this.xref, + isEvalSupported: this.options.isEvalSupported, + }), + ); + } + get parsingType3Font() { + return !!this.type3FontRefs; + } + clone(e = null) { + const t = Object.create(this); + t.options = Object.assign(Object.create(null), this.options, e); + return t; + } + hasBlendModes(e, t) { + if (!(e instanceof Dict)) return !1; + if (e.objId && t.has(e.objId)) return !1; + const i = new RefSet(t); + e.objId && i.put(e.objId); + const a = [e], + s = this.xref; + for (; a.length; ) { + const e = a.shift(), + t = e.get("ExtGState"); + if (t instanceof Dict) + for (let e of t.getRawValues()) { + if (e instanceof Ref) { + if (i.has(e)) continue; + try { + e = s.fetch(e); + } catch (t) { + i.put(e); + info(`hasBlendModes - ignoring ExtGState: "${t}".`); + continue; + } + } + if (!(e instanceof Dict)) continue; + e.objId && i.put(e.objId); + const t = e.get("BM"); + if (t instanceof Name) { + if ("Normal" !== t.name) return !0; + } else if (void 0 !== t && Array.isArray(t)) + for (const e of t) + if (e instanceof Name && "Normal" !== e.name) return !0; + } + const r = e.get("XObject"); + if (r instanceof Dict) + for (let e of r.getRawValues()) { + if (e instanceof Ref) { + if (i.has(e)) continue; + try { + e = s.fetch(e); + } catch (t) { + i.put(e); + info(`hasBlendModes - ignoring XObject: "${t}".`); + continue; + } + } + if (!(e instanceof BaseStream)) continue; + e.dict.objId && i.put(e.dict.objId); + const t = e.dict.get("Resources"); + if (t instanceof Dict && (!t.objId || !i.has(t.objId))) { + a.push(t); + t.objId && i.put(t.objId); + } + } + } + for (const e of i) t.put(e); + return !1; + } + async fetchBuiltInCMap(e) { + const t = this.builtInCMapCache.get(e); + if (t) return t; + let i; + if (null !== this.options.cMapUrl) { + const t = `${this.options.cMapUrl}${e}.bcmap`, + a = await fetch(t); + if (!a.ok) + throw new Error( + `fetchBuiltInCMap: failed to fetch file "${t}" with "${a.statusText}".`, + ); + i = { + cMapData: new Uint8Array(await a.arrayBuffer()), + compressionType: mA.BINARY, + }; + } else + i = await this.handler.sendWithPromise("FetchBuiltInCMap", { name: e }); + i.compressionType !== mA.NONE && this.builtInCMapCache.set(e, i); + return i; + } + async fetchStandardFontData(e) { + const t = this.standardFontDataCache.get(e); + if (t) return new Stream(t); + if (this.options.useSystemFonts && "Symbol" !== e && "ZapfDingbats" !== e) + return null; + const i = Wi()[e]; + let a; + if (null !== this.options.standardFontDataUrl) { + const e = `${this.options.standardFontDataUrl}${i}`, + t = await fetch(e); + t.ok + ? (a = new Uint8Array(await t.arrayBuffer())) + : warn( + `fetchStandardFontData: failed to fetch file "${e}" with "${t.statusText}".`, + ); + } else + try { + a = await this.handler.sendWithPromise("FetchStandardFontData", { + filename: i, + }); + } catch (e) { + warn(`fetchStandardFontData: failed to fetch file "${i}" with "${e}".`); + } + if (!a) return null; + this.standardFontDataCache.set(e, a); + return new Stream(a); + } + async buildFormXObject(e, t, i, a, s, r, n) { + const g = t.dict, + o = lookupMatrix(g.getArray("Matrix"), null), + c = lookupNormalRect(g.getArray("BBox"), null); + let C, h; + g.has("OC") && (C = await this.parseMarkedContentProps(g.get("OC"), e)); + void 0 !== C && a.addOp(Je, ["OC", C]); + const l = g.get("Group"); + if (l) { + h = { matrix: o, bbox: c, smask: i, isolated: !1, knockout: !1 }; + let t = null; + if (isName(l.get("S"), "Transparency")) { + h.isolated = l.get("I") || !1; + h.knockout = l.get("K") || !1; + if (l.has("CS")) { + const i = l.getRaw("CS"), + a = ColorSpace.getCached(i, this.xref, n); + t = + a || + (await this.parseColorSpace({ + cs: i, + resources: e, + localColorSpaceCache: n, + })); + } + } + if (i?.backdrop) { + t ||= ColorSpace.singletons.rgb; + i.backdrop = t.getRgb(i.backdrop, 0); + } + a.addOp(Oe, [h]); + } + const Q = l ? [o, null] : [o, c]; + a.addOp(Te, Q); + await this.getOperatorList({ + stream: t, + task: s, + resources: g.get("Resources") || e, + operatorList: a, + initialState: r, + }); + a.addOp(qe, []); + l && a.addOp(Pe, [h]); + void 0 !== C && a.addOp(Ye, []); + } + _sendImgData(e, t, i = !1) { + const a = t ? [t.bitmap || t.data.buffer] : null; + return this.parsingType3Font || i + ? this.handler.send("commonobj", [e, "Image", t], a) + : this.handler.send("obj", [e, this.pageIndex, "Image", t], a); + } + async buildPaintImageXObject({ + resources: e, + image: t, + isInline: i = !1, + operatorList: a, + cacheKey: s, + localImageCache: r, + localColorSpaceCache: n, + }) { + const g = t.dict, + o = g.objId, + c = g.get("W", "Width"), + C = g.get("H", "Height"); + if (!c || "number" != typeof c || !C || "number" != typeof C) { + warn("Image dimensions are missing, or not numbers."); + return; + } + const h = this.options.maxImageSize; + if (-1 !== h && c * C > h) { + const e = "Image exceeded maximum allowed size and was removed."; + if (this.options.ignoreErrors) { + warn(e); + return; + } + throw new Error(e); + } + let l; + g.has("OC") && (l = await this.parseMarkedContentProps(g.get("OC"), e)); + let Q, E; + if (g.get("IM", "ImageMask") || !1) { + const e = g.get("I", "Interpolate"), + i = (c + 7) >> 3, + n = t.getBytes(i * C), + h = g.getArray("D", "Decode"); + if (this.parsingType3Font) { + Q = PDFImage.createRawMask({ + imgArray: n, + width: c, + height: C, + imageIsFromDecodeStream: t instanceof DecodeStream, + inverseDecode: h?.[0] > 0, + interpolate: e, + }); + Q.cached = !!s; + E = [Q]; + a.addImageOps(Xe, E, l); + if (s) { + const e = { fn: Xe, args: E, optionalContent: l }; + r.set(s, o, e); + o && this._regionalImageCache.set(null, o, e); + } + return; + } + Q = await PDFImage.createMask({ + imgArray: n, + width: c, + height: C, + imageIsFromDecodeStream: t instanceof DecodeStream, + inverseDecode: h?.[0] > 0, + interpolate: e, + isOffscreenCanvasSupported: this.options.isOffscreenCanvasSupported, + }); + if (Q.isSingleOpaquePixel) { + a.addImageOps(et, [], l); + if (s) { + const e = { fn: et, args: [], optionalContent: l }; + r.set(s, o, e); + o && this._regionalImageCache.set(null, o, e); + } + return; + } + const u = `mask_${this.idFactory.createObjId()}`; + a.addDependency(u); + Q.dataLen = Q.bitmap ? Q.width * Q.height * 4 : Q.data.length; + this._sendImgData(u, Q); + E = [ + { + data: u, + width: Q.width, + height: Q.height, + interpolate: Q.interpolate, + count: 1, + }, + ]; + a.addImageOps(Xe, E, l); + if (s) { + const e = { objId: u, fn: Xe, args: E, optionalContent: l }; + r.set(s, o, e); + o && this._regionalImageCache.set(null, o, e); + } + return; + } + if (i && c + C < 200 && !g.has("SMask") && !g.has("Mask")) { + try { + const s = new PDFImage({ + xref: this.xref, + res: e, + image: t, + isInline: i, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache: n, + }); + Q = await s.createImageData(!0, !1); + a.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported; + a.addImageOps(ze, [Q], l); + } catch (e) { + const t = `Unable to decode inline image: "${e}".`; + if (!this.options.ignoreErrors) throw new Error(t); + warn(t); + } + return; + } + let u = `img_${this.idFactory.createObjId()}`, + d = !1; + if (this.parsingType3Font) u = `${this.idFactory.getDocId()}_type3_${u}`; + else if (s && o) { + d = this.globalImageCache.shouldCache(o, this.pageIndex); + if (d) { + assert(!i, "Cannot cache an inline image globally."); + u = `${this.idFactory.getDocId()}_${u}`; + } + } + a.addDependency(u); + E = [u, c, C]; + a.addImageOps(Ve, E, l); + if (d) { + if (this.globalImageCache.hasDecodeFailed(o)) { + this.globalImageCache.setData(o, { + objId: u, + fn: Ve, + args: E, + optionalContent: l, + byteSize: 0, + }); + this._sendImgData(u, null, d); + return; + } + if (c * C > 25e4 || g.has("SMask") || g.has("Mask")) { + const e = await this.handler.sendWithPromise("commonobj", [ + u, + "CopyLocalImage", + { imageRef: o }, + ]); + if (e) { + this.globalImageCache.setData(o, { + objId: u, + fn: Ve, + args: E, + optionalContent: l, + byteSize: 0, + }); + this.globalImageCache.addByteSize(o, e); + return; + } + } + } + PDFImage.buildImage({ + xref: this.xref, + res: e, + image: t, + isInline: i, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache: n, + }) + .then(async (e) => { + Q = await e.createImageData( + !1, + this.options.isOffscreenCanvasSupported, + ); + Q.dataLen = Q.bitmap ? Q.width * Q.height * 4 : Q.data.length; + Q.ref = o; + d && this.globalImageCache.addByteSize(o, Q.dataLen); + return this._sendImgData(u, Q, d); + }) + .catch((e) => { + warn(`Unable to decode image "${u}": "${e}".`); + o && this.globalImageCache.addDecodeFailed(o); + return this._sendImgData(u, null, d); + }); + if (s) { + const e = { objId: u, fn: Ve, args: E, optionalContent: l }; + r.set(s, o, e); + if (o) { + this._regionalImageCache.set(null, o, e); + d && + this.globalImageCache.setData(o, { + objId: u, + fn: Ve, + args: E, + optionalContent: l, + byteSize: 0, + }); + } + } + } + handleSMask(e, t, i, a, s, r) { + const n = e.get("G"), + g = { subtype: e.get("S").name, backdrop: e.get("BC") }, + o = e.get("TR"); + if (isPDFFunction(o)) { + const e = this._pdfFunctionFactory.create(o), + t = new Uint8Array(256), + i = new Float32Array(1); + for (let a = 0; a < 256; a++) { + i[0] = a / 255; + e(i, 0, i, 0); + t[a] = (255 * i[0]) | 0; + } + g.transferMap = t; + } + return this.buildFormXObject(t, n, g, i, a, s.state.clone(), r); + } + handleTransferFunction(e) { + let t; + if (Array.isArray(e)) t = e; + else { + if (!isPDFFunction(e)) return null; + t = [e]; + } + const i = []; + let a = 0, + s = 0; + for (const e of t) { + const t = this.xref.fetchIfRef(e); + a++; + if (isName(t, "Identity")) { + i.push(null); + continue; + } + if (!isPDFFunction(t)) return null; + const r = this._pdfFunctionFactory.create(t), + n = new Uint8Array(256), + g = new Float32Array(1); + for (let e = 0; e < 256; e++) { + g[0] = e / 255; + r(g, 0, g, 0); + n[e] = (255 * g[0]) | 0; + } + i.push(n); + s++; + } + return (1 !== a && 4 !== a) || 0 === s ? null : i; + } + handleTilingType(e, t, i, a, s, r, n, g) { + const o = new OperatorList(), + c = Dict.merge({ xref: this.xref, dictArray: [s.get("Resources"), i] }); + return this.getOperatorList({ + stream: a, + task: n, + resources: c, + operatorList: o, + }) + .then(function () { + const i = o.getIR(), + a = getTilingPatternIR(i, s, t); + r.addDependencies(o.dependencies); + r.addOp(e, a); + s.objId && g.set(null, s.objId, { operatorListIR: i, dict: s }); + }) + .catch((e) => { + if (!(e instanceof AbortException)) { + if (!this.options.ignoreErrors) throw e; + warn(`handleTilingType - ignoring pattern: "${e}".`); + } + }); + } + async handleSetFont(e, t, i, a, s, r, n = null, g = null) { + const o = t?.[0] instanceof Name ? t[0].name : null; + let c = await this.loadFont(o, i, e, n, g); + if (c.font.isType3Font) + try { + await c.loadType3Data(this, e, s); + a.addDependencies(c.type3Dependencies); + } catch (e) { + c = new TranslatedFont({ + loadedName: "g_font_error", + font: new ErrorFont(`Type3 font load error: ${e}`), + dict: c.font, + evaluatorOptions: this.options, + }); + } + r.font = c.font; + c.send(this.handler); + return c.loadedName; + } + handleText(e, t) { + const i = t.font, + a = i.charsToGlyphs(e); + if (i.data) { + (!!(t.textRenderingMode & w) || + "Pattern" === t.fillColorSpace.name || + i.disableFontFace || + this.options.disableFontFace) && + PartialEvaluator.buildFontPaths(i, a, this.handler, this.options); + } + return a; + } + ensureStateFont(e) { + if (e.font) return; + const t = new FormatError( + "Missing setFont (Tf) operator before text rendering operator.", + ); + if (!this.options.ignoreErrors) throw t; + warn(`ensureStateFont: "${t}".`); + } + async setGState({ + resources: e, + gState: t, + operatorList: i, + cacheKey: a, + task: s, + stateManager: r, + localGStateCache: n, + localColorSpaceCache: g, + }) { + const o = t.objId; + let c = !0; + const C = []; + let h = Promise.resolve(); + for (const a of t.getKeys()) { + const n = t.get(a); + switch (a) { + case "Type": + break; + case "LW": + case "LC": + case "LJ": + case "ML": + case "D": + case "RI": + case "FL": + case "CA": + case "ca": + C.push([a, n]); + break; + case "Font": + c = !1; + h = h.then(() => + this.handleSetFont(e, null, n[0], i, s, r.state).then(function (e) { + i.addDependency(e); + C.push([a, [e, n[1]]]); + }), + ); + break; + case "BM": + C.push([a, normalizeBlendMode(n)]); + break; + case "SMask": + if (isName(n, "None")) { + C.push([a, !1]); + break; + } + if (n instanceof Dict) { + c = !1; + h = h.then(() => this.handleSMask(n, e, i, s, r, g)); + C.push([a, !0]); + } else warn("Unsupported SMask type"); + break; + case "TR": + const t = this.handleTransferFunction(n); + C.push([a, t]); + break; + case "OP": + case "op": + case "OPM": + case "BG": + case "BG2": + case "UCR": + case "UCR2": + case "TR2": + case "HT": + case "SM": + case "SA": + case "AIS": + case "TK": + info("graphic state operator " + a); + break; + default: + info("Unknown graphic state operator " + a); + } + } + await h; + C.length > 0 && i.addOp(NA, [C]); + c && n.set(a, o, C); + } + loadFont(e, t, i, a = null, s = null) { + const errorFont = async () => + new TranslatedFont({ + loadedName: "g_font_error", + font: new ErrorFont(`Font "${e}" is not available.`), + dict: t, + evaluatorOptions: this.options, + }); + let r; + if (t) t instanceof Ref && (r = t); + else { + const t = i.get("Font"); + t && (r = t.getRaw(e)); + } + if (r) { + if (this.type3FontRefs?.has(r)) return errorFont(); + if (this.fontCache.has(r)) return this.fontCache.get(r); + try { + t = this.xref.fetchIfRef(r); + } catch (e) { + warn(`loadFont - lookup failed: "${e}".`); + } + } + if (!(t instanceof Dict)) { + if (!this.options.ignoreErrors && !this.parsingType3Font) { + warn(`Font "${e}" is not available.`); + return errorFont(); + } + warn( + `Font "${e}" is not available -- attempting to fallback to a default font.`, + ); + t = a || PartialEvaluator.fallbackFontDict; + } + if (t.cacheKey && this.fontCache.has(t.cacheKey)) + return this.fontCache.get(t.cacheKey); + const { promise: n, resolve: g } = Promise.withResolvers(); + let o; + try { + o = this.preEvaluateFont(t); + o.cssFontInfo = s; + } catch (e) { + warn(`loadFont - preEvaluateFont failed: "${e}".`); + return errorFont(); + } + const { descriptor: c, hash: C } = o, + h = r instanceof Ref; + let l; + if (C && c instanceof Dict) { + const e = (c.fontAliases ||= Object.create(null)); + if (e[C]) { + const t = e[C].aliasRef; + if (h && t && this.fontCache.has(t)) { + this.fontCache.putAlias(r, t); + return this.fontCache.get(r); + } + } else e[C] = { fontID: this.idFactory.createFontId() }; + h && (e[C].aliasRef = r); + l = e[C].fontID; + } else l = this.idFactory.createFontId(); + assert(l?.startsWith("f"), 'The "fontID" must be (correctly) defined.'); + if (h) this.fontCache.put(r, n); + else { + t.cacheKey = `cacheKey_${l}`; + this.fontCache.put(t.cacheKey, n); + } + t.loadedName = `${this.idFactory.getDocId()}_${l}`; + this.translateFont(o) + .then((e) => { + g( + new TranslatedFont({ + loadedName: t.loadedName, + font: e, + dict: t, + evaluatorOptions: this.options, + }), + ); + }) + .catch((e) => { + warn(`loadFont - translateFont failed: "${e}".`); + g( + new TranslatedFont({ + loadedName: t.loadedName, + font: new ErrorFont(e instanceof Error ? e.message : e), + dict: t, + evaluatorOptions: this.options, + }), + ); + }); + return n; + } + buildPath(e, t, i, a = !1) { + const s = e.length - 1; + i || (i = []); + if (s < 0 || e.fnArray[s] !== tt) { + if (a) { + warn(`Encountered path operator "${t}" inside of a text object.`); + e.addOp(GA, null); + } + let s; + switch (t) { + case KA: + const e = i[0] + i[2], + t = i[1] + i[3]; + s = [ + Math.min(i[0], e), + Math.min(i[1], t), + Math.max(i[0], e), + Math.max(i[1], t), + ]; + break; + case MA: + case LA: + s = [i[0], i[1], i[0], i[1]]; + break; + default: + s = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; + } + e.addOp(tt, [[t], i, s]); + a && e.addOp(xA, null); + } else { + const a = e.argsArray[s]; + a[0].push(t); + a[1].push(...i); + const r = a[2]; + switch (t) { + case KA: + const e = i[0] + i[2], + t = i[1] + i[3]; + r[0] = Math.min(r[0], i[0], e); + r[1] = Math.min(r[1], i[1], t); + r[2] = Math.max(r[2], i[0], e); + r[3] = Math.max(r[3], i[1], t); + break; + case MA: + case LA: + r[0] = Math.min(r[0], i[0]); + r[1] = Math.min(r[1], i[1]); + r[2] = Math.max(r[2], i[0]); + r[3] = Math.max(r[3], i[1]); + } + } + } + parseColorSpace({ cs: e, resources: t, localColorSpaceCache: i }) { + return ColorSpace.parseAsync({ + cs: e, + xref: this.xref, + resources: t, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache: i, + }).catch((e) => { + if (e instanceof AbortException) return null; + if (this.options.ignoreErrors) { + warn(`parseColorSpace - ignoring ColorSpace: "${e}".`); + return null; + } + throw e; + }); + } + parseShading({ + shading: e, + resources: t, + localColorSpaceCache: i, + localShadingPatternCache: a, + }) { + let s, + r = a.get(e); + if (r) return r; + try { + s = Pattern.parseShading( + e, + this.xref, + t, + this._pdfFunctionFactory, + i, + ).getIR(); + } catch (t) { + if (t instanceof AbortException) return null; + if (this.options.ignoreErrors) { + warn(`parseShading - ignoring shading: "${t}".`); + a.set(e, null); + return null; + } + throw t; + } + r = `pattern_${this.idFactory.createObjId()}`; + this.parsingType3Font && (r = `${this.idFactory.getDocId()}_type3_${r}`); + a.set(e, r); + this.parsingType3Font + ? this.handler.send("commonobj", [r, "Pattern", s]) + : this.handler.send("obj", [r, this.pageIndex, "Pattern", s]); + return r; + } + handleColorN(e, t, i, a, s, r, n, g, o, c) { + const C = i.pop(); + if (C instanceof Name) { + const h = s.getRaw(C.name), + l = h instanceof Ref && o.getByRef(h); + if (l) + try { + const s = a.base ? a.base.getRgb(i, 0) : null, + r = getTilingPatternIR(l.operatorListIR, l.dict, s); + e.addOp(t, r); + return; + } catch {} + const Q = this.xref.fetchIfRef(h); + if (Q) { + const s = Q instanceof BaseStream ? Q.dict : Q, + C = s.get("PatternType"); + if (C === Fs) { + const g = a.base ? a.base.getRgb(i, 0) : null; + return this.handleTilingType(t, g, r, Q, s, e, n, o); + } + if (C === Ss) { + const i = s.get("Shading"), + a = this.parseShading({ + shading: i, + resources: r, + localColorSpaceCache: g, + localShadingPatternCache: c, + }); + if (a) { + const i = lookupMatrix(s.getArray("Matrix"), null); + e.addOp(t, ["Shading", a, i]); + } + return; + } + throw new FormatError(`Unknown PatternType: ${C}`); + } + } + throw new FormatError(`Unknown PatternName: ${C}`); + } + _parseVisibilityExpression(e, t, i) { + if (++t > 10) { + warn("Visibility expression is too deeply nested"); + return; + } + const a = e.length, + s = this.xref.fetchIfRef(e[0]); + if (!(a < 2) && s instanceof Name) { + switch (s.name) { + case "And": + case "Or": + case "Not": + i.push(s.name); + break; + default: + warn(`Invalid operator ${s.name} in visibility expression`); + return; + } + for (let s = 1; s < a; s++) { + const a = e[s], + r = this.xref.fetchIfRef(a); + if (Array.isArray(r)) { + const e = []; + i.push(e); + this._parseVisibilityExpression(r, t, e); + } else a instanceof Ref && i.push(a.toString()); + } + } else warn("Invalid visibility expression"); + } + async parseMarkedContentProps(e, t) { + let i; + if (e instanceof Name) { + i = t.get("Properties").get(e.name); + } else { + if (!(e instanceof Dict)) + throw new FormatError("Optional content properties malformed."); + i = e; + } + const a = i.get("Type")?.name; + if ("OCG" === a) return { type: a, id: i.objId }; + if ("OCMD" === a) { + const e = i.get("VE"); + if (Array.isArray(e)) { + const t = []; + this._parseVisibilityExpression(e, 0, t); + if (t.length > 0) return { type: "OCMD", expression: t }; + } + const t = i.get("OCGs"); + if (Array.isArray(t) || t instanceof Dict) { + const e = []; + if (Array.isArray(t)) for (const i of t) e.push(i.toString()); + else e.push(t.objId); + return { + type: a, + ids: e, + policy: i.get("P") instanceof Name ? i.get("P").name : null, + expression: null, + }; + } + if (t instanceof Ref) return { type: a, id: t.toString() }; + } + return null; + } + getOperatorList({ + stream: e, + task: t, + resources: i, + operatorList: a, + initialState: s = null, + fallbackFontDict: r = null, + }) { + i ||= Dict.empty; + s ||= new EvalState(); + if (!a) + throw new Error('getOperatorList: missing "operatorList" parameter'); + const n = this, + g = this.xref; + let o = !1; + const c = new LocalImageCache(), + C = new LocalColorSpaceCache(), + h = new LocalGStateCache(), + l = new LocalTilingPatternCache(), + Q = new Map(), + E = i.get("XObject") || Dict.empty, + u = i.get("Pattern") || Dict.empty, + d = new StateManager(s), + f = new EvaluatorPreprocessor(e, g, d), + p = new TimeSlotManager(); + function closePendingRestoreOPS(e) { + for (let e = 0, t = f.savedStatesDepth; e < t; e++) a.addOp(xA, []); + } + return new Promise(function promiseBody(e, s) { + const next = function (t) { + Promise.all([t, a.ready]).then(function () { + try { + promiseBody(e, s); + } catch (e) { + s(e); + } + }, s); + }; + t.ensureNotTerminated(); + p.reset(); + const m = {}; + let y, w, D, b, F, S; + for (; !(y = p.check()); ) { + m.args = null; + if (!f.read(m)) break; + let e = m.args, + s = m.fn; + switch (0 | s) { + case Ue: + S = e[0] instanceof Name; + F = e[0].name; + if (S) { + const t = c.getByName(F); + if (t) { + addLocallyCachedImageOps(a, t); + e = null; + continue; + } + } + next( + new Promise(function (e, s) { + if (!S) + throw new FormatError("XObject must be referred to by name."); + let r = E.getRaw(F); + if (r instanceof Ref) { + const t = c.getByRef(r) || n._regionalImageCache.getByRef(r); + if (t) { + addLocallyCachedImageOps(a, t); + e(); + return; + } + const i = n.globalImageCache.getData(r, n.pageIndex); + if (i) { + a.addDependency(i.objId); + a.addImageOps(i.fn, i.args, i.optionalContent); + e(); + return; + } + r = g.fetch(r); + } + if (!(r instanceof BaseStream)) + throw new FormatError("XObject should be a stream"); + const o = r.dict.get("Subtype"); + if (!(o instanceof Name)) + throw new FormatError("XObject should have a Name subtype"); + if ("Form" !== o.name) + if ("Image" !== o.name) { + if ("PS" !== o.name) + throw new FormatError( + `Unhandled XObject subtype ${o.name}`, + ); + info("Ignored XObject subtype PS"); + e(); + } else + n.buildPaintImageXObject({ + resources: i, + image: r, + operatorList: a, + cacheKey: F, + localImageCache: c, + localColorSpaceCache: C, + }).then(e, s); + else { + d.save(); + n.buildFormXObject(i, r, null, a, t, d.state.clone(), C).then( + function () { + d.restore(); + e(); + }, + s, + ); + } + }).catch(function (e) { + if (!(e instanceof AbortException)) { + if (!n.options.ignoreErrors) throw e; + warn(`getOperatorList - ignoring XObject: "${e}".`); + } + }), + ); + return; + case se: + var k = e[1]; + next( + n.handleSetFont(i, e, null, a, t, d.state, r).then(function (e) { + a.addDependency(e); + a.addOp(se, [e, k]); + }), + ); + return; + case $A: + o = !0; + break; + case Ae: + o = !1; + break; + case xe: + var R = e[0].cacheKey; + if (R) { + const t = c.getByName(R); + if (t) { + addLocallyCachedImageOps(a, t); + e = null; + continue; + } + } + next( + n.buildPaintImageXObject({ + resources: i, + image: e[0], + isInline: !0, + operatorList: a, + cacheKey: R, + localImageCache: c, + localColorSpaceCache: C, + }), + ); + return; + case Ce: + if (!d.state.font) { + n.ensureStateFont(d.state); + continue; + } + e[0] = n.handleText(e[0], d.state); + break; + case he: + if (!d.state.font) { + n.ensureStateFont(d.state); + continue; + } + var N = [], + G = d.state; + for (const t of e[0]) + "string" == typeof t + ? N.push(...n.handleText(t, G)) + : "number" == typeof t && N.push(t); + e[0] = N; + s = Ce; + break; + case Be: + if (!d.state.font) { + n.ensureStateFont(d.state); + continue; + } + a.addOp(ce); + e[0] = n.handleText(e[0], d.state); + s = Ce; + break; + case le: + if (!d.state.font) { + n.ensureStateFont(d.state); + continue; + } + a.addOp(ce); + a.addOp(te, [e.shift()]); + a.addOp(ee, [e.shift()]); + e[0] = n.handleText(e[0], d.state); + s = Ce; + break; + case re: + d.state.textRenderingMode = e[0]; + break; + case de: { + const t = ColorSpace.getCached(e[0], g, C); + if (t) { + d.state.fillColorSpace = t; + continue; + } + next( + n + .parseColorSpace({ + cs: e[0], + resources: i, + localColorSpaceCache: C, + }) + .then(function (e) { + e && (d.state.fillColorSpace = e); + }), + ); + return; + } + case ue: { + const t = ColorSpace.getCached(e[0], g, C); + if (t) { + d.state.strokeColorSpace = t; + continue; + } + next( + n + .parseColorSpace({ + cs: e[0], + resources: i, + localColorSpaceCache: C, + }) + .then(function (e) { + e && (d.state.strokeColorSpace = e); + }), + ); + return; + } + case me: + b = d.state.fillColorSpace; + e = b.getRgb(e, 0); + s = Fe; + break; + case fe: + b = d.state.strokeColorSpace; + e = b.getRgb(e, 0); + s = be; + break; + case De: + d.state.fillColorSpace = ColorSpace.singletons.gray; + e = ColorSpace.singletons.gray.getRgb(e, 0); + s = Fe; + break; + case we: + d.state.strokeColorSpace = ColorSpace.singletons.gray; + e = ColorSpace.singletons.gray.getRgb(e, 0); + s = be; + break; + case ke: + d.state.fillColorSpace = ColorSpace.singletons.cmyk; + e = ColorSpace.singletons.cmyk.getRgb(e, 0); + s = Fe; + break; + case Se: + d.state.strokeColorSpace = ColorSpace.singletons.cmyk; + e = ColorSpace.singletons.cmyk.getRgb(e, 0); + s = be; + break; + case Fe: + d.state.fillColorSpace = ColorSpace.singletons.rgb; + e = ColorSpace.singletons.rgb.getRgb(e, 0); + break; + case be: + d.state.strokeColorSpace = ColorSpace.singletons.rgb; + e = ColorSpace.singletons.rgb.getRgb(e, 0); + break; + case ye: + b = d.state.fillColorSpace; + if ("Pattern" === b.name) { + next(n.handleColorN(a, ye, e, b, u, i, t, C, l, Q)); + return; + } + e = b.getRgb(e, 0); + s = Fe; + break; + case pe: + b = d.state.strokeColorSpace; + if ("Pattern" === b.name) { + next(n.handleColorN(a, pe, e, b, u, i, t, C, l, Q)); + return; + } + e = b.getRgb(e, 0); + s = be; + break; + case Re: + var x = i.get("Shading"); + if (!x) throw new FormatError("No shading resource found"); + var U = x.get(e[0].name); + if (!U) throw new FormatError("No shading object found"); + const f = n.parseShading({ + shading: U, + resources: i, + localColorSpaceCache: C, + localShadingPatternCache: Q, + }); + if (!f) continue; + e = [f]; + s = Re; + break; + case NA: + S = e[0] instanceof Name; + F = e[0].name; + if (S) { + const t = h.getByName(F); + if (t) { + t.length > 0 && a.addOp(NA, [t]); + e = null; + continue; + } + } + next( + new Promise(function (e, s) { + if (!S) + throw new FormatError("GState must be referred to by name."); + const r = i.get("ExtGState"); + if (!(r instanceof Dict)) + throw new FormatError("ExtGState should be a dictionary."); + const g = r.get(F); + if (!(g instanceof Dict)) + throw new FormatError("GState should be a dictionary."); + n.setGState({ + resources: i, + gState: g, + operatorList: a, + cacheKey: F, + task: t, + stateManager: d, + localGStateCache: h, + localColorSpaceCache: C, + }).then(e, s); + }).catch(function (e) { + if (!(e instanceof AbortException)) { + if (!n.options.ignoreErrors) throw e; + warn(`getOperatorList - ignoring ExtGState: "${e}".`); + } + }), + ); + return; + case MA: + case LA: + case HA: + case JA: + case YA: + case vA: + case KA: + n.buildPath(a, s, e, o); + continue; + case Me: + case Le: + case ve: + case Ke: + continue; + case Je: + if (!(e[0] instanceof Name)) { + warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`); + a.addOp(Je, ["OC", null]); + continue; + } + if ("OC" === e[0].name) { + next( + n + .parseMarkedContentProps(e[1], i) + .then((e) => { + a.addOp(Je, ["OC", e]); + }) + .catch((e) => { + if (!(e instanceof AbortException)) { + if (!n.options.ignoreErrors) throw e; + warn( + `getOperatorList - ignoring beginMarkedContentProps: "${e}".`, + ); + a.addOp(Je, ["OC", null]); + } + }), + ); + return; + } + e = [e[0].name, e[1] instanceof Dict ? e[1].get("MCID") : null]; + break; + default: + if (null !== e) { + for (w = 0, D = e.length; w < D && !(e[w] instanceof Dict); w++); + if (w < D) { + warn("getOperatorList - ignoring operator: " + s); + continue; + } + } + } + a.addOp(s, e); + } + if (y) next(ks); + else { + closePendingRestoreOPS(); + e(); + } + }).catch((e) => { + if (!(e instanceof AbortException)) { + if (!this.options.ignoreErrors) throw e; + warn( + `getOperatorList - ignoring errors during "${t.name}" task: "${e}".`, + ); + closePendingRestoreOPS(); + } + }); + } + getTextContent({ + stream: e, + task: t, + resources: s, + stateManager: r = null, + includeMarkedContent: n = !1, + sink: g, + seenStyles: o = new Set(), + viewBox: c, + lang: C = null, + markedContentData: h = null, + disableNormalization: l = !1, + keepWhiteSpace: Q = !1, + }) { + s ||= Dict.empty; + r ||= new StateManager(new TextState()); + n && (h ||= { level: 0 }); + const E = { items: [], styles: Object.create(null), lang: C }, + u = { + initialized: !1, + str: [], + totalWidth: 0, + totalHeight: 0, + width: 0, + height: 0, + vertical: !1, + prevTransform: null, + textAdvanceScale: 0, + spaceInFlowMin: 0, + spaceInFlowMax: 0, + trackingSpaceMin: 1 / 0, + negativeSpaceMax: -1 / 0, + notASpace: -1 / 0, + transform: null, + fontName: null, + hasEOL: !1, + }, + d = [" ", " "]; + let f = 0; + function saveLastChar(e) { + const t = (f + 1) % 2, + i = " " !== d[f] && " " === d[t]; + d[f] = e; + f = t; + return !Q && i; + } + function shouldAddWhitepsace() { + return !Q && " " !== d[f] && " " === d[(f + 1) % 2]; + } + function resetLastChars() { + d[0] = d[1] = " "; + f = 0; + } + const p = this, + m = this.xref, + y = []; + let w = null; + const D = new LocalImageCache(), + b = new LocalGStateCache(), + F = new EvaluatorPreprocessor(e, m, r); + let S; + function pushWhitespace({ + width: e = 0, + height: t = 0, + transform: i = u.prevTransform, + fontName: a = u.fontName, + }) { + E.items.push({ + str: " ", + dir: "ltr", + width: e, + height: t, + transform: i, + fontName: a, + hasEOL: !1, + }); + } + function getCurrentTextTransform() { + const e = S.font, + t = [S.fontSize * S.textHScale, 0, 0, S.fontSize, 0, S.textRise]; + if ( + e.isType3Font && + (S.fontSize <= 1 || e.isCharBBox) && + !isArrayEqual(S.fontMatrix, a) + ) { + const i = e.bbox[3] - e.bbox[1]; + i > 0 && (t[3] *= i * S.fontMatrix[3]); + } + return Util.transform(S.ctm, Util.transform(S.textMatrix, t)); + } + function ensureTextContentItem() { + if (u.initialized) return u; + const { font: e, loadedName: t } = S; + if (!o.has(t)) { + o.add(t); + E.styles[t] = { + fontFamily: e.fallbackName, + ascent: e.ascent, + descent: e.descent, + vertical: e.vertical, + }; + if (p.options.fontExtraProperties && e.systemFontInfo) { + const i = E.styles[t]; + i.fontSubstitution = e.systemFontInfo.css; + i.fontSubstitutionLoadedName = e.systemFontInfo.loadedName; + } + } + u.fontName = t; + const i = (u.transform = getCurrentTextTransform()); + if (e.vertical) { + u.width = u.totalWidth = Math.hypot(i[0], i[1]); + u.height = u.totalHeight = 0; + u.vertical = !0; + } else { + u.width = u.totalWidth = 0; + u.height = u.totalHeight = Math.hypot(i[2], i[3]); + u.vertical = !1; + } + const a = Math.hypot(S.textLineMatrix[0], S.textLineMatrix[1]), + s = Math.hypot(S.ctm[0], S.ctm[1]); + u.textAdvanceScale = s * a; + const { fontSize: r } = S; + u.trackingSpaceMin = 0.102 * r; + u.notASpace = 0.03 * r; + u.negativeSpaceMax = -0.2 * r; + u.spaceInFlowMin = 0.102 * r; + u.spaceInFlowMax = 0.6 * r; + u.hasEOL = !1; + u.initialized = !0; + return u; + } + function updateAdvanceScale() { + if (!u.initialized) return; + const e = Math.hypot(S.textLineMatrix[0], S.textLineMatrix[1]), + t = Math.hypot(S.ctm[0], S.ctm[1]) * e; + if (t !== u.textAdvanceScale) { + if (u.vertical) { + u.totalHeight += u.height * u.textAdvanceScale; + u.height = 0; + } else { + u.totalWidth += u.width * u.textAdvanceScale; + u.width = 0; + } + u.textAdvanceScale = t; + } + } + function runBidiTransform(e) { + let t = e.str.join(""); + l || + (t = (function normalizeUnicode(e) { + if (!ot) { + ot = + /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + It = new Map([["ſt", "ſt"]]); + } + return e.replaceAll(ot, (e, t, i) => + t ? t.normalize("NFKC") : It.get(i), + ); + })(t)); + const i = bidi(t, -1, e.vertical); + return { + str: i.str, + dir: i.dir, + width: Math.abs(e.totalWidth), + height: Math.abs(e.totalHeight), + transform: e.transform, + fontName: e.fontName, + hasEOL: e.hasEOL, + }; + } + async function handleSetFont(e, i) { + const r = await p.loadFont(e, i, s); + if (r.font.isType3Font) + try { + await r.loadType3Data(p, s, t); + } catch {} + S.loadedName = r.loadedName; + S.font = r.font; + S.fontMatrix = r.font.fontMatrix || a; + } + function applyInverseRotation(e, t, i) { + const a = Math.hypot(i[0], i[1]); + return [(i[0] * e + i[1] * t) / a, (i[2] * e + i[3] * t) / a]; + } + function compareWithLastPosition(e) { + const t = getCurrentTextTransform(); + let i = t[4], + a = t[5]; + if (S.font?.vertical) { + if (i < c[0] || i > c[2] || a + e < c[1] || a > c[3]) return !1; + } else if (i + e < c[0] || i > c[2] || a < c[1] || a > c[3]) return !1; + if (!S.font || !u.prevTransform) return !0; + let s = u.prevTransform[4], + r = u.prevTransform[5]; + if (s === i && r === a) return !0; + let n = -1; + t[0] && 0 === t[1] && 0 === t[2] + ? (n = t[0] > 0 ? 0 : 180) + : t[1] && 0 === t[0] && 0 === t[3] && (n = t[1] > 0 ? 90 : 270); + switch (n) { + case 0: + break; + case 90: + [i, a] = [a, i]; + [s, r] = [r, s]; + break; + case 180: + [i, a, s, r] = [-i, -a, -s, -r]; + break; + case 270: + [i, a] = [-a, -i]; + [s, r] = [-r, -s]; + break; + default: + [i, a] = applyInverseRotation(i, a, t); + [s, r] = applyInverseRotation(s, r, u.prevTransform); + } + if (S.font.vertical) { + const e = (r - a) / u.textAdvanceScale, + t = i - s, + n = Math.sign(u.height); + if (e < n * u.negativeSpaceMax) { + if (Math.abs(t) > 0.5 * u.width) { + appendEOL(); + return !0; + } + resetLastChars(); + flushTextContentItem(); + return !0; + } + if (Math.abs(t) > u.width) { + appendEOL(); + return !0; + } + e <= n * u.notASpace && resetLastChars(); + if (e <= n * u.trackingSpaceMin) + if (shouldAddWhitepsace()) { + resetLastChars(); + flushTextContentItem(); + pushWhitespace({ height: Math.abs(e) }); + } else u.height += e; + else if (!addFakeSpaces(e, u.prevTransform, n)) + if (0 === u.str.length) { + resetLastChars(); + pushWhitespace({ height: Math.abs(e) }); + } else u.height += e; + Math.abs(t) > 0.25 * u.width && flushTextContentItem(); + return !0; + } + const g = (i - s) / u.textAdvanceScale, + o = a - r, + C = Math.sign(u.width); + if (g < C * u.negativeSpaceMax) { + if (Math.abs(o) > 0.5 * u.height) { + appendEOL(); + return !0; + } + resetLastChars(); + flushTextContentItem(); + return !0; + } + if (Math.abs(o) > u.height) { + appendEOL(); + return !0; + } + g <= C * u.notASpace && resetLastChars(); + if (g <= C * u.trackingSpaceMin) + if (shouldAddWhitepsace()) { + resetLastChars(); + flushTextContentItem(); + pushWhitespace({ width: Math.abs(g) }); + } else u.width += g; + else if (!addFakeSpaces(g, u.prevTransform, C)) + if (0 === u.str.length) { + resetLastChars(); + pushWhitespace({ width: Math.abs(g) }); + } else u.width += g; + Math.abs(o) > 0.25 * u.height && flushTextContentItem(); + return !0; + } + function buildTextContentItem({ chars: e, extraSpacing: t }) { + const i = S.font; + if (!e) { + const e = S.charSpacing + t; + e && + (i.vertical + ? S.translateTextMatrix(0, -e) + : S.translateTextMatrix(e * S.textHScale, 0)); + Q && compareWithLastPosition(0); + return; + } + const a = i.charsToGlyphs(e), + s = S.fontMatrix[0] * S.fontSize; + for (let e = 0, r = a.length; e < r; e++) { + const n = a[e], + { category: g } = n; + if (g.isInvisibleFormatMark) continue; + let o = S.charSpacing + (e + 1 === r ? t : 0), + c = n.width; + i.vertical && (c = n.vmetric ? n.vmetric[0] : -c); + let C = c * s; + if (!Q && g.isWhitespace) { + if (i.vertical) { + o += -C + S.wordSpacing; + S.translateTextMatrix(0, -o); + } else { + o += C + S.wordSpacing; + S.translateTextMatrix(o * S.textHScale, 0); + } + saveLastChar(" "); + continue; + } + if (!g.isZeroWidthDiacritic && !compareWithLastPosition(C)) { + i.vertical + ? S.translateTextMatrix(0, C) + : S.translateTextMatrix(C * S.textHScale, 0); + continue; + } + const h = ensureTextContentItem(); + g.isZeroWidthDiacritic && (C = 0); + if (i.vertical) { + S.translateTextMatrix(0, C); + C = Math.abs(C); + h.height += C; + } else { + C *= S.textHScale; + S.translateTextMatrix(C, 0); + h.width += C; + } + C && (h.prevTransform = getCurrentTextTransform()); + const l = n.unicode; + saveLastChar(l) && h.str.push(" "); + h.str.push(l); + o && + (i.vertical + ? S.translateTextMatrix(0, -o) + : S.translateTextMatrix(o * S.textHScale, 0)); + } + } + function appendEOL() { + resetLastChars(); + if (u.initialized) { + u.hasEOL = !0; + flushTextContentItem(); + } else + E.items.push({ + str: "", + dir: "ltr", + width: 0, + height: 0, + transform: getCurrentTextTransform(), + fontName: S.loadedName, + hasEOL: !0, + }); + } + function addFakeSpaces(e, t, i) { + if (i * u.spaceInFlowMin <= e && e <= i * u.spaceInFlowMax) { + if (u.initialized) { + resetLastChars(); + u.str.push(" "); + } + return !1; + } + const a = u.fontName; + let s = 0; + if (u.vertical) { + s = e; + e = 0; + } + flushTextContentItem(); + resetLastChars(); + pushWhitespace({ + width: Math.abs(e), + height: Math.abs(s), + transform: t || getCurrentTextTransform(), + fontName: a, + }); + return !0; + } + function flushTextContentItem() { + if (u.initialized && u.str) { + u.vertical + ? (u.totalHeight += u.height * u.textAdvanceScale) + : (u.totalWidth += u.width * u.textAdvanceScale); + E.items.push(runBidiTransform(u)); + u.initialized = !1; + u.str.length = 0; + } + } + function enqueueChunk(e = !1) { + const t = E.items.length; + if (0 !== t && !(e && t < 10)) { + g.enqueue(E, t); + E.items = []; + E.styles = Object.create(null); + } + } + const k = new TimeSlotManager(); + return new Promise(function promiseBody(e, a) { + const next = function (t) { + enqueueChunk(!0); + Promise.all([t, g.ready]).then(function () { + try { + promiseBody(e, a); + } catch (e) { + a(e); + } + }, a); + }; + t.ensureNotTerminated(); + k.reset(); + const u = {}; + let d, + f = []; + for (; !(d = k.check()); ) { + f.length = 0; + u.args = f; + if (!F.read(u)) break; + const e = S; + S = r.state; + const a = u.fn; + f = u.args; + switch (0 | a) { + case se: + var R = f[0].name, + N = f[1]; + if (S.font && R === S.fontName && N === S.fontSize) break; + flushTextContentItem(); + S.fontName = R; + S.fontSize = N; + next(handleSetFont(R, null)); + return; + case ne: + S.textRise = f[0]; + break; + case ie: + S.textHScale = f[0] / 100; + break; + case ae: + S.leading = f[0]; + break; + case ge: + S.translateTextLineMatrix(f[0], f[1]); + S.textMatrix = S.textLineMatrix.slice(); + break; + case oe: + S.leading = -f[1]; + S.translateTextLineMatrix(f[0], f[1]); + S.textMatrix = S.textLineMatrix.slice(); + break; + case ce: + S.carriageReturn(); + break; + case Ie: + S.setTextMatrix(f[0], f[1], f[2], f[3], f[4], f[5]); + S.setTextLineMatrix(f[0], f[1], f[2], f[3], f[4], f[5]); + updateAdvanceScale(); + break; + case ee: + S.charSpacing = f[0]; + break; + case te: + S.wordSpacing = f[0]; + break; + case $A: + S.textMatrix = i.slice(); + S.textLineMatrix = i.slice(); + break; + case he: + if (!r.state.font) { + p.ensureStateFont(r.state); + continue; + } + const a = ((S.font.vertical ? 1 : -1) * S.fontSize) / 1e3, + u = f[0]; + for (let e = 0, t = u.length; e < t; e++) { + const t = u[e]; + if ("string" == typeof t) y.push(t); + else if ("number" == typeof t && 0 !== t) { + const e = y.join(""); + y.length = 0; + buildTextContentItem({ chars: e, extraSpacing: t * a }); + } + } + if (y.length > 0) { + const e = y.join(""); + y.length = 0; + buildTextContentItem({ chars: e, extraSpacing: 0 }); + } + break; + case Ce: + if (!r.state.font) { + p.ensureStateFont(r.state); + continue; + } + buildTextContentItem({ chars: f[0], extraSpacing: 0 }); + break; + case Be: + if (!r.state.font) { + p.ensureStateFont(r.state); + continue; + } + S.carriageReturn(); + buildTextContentItem({ chars: f[0], extraSpacing: 0 }); + break; + case le: + if (!r.state.font) { + p.ensureStateFont(r.state); + continue; + } + S.wordSpacing = f[0]; + S.charSpacing = f[1]; + S.carriageReturn(); + buildTextContentItem({ chars: f[2], extraSpacing: 0 }); + break; + case Ue: + flushTextContentItem(); + w || (w = s.get("XObject") || Dict.empty); + var G = f[0] instanceof Name, + x = f[0].name; + if (G && D.getByName(x)) break; + next( + new Promise(function (e, i) { + if (!G) + throw new FormatError("XObject must be referred to by name."); + let a = w.getRaw(x); + if (a instanceof Ref) { + if (D.getByRef(a)) { + e(); + return; + } + if (p.globalImageCache.getData(a, p.pageIndex)) { + e(); + return; + } + a = m.fetch(a); + } + if (!(a instanceof BaseStream)) + throw new FormatError("XObject should be a stream"); + const E = a.dict.get("Subtype"); + if (!(E instanceof Name)) + throw new FormatError("XObject should have a Name subtype"); + if ("Form" !== E.name) { + D.set(x, a.dict.objId, !0); + e(); + return; + } + const u = r.state.clone(), + d = new StateManager(u), + f = lookupMatrix(a.dict.getArray("Matrix"), null); + f && d.transform(f); + enqueueChunk(); + const y = { + enqueueInvoked: !1, + enqueue(e, t) { + this.enqueueInvoked = !0; + g.enqueue(e, t); + }, + get desiredSize() { + return g.desiredSize; + }, + get ready() { + return g.ready; + }, + }; + p.getTextContent({ + stream: a, + task: t, + resources: a.dict.get("Resources") || s, + stateManager: d, + includeMarkedContent: n, + sink: y, + seenStyles: o, + viewBox: c, + lang: C, + markedContentData: h, + disableNormalization: l, + keepWhiteSpace: Q, + }).then(function () { + y.enqueueInvoked || D.set(x, a.dict.objId, !0); + e(); + }, i); + }).catch(function (e) { + if (!(e instanceof AbortException)) { + if (!p.options.ignoreErrors) throw e; + warn(`getTextContent - ignoring XObject: "${e}".`); + } + }), + ); + return; + case NA: + G = f[0] instanceof Name; + x = f[0].name; + if (G && b.getByName(x)) break; + next( + new Promise(function (e, t) { + if (!G) + throw new FormatError("GState must be referred to by name."); + const i = s.get("ExtGState"); + if (!(i instanceof Dict)) + throw new FormatError("ExtGState should be a dictionary."); + const a = i.get(x); + if (!(a instanceof Dict)) + throw new FormatError("GState should be a dictionary."); + const r = a.get("Font"); + if (r) { + flushTextContentItem(); + S.fontName = null; + S.fontSize = r[1]; + handleSetFont(null, r[0]).then(e, t); + } else { + b.set(x, a.objId, !0); + e(); + } + }).catch(function (e) { + if (!(e instanceof AbortException)) { + if (!p.options.ignoreErrors) throw e; + warn(`getTextContent - ignoring ExtGState: "${e}".`); + } + }), + ); + return; + case He: + flushTextContentItem(); + if (n) { + h.level++; + E.items.push({ + type: "beginMarkedContent", + tag: f[0] instanceof Name ? f[0].name : null, + }); + } + break; + case Je: + flushTextContentItem(); + if (n) { + h.level++; + let e = null; + f[1] instanceof Dict && (e = f[1].get("MCID")); + E.items.push({ + type: "beginMarkedContentProps", + id: Number.isInteger(e) + ? `${p.idFactory.getPageObjId()}_mc${e}` + : null, + tag: f[0] instanceof Name ? f[0].name : null, + }); + } + break; + case Ye: + flushTextContentItem(); + if (n) { + if (0 === h.level) break; + h.level--; + E.items.push({ type: "endMarkedContent" }); + } + break; + case xA: + !e || + (e.font === S.font && + e.fontSize === S.fontSize && + e.fontName === S.fontName) || + flushTextContentItem(); + } + if (E.items.length >= g.desiredSize) { + d = !0; + break; + } + } + if (d) next(ks); + else { + flushTextContentItem(); + enqueueChunk(); + e(); + } + }).catch((e) => { + if (!(e instanceof AbortException)) { + if (!this.options.ignoreErrors) throw e; + warn( + `getTextContent - ignoring errors during "${t.name}" task: "${e}".`, + ); + flushTextContentItem(); + enqueueChunk(); + } + }); + } + async extractDataStructures(e, t) { + const i = this.xref; + let a; + const s = this.readToUnicode(t.toUnicode); + if (t.composite) { + const i = e.get("CIDSystemInfo"); + i instanceof Dict && + (t.cidSystemInfo = { + registry: stringToPDFString(i.get("Registry")), + ordering: stringToPDFString(i.get("Ordering")), + supplement: i.get("Supplement"), + }); + try { + const t = e.get("CIDToGIDMap"); + t instanceof BaseStream && (a = t.getBytes()); + } catch (e) { + if (!this.options.ignoreErrors) throw e; + warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`); + } + } + const r = []; + let n, + g = null; + if (e.has("Encoding")) { + n = e.get("Encoding"); + if (n instanceof Dict) { + g = n.get("BaseEncoding"); + g = g instanceof Name ? g.name : null; + if (n.has("Differences")) { + const e = n.get("Differences"); + let t = 0; + for (const a of e) { + const e = i.fetchIfRef(a); + if ("number" == typeof e) t = e; + else { + if (!(e instanceof Name)) + throw new FormatError( + `Invalid entry in 'Differences' array: ${e}`, + ); + r[t++] = e.name; + } + } + } + } else if (n instanceof Name) g = n.name; + else { + const e = "Encoding is not a Name nor a Dict"; + if (!this.options.ignoreErrors) throw new FormatError(e); + warn(e); + } + "MacRomanEncoding" !== g && + "MacExpertEncoding" !== g && + "WinAnsiEncoding" !== g && + (g = null); + } + const o = !t.file || t.isInternalFont, + c = Zi()[t.name]; + g && o && c && (g = null); + if (g) t.defaultEncoding = getEncoding(g); + else { + const e = !!(t.flags & Ti), + i = !!(t.flags & qi); + n = fi; + "TrueType" !== t.type || i || (n = pi); + if (e || c) { + n = di; + o && + (/Symbol/i.test(t.name) + ? (n = mi) + : /Dingbats/i.test(t.name) + ? (n = yi) + : /Wingdings/i.test(t.name) && (n = pi)); + } + t.defaultEncoding = n; + } + t.differences = r; + t.baseEncodingName = g; + t.hasEncoding = !!g || r.length > 0; + t.dict = e; + t.toUnicode = await s; + const C = await this.buildToUnicode(t); + t.toUnicode = C; + a && (t.cidToGidMap = this.readCidToGidMap(a, C)); + return t; + } + _simpleFontToUnicode(e, t = !1) { + assert(!e.composite, "Must be a simple font."); + const i = [], + a = e.defaultEncoding.slice(), + s = e.baseEncodingName, + r = e.differences; + for (const e in r) { + const t = r[e]; + ".notdef" !== t && (a[e] = t); + } + const n = Ni(); + for (const r in a) { + let g = a[r]; + if ("" === g) continue; + let o = n[g]; + if (void 0 !== o) { + i[r] = String.fromCharCode(o); + continue; + } + let c = 0; + switch (g[0]) { + case "G": + 3 === g.length && (c = parseInt(g.substring(1), 16)); + break; + case "g": + 5 === g.length && (c = parseInt(g.substring(1), 16)); + break; + case "C": + case "c": + if (g.length >= 3 && g.length <= 4) { + const i = g.substring(1); + if (t) { + c = parseInt(i, 16); + break; + } + c = +i; + if (Number.isNaN(c) && Number.isInteger(parseInt(i, 16))) + return this._simpleFontToUnicode(e, !0); + } + break; + case "u": + o = getUnicodeForGlyph(g, n); + -1 !== o && (c = o); + break; + default: + switch (g) { + case "f_h": + case "f_t": + case "T_h": + i[r] = g.replaceAll("_", ""); + continue; + } + } + if (c > 0 && c <= 1114111 && Number.isInteger(c)) { + if (s && c === +r) { + const e = getEncoding(s); + if (e && (g = e[r])) { + i[r] = String.fromCharCode(n[g]); + continue; + } + } + i[r] = String.fromCodePoint(c); + } + } + return i; + } + async buildToUnicode(e) { + e.hasIncludedToUnicodeMap = e.toUnicode?.length > 0; + if (e.hasIncludedToUnicodeMap) { + !e.composite && + e.hasEncoding && + (e.fallbackToUnicode = this._simpleFontToUnicode(e)); + return e.toUnicode; + } + if (!e.composite) return new ToUnicodeMap(this._simpleFontToUnicode(e)); + if ( + e.composite && + ((e.cMap.builtInCMap && !(e.cMap instanceof IdentityCMap)) || + ("Adobe" === e.cidSystemInfo?.registry && + ("GB1" === e.cidSystemInfo.ordering || + "CNS1" === e.cidSystemInfo.ordering || + "Japan1" === e.cidSystemInfo.ordering || + "Korea1" === e.cidSystemInfo.ordering))) + ) { + const { registry: t, ordering: i } = e.cidSystemInfo, + a = Name.get(`${t}-${i}-UCS2`), + s = await CMapFactory.create({ + encoding: a, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null, + }), + r = [], + n = []; + e.cMap.forEach(function (e, t) { + if (t > 65535) throw new FormatError("Max size of CID is 65,535"); + const i = s.lookup(t); + if (i) { + n.length = 0; + for (let e = 0, t = i.length; e < t; e += 2) + n.push((i.charCodeAt(e) << 8) + i.charCodeAt(e + 1)); + r[e] = String.fromCharCode(...n); + } + }); + return new ToUnicodeMap(r); + } + return new IdentityToUnicodeMap(e.firstChar, e.lastChar); + } + async readToUnicode(e) { + if (!e) return null; + if (e instanceof Name) { + const t = await CMapFactory.create({ + encoding: e, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null, + }); + return t instanceof IdentityCMap + ? new IdentityToUnicodeMap(0, 65535) + : new ToUnicodeMap(t.getMap()); + } + if (e instanceof BaseStream) + try { + const t = await CMapFactory.create({ + encoding: e, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null, + }); + if (t instanceof IdentityCMap) + return new IdentityToUnicodeMap(0, 65535); + const i = new Array(t.length); + t.forEach(function (e, t) { + if ("number" == typeof t) { + i[e] = String.fromCodePoint(t); + return; + } + const a = []; + for (let e = 0; e < t.length; e += 2) { + const i = (t.charCodeAt(e) << 8) | t.charCodeAt(e + 1); + if (55296 != (63488 & i)) { + a.push(i); + continue; + } + e += 2; + const s = (t.charCodeAt(e) << 8) | t.charCodeAt(e + 1); + a.push(((1023 & i) << 10) + (1023 & s) + 65536); + } + i[e] = String.fromCodePoint(...a); + }); + return new ToUnicodeMap(i); + } catch (e) { + if (e instanceof AbortException) return null; + if (this.options.ignoreErrors) { + warn(`readToUnicode - ignoring ToUnicode data: "${e}".`); + return null; + } + throw e; + } + return null; + } + readCidToGidMap(e, t) { + const i = []; + for (let a = 0, s = e.length; a < s; a++) { + const s = (e[a++] << 8) | e[a], + r = a >> 1; + (0 !== s || t.has(r)) && (i[r] = s); + } + return i; + } + extractWidths(e, t, i) { + const a = this.xref; + let s = [], + r = 0; + const n = []; + let g; + if (i.composite) { + const t = e.get("DW"); + r = "number" == typeof t ? Math.ceil(t) : 1e3; + const o = e.get("W"); + if (Array.isArray(o)) + for (let e = 0, t = o.length; e < t; e++) { + let t = a.fetchIfRef(o[e++]); + if (!Number.isInteger(t)) break; + const i = a.fetchIfRef(o[e]); + if (Array.isArray(i)) + for (const e of i) { + const i = a.fetchIfRef(e); + "number" == typeof i && (s[t] = i); + t++; + } + else { + if (!Number.isInteger(i)) break; + { + const r = a.fetchIfRef(o[++e]); + if ("number" != typeof r) continue; + for (let e = t; e <= i; e++) s[e] = r; + } + } + } + if (i.vertical) { + const t = e.getArray("DW2"); + let i = isNumberArray(t, 2) ? t : [880, -1e3]; + g = [i[1], 0.5 * r, i[0]]; + i = e.get("W2"); + if (Array.isArray(i)) + for (let e = 0, t = i.length; e < t; e++) { + let t = a.fetchIfRef(i[e++]); + if (!Number.isInteger(t)) break; + const s = a.fetchIfRef(i[e]); + if (Array.isArray(s)) + for (let e = 0, i = s.length; e < i; e++) { + const i = [ + a.fetchIfRef(s[e++]), + a.fetchIfRef(s[e++]), + a.fetchIfRef(s[e]), + ]; + isNumberArray(i, null) && (n[t] = i); + t++; + } + else { + if (!Number.isInteger(s)) break; + { + const r = [ + a.fetchIfRef(i[++e]), + a.fetchIfRef(i[++e]), + a.fetchIfRef(i[++e]), + ]; + if (!isNumberArray(r, null)) continue; + for (let e = t; e <= s; e++) n[e] = r; + } + } + } + } + } else { + const n = e.get("Widths"); + if (Array.isArray(n)) { + let e = i.firstChar; + for (const t of n) { + const i = a.fetchIfRef(t); + "number" == typeof i && (s[e] = i); + e++; + } + const g = t.get("MissingWidth"); + r = "number" == typeof g ? g : 0; + } else { + const t = e.get("BaseFont"); + if (t instanceof Name) { + const e = this.getBaseFontMetrics(t.name); + s = this.buildCharCodeToWidth(e.widths, i); + r = e.defaultWidth; + } + } + } + let o = !0, + c = r; + for (const e in s) { + const t = s[e]; + if (t) + if (c) { + if (c !== t) { + o = !1; + break; + } + } else c = t; + } + o ? (i.flags |= vi) : (i.flags &= ~vi); + i.defaultWidth = r; + i.widths = s; + i.defaultVMetrics = g; + i.vmetrics = n; + } + isSerifFont(e) { + const t = e.split("-", 1)[0]; + return t in Xi() || /serif/gi.test(t); + } + getBaseFontMetrics(e) { + let t = 0, + i = Object.create(null), + a = !1; + let s = Pi()[e] || e; + const r = Aa(); + s in r || (s = this.isSerifFont(e) ? "Times-Roman" : "Helvetica"); + const n = r[s]; + if ("number" == typeof n) { + t = n; + a = !0; + } else i = n(); + return { defaultWidth: t, monospace: a, widths: i }; + } + buildCharCodeToWidth(e, t) { + const i = Object.create(null), + a = t.differences, + s = t.defaultEncoding; + for (let t = 0; t < 256; t++) + t in a && e[a[t]] + ? (i[t] = e[a[t]]) + : t in s && e[s[t]] && (i[t] = e[s[t]]); + return i; + } + preEvaluateFont(e) { + const t = e; + let i = e.get("Subtype"); + if (!(i instanceof Name)) throw new FormatError("invalid font Subtype"); + let a, + s = !1; + if ("Type0" === i.name) { + const t = e.get("DescendantFonts"); + if (!t) throw new FormatError("Descendant fonts are not specified"); + if ( + !( + (e = Array.isArray(t) ? this.xref.fetchIfRef(t[0]) : t) instanceof + Dict + ) + ) + throw new FormatError("Descendant font is not a dictionary."); + i = e.get("Subtype"); + if (!(i instanceof Name)) throw new FormatError("invalid font Subtype"); + s = !0; + } + let r = e.get("FirstChar"); + Number.isInteger(r) || (r = 0); + let n = e.get("LastChar"); + Number.isInteger(n) || (n = s ? 65535 : 255); + const g = e.get("FontDescriptor"), + o = e.get("ToUnicode") || t.get("ToUnicode"); + if (g) { + a = new MurmurHash3_64(); + const i = t.getRaw("Encoding"); + if (i instanceof Name) a.update(i.name); + else if (i instanceof Ref) a.update(i.toString()); + else if (i instanceof Dict) + for (const e of i.getRawValues()) + if (e instanceof Name) a.update(e.name); + else if (e instanceof Ref) a.update(e.toString()); + else if (Array.isArray(e)) { + const t = e.length, + i = new Array(t); + for (let a = 0; a < t; a++) { + const t = e[a]; + t instanceof Name + ? (i[a] = t.name) + : ("number" == typeof t || t instanceof Ref) && + (i[a] = t.toString()); + } + a.update(i.join()); + } + a.update(`${r}-${n}`); + if (o instanceof BaseStream) { + const e = o.str || o, + t = e.buffer + ? new Uint8Array(e.buffer.buffer, 0, e.bufferLength) + : new Uint8Array(e.bytes.buffer, e.start, e.end - e.start); + a.update(t); + } else o instanceof Name && a.update(o.name); + const g = e.get("Widths") || t.get("Widths"); + if (Array.isArray(g)) { + const e = []; + for (const t of g) + ("number" == typeof t || t instanceof Ref) && e.push(t.toString()); + a.update(e.join()); + } + if (s) { + a.update("compositeFont"); + const i = e.get("W") || t.get("W"); + if (Array.isArray(i)) { + const e = []; + for (const t of i) + if ("number" == typeof t || t instanceof Ref) e.push(t.toString()); + else if (Array.isArray(t)) { + const i = []; + for (const e of t) + ("number" == typeof e || e instanceof Ref) && + i.push(e.toString()); + e.push(`[${i.join()}]`); + } + a.update(e.join()); + } + const s = e.getRaw("CIDToGIDMap") || t.getRaw("CIDToGIDMap"); + s instanceof Name + ? a.update(s.name) + : s instanceof Ref + ? a.update(s.toString()) + : s instanceof BaseStream && a.update(s.peekBytes()); + } + } + return { + descriptor: g, + dict: e, + baseDict: t, + composite: s, + type: i.name, + firstChar: r, + lastChar: n, + toUnicode: o, + hash: a ? a.hexdigest() : "", + }; + } + async translateFont({ + descriptor: e, + dict: t, + baseDict: i, + composite: s, + type: r, + firstChar: n, + lastChar: g, + toUnicode: o, + cssFontInfo: c, + }) { + const C = "Type3" === r; + if (!e) { + if (!C) { + let e = t.get("BaseFont"); + if (!(e instanceof Name)) + throw new FormatError("Base font is not specified"); + e = e.name.replaceAll(/[,_]/g, "-"); + const a = this.getBaseFontMetrics(e), + s = e.split("-", 1)[0], + c = + (this.isSerifFont(s) ? Ki : 0) | + (a.monospace ? vi : 0) | + (Zi()[s] ? Ti : qi), + h = { + type: r, + name: e, + loadedName: i.loadedName, + systemFontInfo: null, + widths: a.widths, + defaultWidth: a.defaultWidth, + isSimulatedFlags: !0, + flags: c, + firstChar: n, + lastChar: g, + toUnicode: o, + xHeight: 0, + capHeight: 0, + italicAngle: 0, + isType3Font: C, + }, + l = t.get("Widths"), + Q = getStandardFontName(e); + let E = null; + if (Q) { + E = await this.fetchStandardFontData(Q); + h.isInternalFont = !!E; + } + !h.isInternalFont && + this.options.useSystemFonts && + (h.systemFontInfo = getFontSubstitution( + this.systemFontCache, + this.idFactory, + this.options.standardFontDataUrl, + e, + Q, + r, + )); + const u = await this.extractDataStructures(t, h); + if (Array.isArray(l)) { + const e = []; + let t = n; + for (const i of l) { + const a = this.xref.fetchIfRef(i); + "number" == typeof a && (e[t] = a); + t++; + } + u.widths = e; + } else u.widths = this.buildCharCodeToWidth(a.widths, u); + return new Font(e, E, u); + } + { + const i = lookupNormalRect(t.getArray("FontBBox"), [0, 0, 0, 0]); + (e = new Dict(null)).set("FontName", Name.get(r)); + e.set("FontBBox", i); + } + } + let h = e.get("FontName"), + l = t.get("BaseFont"); + "string" == typeof h && (h = Name.get(h)); + "string" == typeof l && (l = Name.get(l)); + const Q = h?.name, + E = l?.name; + if (!C && Q !== E) { + info( + `The FontDescriptor's FontName is "${Q}" but should be the same as the Font's BaseFont "${E}".`, + ); + Q && + E && + (E.startsWith(Q) || (!isKnownFontName(Q) && isKnownFontName(E))) && + (h = null); + } + h ||= l; + if (!(h instanceof Name)) throw new FormatError("invalid font name"); + let u, d, f, p, m; + try { + u = e.get("FontFile", "FontFile2", "FontFile3"); + } catch (e) { + if (!this.options.ignoreErrors) throw e; + warn(`translateFont - fetching "${h.name}" font file: "${e}".`); + u = new NullStream(); + } + let y = !1, + w = null, + D = null; + if (u) { + if (u.dict) { + const e = u.dict.get("Subtype"); + e instanceof Name && (d = e.name); + f = u.dict.get("Length1"); + p = u.dict.get("Length2"); + m = u.dict.get("Length3"); + } + } else if (c) { + const e = getXfaFontName(h.name); + if (e) { + c.fontFamily = `${c.fontFamily}-PdfJS-XFA`; + c.metrics = e.metrics || null; + w = e.factors || null; + u = await this.fetchStandardFontData(e.name); + y = !!u; + i = t = getXfaFontDict(h.name); + s = !0; + } + } else if (!C) { + const e = getStandardFontName(h.name); + if (e) { + u = await this.fetchStandardFontData(e); + y = !!u; + } + !y && + this.options.useSystemFonts && + (D = getFontSubstitution( + this.systemFontCache, + this.idFactory, + this.options.standardFontDataUrl, + h.name, + e, + r, + )); + } + const b = lookupMatrix(t.getArray("FontMatrix"), a), + F = lookupNormalRect( + e.getArray("FontBBox") || t.getArray("FontBBox"), + void 0, + ); + let S = e.get("Ascent"); + "number" != typeof S && (S = void 0); + let k = e.get("Descent"); + "number" != typeof k && (k = void 0); + let R = e.get("XHeight"); + "number" != typeof R && (R = 0); + let N = e.get("CapHeight"); + "number" != typeof N && (N = 0); + let G = e.get("Flags"); + Number.isInteger(G) || (G = 0); + let x = e.get("ItalicAngle"); + "number" != typeof x && (x = 0); + const U = { + type: r, + name: h.name, + subtype: d, + file: u, + length1: f, + length2: p, + length3: m, + isInternalFont: y, + loadedName: i.loadedName, + composite: s, + fixedPitch: !1, + fontMatrix: b, + firstChar: n, + lastChar: g, + toUnicode: o, + bbox: F, + ascent: S, + descent: k, + xHeight: R, + capHeight: N, + flags: G, + italicAngle: x, + isType3Font: C, + cssFontInfo: c, + scaleFactors: w, + systemFontInfo: D, + }; + if (s) { + const e = i.get("Encoding"); + e instanceof Name && (U.cidEncoding = e.name); + const t = await CMapFactory.create({ + encoding: e, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null, + }); + U.cMap = t; + U.vertical = U.cMap.vertical; + } + const M = await this.extractDataStructures(t, U); + this.extractWidths(t, e, M); + return new Font(h.name, u, M); + } + static buildFontPaths(e, t, i, a) { + function buildPath(t) { + const s = `${e.loadedName}_path_${t}`; + try { + if (e.renderer.hasBuiltPath(t)) return; + i.send("commonobj", [s, "FontPath", e.renderer.getPathJs(t)]); + } catch (e) { + if (a.ignoreErrors) { + warn(`buildFontPaths - ignoring ${s} glyph: "${e}".`); + return; + } + throw e; + } + } + for (const e of t) { + buildPath(e.fontChar); + const t = e.accent; + t?.fontChar && buildPath(t.fontChar); + } + } + static get fallbackFontDict() { + const e = new Dict(); + e.set("BaseFont", Name.get("Helvetica")); + e.set("Type", Name.get("FallbackType")); + e.set("Subtype", Name.get("FallbackType")); + e.set("Encoding", Name.get("WinAnsiEncoding")); + return shadow(this, "fallbackFontDict", e); + } +} +class TranslatedFont { + constructor({ loadedName: e, font: t, dict: i, evaluatorOptions: a }) { + this.loadedName = e; + this.font = t; + this.dict = i; + this._evaluatorOptions = a || bs; + this.type3Loaded = null; + this.type3Dependencies = t.isType3Font ? new Set() : null; + this.sent = !1; + } + send(e) { + if (!this.sent) { + this.sent = !0; + e.send("commonobj", [ + this.loadedName, + "Font", + this.font.exportData(this._evaluatorOptions.fontExtraProperties), + ]); + } + } + fallback(e) { + if (this.font.data) { + this.font.disableFontFace = !0; + PartialEvaluator.buildFontPaths( + this.font, + this.font.glyphCacheValues, + e, + this._evaluatorOptions, + ); + } + } + loadType3Data(e, t, i) { + if (this.type3Loaded) return this.type3Loaded; + if (!this.font.isType3Font) throw new Error("Must be a Type3 font."); + const a = e.clone({ ignoreErrors: !1 }), + s = new RefSet(e.type3FontRefs); + this.dict.objId && !s.has(this.dict.objId) && s.put(this.dict.objId); + a.type3FontRefs = s; + const r = this.font, + n = this.type3Dependencies; + let g = Promise.resolve(); + const o = this.dict.get("CharProcs"), + c = this.dict.get("Resources") || t, + C = Object.create(null), + h = Util.normalizeRect(r.bbox || [0, 0, 0, 0]), + l = h[2] - h[0], + Q = h[3] - h[1], + E = Math.hypot(l, Q); + for (const e of o.getKeys()) + g = g.then(() => { + const t = o.get(e), + s = new OperatorList(); + return a + .getOperatorList({ + stream: t, + task: i, + resources: c, + operatorList: s, + }) + .then(() => { + s.fnArray[0] === Ee && this._removeType3ColorOperators(s, E); + C[e] = s.getIR(); + for (const e of s.dependencies) n.add(e); + }) + .catch(function (t) { + warn(`Type3 font resource "${e}" is not available.`); + const i = new OperatorList(); + C[e] = i.getIR(); + }); + }); + this.type3Loaded = g.then(() => { + r.charProcOperatorList = C; + if (this._bbox) { + r.isCharBBox = !0; + r.bbox = this._bbox; + } + }); + return this.type3Loaded; + } + _removeType3ColorOperators(e, t = NaN) { + const i = Util.normalizeRect(e.argsArray[0].slice(2)), + a = i[2] - i[0], + s = i[3] - i[1], + r = Math.hypot(a, s); + if (0 === a || 0 === s) { + e.fnArray.splice(0, 1); + e.argsArray.splice(0, 1); + } else if (0 === t || Math.round(r / t) >= 10) { + this._bbox || (this._bbox = [1 / 0, 1 / 0, -1 / 0, -1 / 0]); + this._bbox[0] = Math.min(this._bbox[0], i[0]); + this._bbox[1] = Math.min(this._bbox[1], i[1]); + this._bbox[2] = Math.max(this._bbox[2], i[2]); + this._bbox[3] = Math.max(this._bbox[3], i[3]); + } + let n = 0, + g = e.length; + for (; n < g; ) { + switch (e.fnArray[n]) { + case Ee: + break; + case ue: + case de: + case fe: + case pe: + case me: + case ye: + case we: + case De: + case be: + case Fe: + case Se: + case ke: + case Re: + case kA: + e.fnArray.splice(n, 1); + e.argsArray.splice(n, 1); + g--; + continue; + case NA: + const [t] = e.argsArray[n]; + let i = 0, + a = t.length; + for (; i < a; ) { + const [e] = t[i]; + switch (e) { + case "TR": + case "TR2": + case "HT": + case "BG": + case "BG2": + case "UCR": + case "UCR2": + t.splice(i, 1); + a--; + continue; + } + i++; + } + } + n++; + } + } +} +class StateManager { + constructor(e = new EvalState()) { + this.state = e; + this.stateStack = []; + } + save() { + const e = this.state; + this.stateStack.push(this.state); + this.state = e.clone(); + } + restore() { + const e = this.stateStack.pop(); + e && (this.state = e); + } + transform(e) { + this.state.ctm = Util.transform(this.state.ctm, e); + } +} +class TextState { + constructor() { + this.ctm = new Float32Array(i); + this.fontName = null; + this.fontSize = 0; + this.loadedName = null; + this.font = null; + this.fontMatrix = a; + this.textMatrix = i.slice(); + this.textLineMatrix = i.slice(); + this.charSpacing = 0; + this.wordSpacing = 0; + this.leading = 0; + this.textHScale = 1; + this.textRise = 0; + } + setTextMatrix(e, t, i, a, s, r) { + const n = this.textMatrix; + n[0] = e; + n[1] = t; + n[2] = i; + n[3] = a; + n[4] = s; + n[5] = r; + } + setTextLineMatrix(e, t, i, a, s, r) { + const n = this.textLineMatrix; + n[0] = e; + n[1] = t; + n[2] = i; + n[3] = a; + n[4] = s; + n[5] = r; + } + translateTextMatrix(e, t) { + const i = this.textMatrix; + i[4] = i[0] * e + i[2] * t + i[4]; + i[5] = i[1] * e + i[3] * t + i[5]; + } + translateTextLineMatrix(e, t) { + const i = this.textLineMatrix; + i[4] = i[0] * e + i[2] * t + i[4]; + i[5] = i[1] * e + i[3] * t + i[5]; + } + carriageReturn() { + this.translateTextLineMatrix(0, -this.leading); + this.textMatrix = this.textLineMatrix.slice(); + } + clone() { + const e = Object.create(this); + e.textMatrix = this.textMatrix.slice(); + e.textLineMatrix = this.textLineMatrix.slice(); + e.fontMatrix = this.fontMatrix.slice(); + return e; + } +} +class EvalState { + constructor() { + this.ctm = new Float32Array(i); + this.font = null; + this.textRenderingMode = y; + this.fillColorSpace = ColorSpace.singletons.gray; + this.strokeColorSpace = ColorSpace.singletons.gray; + } + clone() { + return Object.create(this); + } +} +class EvaluatorPreprocessor { + static get opMap() { + return shadow( + this, + "opMap", + Object.assign(Object.create(null), { + w: { id: wA, numArgs: 1, variableArgs: !1 }, + J: { id: DA, numArgs: 1, variableArgs: !1 }, + j: { id: bA, numArgs: 1, variableArgs: !1 }, + M: { id: FA, numArgs: 1, variableArgs: !1 }, + d: { id: SA, numArgs: 2, variableArgs: !1 }, + ri: { id: kA, numArgs: 1, variableArgs: !1 }, + i: { id: RA, numArgs: 1, variableArgs: !1 }, + gs: { id: NA, numArgs: 1, variableArgs: !1 }, + q: { id: GA, numArgs: 0, variableArgs: !1 }, + Q: { id: xA, numArgs: 0, variableArgs: !1 }, + cm: { id: UA, numArgs: 6, variableArgs: !1 }, + m: { id: MA, numArgs: 2, variableArgs: !1 }, + l: { id: LA, numArgs: 2, variableArgs: !1 }, + c: { id: HA, numArgs: 6, variableArgs: !1 }, + v: { id: JA, numArgs: 4, variableArgs: !1 }, + y: { id: YA, numArgs: 4, variableArgs: !1 }, + h: { id: vA, numArgs: 0, variableArgs: !1 }, + re: { id: KA, numArgs: 4, variableArgs: !1 }, + S: { id: TA, numArgs: 0, variableArgs: !1 }, + s: { id: qA, numArgs: 0, variableArgs: !1 }, + f: { id: OA, numArgs: 0, variableArgs: !1 }, + F: { id: OA, numArgs: 0, variableArgs: !1 }, + "f*": { id: PA, numArgs: 0, variableArgs: !1 }, + B: { id: WA, numArgs: 0, variableArgs: !1 }, + "B*": { id: jA, numArgs: 0, variableArgs: !1 }, + b: { id: XA, numArgs: 0, variableArgs: !1 }, + "b*": { id: ZA, numArgs: 0, variableArgs: !1 }, + n: { id: VA, numArgs: 0, variableArgs: !1 }, + W: { id: zA, numArgs: 0, variableArgs: !1 }, + "W*": { id: _A, numArgs: 0, variableArgs: !1 }, + BT: { id: $A, numArgs: 0, variableArgs: !1 }, + ET: { id: Ae, numArgs: 0, variableArgs: !1 }, + Tc: { id: ee, numArgs: 1, variableArgs: !1 }, + Tw: { id: te, numArgs: 1, variableArgs: !1 }, + Tz: { id: ie, numArgs: 1, variableArgs: !1 }, + TL: { id: ae, numArgs: 1, variableArgs: !1 }, + Tf: { id: se, numArgs: 2, variableArgs: !1 }, + Tr: { id: re, numArgs: 1, variableArgs: !1 }, + Ts: { id: ne, numArgs: 1, variableArgs: !1 }, + Td: { id: ge, numArgs: 2, variableArgs: !1 }, + TD: { id: oe, numArgs: 2, variableArgs: !1 }, + Tm: { id: Ie, numArgs: 6, variableArgs: !1 }, + "T*": { id: ce, numArgs: 0, variableArgs: !1 }, + Tj: { id: Ce, numArgs: 1, variableArgs: !1 }, + TJ: { id: he, numArgs: 1, variableArgs: !1 }, + "'": { id: Be, numArgs: 1, variableArgs: !1 }, + '"': { id: le, numArgs: 3, variableArgs: !1 }, + d0: { id: Qe, numArgs: 2, variableArgs: !1 }, + d1: { id: Ee, numArgs: 6, variableArgs: !1 }, + CS: { id: ue, numArgs: 1, variableArgs: !1 }, + cs: { id: de, numArgs: 1, variableArgs: !1 }, + SC: { id: fe, numArgs: 4, variableArgs: !0 }, + SCN: { id: pe, numArgs: 33, variableArgs: !0 }, + sc: { id: me, numArgs: 4, variableArgs: !0 }, + scn: { id: ye, numArgs: 33, variableArgs: !0 }, + G: { id: we, numArgs: 1, variableArgs: !1 }, + g: { id: De, numArgs: 1, variableArgs: !1 }, + RG: { id: be, numArgs: 3, variableArgs: !1 }, + rg: { id: Fe, numArgs: 3, variableArgs: !1 }, + K: { id: Se, numArgs: 4, variableArgs: !1 }, + k: { id: ke, numArgs: 4, variableArgs: !1 }, + sh: { id: Re, numArgs: 1, variableArgs: !1 }, + BI: { id: Ne, numArgs: 0, variableArgs: !1 }, + ID: { id: Ge, numArgs: 0, variableArgs: !1 }, + EI: { id: xe, numArgs: 1, variableArgs: !1 }, + Do: { id: Ue, numArgs: 1, variableArgs: !1 }, + MP: { id: Me, numArgs: 1, variableArgs: !1 }, + DP: { id: Le, numArgs: 2, variableArgs: !1 }, + BMC: { id: He, numArgs: 1, variableArgs: !1 }, + BDC: { id: Je, numArgs: 2, variableArgs: !1 }, + EMC: { id: Ye, numArgs: 0, variableArgs: !1 }, + BX: { id: ve, numArgs: 0, variableArgs: !1 }, + EX: { id: Ke, numArgs: 0, variableArgs: !1 }, + BM: null, + BD: null, + true: null, + fa: null, + fal: null, + fals: null, + false: null, + nu: null, + nul: null, + null: null, + }), + ); + } + static MAX_INVALID_PATH_OPS = 10; + constructor(e, t, i = new StateManager()) { + this.parser = new Parser({ + lexer: new Lexer(e, EvaluatorPreprocessor.opMap), + xref: t, + }); + this.stateManager = i; + this.nonProcessedArgs = []; + this._isPathOp = !1; + this._numInvalidPathOPS = 0; + } + get savedStatesDepth() { + return this.stateManager.stateStack.length; + } + read(e) { + let t = e.args; + for (;;) { + const i = this.parser.getObj(); + if (i instanceof Cmd) { + const a = i.cmd, + s = EvaluatorPreprocessor.opMap[a]; + if (!s) { + warn(`Unknown command "${a}".`); + continue; + } + const r = s.id, + n = s.numArgs; + let g = null !== t ? t.length : 0; + this._isPathOp || (this._numInvalidPathOPS = 0); + this._isPathOp = r >= MA && r <= VA; + if (s.variableArgs) + g > n && + info( + `Command ${a}: expected [0, ${n}] args, but received ${g} args.`, + ); + else { + if (g !== n) { + const e = this.nonProcessedArgs; + for (; g > n; ) { + e.push(t.shift()); + g--; + } + for (; g < n && 0 !== e.length; ) { + null === t && (t = []); + t.unshift(e.pop()); + g++; + } + } + if (g < n) { + const e = `command ${a}: expected ${n} args, but received ${g} args.`; + if ( + this._isPathOp && + ++this._numInvalidPathOPS > + EvaluatorPreprocessor.MAX_INVALID_PATH_OPS + ) + throw new FormatError(`Invalid ${e}`); + warn(`Skipping ${e}`); + null !== t && (t.length = 0); + continue; + } + } + this.preprocessCommand(r, t); + e.fn = r; + e.args = t; + return !0; + } + if (i === pt) return !1; + if (null !== i) { + null === t && (t = []); + t.push(i); + if (t.length > 33) throw new FormatError("Too many arguments"); + } + } + } + preprocessCommand(e, t) { + switch (0 | e) { + case GA: + this.stateManager.save(); + break; + case xA: + this.stateManager.restore(); + break; + case UA: + this.stateManager.transform(t); + } + } +} +class DefaultAppearanceEvaluator extends EvaluatorPreprocessor { + constructor(e) { + super(new StringStream(e)); + } + parse() { + const e = { fn: 0, args: [] }, + t = { fontSize: 0, fontName: "", fontColor: new Uint8ClampedArray(3) }; + try { + for (;;) { + e.args.length = 0; + if (!this.read(e)) break; + if (0 !== this.savedStatesDepth) continue; + const { fn: i, args: a } = e; + switch (0 | i) { + case se: + const [e, i] = a; + e instanceof Name && (t.fontName = e.name); + "number" == typeof i && i > 0 && (t.fontSize = i); + break; + case Fe: + ColorSpace.singletons.rgb.getRgbItem(a, 0, t.fontColor, 0); + break; + case De: + ColorSpace.singletons.gray.getRgbItem(a, 0, t.fontColor, 0); + break; + case ke: + ColorSpace.singletons.cmyk.getRgbItem(a, 0, t.fontColor, 0); + } + } + } catch (e) { + warn(`parseDefaultAppearance - ignoring errors: "${e}".`); + } + return t; + } +} +function parseDefaultAppearance(e) { + return new DefaultAppearanceEvaluator(e).parse(); +} +class AppearanceStreamEvaluator extends EvaluatorPreprocessor { + constructor(e, t, i) { + super(e); + this.stream = e; + this.evaluatorOptions = t; + this.xref = i; + this.resources = e.dict?.get("Resources"); + } + parse() { + const e = { fn: 0, args: [] }; + let t = { + scaleFactor: 1, + fontSize: 0, + fontName: "", + fontColor: new Uint8ClampedArray(3), + fillColorSpace: ColorSpace.singletons.gray, + }, + i = !1; + const a = []; + try { + for (;;) { + e.args.length = 0; + if (i || !this.read(e)) break; + const { fn: s, args: r } = e; + switch (0 | s) { + case GA: + a.push({ + scaleFactor: t.scaleFactor, + fontSize: t.fontSize, + fontName: t.fontName, + fontColor: t.fontColor.slice(), + fillColorSpace: t.fillColorSpace, + }); + break; + case xA: + t = a.pop() || t; + break; + case Ie: + t.scaleFactor *= Math.hypot(r[0], r[1]); + break; + case se: + const [e, s] = r; + e instanceof Name && (t.fontName = e.name); + "number" == typeof s && s > 0 && (t.fontSize = s * t.scaleFactor); + break; + case de: + t.fillColorSpace = ColorSpace.parse({ + cs: r[0], + xref: this.xref, + resources: this.resources, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache: this._localColorSpaceCache, + }); + break; + case me: + t.fillColorSpace.getRgbItem(r, 0, t.fontColor, 0); + break; + case Fe: + ColorSpace.singletons.rgb.getRgbItem(r, 0, t.fontColor, 0); + break; + case De: + ColorSpace.singletons.gray.getRgbItem(r, 0, t.fontColor, 0); + break; + case ke: + ColorSpace.singletons.cmyk.getRgbItem(r, 0, t.fontColor, 0); + break; + case Ce: + case he: + case Be: + case le: + i = !0; + } + } + } catch (e) { + warn(`parseAppearanceStream - ignoring errors: "${e}".`); + } + this.stream.reset(); + delete t.scaleFactor; + delete t.fillColorSpace; + return t; + } + get _localColorSpaceCache() { + return shadow(this, "_localColorSpaceCache", new LocalColorSpaceCache()); + } + get _pdfFunctionFactory() { + return shadow( + this, + "_pdfFunctionFactory", + new PDFFunctionFactory({ + xref: this.xref, + isEvalSupported: this.evaluatorOptions.isEvalSupported, + }), + ); + } +} +function getPdfColor(e, t) { + if (e[0] === e[1] && e[1] === e[2]) { + return `${numberToString(e[0] / 255)} ${t ? "g" : "G"}`; + } + return ( + Array.from(e, (e) => numberToString(e / 255)).join(" ") + + " " + + (t ? "rg" : "RG") + ); +} +class FakeUnicodeFont { + constructor(e, t) { + this.xref = e; + this.widths = null; + this.firstChar = 1 / 0; + this.lastChar = -1 / 0; + this.fontFamily = t; + const i = new OffscreenCanvas(1, 1); + this.ctxMeasure = i.getContext("2d", { willReadFrequently: !0 }); + FakeUnicodeFont._fontNameId || (FakeUnicodeFont._fontNameId = 1); + this.fontName = Name.get( + `InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`, + ); + } + get fontDescriptorRef() { + if (!FakeUnicodeFont._fontDescriptorRef) { + const e = new Dict(this.xref); + e.set("Type", Name.get("FontDescriptor")); + e.set("FontName", this.fontName); + e.set("FontFamily", "MyriadPro Regular"); + e.set("FontBBox", [0, 0, 0, 0]); + e.set("FontStretch", Name.get("Normal")); + e.set("FontWeight", 400); + e.set("ItalicAngle", 0); + FakeUnicodeFont._fontDescriptorRef = this.xref.getNewPersistentRef(e); + } + return FakeUnicodeFont._fontDescriptorRef; + } + get descendantFontRef() { + const e = new Dict(this.xref); + e.set("BaseFont", this.fontName); + e.set("Type", Name.get("Font")); + e.set("Subtype", Name.get("CIDFontType0")); + e.set("CIDToGIDMap", Name.get("Identity")); + e.set("FirstChar", this.firstChar); + e.set("LastChar", this.lastChar); + e.set("FontDescriptor", this.fontDescriptorRef); + e.set("DW", 1e3); + const t = [], + i = [...this.widths.entries()].sort(); + let a = null, + s = null; + for (const [e, r] of i) + if (a) + if (e === a + s.length) s.push(r); + else { + t.push(a, s); + a = e; + s = [r]; + } + else { + a = e; + s = [r]; + } + a && t.push(a, s); + e.set("W", t); + const r = new Dict(this.xref); + r.set("Ordering", "Identity"); + r.set("Registry", "Adobe"); + r.set("Supplement", 0); + e.set("CIDSystemInfo", r); + return this.xref.getNewPersistentRef(e); + } + get baseFontRef() { + const e = new Dict(this.xref); + e.set("BaseFont", this.fontName); + e.set("Type", Name.get("Font")); + e.set("Subtype", Name.get("Type0")); + e.set("Encoding", Name.get("Identity-H")); + e.set("DescendantFonts", [this.descendantFontRef]); + e.set("ToUnicode", Name.get("Identity-H")); + return this.xref.getNewPersistentRef(e); + } + get resources() { + const e = new Dict(this.xref), + t = new Dict(this.xref); + t.set(this.fontName.name, this.baseFontRef); + e.set("Font", t); + return e; + } + _createContext() { + this.widths = new Map(); + this.ctxMeasure.font = `1000px ${this.fontFamily}`; + return this.ctxMeasure; + } + createFontResources(e) { + const t = this._createContext(); + for (const i of e.split(/\r\n?|\n/)) + for (const e of i.split("")) { + const i = e.charCodeAt(0); + if (this.widths.has(i)) continue; + const a = t.measureText(e), + s = Math.ceil(a.width); + this.widths.set(i, s); + this.firstChar = Math.min(i, this.firstChar); + this.lastChar = Math.max(i, this.lastChar); + } + return this.resources; + } + static getFirstPositionInfo(e, t, i) { + const [a, n, g, o] = e; + let c = g - a, + C = o - n; + t % 180 != 0 && ([c, C] = [C, c]); + const h = s * i; + return { + coords: [0, C + r * i - h], + bbox: [0, 0, c, C], + matrix: 0 !== t ? getRotationMatrix(t, C, h) : void 0, + }; + } + createAppearance(e, t, i, a, n, g) { + const o = this._createContext(), + c = []; + let C = -1 / 0; + for (const t of e.split(/\r\n?|\n/)) { + c.push(t); + const e = o.measureText(t).width; + C = Math.max(C, e); + for (const e of codePointIter(t)) { + const t = String.fromCodePoint(e); + let i = this.widths.get(e); + if (void 0 === i) { + const a = o.measureText(t); + i = Math.ceil(a.width); + this.widths.set(e, i); + this.firstChar = Math.min(e, this.firstChar); + this.lastChar = Math.max(e, this.lastChar); + } + } + } + C *= a / 1e3; + const [h, l, Q, E] = t; + let u = Q - h, + d = E - l; + i % 180 != 0 && ([u, d] = [d, u]); + let f = 1; + C > u && (f = u / C); + let p = 1; + const m = s * a, + y = r * a, + w = m * c.length; + w > d && (p = d / w); + const D = a * Math.min(f, p), + b = [ + "q", + `0 0 ${numberToString(u)} ${numberToString(d)} re W n`, + "BT", + `1 0 0 1 0 ${numberToString(d + y)} Tm 0 Tc ${getPdfColor(n, !0)}`, + `/${this.fontName.name} ${numberToString(D)} Tf`, + ], + { resources: F } = this; + if (1 !== (g = "number" == typeof g && g >= 0 && g <= 1 ? g : 1)) { + b.push("/R0 gs"); + const e = new Dict(this.xref), + t = new Dict(this.xref); + t.set("ca", g); + t.set("CA", g); + t.set("Type", Name.get("ExtGState")); + e.set("R0", t); + F.set("ExtGState", e); + } + const S = numberToString(m); + for (const e of c) b.push(`0 -${S} Td <${stringToUTF16HexString(e)}> Tj`); + b.push("ET", "Q"); + const k = b.join("\n"), + R = new Dict(this.xref); + R.set("Subtype", Name.get("Form")); + R.set("Type", Name.get("XObject")); + R.set("BBox", [0, 0, u, d]); + R.set("Length", k.length); + R.set("Resources", F); + if (i) { + const e = getRotationMatrix(i, u, d); + R.set("Matrix", e); + } + const N = new StringStream(k); + N.dict = R; + return N; + } +} +class NameOrNumberTree { + constructor(e, t, i) { + this.constructor === NameOrNumberTree && + unreachable("Cannot initialize NameOrNumberTree."); + this.root = e; + this.xref = t; + this._type = i; + } + getAll() { + const e = new Map(); + if (!this.root) return e; + const t = this.xref, + i = new RefSet(); + i.put(this.root); + const a = [this.root]; + for (; a.length > 0; ) { + const s = t.fetchIfRef(a.shift()); + if (!(s instanceof Dict)) continue; + if (s.has("Kids")) { + const e = s.get("Kids"); + if (!Array.isArray(e)) continue; + for (const t of e) { + if (i.has(t)) + throw new FormatError(`Duplicate entry in "${this._type}" tree.`); + a.push(t); + i.put(t); + } + continue; + } + const r = s.get(this._type); + if (Array.isArray(r)) + for (let i = 0, a = r.length; i < a; i += 2) + e.set(t.fetchIfRef(r[i]), t.fetchIfRef(r[i + 1])); + } + return e; + } + get(e) { + if (!this.root) return null; + const t = this.xref; + let i = t.fetchIfRef(this.root), + a = 0; + for (; i.has("Kids"); ) { + if (++a > 10) { + warn(`Search depth limit reached for "${this._type}" tree.`); + return null; + } + const s = i.get("Kids"); + if (!Array.isArray(s)) return null; + let r = 0, + n = s.length - 1; + for (; r <= n; ) { + const a = (r + n) >> 1, + g = t.fetchIfRef(s[a]), + o = g.get("Limits"); + if (e < t.fetchIfRef(o[0])) n = a - 1; + else { + if (!(e > t.fetchIfRef(o[1]))) { + i = g; + break; + } + r = a + 1; + } + } + if (r > n) return null; + } + const s = i.get(this._type); + if (Array.isArray(s)) { + let i = 0, + a = s.length - 2; + for (; i <= a; ) { + const r = (i + a) >> 1, + n = r + (1 & r), + g = t.fetchIfRef(s[n]); + if (e < g) a = n - 2; + else { + if (!(e > g)) return t.fetchIfRef(s[n + 1]); + i = n + 2; + } + } + } + return null; + } +} +class NameTree extends NameOrNumberTree { + constructor(e, t) { + super(e, t, "Names"); + } +} +class NumberTree extends NameOrNumberTree { + constructor(e, t) { + super(e, t, "Nums"); + } +} +function clearGlobalCaches() { + !(function clearPatternCaches() { + ya = Object.create(null); + })(); + !(function clearPrimitiveCaches() { + mt = Object.create(null); + yt = Object.create(null); + wt = Object.create(null); + })(); + !(function clearUnicodeCaches() { + Ji.clear(); + })(); + JpxImage.cleanup(); +} +function pickPlatformItem(e) { + return e instanceof Dict + ? e.has("UF") + ? e.get("UF") + : e.has("F") + ? e.get("F") + : e.has("Unix") + ? e.get("Unix") + : e.has("Mac") + ? e.get("Mac") + : e.has("DOS") + ? e.get("DOS") + : null + : null; +} +class FileSpec { + #S = !1; + constructor(e, t, i = !1) { + if (e instanceof Dict) { + this.xref = t; + this.root = e; + e.has("FS") && (this.fs = e.get("FS")); + e.has("RF") && warn("Related file specifications are not supported"); + i || + (e.has("EF") + ? (this.#S = !0) + : warn("Non-embedded file specifications are not supported")); + } + } + get filename() { + let e = ""; + const t = pickPlatformItem(this.root); + t && + "string" == typeof t && + (e = stringToPDFString(t) + .replaceAll("\\\\", "\\") + .replaceAll("\\/", "/") + .replaceAll("\\", "/")); + return shadow(this, "filename", e || "unnamed"); + } + get content() { + if (!this.#S) return null; + this._contentRef ||= pickPlatformItem(this.root?.get("EF")); + let e = null; + if (this._contentRef) { + const t = this.xref.fetchIfRef(this._contentRef); + t instanceof BaseStream + ? (e = t.getBytes()) + : warn( + "Embedded file specification points to non-existing/invalid content", + ); + } else warn("Embedded file specification does not have any content"); + return e; + } + get description() { + let e = ""; + const t = this.root?.get("Desc"); + t && "string" == typeof t && (e = stringToPDFString(t)); + return shadow(this, "description", e); + } + get serializable() { + return { + rawFilename: this.filename, + filename: ((e = this.filename), e.substring(e.lastIndexOf("/") + 1)), + content: this.content, + description: this.description, + }; + var e; + } +} +const Rs = 0, + Ns = -2, + Gs = -3, + xs = -4, + Us = -5, + Ms = -6, + Ls = -9; +function isWhitespace(e, t) { + const i = e[t]; + return " " === i || "\n" === i || "\r" === i || "\t" === i; +} +class XMLParserBase { + _resolveEntities(e) { + return e.replaceAll(/&([^;]+);/g, (e, t) => { + if ("#x" === t.substring(0, 2)) + return String.fromCodePoint(parseInt(t.substring(2), 16)); + if ("#" === t.substring(0, 1)) + return String.fromCodePoint(parseInt(t.substring(1), 10)); + switch (t) { + case "lt": + return "<"; + case "gt": + return ">"; + case "amp": + return "&"; + case "quot": + return '"'; + case "apos": + return "'"; + } + return this.onResolveEntity(t); + }); + } + _parseContent(e, t) { + const i = []; + let a = t; + function skipWs() { + for (; a < e.length && isWhitespace(e, a); ) ++a; + } + for ( + ; + a < e.length && !isWhitespace(e, a) && ">" !== e[a] && "/" !== e[a]; + + ) + ++a; + const s = e.substring(t, a); + skipWs(); + for (; a < e.length && ">" !== e[a] && "/" !== e[a] && "?" !== e[a]; ) { + skipWs(); + let t = "", + s = ""; + for (; a < e.length && !isWhitespace(e, a) && "=" !== e[a]; ) { + t += e[a]; + ++a; + } + skipWs(); + if ("=" !== e[a]) return null; + ++a; + skipWs(); + const r = e[a]; + if ('"' !== r && "'" !== r) return null; + const n = e.indexOf(r, ++a); + if (n < 0) return null; + s = e.substring(a, n); + i.push({ name: t, value: this._resolveEntities(s) }); + a = n + 1; + skipWs(); + } + return { name: s, attributes: i, parsed: a - t }; + } + _parseProcessingInstruction(e, t) { + let i = t; + for ( + ; + i < e.length && + !isWhitespace(e, i) && + ">" !== e[i] && + "?" !== e[i] && + "/" !== e[i]; + + ) + ++i; + const a = e.substring(t, i); + !(function skipWs() { + for (; i < e.length && isWhitespace(e, i); ) ++i; + })(); + const s = i; + for (; i < e.length && ("?" !== e[i] || ">" !== e[i + 1]); ) ++i; + return { name: a, value: e.substring(s, i), parsed: i - t }; + } + parseXml(e) { + let t = 0; + for (; t < e.length; ) { + let i = t; + if ("<" === e[t]) { + ++i; + let t; + switch (e[i]) { + case "/": + ++i; + t = e.indexOf(">", i); + if (t < 0) { + this.onError(Ls); + return; + } + this.onEndElement(e.substring(i, t)); + i = t + 1; + break; + case "?": + ++i; + const a = this._parseProcessingInstruction(e, i); + if ("?>" !== e.substring(i + a.parsed, i + a.parsed + 2)) { + this.onError(Gs); + return; + } + this.onPi(a.name, a.value); + i += a.parsed + 2; + break; + case "!": + if ("--" === e.substring(i + 1, i + 3)) { + t = e.indexOf("--\x3e", i + 3); + if (t < 0) { + this.onError(Us); + return; + } + this.onComment(e.substring(i + 3, t)); + i = t + 3; + } else if ("[CDATA[" === e.substring(i + 1, i + 8)) { + t = e.indexOf("]]>", i + 8); + if (t < 0) { + this.onError(Ns); + return; + } + this.onCdata(e.substring(i + 8, t)); + i = t + 3; + } else { + if ("DOCTYPE" !== e.substring(i + 1, i + 8)) { + this.onError(Ms); + return; + } + { + const a = e.indexOf("[", i + 8); + let s = !1; + t = e.indexOf(">", i + 8); + if (t < 0) { + this.onError(xs); + return; + } + if (a > 0 && t > a) { + t = e.indexOf("]>", i + 8); + if (t < 0) { + this.onError(xs); + return; + } + s = !0; + } + const r = e.substring(i + 8, t + (s ? 1 : 0)); + this.onDoctype(r); + i = t + (s ? 2 : 1); + } + } + break; + default: + const s = this._parseContent(e, i); + if (null === s) { + this.onError(Ms); + return; + } + let r = !1; + if ("/>" === e.substring(i + s.parsed, i + s.parsed + 2)) r = !0; + else if (">" !== e.substring(i + s.parsed, i + s.parsed + 1)) { + this.onError(Ls); + return; + } + this.onBeginElement(s.name, s.attributes, r); + i += s.parsed + (r ? 2 : 1); + } + } else { + for (; i < e.length && "<" !== e[i]; ) i++; + const a = e.substring(t, i); + this.onText(this._resolveEntities(a)); + } + t = i; + } + } + onResolveEntity(e) { + return `&${e};`; + } + onPi(e, t) {} + onComment(e) {} + onCdata(e) {} + onDoctype(e) {} + onText(e) {} + onBeginElement(e, t, i) {} + onEndElement(e) {} + onError(e) {} +} +class SimpleDOMNode { + constructor(e, t) { + this.nodeName = e; + this.nodeValue = t; + Object.defineProperty(this, "parentNode", { value: null, writable: !0 }); + } + get firstChild() { + return this.childNodes?.[0]; + } + get nextSibling() { + const e = this.parentNode.childNodes; + if (!e) return; + const t = e.indexOf(this); + return -1 !== t ? e[t + 1] : void 0; + } + get textContent() { + return this.childNodes + ? this.childNodes + .map(function (e) { + return e.textContent; + }) + .join("") + : this.nodeValue || ""; + } + get children() { + return this.childNodes || []; + } + hasChildNodes() { + return this.childNodes?.length > 0; + } + searchNode(e, t) { + if (t >= e.length) return this; + const i = e[t]; + if (i.name.startsWith("#") && t < e.length - 1) + return this.searchNode(e, t + 1); + const a = []; + let s = this; + for (;;) { + if (i.name === s.nodeName) { + if (0 !== i.pos) { + if (0 === a.length) return null; + { + const [r] = a.pop(); + let n = 0; + for (const a of r.childNodes) + if (i.name === a.nodeName) { + if (n === i.pos) return a.searchNode(e, t + 1); + n++; + } + return s.searchNode(e, t + 1); + } + } + { + const i = s.searchNode(e, t + 1); + if (null !== i) return i; + } + } + if (s.childNodes?.length > 0) { + a.push([s, 0]); + s = s.childNodes[0]; + } else { + if (0 === a.length) return null; + for (; 0 !== a.length; ) { + const [e, t] = a.pop(), + i = t + 1; + if (i < e.childNodes.length) { + a.push([e, i]); + s = e.childNodes[i]; + break; + } + } + if (0 === a.length) return null; + } + } + } + dump(e) { + if ("#text" !== this.nodeName) { + e.push(`<${this.nodeName}`); + if (this.attributes) + for (const t of this.attributes) + e.push(` ${t.name}="${encodeToXmlString(t.value)}"`); + if (this.hasChildNodes()) { + e.push(">"); + for (const t of this.childNodes) t.dump(e); + e.push(``); + } else + this.nodeValue + ? e.push(`>${encodeToXmlString(this.nodeValue)}`) + : e.push("/>"); + } else e.push(encodeToXmlString(this.nodeValue)); + } +} +class SimpleXMLParser extends XMLParserBase { + constructor({ hasAttributes: e = !1, lowerCaseName: t = !1 }) { + super(); + this._currentFragment = null; + this._stack = null; + this._errorCode = Rs; + this._hasAttributes = e; + this._lowerCaseName = t; + } + parseFromString(e) { + this._currentFragment = []; + this._stack = []; + this._errorCode = Rs; + this.parseXml(e); + if (this._errorCode !== Rs) return; + const [t] = this._currentFragment; + return t ? { documentElement: t } : void 0; + } + onText(e) { + if ( + (function isWhitespaceString(e) { + for (let t = 0, i = e.length; t < i; t++) + if (!isWhitespace(e, t)) return !1; + return !0; + })(e) + ) + return; + const t = new SimpleDOMNode("#text", e); + this._currentFragment.push(t); + } + onCdata(e) { + const t = new SimpleDOMNode("#text", e); + this._currentFragment.push(t); + } + onBeginElement(e, t, i) { + this._lowerCaseName && (e = e.toLowerCase()); + const a = new SimpleDOMNode(e); + a.childNodes = []; + this._hasAttributes && (a.attributes = t); + this._currentFragment.push(a); + if (!i) { + this._stack.push(this._currentFragment); + this._currentFragment = a.childNodes; + } + } + onEndElement(e) { + this._currentFragment = this._stack.pop() || []; + const t = this._currentFragment.at(-1); + if (!t) return null; + for (const e of t.childNodes) e.parentNode = t; + return t; + } + onError(e) { + this._errorCode = e; + } +} +class MetadataParser { + constructor(e) { + e = this._repair(e); + const t = new SimpleXMLParser({ lowerCaseName: !0 }).parseFromString(e); + this._metadataMap = new Map(); + this._data = e; + t && this._parse(t); + } + _repair(e) { + return e + .replace(/^[^<]+/, "") + .replaceAll(/>\\376\\377([^<]+)/g, function (e, t) { + const i = t + .replaceAll(/\\([0-3])([0-7])([0-7])/g, function (e, t, i, a) { + return String.fromCharCode(64 * t + 8 * i + 1 * a); + }) + .replaceAll(/&(amp|apos|gt|lt|quot);/g, function (e, t) { + switch (t) { + case "amp": + return "&"; + case "apos": + return "'"; + case "gt": + return ">"; + case "lt": + return "<"; + case "quot": + return '"'; + } + throw new Error(`_repair: ${t} isn't defined.`); + }), + a = [">"]; + for (let e = 0, t = i.length; e < t; e += 2) { + const t = 256 * i.charCodeAt(e) + i.charCodeAt(e + 1); + t >= 32 && t < 127 && 60 !== t && 62 !== t && 38 !== t + ? a.push(String.fromCharCode(t)) + : a.push("&#x" + (65536 + t).toString(16).substring(1) + ";"); + } + return a.join(""); + }); + } + _getSequence(e) { + const t = e.nodeName; + return "rdf:bag" !== t && "rdf:seq" !== t && "rdf:alt" !== t + ? null + : e.childNodes.filter((e) => "rdf:li" === e.nodeName); + } + _parseArray(e) { + if (!e.hasChildNodes()) return; + const [t] = e.childNodes, + i = this._getSequence(t) || []; + this._metadataMap.set( + e.nodeName, + i.map((e) => e.textContent.trim()), + ); + } + _parse(e) { + let t = e.documentElement; + if ("rdf:rdf" !== t.nodeName) { + t = t.firstChild; + for (; t && "rdf:rdf" !== t.nodeName; ) t = t.nextSibling; + } + if (t && "rdf:rdf" === t.nodeName && t.hasChildNodes()) + for (const e of t.childNodes) + if ("rdf:description" === e.nodeName) + for (const t of e.childNodes) { + const e = t.nodeName; + switch (e) { + case "#text": + continue; + case "dc:creator": + case "dc:subject": + this._parseArray(t); + continue; + } + this._metadataMap.set(e, t.textContent.trim()); + } + } + get serializable() { + return { parsedData: this._metadataMap, rawData: this._data }; + } +} +class DecryptStream extends DecodeStream { + constructor(e, t, i) { + super(t); + this.str = e; + this.dict = e.dict; + this.decrypt = i; + this.nextChunk = null; + this.initialized = !1; + } + readBlock() { + let e; + if (this.initialized) e = this.nextChunk; + else { + e = this.str.getBytes(512); + this.initialized = !0; + } + if (!e || 0 === e.length) { + this.eof = !0; + return; + } + this.nextChunk = this.str.getBytes(512); + const t = this.nextChunk?.length > 0; + e = (0, this.decrypt)(e, !t); + const i = this.bufferLength, + a = i + e.length; + this.ensureBuffer(a).set(e, i); + this.bufferLength = a; + } +} +class ARCFourCipher { + constructor(e) { + this.a = 0; + this.b = 0; + const t = new Uint8Array(256), + i = e.length; + for (let e = 0; e < 256; ++e) t[e] = e; + for (let a = 0, s = 0; a < 256; ++a) { + const r = t[a]; + s = (s + r + e[a % i]) & 255; + t[a] = t[s]; + t[s] = r; + } + this.s = t; + } + encryptBlock(e) { + let t = this.a, + i = this.b; + const a = this.s, + s = e.length, + r = new Uint8Array(s); + for (let n = 0; n < s; ++n) { + t = (t + 1) & 255; + const s = a[t]; + i = (i + s) & 255; + const g = a[i]; + a[t] = g; + a[i] = s; + r[n] = e[n] ^ a[(s + g) & 255]; + } + this.a = t; + this.b = i; + return r; + } + decryptBlock(e) { + return this.encryptBlock(e); + } + encrypt(e) { + return this.encryptBlock(e); + } +} +const Hs = (function calculateMD5Closure() { + const e = new Uint8Array([ + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, + 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, + 10, 15, 21, + ]), + t = new Int32Array([ + -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, + -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, + 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, + 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, + 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, + 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, + -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, + -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, + -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, + -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, + -145523070, -1120210379, 718787259, -343485551, + ]); + return function hash(i, a, s) { + let r = 1732584193, + n = -271733879, + g = -1732584194, + o = 271733878; + const c = (s + 72) & -64, + C = new Uint8Array(c); + let h, l; + for (h = 0; h < s; ++h) C[h] = i[a++]; + C[h++] = 128; + const Q = c - 8; + for (; h < Q; ) C[h++] = 0; + C[h++] = (s << 3) & 255; + C[h++] = (s >> 5) & 255; + C[h++] = (s >> 13) & 255; + C[h++] = (s >> 21) & 255; + C[h++] = (s >>> 29) & 255; + C[h++] = 0; + C[h++] = 0; + C[h++] = 0; + const E = new Int32Array(16); + for (h = 0; h < c; ) { + for (l = 0; l < 16; ++l, h += 4) + E[l] = C[h] | (C[h + 1] << 8) | (C[h + 2] << 16) | (C[h + 3] << 24); + let i, + a, + s = r, + c = n, + Q = g, + u = o; + for (l = 0; l < 64; ++l) { + if (l < 16) { + i = (c & Q) | (~c & u); + a = l; + } else if (l < 32) { + i = (u & c) | (~u & Q); + a = (5 * l + 1) & 15; + } else if (l < 48) { + i = c ^ Q ^ u; + a = (3 * l + 5) & 15; + } else { + i = Q ^ (c | ~u); + a = (7 * l) & 15; + } + const r = u, + n = (s + i + t[l] + E[a]) | 0, + g = e[l]; + u = Q; + Q = c; + c = (c + ((n << g) | (n >>> (32 - g)))) | 0; + s = r; + } + r = (r + s) | 0; + n = (n + c) | 0; + g = (g + Q) | 0; + o = (o + u) | 0; + } + return new Uint8Array([ + 255 & r, + (r >> 8) & 255, + (r >> 16) & 255, + (r >>> 24) & 255, + 255 & n, + (n >> 8) & 255, + (n >> 16) & 255, + (n >>> 24) & 255, + 255 & g, + (g >> 8) & 255, + (g >> 16) & 255, + (g >>> 24) & 255, + 255 & o, + (o >> 8) & 255, + (o >> 16) & 255, + (o >>> 24) & 255, + ]); + }; +})(); +class Word64 { + constructor(e, t) { + this.high = 0 | e; + this.low = 0 | t; + } + and(e) { + this.high &= e.high; + this.low &= e.low; + } + xor(e) { + this.high ^= e.high; + this.low ^= e.low; + } + or(e) { + this.high |= e.high; + this.low |= e.low; + } + shiftRight(e) { + if (e >= 32) { + this.low = (this.high >>> (e - 32)) | 0; + this.high = 0; + } else { + this.low = (this.low >>> e) | (this.high << (32 - e)); + this.high = (this.high >>> e) | 0; + } + } + shiftLeft(e) { + if (e >= 32) { + this.high = this.low << (e - 32); + this.low = 0; + } else { + this.high = (this.high << e) | (this.low >>> (32 - e)); + this.low <<= e; + } + } + rotateRight(e) { + let t, i; + if (32 & e) { + i = this.low; + t = this.high; + } else { + t = this.low; + i = this.high; + } + e &= 31; + this.low = (t >>> e) | (i << (32 - e)); + this.high = (i >>> e) | (t << (32 - e)); + } + not() { + this.high = ~this.high; + this.low = ~this.low; + } + add(e) { + const t = (this.low >>> 0) + (e.low >>> 0); + let i = (this.high >>> 0) + (e.high >>> 0); + t > 4294967295 && (i += 1); + this.low = 0 | t; + this.high = 0 | i; + } + copyTo(e, t) { + e[t] = (this.high >>> 24) & 255; + e[t + 1] = (this.high >> 16) & 255; + e[t + 2] = (this.high >> 8) & 255; + e[t + 3] = 255 & this.high; + e[t + 4] = (this.low >>> 24) & 255; + e[t + 5] = (this.low >> 16) & 255; + e[t + 6] = (this.low >> 8) & 255; + e[t + 7] = 255 & this.low; + } + assign(e) { + this.high = e.high; + this.low = e.low; + } +} +const Js = (function calculateSHA256Closure() { + function rotr(e, t) { + return (e >>> t) | (e << (32 - t)); + } + function ch(e, t, i) { + return (e & t) ^ (~e & i); + } + function maj(e, t, i) { + return (e & t) ^ (e & i) ^ (t & i); + } + function sigma(e) { + return rotr(e, 2) ^ rotr(e, 13) ^ rotr(e, 22); + } + function sigmaPrime(e) { + return rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25); + } + function littleSigma(e) { + return rotr(e, 7) ^ rotr(e, 18) ^ (e >>> 3); + } + const e = [ + 1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, + 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, + 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, + 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, + 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, + 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, + 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, + 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, + 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, + 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, + 2428436474, 2756734187, 3204031479, 3329325298, + ]; + return function hash(t, i, a) { + let s = 1779033703, + r = 3144134277, + n = 1013904242, + g = 2773480762, + o = 1359893119, + c = 2600822924, + C = 528734635, + h = 1541459225; + const l = 64 * Math.ceil((a + 9) / 64), + Q = new Uint8Array(l); + let E, u; + for (E = 0; E < a; ++E) Q[E] = t[i++]; + Q[E++] = 128; + const d = l - 8; + for (; E < d; ) Q[E++] = 0; + Q[E++] = 0; + Q[E++] = 0; + Q[E++] = 0; + Q[E++] = (a >>> 29) & 255; + Q[E++] = (a >> 21) & 255; + Q[E++] = (a >> 13) & 255; + Q[E++] = (a >> 5) & 255; + Q[E++] = (a << 3) & 255; + const f = new Uint32Array(64); + for (E = 0; E < l; ) { + for (u = 0; u < 16; ++u) { + f[u] = (Q[E] << 24) | (Q[E + 1] << 16) | (Q[E + 2] << 8) | Q[E + 3]; + E += 4; + } + for (u = 16; u < 64; ++u) + f[u] = + ((rotr((p = f[u - 2]), 17) ^ rotr(p, 19) ^ (p >>> 10)) + + f[u - 7] + + littleSigma(f[u - 15]) + + f[u - 16]) | + 0; + let t, + i, + a = s, + l = r, + d = n, + m = g, + y = o, + w = c, + D = C, + b = h; + for (u = 0; u < 64; ++u) { + t = b + sigmaPrime(y) + ch(y, w, D) + e[u] + f[u]; + i = sigma(a) + maj(a, l, d); + b = D; + D = w; + w = y; + y = (m + t) | 0; + m = d; + d = l; + l = a; + a = (t + i) | 0; + } + s = (s + a) | 0; + r = (r + l) | 0; + n = (n + d) | 0; + g = (g + m) | 0; + o = (o + y) | 0; + c = (c + w) | 0; + C = (C + D) | 0; + h = (h + b) | 0; + } + var p; + return new Uint8Array([ + (s >> 24) & 255, + (s >> 16) & 255, + (s >> 8) & 255, + 255 & s, + (r >> 24) & 255, + (r >> 16) & 255, + (r >> 8) & 255, + 255 & r, + (n >> 24) & 255, + (n >> 16) & 255, + (n >> 8) & 255, + 255 & n, + (g >> 24) & 255, + (g >> 16) & 255, + (g >> 8) & 255, + 255 & g, + (o >> 24) & 255, + (o >> 16) & 255, + (o >> 8) & 255, + 255 & o, + (c >> 24) & 255, + (c >> 16) & 255, + (c >> 8) & 255, + 255 & c, + (C >> 24) & 255, + (C >> 16) & 255, + (C >> 8) & 255, + 255 & C, + (h >> 24) & 255, + (h >> 16) & 255, + (h >> 8) & 255, + 255 & h, + ]); + }; + })(), + Ys = (function calculateSHA512Closure() { + function ch(e, t, i, a, s) { + e.assign(t); + e.and(i); + s.assign(t); + s.not(); + s.and(a); + e.xor(s); + } + function maj(e, t, i, a, s) { + e.assign(t); + e.and(i); + s.assign(t); + s.and(a); + e.xor(s); + s.assign(i); + s.and(a); + e.xor(s); + } + function sigma(e, t, i) { + e.assign(t); + e.rotateRight(28); + i.assign(t); + i.rotateRight(34); + e.xor(i); + i.assign(t); + i.rotateRight(39); + e.xor(i); + } + function sigmaPrime(e, t, i) { + e.assign(t); + e.rotateRight(14); + i.assign(t); + i.rotateRight(18); + e.xor(i); + i.assign(t); + i.rotateRight(41); + e.xor(i); + } + function littleSigma(e, t, i) { + e.assign(t); + e.rotateRight(1); + i.assign(t); + i.rotateRight(8); + e.xor(i); + i.assign(t); + i.shiftRight(7); + e.xor(i); + } + function littleSigmaPrime(e, t, i) { + e.assign(t); + e.rotateRight(19); + i.assign(t); + i.rotateRight(61); + e.xor(i); + i.assign(t); + i.shiftRight(6); + e.xor(i); + } + const e = [ + new Word64(1116352408, 3609767458), + new Word64(1899447441, 602891725), + new Word64(3049323471, 3964484399), + new Word64(3921009573, 2173295548), + new Word64(961987163, 4081628472), + new Word64(1508970993, 3053834265), + new Word64(2453635748, 2937671579), + new Word64(2870763221, 3664609560), + new Word64(3624381080, 2734883394), + new Word64(310598401, 1164996542), + new Word64(607225278, 1323610764), + new Word64(1426881987, 3590304994), + new Word64(1925078388, 4068182383), + new Word64(2162078206, 991336113), + new Word64(2614888103, 633803317), + new Word64(3248222580, 3479774868), + new Word64(3835390401, 2666613458), + new Word64(4022224774, 944711139), + new Word64(264347078, 2341262773), + new Word64(604807628, 2007800933), + new Word64(770255983, 1495990901), + new Word64(1249150122, 1856431235), + new Word64(1555081692, 3175218132), + new Word64(1996064986, 2198950837), + new Word64(2554220882, 3999719339), + new Word64(2821834349, 766784016), + new Word64(2952996808, 2566594879), + new Word64(3210313671, 3203337956), + new Word64(3336571891, 1034457026), + new Word64(3584528711, 2466948901), + new Word64(113926993, 3758326383), + new Word64(338241895, 168717936), + new Word64(666307205, 1188179964), + new Word64(773529912, 1546045734), + new Word64(1294757372, 1522805485), + new Word64(1396182291, 2643833823), + new Word64(1695183700, 2343527390), + new Word64(1986661051, 1014477480), + new Word64(2177026350, 1206759142), + new Word64(2456956037, 344077627), + new Word64(2730485921, 1290863460), + new Word64(2820302411, 3158454273), + new Word64(3259730800, 3505952657), + new Word64(3345764771, 106217008), + new Word64(3516065817, 3606008344), + new Word64(3600352804, 1432725776), + new Word64(4094571909, 1467031594), + new Word64(275423344, 851169720), + new Word64(430227734, 3100823752), + new Word64(506948616, 1363258195), + new Word64(659060556, 3750685593), + new Word64(883997877, 3785050280), + new Word64(958139571, 3318307427), + new Word64(1322822218, 3812723403), + new Word64(1537002063, 2003034995), + new Word64(1747873779, 3602036899), + new Word64(1955562222, 1575990012), + new Word64(2024104815, 1125592928), + new Word64(2227730452, 2716904306), + new Word64(2361852424, 442776044), + new Word64(2428436474, 593698344), + new Word64(2756734187, 3733110249), + new Word64(3204031479, 2999351573), + new Word64(3329325298, 3815920427), + new Word64(3391569614, 3928383900), + new Word64(3515267271, 566280711), + new Word64(3940187606, 3454069534), + new Word64(4118630271, 4000239992), + new Word64(116418474, 1914138554), + new Word64(174292421, 2731055270), + new Word64(289380356, 3203993006), + new Word64(460393269, 320620315), + new Word64(685471733, 587496836), + new Word64(852142971, 1086792851), + new Word64(1017036298, 365543100), + new Word64(1126000580, 2618297676), + new Word64(1288033470, 3409855158), + new Word64(1501505948, 4234509866), + new Word64(1607167915, 987167468), + new Word64(1816402316, 1246189591), + ]; + return function hash(t, i, a, s = !1) { + let r, n, g, o, c, C, h, l; + if (s) { + r = new Word64(3418070365, 3238371032); + n = new Word64(1654270250, 914150663); + g = new Word64(2438529370, 812702999); + o = new Word64(355462360, 4144912697); + c = new Word64(1731405415, 4290775857); + C = new Word64(2394180231, 1750603025); + h = new Word64(3675008525, 1694076839); + l = new Word64(1203062813, 3204075428); + } else { + r = new Word64(1779033703, 4089235720); + n = new Word64(3144134277, 2227873595); + g = new Word64(1013904242, 4271175723); + o = new Word64(2773480762, 1595750129); + c = new Word64(1359893119, 2917565137); + C = new Word64(2600822924, 725511199); + h = new Word64(528734635, 4215389547); + l = new Word64(1541459225, 327033209); + } + const Q = 128 * Math.ceil((a + 17) / 128), + E = new Uint8Array(Q); + let u, d; + for (u = 0; u < a; ++u) E[u] = t[i++]; + E[u++] = 128; + const f = Q - 16; + for (; u < f; ) E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = 0; + E[u++] = (a >>> 29) & 255; + E[u++] = (a >> 21) & 255; + E[u++] = (a >> 13) & 255; + E[u++] = (a >> 5) & 255; + E[u++] = (a << 3) & 255; + const p = new Array(80); + for (u = 0; u < 80; u++) p[u] = new Word64(0, 0); + let m = new Word64(0, 0), + y = new Word64(0, 0), + w = new Word64(0, 0), + D = new Word64(0, 0), + b = new Word64(0, 0), + F = new Word64(0, 0), + S = new Word64(0, 0), + k = new Word64(0, 0); + const R = new Word64(0, 0), + N = new Word64(0, 0), + G = new Word64(0, 0), + x = new Word64(0, 0); + let U, M; + for (u = 0; u < Q; ) { + for (d = 0; d < 16; ++d) { + p[d].high = + (E[u] << 24) | (E[u + 1] << 16) | (E[u + 2] << 8) | E[u + 3]; + p[d].low = + (E[u + 4] << 24) | (E[u + 5] << 16) | (E[u + 6] << 8) | E[u + 7]; + u += 8; + } + for (d = 16; d < 80; ++d) { + U = p[d]; + littleSigmaPrime(U, p[d - 2], x); + U.add(p[d - 7]); + littleSigma(G, p[d - 15], x); + U.add(G); + U.add(p[d - 16]); + } + m.assign(r); + y.assign(n); + w.assign(g); + D.assign(o); + b.assign(c); + F.assign(C); + S.assign(h); + k.assign(l); + for (d = 0; d < 80; ++d) { + R.assign(k); + sigmaPrime(G, b, x); + R.add(G); + ch(G, b, F, S, x); + R.add(G); + R.add(e[d]); + R.add(p[d]); + sigma(N, m, x); + maj(G, m, y, w, x); + N.add(G); + U = k; + k = S; + S = F; + F = b; + D.add(R); + b = D; + D = w; + w = y; + y = m; + U.assign(R); + U.add(N); + m = U; + } + r.add(m); + n.add(y); + g.add(w); + o.add(D); + c.add(b); + C.add(F); + h.add(S); + l.add(k); + } + if (s) { + M = new Uint8Array(48); + r.copyTo(M, 0); + n.copyTo(M, 8); + g.copyTo(M, 16); + o.copyTo(M, 24); + c.copyTo(M, 32); + C.copyTo(M, 40); + } else { + M = new Uint8Array(64); + r.copyTo(M, 0); + n.copyTo(M, 8); + g.copyTo(M, 16); + o.copyTo(M, 24); + c.copyTo(M, 32); + C.copyTo(M, 40); + h.copyTo(M, 48); + l.copyTo(M, 56); + } + return M; + }; + })(); +class NullCipher { + decryptBlock(e) { + return e; + } + encrypt(e) { + return e; + } +} +class AESBaseCipher { + constructor() { + this.constructor === AESBaseCipher && + unreachable("Cannot initialize AESBaseCipher."); + this._s = new Uint8Array([ + 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, + 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, + 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, + 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, + 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, + 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, + 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, + 22, + ]); + this._inv_s = new Uint8Array([ + 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, + 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, + 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, + 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, + 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, + 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, + 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, + 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, + 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, + 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, + 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, + 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, + 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, + 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, + 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125, + ]); + this._mix = new Uint32Array([ + 0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, + 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, + 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, + 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, + 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, + 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, + 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, + 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, + 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, + 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, + 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, + 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, + 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, + 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, + 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, + 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, + 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, + 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, + 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, + 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, + 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, + 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, + 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, + 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, + 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, + 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, + 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, + 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, + 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, + 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, + 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, + 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, + 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, + 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, + 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, + 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, + 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, + 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, + 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, + 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, + 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, + 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, + 2438237621, 2203032232, 2370213795, + ]); + this._mixCol = new Uint8Array(256); + for (let e = 0; e < 256; e++) + this._mixCol[e] = e < 128 ? e << 1 : (e << 1) ^ 27; + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + _expandKey(e) { + unreachable("Cannot call `_expandKey` on the base class"); + } + _decrypt(e, t) { + let i, a, s; + const r = new Uint8Array(16); + r.set(e); + for (let e = 0, i = this._keySize; e < 16; ++e, ++i) r[e] ^= t[i]; + for (let e = this._cyclesOfRepetition - 1; e >= 1; --e) { + i = r[13]; + r[13] = r[9]; + r[9] = r[5]; + r[5] = r[1]; + r[1] = i; + i = r[14]; + a = r[10]; + r[14] = r[6]; + r[10] = r[2]; + r[6] = i; + r[2] = a; + i = r[15]; + a = r[11]; + s = r[7]; + r[15] = r[3]; + r[11] = i; + r[7] = a; + r[3] = s; + for (let e = 0; e < 16; ++e) r[e] = this._inv_s[r[e]]; + for (let i = 0, a = 16 * e; i < 16; ++i, ++a) r[i] ^= t[a]; + for (let e = 0; e < 16; e += 4) { + const t = this._mix[r[e]], + a = this._mix[r[e + 1]], + s = this._mix[r[e + 2]], + n = this._mix[r[e + 3]]; + i = + t ^ + (a >>> 8) ^ + (a << 24) ^ + (s >>> 16) ^ + (s << 16) ^ + (n >>> 24) ^ + (n << 8); + r[e] = (i >>> 24) & 255; + r[e + 1] = (i >> 16) & 255; + r[e + 2] = (i >> 8) & 255; + r[e + 3] = 255 & i; + } + } + i = r[13]; + r[13] = r[9]; + r[9] = r[5]; + r[5] = r[1]; + r[1] = i; + i = r[14]; + a = r[10]; + r[14] = r[6]; + r[10] = r[2]; + r[6] = i; + r[2] = a; + i = r[15]; + a = r[11]; + s = r[7]; + r[15] = r[3]; + r[11] = i; + r[7] = a; + r[3] = s; + for (let e = 0; e < 16; ++e) { + r[e] = this._inv_s[r[e]]; + r[e] ^= t[e]; + } + return r; + } + _encrypt(e, t) { + const i = this._s; + let a, s, r; + const n = new Uint8Array(16); + n.set(e); + for (let e = 0; e < 16; ++e) n[e] ^= t[e]; + for (let e = 1; e < this._cyclesOfRepetition; e++) { + for (let e = 0; e < 16; ++e) n[e] = i[n[e]]; + r = n[1]; + n[1] = n[5]; + n[5] = n[9]; + n[9] = n[13]; + n[13] = r; + r = n[2]; + s = n[6]; + n[2] = n[10]; + n[6] = n[14]; + n[10] = r; + n[14] = s; + r = n[3]; + s = n[7]; + a = n[11]; + n[3] = n[15]; + n[7] = r; + n[11] = s; + n[15] = a; + for (let e = 0; e < 16; e += 4) { + const t = n[e + 0], + i = n[e + 1], + s = n[e + 2], + r = n[e + 3]; + a = t ^ i ^ s ^ r; + n[e + 0] ^= a ^ this._mixCol[t ^ i]; + n[e + 1] ^= a ^ this._mixCol[i ^ s]; + n[e + 2] ^= a ^ this._mixCol[s ^ r]; + n[e + 3] ^= a ^ this._mixCol[r ^ t]; + } + for (let i = 0, a = 16 * e; i < 16; ++i, ++a) n[i] ^= t[a]; + } + for (let e = 0; e < 16; ++e) n[e] = i[n[e]]; + r = n[1]; + n[1] = n[5]; + n[5] = n[9]; + n[9] = n[13]; + n[13] = r; + r = n[2]; + s = n[6]; + n[2] = n[10]; + n[6] = n[14]; + n[10] = r; + n[14] = s; + r = n[3]; + s = n[7]; + a = n[11]; + n[3] = n[15]; + n[7] = r; + n[11] = s; + n[15] = a; + for (let e = 0, i = this._keySize; e < 16; ++e, ++i) n[e] ^= t[i]; + return n; + } + _decryptBlock2(e, t) { + const i = e.length; + let a = this.buffer, + s = this.bufferPosition; + const r = []; + let n = this.iv; + for (let t = 0; t < i; ++t) { + a[s] = e[t]; + ++s; + if (s < 16) continue; + const i = this._decrypt(a, this._key); + for (let e = 0; e < 16; ++e) i[e] ^= n[e]; + n = a; + r.push(i); + a = new Uint8Array(16); + s = 0; + } + this.buffer = a; + this.bufferLength = s; + this.iv = n; + if (0 === r.length) return new Uint8Array(0); + let g = 16 * r.length; + if (t) { + const e = r.at(-1); + let t = e[15]; + if (t <= 16) { + for (let i = 15, a = 16 - t; i >= a; --i) + if (e[i] !== t) { + t = 0; + break; + } + g -= t; + r[r.length - 1] = e.subarray(0, 16 - t); + } + } + const o = new Uint8Array(g); + for (let e = 0, t = 0, i = r.length; e < i; ++e, t += 16) o.set(r[e], t); + return o; + } + decryptBlock(e, t, i = null) { + const a = e.length, + s = this.buffer; + let r = this.bufferPosition; + if (i) this.iv = i; + else { + for (let t = 0; r < 16 && t < a; ++t, ++r) s[r] = e[t]; + if (r < 16) { + this.bufferLength = r; + return new Uint8Array(0); + } + this.iv = s; + e = e.subarray(16); + } + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + this.decryptBlock = this._decryptBlock2; + return this.decryptBlock(e, t); + } + encrypt(e, t) { + const i = e.length; + let a = this.buffer, + s = this.bufferPosition; + const r = []; + t || (t = new Uint8Array(16)); + for (let n = 0; n < i; ++n) { + a[s] = e[n]; + ++s; + if (s < 16) continue; + for (let e = 0; e < 16; ++e) a[e] ^= t[e]; + const i = this._encrypt(a, this._key); + t = i; + r.push(i); + a = new Uint8Array(16); + s = 0; + } + this.buffer = a; + this.bufferLength = s; + this.iv = t; + if (0 === r.length) return new Uint8Array(0); + const n = 16 * r.length, + g = new Uint8Array(n); + for (let e = 0, t = 0, i = r.length; e < i; ++e, t += 16) g.set(r[e], t); + return g; + } +} +class AES128Cipher extends AESBaseCipher { + constructor(e) { + super(); + this._cyclesOfRepetition = 10; + this._keySize = 160; + this._rcon = new Uint8Array([ + 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, + 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, + 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, + 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, + 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, + 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, + 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, + 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, + 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, + 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, + 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, + 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, + 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, + 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, + 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, + 102, 204, 131, 29, 58, 116, 232, 203, 141, + ]); + this._key = this._expandKey(e); + } + _expandKey(e) { + const t = this._s, + i = this._rcon, + a = new Uint8Array(176); + a.set(e); + for (let e = 16, s = 1; e < 176; ++s) { + let r = a[e - 3], + n = a[e - 2], + g = a[e - 1], + o = a[e - 4]; + r = t[r]; + n = t[n]; + g = t[g]; + o = t[o]; + r ^= i[s]; + for (let t = 0; t < 4; ++t) { + a[e] = r ^= a[e - 16]; + e++; + a[e] = n ^= a[e - 16]; + e++; + a[e] = g ^= a[e - 16]; + e++; + a[e] = o ^= a[e - 16]; + e++; + } + } + return a; + } +} +class AES256Cipher extends AESBaseCipher { + constructor(e) { + super(); + this._cyclesOfRepetition = 14; + this._keySize = 224; + this._key = this._expandKey(e); + } + _expandKey(e) { + const t = this._s, + i = new Uint8Array(240); + i.set(e); + let a, + s, + r, + n, + g = 1; + for (let e = 32, o = 1; e < 240; ++o) { + if (e % 32 == 16) { + a = t[a]; + s = t[s]; + r = t[r]; + n = t[n]; + } else if (e % 32 == 0) { + a = i[e - 3]; + s = i[e - 2]; + r = i[e - 1]; + n = i[e - 4]; + a = t[a]; + s = t[s]; + r = t[r]; + n = t[n]; + a ^= g; + (g <<= 1) >= 256 && (g = 255 & (27 ^ g)); + } + for (let t = 0; t < 4; ++t) { + i[e] = a ^= i[e - 32]; + e++; + i[e] = s ^= i[e - 32]; + e++; + i[e] = r ^= i[e - 32]; + e++; + i[e] = n ^= i[e - 32]; + e++; + } + } + return i; + } +} +class PDF17 { + checkOwnerPassword(e, t, i, a) { + const s = new Uint8Array(e.length + 56); + s.set(e, 0); + s.set(t, e.length); + s.set(i, e.length + t.length); + return isArrayEqual(Js(s, 0, s.length), a); + } + checkUserPassword(e, t, i) { + const a = new Uint8Array(e.length + 8); + a.set(e, 0); + a.set(t, e.length); + return isArrayEqual(Js(a, 0, a.length), i); + } + getOwnerKey(e, t, i, a) { + const s = new Uint8Array(e.length + 56); + s.set(e, 0); + s.set(t, e.length); + s.set(i, e.length + t.length); + const r = Js(s, 0, s.length); + return new AES256Cipher(r).decryptBlock(a, !1, new Uint8Array(16)); + } + getUserKey(e, t, i) { + const a = new Uint8Array(e.length + 8); + a.set(e, 0); + a.set(t, e.length); + const s = Js(a, 0, a.length); + return new AES256Cipher(s).decryptBlock(i, !1, new Uint8Array(16)); + } +} +class PDF20 { + _hash(e, t, i) { + let a = Js(t, 0, t.length).subarray(0, 32), + s = [0], + r = 0; + for (; r < 64 || s.at(-1) > r - 32; ) { + const t = e.length + a.length + i.length, + c = new Uint8Array(t); + let C = 0; + c.set(e, C); + C += e.length; + c.set(a, C); + C += a.length; + c.set(i, C); + const h = new Uint8Array(64 * t); + for (let e = 0, i = 0; e < 64; e++, i += t) h.set(c, i); + s = new AES128Cipher(a.subarray(0, 16)).encrypt(h, a.subarray(16, 32)); + const l = s.slice(0, 16).reduce((e, t) => e + t, 0) % 3; + 0 === l + ? (a = Js(s, 0, s.length)) + : 1 === l + ? (a = ((n = s), (g = 0), (o = s.length), Ys(n, g, o, !0))) + : 2 === l && (a = Ys(s, 0, s.length)); + r++; + } + var n, g, o; + return a.subarray(0, 32); + } + checkOwnerPassword(e, t, i, a) { + const s = new Uint8Array(e.length + 56); + s.set(e, 0); + s.set(t, e.length); + s.set(i, e.length + t.length); + return isArrayEqual(this._hash(e, s, i), a); + } + checkUserPassword(e, t, i) { + const a = new Uint8Array(e.length + 8); + a.set(e, 0); + a.set(t, e.length); + return isArrayEqual(this._hash(e, a, []), i); + } + getOwnerKey(e, t, i, a) { + const s = new Uint8Array(e.length + 56); + s.set(e, 0); + s.set(t, e.length); + s.set(i, e.length + t.length); + const r = this._hash(e, s, i); + return new AES256Cipher(r).decryptBlock(a, !1, new Uint8Array(16)); + } + getUserKey(e, t, i) { + const a = new Uint8Array(e.length + 8); + a.set(e, 0); + a.set(t, e.length); + const s = this._hash(e, a, []); + return new AES256Cipher(s).decryptBlock(i, !1, new Uint8Array(16)); + } +} +class CipherTransform { + constructor(e, t) { + this.StringCipherConstructor = e; + this.StreamCipherConstructor = t; + } + createStream(e, t) { + const i = new this.StreamCipherConstructor(); + return new DecryptStream(e, t, function cipherTransformDecryptStream(e, t) { + return i.decryptBlock(e, t); + }); + } + decryptString(e) { + const t = new this.StringCipherConstructor(); + let i = stringToBytes(e); + i = t.decryptBlock(i, !0); + return bytesToString(i); + } + encryptString(e) { + const t = new this.StringCipherConstructor(); + if (t instanceof AESBaseCipher) { + const i = 16 - (e.length % 16); + e += String.fromCharCode(i).repeat(i); + const a = new Uint8Array(16); + if ("undefined" != typeof crypto) crypto.getRandomValues(a); + else for (let e = 0; e < 16; e++) a[e] = Math.floor(256 * Math.random()); + let s = stringToBytes(e); + s = t.encrypt(s, a); + const r = new Uint8Array(16 + s.length); + r.set(a); + r.set(s, 16); + return bytesToString(r); + } + let i = stringToBytes(e); + i = t.encrypt(i); + return bytesToString(i); + } +} +class CipherTransformFactory { + static #k = new Uint8Array([ + 40, 191, 78, 94, 78, 117, 138, 65, 100, 0, 78, 86, 255, 250, 1, 8, 46, 46, + 0, 182, 208, 104, 62, 128, 47, 12, 169, 254, 100, 83, 105, 122, + ]); + #R(e, t, i, a, s, r, n, g, o, c, C, h) { + if (t) { + const e = Math.min(127, t.length); + t = t.subarray(0, e); + } else t = []; + const l = 6 === e ? new PDF20() : new PDF17(); + return l.checkUserPassword(t, g, n) + ? l.getUserKey(t, o, C) + : t.length && l.checkOwnerPassword(t, a, r, i) + ? l.getOwnerKey(t, s, r, c) + : null; + } + #N(e, t, i, a, s, r, n, g) { + const o = 40 + i.length + e.length, + c = new Uint8Array(o); + let C, + h, + l = 0; + if (t) { + h = Math.min(32, t.length); + for (; l < h; ++l) c[l] = t[l]; + } + C = 0; + for (; l < 32; ) c[l++] = CipherTransformFactory.#k[C++]; + for (C = 0, h = i.length; C < h; ++C) c[l++] = i[C]; + c[l++] = 255 & s; + c[l++] = (s >> 8) & 255; + c[l++] = (s >> 16) & 255; + c[l++] = (s >>> 24) & 255; + for (C = 0, h = e.length; C < h; ++C) c[l++] = e[C]; + if (r >= 4 && !g) { + c[l++] = 255; + c[l++] = 255; + c[l++] = 255; + c[l++] = 255; + } + let Q = Hs(c, 0, l); + const E = n >> 3; + if (r >= 3) for (C = 0; C < 50; ++C) Q = Hs(Q, 0, E); + const u = Q.subarray(0, E); + let d, f; + if (r >= 3) { + for (l = 0; l < 32; ++l) c[l] = CipherTransformFactory.#k[l]; + for (C = 0, h = e.length; C < h; ++C) c[l++] = e[C]; + d = new ARCFourCipher(u); + f = d.encryptBlock(Hs(c, 0, l)); + h = u.length; + const t = new Uint8Array(h); + for (C = 1; C <= 19; ++C) { + for (let e = 0; e < h; ++e) t[e] = u[e] ^ C; + d = new ARCFourCipher(t); + f = d.encryptBlock(f); + } + for (C = 0, h = f.length; C < h; ++C) if (a[C] !== f[C]) return null; + } else { + d = new ARCFourCipher(u); + f = d.encryptBlock(CipherTransformFactory.#k); + for (C = 0, h = f.length; C < h; ++C) if (a[C] !== f[C]) return null; + } + return u; + } + #G(e, t, i, a) { + const s = new Uint8Array(32); + let r = 0; + const n = Math.min(32, e.length); + for (; r < n; ++r) s[r] = e[r]; + let g = 0; + for (; r < 32; ) s[r++] = CipherTransformFactory.#k[g++]; + let o = Hs(s, 0, r); + const c = a >> 3; + if (i >= 3) for (g = 0; g < 50; ++g) o = Hs(o, 0, o.length); + let C, h; + if (i >= 3) { + h = t; + const e = new Uint8Array(c); + for (g = 19; g >= 0; g--) { + for (let t = 0; t < c; ++t) e[t] = o[t] ^ g; + C = new ARCFourCipher(e); + h = C.encryptBlock(h); + } + } else { + C = new ARCFourCipher(o.subarray(0, c)); + h = C.encryptBlock(t); + } + return h; + } + #x(e, t, i, a = !1) { + const s = new Uint8Array(i.length + 9), + r = i.length; + let n; + for (n = 0; n < r; ++n) s[n] = i[n]; + s[n++] = 255 & e; + s[n++] = (e >> 8) & 255; + s[n++] = (e >> 16) & 255; + s[n++] = 255 & t; + s[n++] = (t >> 8) & 255; + if (a) { + s[n++] = 115; + s[n++] = 65; + s[n++] = 108; + s[n++] = 84; + } + return Hs(s, 0, n).subarray(0, Math.min(i.length + 5, 16)); + } + #U(e, t, i, a, s) { + if (!(t instanceof Name)) + throw new FormatError("Invalid crypt filter name."); + const r = this, + n = e.get(t.name), + g = n?.get("CFM"); + if (!g || "None" === g.name) + return function () { + return new NullCipher(); + }; + if ("V2" === g.name) + return function () { + return new ARCFourCipher(r.#x(i, a, s, !1)); + }; + if ("AESV2" === g.name) + return function () { + return new AES128Cipher(r.#x(i, a, s, !0)); + }; + if ("AESV3" === g.name) + return function () { + return new AES256Cipher(s); + }; + throw new FormatError("Unknown crypto method"); + } + constructor(e, t, i) { + const a = e.get("Filter"); + if (!isName(a, "Standard")) + throw new FormatError("unknown encryption method"); + this.filterName = a.name; + this.dict = e; + const s = e.get("V"); + if (!Number.isInteger(s) || (1 !== s && 2 !== s && 4 !== s && 5 !== s)) + throw new FormatError("unsupported encryption algorithm"); + this.algorithm = s; + let r = e.get("Length"); + if (!r) + if (s <= 3) r = 40; + else { + const t = e.get("CF"), + i = e.get("StmF"); + if (t instanceof Dict && i instanceof Name) { + t.suppressEncryption = !0; + const e = t.get(i.name); + r = e?.get("Length") || 128; + r < 40 && (r <<= 3); + } + } + if (!Number.isInteger(r) || r < 40 || r % 8 != 0) + throw new FormatError("invalid key length"); + const n = stringToBytes(e.get("O")), + g = stringToBytes(e.get("U")), + o = n.subarray(0, 32), + c = g.subarray(0, 32), + C = e.get("P"), + h = e.get("R"), + l = (4 === s || 5 === s) && !1 !== e.get("EncryptMetadata"); + this.encryptMetadata = l; + const Q = stringToBytes(t); + let E, u; + if (i) { + if (6 === h) + try { + i = utf8StringToString(i); + } catch { + warn( + "CipherTransformFactory: Unable to convert UTF8 encoded password.", + ); + } + E = stringToBytes(i); + } + if (5 !== s) u = this.#N(Q, E, o, c, C, h, r, l); + else { + const t = n.subarray(32, 40), + i = n.subarray(40, 48), + a = g.subarray(0, 48), + s = g.subarray(32, 40), + r = g.subarray(40, 48), + C = stringToBytes(e.get("OE")), + l = stringToBytes(e.get("UE")), + Q = stringToBytes(e.get("Perms")); + u = this.#R(h, E, o, t, i, a, c, s, r, C, l, Q); + } + if (!u && !i) throw new PasswordException("No password given", it); + if (!u && i) { + const e = this.#G(E, o, h, r); + u = this.#N(Q, e, o, c, C, h, r, l); + } + if (!u) throw new PasswordException("Incorrect Password", at); + this.encryptionKey = u; + if (s >= 4) { + const t = e.get("CF"); + t instanceof Dict && (t.suppressEncryption = !0); + this.cf = t; + this.stmf = e.get("StmF") || Name.get("Identity"); + this.strf = e.get("StrF") || Name.get("Identity"); + this.eff = e.get("EFF") || this.stmf; + } + } + createCipherTransform(e, t) { + if (4 === this.algorithm || 5 === this.algorithm) + return new CipherTransform( + this.#U(this.cf, this.strf, e, t, this.encryptionKey), + this.#U(this.cf, this.stmf, e, t, this.encryptionKey), + ); + const i = this.#x(e, t, this.encryptionKey, !1), + cipherConstructor = function () { + return new ARCFourCipher(i); + }; + return new CipherTransform(cipherConstructor, cipherConstructor); + } +} +async function writeObject(e, t, i, { encrypt: a = null }) { + const s = a?.createCipherTransform(e.num, e.gen); + i.push(`${e.num} ${e.gen} obj\n`); + t instanceof Dict + ? await writeDict(t, i, s) + : t instanceof BaseStream + ? await writeStream(t, i, s) + : (Array.isArray(t) || ArrayBuffer.isView(t)) && + (await writeArray(t, i, s)); + i.push("\nendobj\n"); +} +async function writeDict(e, t, i) { + t.push("<<"); + for (const a of e.getKeys()) { + t.push(` /${escapePDFName(a)} `); + await writeValue(e.getRaw(a), t, i); + } + t.push(">>"); +} +async function writeStream(e, t, i) { + let a = e.getBytes(); + const { dict: s } = e, + [r, n] = await Promise.all([ + s.getAsync("Filter"), + s.getAsync("DecodeParms"), + ]), + g = isName( + Array.isArray(r) ? await s.xref.fetchIfRefAsync(r[0]) : r, + "FlateDecode", + ); + if (a.length >= 256 || g) + try { + const e = new CompressionStream("deflate"), + t = e.writable.getWriter(); + t.write(a); + t.close(); + const i = await new Response(e.readable).arrayBuffer(); + a = new Uint8Array(i); + let o, c; + if (r) { + if (!g) { + o = Array.isArray(r) + ? [Name.get("FlateDecode"), ...r] + : [Name.get("FlateDecode"), r]; + n && (c = Array.isArray(n) ? [null, ...n] : [null, n]); + } + } else o = Name.get("FlateDecode"); + o && s.set("Filter", o); + c && s.set("DecodeParms", c); + } catch (e) { + info(`writeStream - cannot compress data: "${e}".`); + } + let o = bytesToString(a); + i && (o = i.encryptString(o)); + s.set("Length", o.length); + await writeDict(s, t, i); + t.push(" stream\n", o, "\nendstream"); +} +async function writeArray(e, t, i) { + t.push("["); + let a = !0; + for (const s of e) { + a ? (a = !1) : t.push(" "); + await writeValue(s, t, i); + } + t.push("]"); +} +async function writeValue(e, t, i) { + if (e instanceof Name) t.push(`/${escapePDFName(e.name)}`); + else if (e instanceof Ref) t.push(`${e.num} ${e.gen} R`); + else if (Array.isArray(e) || ArrayBuffer.isView(e)) await writeArray(e, t, i); + else if ("string" == typeof e) { + i && (e = i.encryptString(e)); + t.push(`(${escapeString(e)})`); + } else + "number" == typeof e + ? t.push(numberToString(e)) + : "boolean" == typeof e + ? t.push(e.toString()) + : e instanceof Dict + ? await writeDict(e, t, i) + : e instanceof BaseStream + ? await writeStream(e, t, i) + : null === e + ? t.push("null") + : warn( + `Unhandled value in writer: ${typeof e}, please file a bug.`, + ); +} +function writeInt(e, t, i, a) { + for (let s = t + i - 1; s > i - 1; s--) { + a[s] = 255 & e; + e >>= 8; + } + return i + t; +} +function writeString(e, t, i) { + for (let a = 0, s = e.length; a < s; a++) i[t + a] = 255 & e.charCodeAt(a); +} +function updateXFA({ xfaData: e, xfaDatasetsRef: t, newRefs: i, xref: a }) { + if (null === e) { + e = (function writeXFADataForAcroform(e, t) { + const i = new SimpleXMLParser({ hasAttributes: !0 }).parseFromString(e); + for (const { xfa: e } of t) { + if (!e) continue; + const { path: t, value: a } = e; + if (!t) continue; + const s = parseXFAPath(t); + let r = i.documentElement.searchNode(s, 0); + !r && s.length > 1 && (r = i.documentElement.searchNode([s.at(-1)], 0)); + r + ? (r.childNodes = Array.isArray(a) + ? a.map((e) => new SimpleDOMNode("value", e)) + : [new SimpleDOMNode("#text", a)]) + : warn(`Node not found for path: ${t}`); + } + const a = []; + i.documentElement.dump(a); + return a.join(""); + })(a.fetchIfRef(t).getString(), i); + } + const s = a.encrypt; + if (s) { + e = s.createCipherTransform(t.num, t.gen).encryptString(e); + } + const r = + `${t.num} ${t.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n` + + e + + "\nendstream\nendobj\n"; + i.push({ ref: t, data: r }); +} +function getIndexes(e) { + const t = []; + for (const { ref: i } of e) + i.num === t.at(-2) + t.at(-1) ? (t[t.length - 1] += 1) : t.push(i.num, 1); + return t; +} +function computeIDs(e, t, i) { + if (Array.isArray(t.fileIds) && t.fileIds.length > 0) { + const a = (function computeMD5(e, t) { + const i = Math.floor(Date.now() / 1e3), + a = t.filename || "", + s = [i.toString(), a, e.toString()]; + let r = s.reduce((e, t) => e + t.length, 0); + for (const e of Object.values(t.info)) { + s.push(e); + r += e.length; + } + const n = new Uint8Array(r); + let g = 0; + for (const e of s) { + writeString(e, g, n); + g += e.length; + } + return bytesToString(Hs(n)); + })(e, t); + i.set("ID", [t.fileIds[0], a]); + } +} +async function incrementalUpdate({ + originalData: e, + xrefInfo: t, + newRefs: i, + xref: a = null, + hasXfa: s = !1, + xfaDatasetsRef: r = null, + hasXfaDatasetsEntry: n = !1, + needAppearances: g, + acroFormRef: o = null, + acroForm: c = null, + xfaData: C = null, + useXrefStream: h = !1, +}) { + await (async function updateAcroform({ + xref: e, + acroForm: t, + acroFormRef: i, + hasXfa: a, + hasXfaDatasetsEntry: s, + xfaDatasetsRef: r, + needAppearances: n, + newRefs: g, + }) { + !a || s || r || warn("XFA - Cannot save it"); + if (!n && (!a || !r || s)) return; + const o = t.clone(); + if (a && !s) { + const e = t.get("XFA").slice(); + e.splice(2, 0, "datasets"); + e.splice(3, 0, r); + o.set("XFA", e); + } + n && o.set("NeedAppearances", !0); + const c = []; + await writeObject(i, o, c, e); + g.push({ ref: i, data: c.join("") }); + })({ + xref: a, + acroForm: c, + acroFormRef: o, + hasXfa: s, + hasXfaDatasetsEntry: n, + xfaDatasetsRef: r, + needAppearances: g, + newRefs: i, + }); + s && updateXFA({ xfaData: C, xfaDatasetsRef: r, newRefs: i, xref: a }); + const l = []; + let Q = e.length; + const E = e.at(-1); + if (10 !== E && 13 !== E) { + l.push("\n"); + Q += 1; + } + const u = (function getTrailerDict(e, t, i) { + const a = new Dict(null); + a.set("Prev", e.startXRef); + const s = e.newRef; + if (i) { + t.push({ ref: s, data: "" }); + a.set("Size", s.num + 1); + a.set("Type", Name.get("XRef")); + } else a.set("Size", s.num); + null !== e.rootRef && a.set("Root", e.rootRef); + null !== e.infoRef && a.set("Info", e.infoRef); + null !== e.encryptRef && a.set("Encrypt", e.encryptRef); + return a; + })(t, i, h); + i = i.sort((e, t) => e.ref.num - t.ref.num); + for (const { data: e } of i) null !== e && l.push(e); + await (h + ? (async function getXRefStreamTable(e, t, i, a, s) { + const r = []; + let n = 0, + g = 0; + for (const { ref: e, data: a } of i) { + let i; + n = Math.max(n, t); + if (null !== a) { + i = Math.min(e.gen, 65535); + r.push([1, t, i]); + t += a.length; + } else { + i = Math.min(e.gen + 1, 65535); + r.push([0, 0, i]); + } + g = Math.max(g, i); + } + a.set("Index", getIndexes(i)); + const o = [1, getSizeInBytes(n), getSizeInBytes(g)]; + a.set("W", o); + computeIDs(t, e, a); + const c = o.reduce((e, t) => e + t, 0), + C = new Uint8Array(c * r.length), + h = new Stream(C); + h.dict = a; + let l = 0; + for (const [e, t, i] of r) { + l = writeInt(e, o[0], l, C); + l = writeInt(t, o[1], l, C); + l = writeInt(i, o[2], l, C); + } + await writeObject(e.newRef, h, s, {}); + s.push("startxref\n", t.toString(), "\n%%EOF\n"); + })(t, Q, i, u, l) + : (async function getXRefTable(e, t, i, a, s) { + s.push("xref\n"); + const r = getIndexes(i); + let n = 0; + for (const { ref: e, data: a } of i) { + if (e.num === r[n]) { + s.push(`${r[n]} ${r[n + 1]}\n`); + n += 2; + } + if (null !== a) { + s.push( + `${t.toString().padStart(10, "0")} ${Math.min(e.gen, 65535).toString().padStart(5, "0")} n\r\n`, + ); + t += a.length; + } else + s.push( + `0000000000 ${Math.min(e.gen + 1, 65535) + .toString() + .padStart(5, "0")} f\r\n`, + ); + } + computeIDs(t, e, a); + s.push("trailer\n"); + await writeDict(a, s); + s.push("\nstartxref\n", t.toString(), "\n%%EOF\n"); + })(t, Q, i, u, l)); + const d = l.reduce((e, t) => e + t.length, e.length), + f = new Uint8Array(d); + f.set(e); + let p = e.length; + for (const e of l) { + writeString(e, p, f); + p += e.length; + } + return f; +} +const vs = 1, + Ks = 2, + Ts = 3, + qs = 4, + Os = 5; +class StructTreeRoot { + constructor(e, t) { + this.dict = e; + this.ref = t instanceof Ref ? t : null; + this.roleMap = new Map(); + this.structParentIds = null; + } + init() { + this.readRoleMap(); + } + #M(e, t, i) { + if (!(e instanceof Ref) || t < 0) return; + this.structParentIds ||= new RefSetCache(); + let a = this.structParentIds.get(e); + if (!a) { + a = []; + this.structParentIds.put(e, a); + } + a.push([t, i]); + } + addAnnotationIdToPage(e, t) { + this.#M(e, t, qs); + } + readRoleMap() { + const e = this.dict.get("RoleMap"); + e instanceof Dict && + e.forEach((e, t) => { + t instanceof Name && this.roleMap.set(e, t.name); + }); + } + static async canCreateStructureTree({ + catalogRef: e, + pdfManager: t, + newAnnotationsByPage: i, + }) { + if (!(e instanceof Ref)) { + warn("Cannot save the struct tree: no catalog reference."); + return !1; + } + let a = 0, + s = !0; + for (const [e, r] of i) { + const { ref: i } = await t.getPage(e); + if (!(i instanceof Ref)) { + warn(`Cannot save the struct tree: page ${e} has no ref.`); + s = !0; + break; + } + for (const e of r) + if (e.accessibilityData?.type) { + e.parentTreeId = a++; + s = !1; + } + } + if (s) { + for (const e of i.values()) for (const t of e) delete t.parentTreeId; + return !1; + } + return !0; + } + static async createStructureTree({ + newAnnotationsByPage: e, + xref: t, + catalogRef: i, + pdfManager: a, + newRefs: s, + }) { + const r = a.catalog.cloneDict(), + n = new RefSetCache(); + n.put(i, r); + const g = t.getNewTemporaryRef(); + r.set("StructTreeRoot", g); + const o = new Dict(t); + o.set("Type", Name.get("StructTreeRoot")); + const c = t.getNewTemporaryRef(); + o.set("ParentTree", c); + const C = []; + o.set("K", C); + n.put(g, o); + const h = new Dict(t), + l = []; + h.set("Nums", l); + const Q = await this.#L({ + newAnnotationsByPage: e, + structTreeRootRef: g, + kids: C, + nums: l, + xref: t, + pdfManager: a, + cache: n, + }); + o.set("ParentTreeNextKey", Q); + n.put(c, h); + const E = []; + for (const [e, i] of n.items()) { + E.length = 0; + await writeObject(e, i, E, t); + s.push({ ref: e, data: E.join("") }); + } + } + async canUpdateStructTree({ + pdfManager: e, + xref: t, + newAnnotationsByPage: i, + }) { + if (!this.ref) { + warn("Cannot update the struct tree: no root reference."); + return !1; + } + let a = this.dict.get("ParentTreeNextKey"); + if (!Number.isInteger(a) || a < 0) { + warn("Cannot update the struct tree: invalid next key."); + return !1; + } + const s = this.dict.get("ParentTree"); + if (!(s instanceof Dict)) { + warn("Cannot update the struct tree: ParentTree isn't a dict."); + return !1; + } + const r = s.get("Nums"); + if (!Array.isArray(r)) { + warn("Cannot update the struct tree: nums isn't an array."); + return !1; + } + const n = new NumberTree(s, t); + for (const t of i.keys()) { + const { pageDict: i } = await e.getPage(t); + if (!i.has("StructParents")) continue; + const a = i.get("StructParents"); + if (!Number.isInteger(a) || !Array.isArray(n.get(a))) { + warn(`Cannot save the struct tree: page ${t} has a wrong id.`); + return !1; + } + } + let g = !0; + for (const [t, s] of i) { + const { pageDict: i } = await e.getPage(t); + StructTreeRoot.#H({ + elements: s, + xref: this.dict.xref, + pageDict: i, + numberTree: n, + }); + for (const e of s) + if (e.accessibilityData?.type) { + e.parentTreeId = a++; + g = !1; + } + } + if (g) { + for (const e of i.values()) + for (const t of e) { + delete t.parentTreeId; + delete t.structTreeParent; + } + return !1; + } + return !0; + } + async updateStructureTree({ + newAnnotationsByPage: e, + pdfManager: t, + newRefs: i, + }) { + const a = this.dict.xref, + s = this.dict.clone(), + r = this.ref, + n = new RefSetCache(); + n.put(r, s); + let g, + o = s.getRaw("ParentTree"); + if (o instanceof Ref) g = a.fetch(o); + else { + g = o; + o = a.getNewTemporaryRef(); + s.set("ParentTree", o); + } + g = g.clone(); + n.put(o, g); + let c = g.getRaw("Nums"), + C = null; + if (c instanceof Ref) { + C = c; + c = a.fetch(C); + } + c = c.slice(); + C || g.set("Nums", c); + const h = await StructTreeRoot.#L({ + newAnnotationsByPage: e, + structTreeRootRef: r, + kids: null, + nums: c, + xref: a, + pdfManager: t, + cache: n, + }); + s.set("ParentTreeNextKey", h); + C && n.put(C, c); + const l = []; + for (const [e, t] of n.items()) { + l.length = 0; + await writeObject(e, t, l, a); + i.push({ ref: e, data: l.join("") }); + } + } + static async #L({ + newAnnotationsByPage: e, + structTreeRootRef: t, + kids: i, + nums: a, + xref: s, + pdfManager: r, + cache: n, + }) { + const g = Name.get("OBJR"); + let o = -1 / 0; + for (const [c, C] of e) { + const { ref: e } = await r.getPage(c), + h = e instanceof Ref; + for (const { + accessibilityData: r, + ref: c, + parentTreeId: l, + structTreeParent: Q, + } of C) { + if (!r?.type) continue; + const { + type: C, + title: E, + lang: u, + alt: d, + expanded: f, + actualText: p, + } = r; + o = Math.max(o, l); + const m = s.getNewTemporaryRef(), + y = new Dict(s); + y.set("S", Name.get(C)); + E && y.set("T", E); + u && y.set("Lang", u); + d && y.set("Alt", d); + f && y.set("E", f); + p && y.set("ActualText", p); + await this.#J({ + structTreeParent: Q, + tagDict: y, + newTagRef: m, + structTreeRootRef: t, + fallbackKids: i, + xref: s, + cache: n, + }); + const w = new Dict(s); + y.set("K", w); + w.set("Type", g); + h && w.set("Pg", e); + w.set("Obj", c); + n.put(m, y); + a.push(l, m); + } + } + return o + 1; + } + static #H({ elements: e, xref: t, pageDict: i, numberTree: a }) { + const s = new Map(); + for (const t of e) + if (t.structTreeParentId) { + const e = parseInt(t.structTreeParentId.split("_mc")[1], 10); + let i = s.get(e); + if (!i) { + i = []; + s.set(e, i); + } + i.push(t); + } + const r = i.get("StructParents"); + if (!Number.isInteger(r)) return; + const n = a.get(r), + updateElement = (e, i, a) => { + const r = s.get(e); + if (r) { + const e = i.getRaw("P"), + s = t.fetchIfRef(e); + if (e instanceof Ref && s instanceof Dict) { + const e = { ref: a, dict: i }; + for (const t of r) t.structTreeParent = e; + } + return !0; + } + return !1; + }; + for (const e of n) { + if (!(e instanceof Ref)) continue; + const i = t.fetch(e), + a = i.get("K"); + if (Number.isInteger(a)) updateElement(a, i, e); + else if (Array.isArray(a)) + for (let s of a) { + s = t.fetchIfRef(s); + if (Number.isInteger(s) && updateElement(s, i, e)) break; + if (!(s instanceof Dict)) continue; + if (!isName(s.get("Type"), "MCR")) break; + const a = s.get("MCID"); + if (Number.isInteger(a) && updateElement(a, i, e)) break; + } + } + } + static async #J({ + structTreeParent: e, + tagDict: t, + newTagRef: i, + structTreeRootRef: a, + fallbackKids: s, + xref: r, + cache: n, + }) { + let g, + o = null; + if (e) { + ({ ref: o } = e); + g = e.dict.getRaw("P") || a; + } else g = a; + t.set("P", g); + const c = r.fetchIfRef(g); + if (!c) { + s.push(i); + return; + } + let C = n.get(g); + if (!C) { + C = c.clone(); + n.put(g, C); + } + const h = C.getRaw("K"); + let l = h instanceof Ref ? n.get(h) : null; + if (!l) { + l = r.fetchIfRef(h); + l = Array.isArray(l) ? l.slice() : [h]; + const e = r.getNewTemporaryRef(); + C.set("K", e); + n.put(e, l); + } + const Q = l.indexOf(o); + l.splice(Q >= 0 ? Q + 1 : l.length, 0, i); + } +} +class StructElementNode { + constructor(e, t) { + this.tree = e; + this.dict = t; + this.kids = []; + this.parseKids(); + } + get role() { + const e = this.dict.get("S"), + t = e instanceof Name ? e.name : "", + { root: i } = this.tree; + return i.roleMap.has(t) ? i.roleMap.get(t) : t; + } + parseKids() { + let e = null; + const t = this.dict.getRaw("Pg"); + t instanceof Ref && (e = t.toString()); + const i = this.dict.get("K"); + if (Array.isArray(i)) + for (const t of i) { + const i = this.parseKid(e, t); + i && this.kids.push(i); + } + else { + const t = this.parseKid(e, i); + t && this.kids.push(t); + } + } + parseKid(e, t) { + if (Number.isInteger(t)) + return this.tree.pageDict.objId !== e + ? null + : new StructElement({ type: vs, mcid: t, pageObjId: e }); + let i = null; + t instanceof Ref + ? (i = this.dict.xref.fetch(t)) + : t instanceof Dict && (i = t); + if (!i) return null; + const a = i.getRaw("Pg"); + a instanceof Ref && (e = a.toString()); + const s = i.get("Type") instanceof Name ? i.get("Type").name : null; + if ("MCR" === s) { + if (this.tree.pageDict.objId !== e) return null; + const t = i.getRaw("Stm"); + return new StructElement({ + type: Ks, + refObjId: t instanceof Ref ? t.toString() : null, + pageObjId: e, + mcid: i.get("MCID"), + }); + } + if ("OBJR" === s) { + if (this.tree.pageDict.objId !== e) return null; + const t = i.getRaw("Obj"); + return new StructElement({ + type: Ts, + refObjId: t instanceof Ref ? t.toString() : null, + pageObjId: e, + }); + } + return new StructElement({ type: Os, dict: i }); + } +} +class StructElement { + constructor({ + type: e, + dict: t = null, + mcid: i = null, + pageObjId: a = null, + refObjId: s = null, + }) { + this.type = e; + this.dict = t; + this.mcid = i; + this.pageObjId = a; + this.refObjId = s; + this.parentNode = null; + } +} +class StructTreePage { + constructor(e, t) { + this.root = e; + this.rootDict = e ? e.dict : null; + this.pageDict = t; + this.nodes = []; + } + parse(e) { + if (!this.root || !this.rootDict) return; + const t = this.rootDict.get("ParentTree"); + if (!t) return; + const i = this.pageDict.get("StructParents"), + a = e instanceof Ref && this.root.structParentIds?.get(e); + if (!Number.isInteger(i) && !a) return; + const s = new Map(), + r = new NumberTree(t, this.rootDict.xref); + if (Number.isInteger(i)) { + const e = r.get(i); + if (Array.isArray(e)) + for (const t of e) + t instanceof Ref && this.addNode(this.rootDict.xref.fetch(t), s); + } + if (a) + for (const [e, t] of a) { + const i = r.get(e); + if (i) { + const e = this.addNode(this.rootDict.xref.fetchIfRef(i), s); + 1 === e?.kids?.length && + e.kids[0].type === Ts && + (e.kids[0].type = t); + } + } + } + addNode(e, t, i = 0) { + if (i > 40) { + warn("StructTree MAX_DEPTH reached."); + return null; + } + if (t.has(e)) return t.get(e); + const a = new StructElementNode(this, e); + t.set(e, a); + const s = e.get("P"); + if (!s || isName(s.get("Type"), "StructTreeRoot")) { + this.addTopLevelNode(e, a) || t.delete(e); + return a; + } + const r = this.addNode(s, t, i + 1); + if (!r) return a; + let n = !1; + for (const t of r.kids) + if (t.type === Os && t.dict === e) { + t.parentNode = a; + n = !0; + } + n || t.delete(e); + return a; + } + addTopLevelNode(e, t) { + const i = this.rootDict.get("K"); + if (!i) return !1; + if (i instanceof Dict) { + if (i.objId !== e.objId) return !1; + this.nodes[0] = t; + return !0; + } + if (!Array.isArray(i)) return !0; + let a = !1; + for (let s = 0; s < i.length; s++) { + const r = i[s]; + if (r?.toString() === e.objId) { + this.nodes[s] = t; + a = !0; + } + } + return a; + } + get serializable() { + function nodeToSerializable(e, t, i = 0) { + if (i > 40) { + warn("StructTree too deep to be fully serialized."); + return; + } + const a = Object.create(null); + a.role = e.role; + a.children = []; + t.children.push(a); + const s = e.dict.get("Alt"); + "string" == typeof s && (a.alt = stringToPDFString(s)); + const r = e.dict.get("Lang"); + "string" == typeof r && (a.lang = stringToPDFString(r)); + for (const t of e.kids) { + const e = t.type === Os ? t.parentNode : null; + e + ? nodeToSerializable(e, a, i + 1) + : t.type === vs || t.type === Ks + ? a.children.push({ + type: "content", + id: `p${t.pageObjId}_mc${t.mcid}`, + }) + : t.type === Ts + ? a.children.push({ type: "object", id: t.refObjId }) + : t.type === qs && + a.children.push({ + type: "annotation", + id: `pdfjs_internal_id_${t.refObjId}`, + }); + } + } + const e = Object.create(null); + e.children = []; + e.role = "Root"; + for (const t of this.nodes) t && nodeToSerializable(t, e); + return e; + } +} +function isValidExplicitDest(e) { + if (!Array.isArray(e) || e.length < 2) return !1; + const [t, i, ...a] = e; + if (!(t instanceof Ref || Number.isInteger(t))) return !1; + if (!(i instanceof Name)) return !1; + let s = !0; + switch (i.name) { + case "XYZ": + if (3 !== a.length) return !1; + break; + case "Fit": + case "FitB": + return 0 === a.length; + case "FitH": + case "FitBH": + case "FitV": + case "FitBV": + if (1 !== a.length) return !1; + break; + case "FitR": + if (4 !== a.length) return !1; + s = !1; + break; + default: + return !1; + } + for (const e of a) + if (!("number" == typeof e || (s && null === e))) return !1; + return !0; +} +function fetchDest(e) { + e instanceof Dict && (e = e.get("D")); + return isValidExplicitDest(e) ? e : null; +} +function fetchRemoteDest(e) { + let t = e.get("D"); + if (t) { + t instanceof Name && (t = t.name); + if ("string" == typeof t) return stringToPDFString(t); + if (isValidExplicitDest(t)) return JSON.stringify(t); + } + return null; +} +class Catalog { + constructor(e, t) { + this.pdfManager = e; + this.xref = t; + this._catDict = t.getCatalogObj(); + if (!(this._catDict instanceof Dict)) + throw new FormatError("Catalog object is not a dictionary."); + this.toplevelPagesDict; + this._actualNumPages = null; + this.fontCache = new RefSetCache(); + this.builtInCMapCache = new Map(); + this.standardFontDataCache = new Map(); + this.globalImageCache = new GlobalImageCache(); + this.pageKidsCountCache = new RefSetCache(); + this.pageIndexCache = new RefSetCache(); + this.nonBlendModesSet = new RefSet(); + this.systemFontCache = new Map(); + } + cloneDict() { + return this._catDict.clone(); + } + get version() { + const e = this._catDict.get("Version"); + if (e instanceof Name) { + if (bt.test(e.name)) return shadow(this, "version", e.name); + warn(`Invalid PDF catalog version: ${e.name}`); + } + return shadow(this, "version", null); + } + get lang() { + const e = this._catDict.get("Lang"); + return shadow( + this, + "lang", + e && "string" == typeof e ? stringToPDFString(e) : null, + ); + } + get needsRendering() { + const e = this._catDict.get("NeedsRendering"); + return shadow(this, "needsRendering", "boolean" == typeof e && e); + } + get collection() { + let e = null; + try { + const t = this._catDict.get("Collection"); + t instanceof Dict && t.size > 0 && (e = t); + } catch (e) { + if (e instanceof MissingDataException) throw e; + info("Cannot fetch Collection entry; assuming no collection is present."); + } + return shadow(this, "collection", e); + } + get acroForm() { + let e = null; + try { + const t = this._catDict.get("AcroForm"); + t instanceof Dict && t.size > 0 && (e = t); + } catch (e) { + if (e instanceof MissingDataException) throw e; + info("Cannot fetch AcroForm entry; assuming no forms are present."); + } + return shadow(this, "acroForm", e); + } + get acroFormRef() { + const e = this._catDict.getRaw("AcroForm"); + return shadow(this, "acroFormRef", e instanceof Ref ? e : null); + } + get metadata() { + const e = this._catDict.getRaw("Metadata"); + if (!(e instanceof Ref)) return shadow(this, "metadata", null); + let t = null; + try { + const i = this.xref.fetch(e, !this.xref.encrypt?.encryptMetadata); + if (i instanceof BaseStream && i.dict instanceof Dict) { + const e = i.dict.get("Type"), + a = i.dict.get("Subtype"); + if (isName(e, "Metadata") && isName(a, "XML")) { + const e = stringToUTF8String(i.getString()); + e && (t = new MetadataParser(e).serializable); + } + } + } catch (e) { + if (e instanceof MissingDataException) throw e; + info(`Skipping invalid Metadata: "${e}".`); + } + return shadow(this, "metadata", t); + } + get markInfo() { + let e = null; + try { + e = this._readMarkInfo(); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Unable to read mark info."); + } + return shadow(this, "markInfo", e); + } + _readMarkInfo() { + const e = this._catDict.get("MarkInfo"); + if (!(e instanceof Dict)) return null; + const t = { Marked: !1, UserProperties: !1, Suspects: !1 }; + for (const i in t) { + const a = e.get(i); + "boolean" == typeof a && (t[i] = a); + } + return t; + } + get structTreeRoot() { + let e = null; + try { + e = this._readStructTreeRoot(); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Unable read to structTreeRoot info."); + } + return shadow(this, "structTreeRoot", e); + } + _readStructTreeRoot() { + const e = this._catDict.getRaw("StructTreeRoot"), + t = this.xref.fetchIfRef(e); + if (!(t instanceof Dict)) return null; + const i = new StructTreeRoot(t, e); + i.init(); + return i; + } + get toplevelPagesDict() { + const e = this._catDict.get("Pages"); + if (!(e instanceof Dict)) + throw new FormatError("Invalid top-level pages dictionary."); + return shadow(this, "toplevelPagesDict", e); + } + get documentOutline() { + let e = null; + try { + e = this._readDocumentOutline(); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Unable to read document outline."); + } + return shadow(this, "documentOutline", e); + } + _readDocumentOutline() { + let e = this._catDict.get("Outlines"); + if (!(e instanceof Dict)) return null; + e = e.getRaw("First"); + if (!(e instanceof Ref)) return null; + const t = { items: [] }, + i = [{ obj: e, parent: t }], + a = new RefSet(); + a.put(e); + const s = this.xref, + r = new Uint8ClampedArray(3); + for (; i.length > 0; ) { + const t = i.shift(), + n = s.fetchIfRef(t.obj); + if (null === n) continue; + n.has("Title") || warn("Invalid outline item encountered."); + const g = { url: null, dest: null, action: null }; + Catalog.parseDestDictionary({ + destDict: n, + resultObj: g, + docBaseUrl: this.baseUrl, + docAttachments: this.attachments, + }); + const o = n.get("Title"), + c = n.get("F") || 0, + C = n.getArray("C"), + h = n.get("Count"); + let l = r; + !isNumberArray(C, 3) || + (0 === C[0] && 0 === C[1] && 0 === C[2]) || + (l = ColorSpace.singletons.rgb.getRgb(C, 0)); + const Q = { + action: g.action, + attachment: g.attachment, + dest: g.dest, + url: g.url, + unsafeUrl: g.unsafeUrl, + newWindow: g.newWindow, + setOCGState: g.setOCGState, + title: "string" == typeof o ? stringToPDFString(o) : "", + color: l, + count: Number.isInteger(h) ? h : void 0, + bold: !!(2 & c), + italic: !!(1 & c), + items: [], + }; + t.parent.items.push(Q); + e = n.getRaw("First"); + if (e instanceof Ref && !a.has(e)) { + i.push({ obj: e, parent: Q }); + a.put(e); + } + e = n.getRaw("Next"); + if (e instanceof Ref && !a.has(e)) { + i.push({ obj: e, parent: t.parent }); + a.put(e); + } + } + return t.items.length > 0 ? t.items : null; + } + get permissions() { + let e = null; + try { + e = this._readPermissions(); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Unable to read permissions."); + } + return shadow(this, "permissions", e); + } + _readPermissions() { + const e = this.xref.trailer.get("Encrypt"); + if (!(e instanceof Dict)) return null; + let t = e.get("P"); + if ("number" != typeof t) return null; + t += 2 ** 32; + const i = []; + for (const e in m) { + const a = m[e]; + t & a && i.push(a); + } + return i; + } + get optionalContentConfig() { + let e = null; + try { + const t = this._catDict.get("OCProperties"); + if (!t) return shadow(this, "optionalContentConfig", null); + const i = t.get("D"); + if (!i) return shadow(this, "optionalContentConfig", null); + const a = t.get("OCGs"); + if (!Array.isArray(a)) return shadow(this, "optionalContentConfig", null); + const s = [], + r = new RefSet(); + for (const e of a) + if (e instanceof Ref && !r.has(e)) { + r.put(e); + s.push(this.#Y(e)); + } + e = this.#v(i, r); + e.groups = s; + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`Unable to read optional content config: ${e}`); + } + return shadow(this, "optionalContentConfig", e); + } + #Y(e) { + const t = this.xref.fetch(e), + i = { + id: e.toString(), + name: null, + intent: null, + usage: { print: null, view: null }, + }, + a = t.get("Name"); + "string" == typeof a && (i.name = stringToPDFString(a)); + let s = t.getArray("Intent"); + Array.isArray(s) || (s = [s]); + s.every((e) => e instanceof Name) && (i.intent = s.map((e) => e.name)); + const r = t.get("Usage"); + if (!(r instanceof Dict)) return i; + const n = i.usage, + g = r.get("Print"); + if (g instanceof Dict) { + const e = g.get("PrintState"); + if (e instanceof Name) + switch (e.name) { + case "ON": + case "OFF": + n.print = { printState: e.name }; + } + } + const o = r.get("View"); + if (o instanceof Dict) { + const e = o.get("ViewState"); + if (e instanceof Name) + switch (e.name) { + case "ON": + case "OFF": + n.view = { viewState: e.name }; + } + } + return i; + } + #v(e, t) { + function parseOnOff(e) { + const i = []; + if (Array.isArray(e)) + for (const a of e) a instanceof Ref && t.has(a) && i.push(a.toString()); + return i; + } + function parseOrder(e, i = 0) { + if (!Array.isArray(e)) return null; + const s = []; + for (const r of e) { + if (r instanceof Ref && t.has(r)) { + a.put(r); + s.push(r.toString()); + continue; + } + const e = parseNestedOrder(r, i); + e && s.push(e); + } + if (i > 0) return s; + const r = []; + for (const e of t) a.has(e) || r.push(e.toString()); + r.length && s.push({ name: null, order: r }); + return s; + } + function parseNestedOrder(e, t) { + if (++t > s) { + warn("parseNestedOrder - reached MAX_NESTED_LEVELS."); + return null; + } + const a = i.fetchIfRef(e); + if (!Array.isArray(a)) return null; + const r = i.fetchIfRef(a[0]); + if ("string" != typeof r) return null; + const n = parseOrder(a.slice(1), t); + return n && n.length ? { name: stringToPDFString(r), order: n } : null; + } + const i = this.xref, + a = new RefSet(), + s = 10; + return { + name: + "string" == typeof e.get("Name") + ? stringToPDFString(e.get("Name")) + : null, + creator: + "string" == typeof e.get("Creator") + ? stringToPDFString(e.get("Creator")) + : null, + baseState: + e.get("BaseState") instanceof Name ? e.get("BaseState").name : null, + on: parseOnOff(e.get("ON")), + off: parseOnOff(e.get("OFF")), + order: parseOrder(e.get("Order")), + groups: null, + }; + } + setActualNumPages(e = null) { + this._actualNumPages = e; + } + get hasActualNumPages() { + return null !== this._actualNumPages; + } + get _pagesCount() { + const e = this.toplevelPagesDict.get("Count"); + if (!Number.isInteger(e)) + throw new FormatError( + "Page count in top-level pages dictionary is not an integer.", + ); + return shadow(this, "_pagesCount", e); + } + get numPages() { + return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; + } + get destinations() { + const e = this._readDests(), + t = Object.create(null); + if (e instanceof NameTree) + for (const [i, a] of e.getAll()) { + const e = fetchDest(a); + e && (t[stringToPDFString(i)] = e); + } + else + e instanceof Dict && + e.forEach(function (e, i) { + const a = fetchDest(i); + a && (t[e] = a); + }); + return shadow(this, "destinations", t); + } + getDestination(e) { + const t = this._readDests(); + if (t instanceof NameTree) { + const i = fetchDest(t.get(e)); + if (i) return i; + const a = this.destinations[e]; + if (a) { + warn(`Found "${e}" at an incorrect position in the NameTree.`); + return a; + } + } else if (t instanceof Dict) { + const i = fetchDest(t.get(e)); + if (i) return i; + } + return null; + } + _readDests() { + const e = this._catDict.get("Names"); + return e?.has("Dests") + ? new NameTree(e.getRaw("Dests"), this.xref) + : this._catDict.has("Dests") + ? this._catDict.get("Dests") + : void 0; + } + get pageLabels() { + let e = null; + try { + e = this._readPageLabels(); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn("Unable to read page labels."); + } + return shadow(this, "pageLabels", e); + } + _readPageLabels() { + const e = this._catDict.getRaw("PageLabels"); + if (!e) return null; + const t = new Array(this.numPages); + let i = null, + a = ""; + const s = new NumberTree(e, this.xref).getAll(); + let r = "", + n = 1; + for (let e = 0, g = this.numPages; e < g; e++) { + const g = s.get(e); + if (void 0 !== g) { + if (!(g instanceof Dict)) + throw new FormatError("PageLabel is not a dictionary."); + if (g.has("Type") && !isName(g.get("Type"), "PageLabel")) + throw new FormatError("Invalid type in PageLabel dictionary."); + if (g.has("S")) { + const e = g.get("S"); + if (!(e instanceof Name)) + throw new FormatError("Invalid style in PageLabel dictionary."); + i = e.name; + } else i = null; + if (g.has("P")) { + const e = g.get("P"); + if ("string" != typeof e) + throw new FormatError("Invalid prefix in PageLabel dictionary."); + a = stringToPDFString(e); + } else a = ""; + if (g.has("St")) { + const e = g.get("St"); + if (!(Number.isInteger(e) && e >= 1)) + throw new FormatError("Invalid start in PageLabel dictionary."); + n = e; + } else n = 1; + } + switch (i) { + case "D": + r = n; + break; + case "R": + case "r": + r = toRomanNumerals(n, "r" === i); + break; + case "A": + case "a": + const e = 26, + t = "a" === i ? 97 : 65, + a = n - 1; + r = String.fromCharCode(t + (a % e)).repeat(Math.floor(a / e) + 1); + break; + default: + if (i) + throw new FormatError( + `Invalid style "${i}" in PageLabel dictionary.`, + ); + r = ""; + } + t[e] = a + r; + n++; + } + return t; + } + get pageLayout() { + const e = this._catDict.get("PageLayout"); + let t = ""; + if (e instanceof Name) + switch (e.name) { + case "SinglePage": + case "OneColumn": + case "TwoColumnLeft": + case "TwoColumnRight": + case "TwoPageLeft": + case "TwoPageRight": + t = e.name; + } + return shadow(this, "pageLayout", t); + } + get pageMode() { + const e = this._catDict.get("PageMode"); + let t = "UseNone"; + if (e instanceof Name) + switch (e.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "FullScreen": + case "UseOC": + case "UseAttachments": + t = e.name; + } + return shadow(this, "pageMode", t); + } + get viewerPreferences() { + const e = this._catDict.get("ViewerPreferences"); + if (!(e instanceof Dict)) return shadow(this, "viewerPreferences", null); + let t = null; + for (const i of e.getKeys()) { + const a = e.get(i); + let s; + switch (i) { + case "HideToolbar": + case "HideMenubar": + case "HideWindowUI": + case "FitWindow": + case "CenterWindow": + case "DisplayDocTitle": + case "PickTrayByPDFSize": + "boolean" == typeof a && (s = a); + break; + case "NonFullScreenPageMode": + if (a instanceof Name) + switch (a.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "UseOC": + s = a.name; + break; + default: + s = "UseNone"; + } + break; + case "Direction": + if (a instanceof Name) + switch (a.name) { + case "L2R": + case "R2L": + s = a.name; + break; + default: + s = "L2R"; + } + break; + case "ViewArea": + case "ViewClip": + case "PrintArea": + case "PrintClip": + if (a instanceof Name) + switch (a.name) { + case "MediaBox": + case "CropBox": + case "BleedBox": + case "TrimBox": + case "ArtBox": + s = a.name; + break; + default: + s = "CropBox"; + } + break; + case "PrintScaling": + if (a instanceof Name) + switch (a.name) { + case "None": + case "AppDefault": + s = a.name; + break; + default: + s = "AppDefault"; + } + break; + case "Duplex": + if (a instanceof Name) + switch (a.name) { + case "Simplex": + case "DuplexFlipShortEdge": + case "DuplexFlipLongEdge": + s = a.name; + break; + default: + s = "None"; + } + break; + case "PrintPageRange": + if (Array.isArray(a) && a.length % 2 == 0) { + a.every( + (e, t, i) => + Number.isInteger(e) && + e > 0 && + (0 === t || e >= i[t - 1]) && + e <= this.numPages, + ) && (s = a); + } + break; + case "NumCopies": + Number.isInteger(a) && a > 0 && (s = a); + break; + default: + warn(`Ignoring non-standard key in ViewerPreferences: ${i}.`); + continue; + } + if (void 0 !== s) { + t || (t = Object.create(null)); + t[i] = s; + } else warn(`Bad value, for key "${i}", in ViewerPreferences: ${a}.`); + } + return shadow(this, "viewerPreferences", t); + } + get openAction() { + const e = this._catDict.get("OpenAction"), + t = Object.create(null); + if (e instanceof Dict) { + const i = new Dict(this.xref); + i.set("A", e); + const a = { url: null, dest: null, action: null }; + Catalog.parseDestDictionary({ destDict: i, resultObj: a }); + Array.isArray(a.dest) + ? (t.dest = a.dest) + : a.action && (t.action = a.action); + } else Array.isArray(e) && (t.dest = e); + return shadow(this, "openAction", objectSize(t) > 0 ? t : null); + } + get attachments() { + const e = this._catDict.get("Names"); + let t = null; + if (e instanceof Dict && e.has("EmbeddedFiles")) { + const i = new NameTree(e.getRaw("EmbeddedFiles"), this.xref); + for (const [e, a] of i.getAll()) { + const i = new FileSpec(a, this.xref); + t || (t = Object.create(null)); + t[stringToPDFString(e)] = i.serializable; + } + } + return shadow(this, "attachments", t); + } + get xfaImages() { + const e = this._catDict.get("Names"); + let t = null; + if (e instanceof Dict && e.has("XFAImages")) { + const i = new NameTree(e.getRaw("XFAImages"), this.xref); + for (const [e, a] of i.getAll()) { + t || (t = new Dict(this.xref)); + t.set(stringToPDFString(e), a); + } + } + return shadow(this, "xfaImages", t); + } + _collectJavaScript() { + const e = this._catDict.get("Names"); + let t = null; + function appendIfJavaScriptDict(e, i) { + if (!(i instanceof Dict)) return; + if (!isName(i.get("S"), "JavaScript")) return; + let a = i.get("JS"); + if (a instanceof BaseStream) a = a.getString(); + else if ("string" != typeof a) return; + a = stringToPDFString(a).replaceAll("\0", ""); + a && (t ||= new Map()).set(e, a); + } + if (e instanceof Dict && e.has("JavaScript")) { + const t = new NameTree(e.getRaw("JavaScript"), this.xref); + for (const [e, i] of t.getAll()) + appendIfJavaScriptDict(stringToPDFString(e), i); + } + const i = this._catDict.get("OpenAction"); + i && appendIfJavaScriptDict("OpenAction", i); + return t; + } + get jsActions() { + const e = this._collectJavaScript(); + let t = collectActions(this.xref, this._catDict, dA); + if (e) { + t ||= Object.create(null); + for (const [i, a] of e) i in t ? t[i].push(a) : (t[i] = [a]); + } + return shadow(this, "jsActions", t); + } + async fontFallback(e, t) { + const i = await Promise.all(this.fontCache); + for (const a of i) + if (a.loadedName === e) { + a.fallback(t); + return; + } + } + async cleanup(e = !1) { + clearGlobalCaches(); + this.globalImageCache.clear(e); + this.pageKidsCountCache.clear(); + this.pageIndexCache.clear(); + this.nonBlendModesSet.clear(); + const t = await Promise.all(this.fontCache); + for (const { dict: e } of t) delete e.cacheKey; + this.fontCache.clear(); + this.builtInCMapCache.clear(); + this.standardFontDataCache.clear(); + this.systemFontCache.clear(); + } + async getPageDict(e) { + const t = [this.toplevelPagesDict], + i = new RefSet(), + a = this._catDict.getRaw("Pages"); + a instanceof Ref && i.put(a); + const s = this.xref, + r = this.pageKidsCountCache, + n = this.pageIndexCache; + let g = 0; + for (; t.length; ) { + const a = t.pop(); + if (a instanceof Ref) { + const o = r.get(a); + if (o >= 0 && g + o <= e) { + g += o; + continue; + } + if (i.has(a)) + throw new FormatError("Pages tree contains circular reference."); + i.put(a); + const c = await s.fetchAsync(a); + if (c instanceof Dict) { + let t = c.getRaw("Type"); + t instanceof Ref && (t = await s.fetchAsync(t)); + if (isName(t, "Page") || !c.has("Kids")) { + r.has(a) || r.put(a, 1); + n.has(a) || n.put(a, g); + if (g === e) return [c, a]; + g++; + continue; + } + } + t.push(c); + continue; + } + if (!(a instanceof Dict)) + throw new FormatError( + "Page dictionary kid reference points to wrong type of object.", + ); + const { objId: o } = a; + let c = a.getRaw("Count"); + c instanceof Ref && (c = await s.fetchAsync(c)); + if (Number.isInteger(c) && c >= 0) { + o && !r.has(o) && r.put(o, c); + if (g + c <= e) { + g += c; + continue; + } + } + let C = a.getRaw("Kids"); + C instanceof Ref && (C = await s.fetchAsync(C)); + if (!Array.isArray(C)) { + let t = a.getRaw("Type"); + t instanceof Ref && (t = await s.fetchAsync(t)); + if (isName(t, "Page") || !a.has("Kids")) { + if (g === e) return [a, null]; + g++; + continue; + } + throw new FormatError("Page dictionary kids object is not an array."); + } + for (let e = C.length - 1; e >= 0; e--) t.push(C[e]); + } + throw new Error(`Page index ${e} not found.`); + } + async getAllPageDicts(e = !1) { + const { ignoreErrors: t } = this.pdfManager.evaluatorOptions, + i = [{ currentNode: this.toplevelPagesDict, posInKids: 0 }], + a = new RefSet(), + s = this._catDict.getRaw("Pages"); + s instanceof Ref && a.put(s); + const r = new Map(), + n = this.xref, + g = this.pageIndexCache; + let o = 0; + function addPageDict(e, t) { + t && !g.has(t) && g.put(t, o); + r.set(o++, [e, t]); + } + function addPageError(i) { + if (i instanceof XRefEntryException && !e) throw i; + if (e && t && 0 === o) { + warn(`getAllPageDicts - Skipping invalid first page: "${i}".`); + i = Dict.empty; + } + r.set(o++, [i, null]); + } + for (; i.length > 0; ) { + const e = i.at(-1), + { currentNode: t, posInKids: s } = e; + let r = t.getRaw("Kids"); + if (r instanceof Ref) + try { + r = await n.fetchAsync(r); + } catch (e) { + addPageError(e); + break; + } + if (!Array.isArray(r)) { + addPageError( + new FormatError("Page dictionary kids object is not an array."), + ); + break; + } + if (s >= r.length) { + i.pop(); + continue; + } + const g = r[s]; + let o; + if (g instanceof Ref) { + if (a.has(g)) { + addPageError( + new FormatError("Pages tree contains circular reference."), + ); + break; + } + a.put(g); + try { + o = await n.fetchAsync(g); + } catch (e) { + addPageError(e); + break; + } + } else o = g; + if (!(o instanceof Dict)) { + addPageError( + new FormatError( + "Page dictionary kid reference points to wrong type of object.", + ), + ); + break; + } + let c = o.getRaw("Type"); + if (c instanceof Ref) + try { + c = await n.fetchAsync(c); + } catch (e) { + addPageError(e); + break; + } + isName(c, "Page") || !o.has("Kids") + ? addPageDict(o, g instanceof Ref ? g : null) + : i.push({ currentNode: o, posInKids: 0 }); + e.posInKids++; + } + return r; + } + getPageIndex(e) { + const t = this.pageIndexCache.get(e); + if (void 0 !== t) return Promise.resolve(t); + const i = this.xref; + let a = 0; + const next = (t) => + (function pagesBeforeRef(t) { + let a, + s = 0; + return i + .fetchAsync(t) + .then(function (i) { + if ( + isRefsEqual(t, e) && + !isDict(i, "Page") && + !(i instanceof Dict && !i.has("Type") && i.has("Contents")) + ) + throw new FormatError( + "The reference does not point to a /Page dictionary.", + ); + if (!i) return null; + if (!(i instanceof Dict)) + throw new FormatError("Node must be a dictionary."); + a = i.getRaw("Parent"); + return i.getAsync("Parent"); + }) + .then(function (e) { + if (!e) return null; + if (!(e instanceof Dict)) + throw new FormatError("Parent must be a dictionary."); + return e.getAsync("Kids"); + }) + .then(function (e) { + if (!e) return null; + const r = []; + let n = !1; + for (const a of e) { + if (!(a instanceof Ref)) + throw new FormatError("Kid must be a reference."); + if (isRefsEqual(a, t)) { + n = !0; + break; + } + r.push( + i.fetchAsync(a).then(function (e) { + if (!(e instanceof Dict)) + throw new FormatError("Kid node must be a dictionary."); + e.has("Count") ? (s += e.get("Count")) : s++; + }), + ); + } + if (!n) + throw new FormatError( + "Kid reference not found in parent's kids.", + ); + return Promise.all(r).then(function () { + return [s, a]; + }); + }); + })(t).then((t) => { + if (!t) { + this.pageIndexCache.put(e, a); + return a; + } + const [i, s] = t; + a += i; + return next(s); + }); + return next(e); + } + get baseUrl() { + const e = this._catDict.get("URI"); + if (e instanceof Dict) { + const t = e.get("Base"); + if ("string" == typeof t) { + const e = createValidAbsoluteUrl(t, null, { tryConvertEncoding: !0 }); + if (e) return shadow(this, "baseUrl", e.href); + } + } + return shadow(this, "baseUrl", this.pdfManager.docBaseUrl); + } + static parseDestDictionary({ + destDict: e, + resultObj: t, + docBaseUrl: i = null, + docAttachments: a = null, + }) { + if (!(e instanceof Dict)) { + warn("parseDestDictionary: `destDict` must be a dictionary."); + return; + } + let s, + r, + n = e.get("A"); + if (!(n instanceof Dict)) + if (e.has("Dest")) n = e.get("Dest"); + else { + n = e.get("AA"); + n instanceof Dict && + (n.has("D") ? (n = n.get("D")) : n.has("U") && (n = n.get("U"))); + } + if (n instanceof Dict) { + const e = n.get("S"); + if (!(e instanceof Name)) { + warn("parseDestDictionary: Invalid type in Action dictionary."); + return; + } + const i = e.name; + switch (i) { + case "ResetForm": + const e = n.get("Flags"), + g = 0 == (1 & ("number" == typeof e ? e : 0)), + o = [], + c = []; + for (const e of n.get("Fields") || []) + e instanceof Ref + ? c.push(e.toString()) + : "string" == typeof e && o.push(stringToPDFString(e)); + t.resetForm = { fields: o, refs: c, include: g }; + break; + case "URI": + s = n.get("URI"); + s instanceof Name && (s = "/" + s.name); + break; + case "GoTo": + r = n.get("D"); + break; + case "Launch": + case "GoToR": + const C = n.get("F"); + if (C instanceof Dict) { + const e = new FileSpec(C, null, !0), + { rawFilename: t } = e.serializable; + s = t; + } else "string" == typeof C && (s = C); + const h = fetchRemoteDest(n); + h && "string" == typeof s && (s = s.split("#", 1)[0] + "#" + h); + const l = n.get("NewWindow"); + "boolean" == typeof l && (t.newWindow = l); + break; + case "GoToE": + const Q = n.get("T"); + let E; + if (a && Q instanceof Dict) { + const e = Q.get("R"), + t = Q.get("N"); + isName(e, "C") && + "string" == typeof t && + (E = a[stringToPDFString(t)]); + } + if (E) { + t.attachment = E; + const e = fetchRemoteDest(n); + e && (t.attachmentDest = e); + } else warn('parseDestDictionary - unimplemented "GoToE" action.'); + break; + case "Named": + const u = n.get("N"); + u instanceof Name && (t.action = u.name); + break; + case "SetOCGState": + const d = n.get("State"), + f = n.get("PreserveRB"); + if (!Array.isArray(d) || 0 === d.length) break; + const p = []; + for (const e of d) + if (e instanceof Name) + switch (e.name) { + case "ON": + case "OFF": + case "Toggle": + p.push(e.name); + } + else e instanceof Ref && p.push(e.toString()); + if (p.length !== d.length) break; + t.setOCGState = { state: p, preserveRB: "boolean" != typeof f || f }; + break; + case "JavaScript": + const m = n.get("JS"); + let y; + m instanceof BaseStream + ? (y = m.getString()) + : "string" == typeof m && (y = m); + const w = y && recoverJsURL(stringToPDFString(y)); + if (w) { + s = w.url; + t.newWindow = w.newWindow; + break; + } + default: + if ("JavaScript" === i || "SubmitForm" === i) break; + warn(`parseDestDictionary - unsupported action: "${i}".`); + } + } else e.has("Dest") && (r = e.get("Dest")); + if ("string" == typeof s) { + const e = createValidAbsoluteUrl(s, i, { + addDefaultProtocol: !0, + tryConvertEncoding: !0, + }); + e && (t.url = e.href); + t.unsafeUrl = s; + } + if (r) { + r instanceof Name && (r = r.name); + "string" == typeof r + ? (t.dest = stringToPDFString(r)) + : isValidExplicitDest(r) && (t.dest = r); + } + } +} +function addChildren(e, t) { + if (e instanceof Dict) e = e.getRawValues(); + else if (e instanceof BaseStream) e = e.dict.getRawValues(); + else if (!Array.isArray(e)) return; + for (const a of e) + ((i = a) instanceof Ref || + i instanceof Dict || + i instanceof BaseStream || + Array.isArray(i)) && + t.push(a); + var i; +} +class ObjectLoader { + constructor(e, t, i) { + this.dict = e; + this.keys = t; + this.xref = i; + this.refSet = null; + } + async load() { + if (this.xref.stream.isDataLoaded) return; + const { keys: e, dict: t } = this; + this.refSet = new RefSet(); + const i = []; + for (const a of e) { + const e = t.getRaw(a); + void 0 !== e && i.push(e); + } + return this._walk(i); + } + async _walk(e) { + const t = [], + i = []; + for (; e.length; ) { + let a = e.pop(); + if (a instanceof Ref) { + if (this.refSet.has(a)) continue; + try { + this.refSet.put(a); + a = this.xref.fetch(a); + } catch (e) { + if (!(e instanceof MissingDataException)) { + warn(`ObjectLoader._walk - requesting all data: "${e}".`); + this.refSet = null; + const { manager: t } = this.xref.stream; + return t.requestAllChunks(); + } + t.push(a); + i.push({ begin: e.begin, end: e.end }); + } + } + if (a instanceof BaseStream) { + const e = a.getBaseStreams(); + if (e) { + let s = !1; + for (const t of e) + if (!t.isDataLoaded) { + s = !0; + i.push({ begin: t.start, end: t.end }); + } + s && t.push(a); + } + } + addChildren(a, e); + } + if (i.length) { + await this.xref.stream.manager.requestRanges(i); + for (const e of t) e instanceof Ref && this.refSet.remove(e); + return this._walk(t); + } + this.refSet = null; + } +} +const Ws = Symbol(), + js = Symbol(), + Xs = Symbol(), + Zs = Symbol(), + Vs = Symbol(), + zs = Symbol(), + _s = Symbol(), + $s = Symbol(), + Ar = Symbol(), + er = Symbol("content"), + tr = Symbol("data"), + ir = Symbol(), + ar = Symbol("extra"), + sr = Symbol(), + rr = Symbol(), + nr = Symbol(), + gr = Symbol(), + or = Symbol(), + Ir = Symbol(), + cr = Symbol(), + Cr = Symbol(), + hr = Symbol(), + lr = Symbol(), + Qr = Symbol(), + Er = Symbol(), + ur = Symbol(), + dr = Symbol(), + fr = Symbol(), + pr = Symbol(), + mr = Symbol(), + yr = Symbol(), + wr = Symbol(), + Dr = Symbol(), + br = Symbol(), + Fr = Symbol(), + Sr = Symbol(), + kr = Symbol(), + Rr = Symbol(), + Nr = Symbol(), + Gr = Symbol(), + xr = Symbol(), + Ur = Symbol(), + Mr = Symbol(), + Lr = Symbol(), + Hr = Symbol(), + Jr = Symbol("namespaceId"), + Yr = Symbol("nodeName"), + vr = Symbol(), + Kr = Symbol(), + Tr = Symbol(), + qr = Symbol(), + Or = Symbol(), + Pr = Symbol(), + Wr = Symbol(), + jr = Symbol(), + Xr = Symbol("root"), + Zr = Symbol(), + Vr = Symbol(), + zr = Symbol(), + _r = Symbol(), + $r = Symbol(), + An = Symbol(), + en = Symbol(), + tn = Symbol(), + an = Symbol(), + sn = Symbol(), + rn = Symbol(), + nn = Symbol("uid"), + gn = Symbol(), + on = { + config: { + id: 0, + check: (e) => e.startsWith("http://www.xfa.org/schema/xci/"), + }, + connectionSet: { + id: 1, + check: (e) => + e.startsWith("http://www.xfa.org/schema/xfa-connection-set/"), + }, + datasets: { + id: 2, + check: (e) => e.startsWith("http://www.xfa.org/schema/xfa-data/"), + }, + form: { + id: 3, + check: (e) => e.startsWith("http://www.xfa.org/schema/xfa-form/"), + }, + localeSet: { + id: 4, + check: (e) => e.startsWith("http://www.xfa.org/schema/xfa-locale-set/"), + }, + pdf: { id: 5, check: (e) => "http://ns.adobe.com/xdp/pdf/" === e }, + signature: { + id: 6, + check: (e) => "http://www.w3.org/2000/09/xmldsig#" === e, + }, + sourceSet: { + id: 7, + check: (e) => e.startsWith("http://www.xfa.org/schema/xfa-source-set/"), + }, + stylesheet: { + id: 8, + check: (e) => "http://www.w3.org/1999/XSL/Transform" === e, + }, + template: { + id: 9, + check: (e) => e.startsWith("http://www.xfa.org/schema/xfa-template/"), + }, + xdc: { + id: 10, + check: (e) => e.startsWith("http://www.xfa.org/schema/xdc/"), + }, + xdp: { id: 11, check: (e) => "http://ns.adobe.com/xdp/" === e }, + xfdf: { id: 12, check: (e) => "http://ns.adobe.com/xfdf/" === e }, + xhtml: { id: 13, check: (e) => "http://www.w3.org/1999/xhtml" === e }, + xmpmeta: { id: 14, check: (e) => "http://ns.adobe.com/xmpmeta/" === e }, + }, + In = { + pt: (e) => e, + cm: (e) => (e / 2.54) * 72, + mm: (e) => (e / 25.4) * 72, + in: (e) => 72 * e, + px: (e) => e, + }, + cn = /([+-]?\d+\.?\d*)(.*)/; +function stripQuotes(e) { + return e.startsWith("'") || e.startsWith('"') ? e.slice(1, -1) : e; +} +function getInteger({ data: e, defaultValue: t, validate: i }) { + if (!e) return t; + e = e.trim(); + const a = parseInt(e, 10); + return !isNaN(a) && i(a) ? a : t; +} +function getFloat({ data: e, defaultValue: t, validate: i }) { + if (!e) return t; + e = e.trim(); + const a = parseFloat(e); + return !isNaN(a) && i(a) ? a : t; +} +function getKeyword({ data: e, defaultValue: t, validate: i }) { + return e && i((e = e.trim())) ? e : t; +} +function getStringOption(e, t) { + return getKeyword({ + data: e, + defaultValue: t[0], + validate: (e) => t.includes(e), + }); +} +function getMeasurement(e, t = "0") { + t ||= "0"; + if (!e) return getMeasurement(t); + const i = e.trim().match(cn); + if (!i) return getMeasurement(t); + const [, a, s] = i, + r = parseFloat(a); + if (isNaN(r)) return getMeasurement(t); + if (0 === r) return 0; + const n = In[s]; + return n ? n(r) : r; +} +function getRatio(e) { + if (!e) return { num: 1, den: 1 }; + const t = e + .trim() + .split(/\s*:\s*/) + .map((e) => parseFloat(e)) + .filter((e) => !isNaN(e)); + 1 === t.length && t.push(1); + if (0 === t.length) return { num: 1, den: 1 }; + const [i, a] = t; + return { num: i, den: a }; +} +function getRelevant(e) { + return e + ? e + .trim() + .split(/\s+/) + .map((e) => ({ excluded: "-" === e[0], viewname: e.substring(1) })) + : []; +} +class HTMLResult { + static get FAILURE() { + return shadow(this, "FAILURE", new HTMLResult(!1, null, null, null)); + } + static get EMPTY() { + return shadow(this, "EMPTY", new HTMLResult(!0, null, null, null)); + } + constructor(e, t, i, a) { + this.success = e; + this.html = t; + this.bbox = i; + this.breakNode = a; + } + isBreak() { + return !!this.breakNode; + } + static breakNode(e) { + return new HTMLResult(!1, null, null, e); + } + static success(e, t = null) { + return new HTMLResult(!0, e, t, null); + } +} +class FontFinder { + constructor(e) { + this.fonts = new Map(); + this.cache = new Map(); + this.warned = new Set(); + this.defaultFont = null; + this.add(e); + } + add(e, t = null) { + for (const t of e) this.addPdfFont(t); + for (const e of this.fonts.values()) + e.regular || (e.regular = e.italic || e.bold || e.bolditalic); + if (!t || 0 === t.size) return; + const i = this.fonts.get("PdfJS-Fallback-PdfJS-XFA"); + for (const e of t) this.fonts.set(e, i); + } + addPdfFont(e) { + const t = e.cssFontInfo, + i = t.fontFamily; + let a = this.fonts.get(i); + if (!a) { + a = Object.create(null); + this.fonts.set(i, a); + this.defaultFont || (this.defaultFont = a); + } + let s = ""; + const r = parseFloat(t.fontWeight); + 0 !== parseFloat(t.italicAngle) + ? (s = r >= 700 ? "bolditalic" : "italic") + : r >= 700 && (s = "bold"); + if (!s) { + (e.name.includes("Bold") || e.psName?.includes("Bold")) && (s = "bold"); + (e.name.includes("Italic") || + e.name.endsWith("It") || + e.psName?.includes("Italic") || + e.psName?.endsWith("It")) && + (s += "italic"); + } + s || (s = "regular"); + a[s] = e; + } + getDefault() { + return this.defaultFont; + } + find(e, t = !0) { + let i = this.fonts.get(e) || this.cache.get(e); + if (i) return i; + const a = /,|-|_| |bolditalic|bold|italic|regular|it/gi; + let s = e.replaceAll(a, ""); + i = this.fonts.get(s); + if (i) { + this.cache.set(e, i); + return i; + } + s = s.toLowerCase(); + const r = []; + for (const [e, t] of this.fonts.entries()) + e.replaceAll(a, "").toLowerCase().startsWith(s) && r.push(t); + if (0 === r.length) + for (const [, e] of this.fonts.entries()) + e.regular.name?.replaceAll(a, "").toLowerCase().startsWith(s) && + r.push(e); + if (0 === r.length) { + s = s.replaceAll(/psmt|mt/gi, ""); + for (const [e, t] of this.fonts.entries()) + e.replaceAll(a, "").toLowerCase().startsWith(s) && r.push(t); + } + if (0 === r.length) + for (const e of this.fonts.values()) + e.regular.name?.replaceAll(a, "").toLowerCase().startsWith(s) && + r.push(e); + if (r.length >= 1) { + 1 !== r.length && + t && + warn(`XFA - Too many choices to guess the correct font: ${e}`); + this.cache.set(e, r[0]); + return r[0]; + } + if (t && !this.warned.has(e)) { + this.warned.add(e); + warn(`XFA - Cannot find the font: ${e}`); + } + return null; + } +} +function selectFont(e, t) { + return "italic" === e.posture + ? "bold" === e.weight + ? t.bolditalic + : t.italic + : "bold" === e.weight + ? t.bold + : t.regular; +} +class FontInfo { + constructor(e, t, i, a) { + this.lineHeight = i; + this.paraMargin = t || { top: 0, bottom: 0, left: 0, right: 0 }; + if (!e) { + [this.pdfFont, this.xfaFont] = this.defaultFont(a); + return; + } + this.xfaFont = { + typeface: e.typeface, + posture: e.posture, + weight: e.weight, + size: e.size, + letterSpacing: e.letterSpacing, + }; + const s = a.find(e.typeface); + if (s) { + this.pdfFont = selectFont(e, s); + this.pdfFont || ([this.pdfFont, this.xfaFont] = this.defaultFont(a)); + } else [this.pdfFont, this.xfaFont] = this.defaultFont(a); + } + defaultFont(e) { + const t = + e.find("Helvetica", !1) || + e.find("Myriad Pro", !1) || + e.find("Arial", !1) || + e.getDefault(); + if (t?.regular) { + const e = t.regular; + return [ + e, + { + typeface: e.cssFontInfo.fontFamily, + posture: "normal", + weight: "normal", + size: 10, + letterSpacing: 0, + }, + ]; + } + return [ + null, + { + typeface: "Courier", + posture: "normal", + weight: "normal", + size: 10, + letterSpacing: 0, + }, + ]; + } +} +class FontSelector { + constructor(e, t, i, a) { + this.fontFinder = a; + this.stack = [new FontInfo(e, t, i, a)]; + } + pushData(e, t, i) { + const a = this.stack.at(-1); + for (const t of ["typeface", "posture", "weight", "size", "letterSpacing"]) + e[t] || (e[t] = a.xfaFont[t]); + for (const e of ["top", "bottom", "left", "right"]) + isNaN(t[e]) && (t[e] = a.paraMargin[e]); + const s = new FontInfo(e, t, i || a.lineHeight, this.fontFinder); + s.pdfFont || (s.pdfFont = a.pdfFont); + this.stack.push(s); + } + popFont() { + this.stack.pop(); + } + topFont() { + return this.stack.at(-1); + } +} +class TextMeasure { + constructor(e, t, i, a) { + this.glyphs = []; + this.fontSelector = new FontSelector(e, t, i, a); + this.extraHeight = 0; + } + pushData(e, t, i) { + this.fontSelector.pushData(e, t, i); + } + popFont(e) { + return this.fontSelector.popFont(); + } + addPara() { + const e = this.fontSelector.topFont(); + this.extraHeight += e.paraMargin.top + e.paraMargin.bottom; + } + addString(e) { + if (!e) return; + const t = this.fontSelector.topFont(), + i = t.xfaFont.size; + if (t.pdfFont) { + const a = t.xfaFont.letterSpacing, + s = t.pdfFont, + r = s.lineHeight || 1.2, + n = t.lineHeight || Math.max(1.2, r) * i, + g = r - (void 0 === s.lineGap ? 0.2 : s.lineGap), + o = Math.max(1, g) * i, + c = i / 1e3, + C = s.defaultWidth || s.charsToGlyphs(" ")[0].width; + for (const t of e.split(/[\u2029\n]/)) { + const e = s.encodeString(t).join(""), + i = s.charsToGlyphs(e); + for (const e of i) { + const t = e.width || C; + this.glyphs.push([t * c + a, n, o, e.unicode, !1]); + } + this.glyphs.push([0, 0, 0, "\n", !0]); + } + this.glyphs.pop(); + } else { + for (const t of e.split(/[\u2029\n]/)) { + for (const e of t.split("")) this.glyphs.push([i, 1.2 * i, i, e, !1]); + this.glyphs.push([0, 0, 0, "\n", !0]); + } + this.glyphs.pop(); + } + } + compute(e) { + let t = -1, + i = 0, + a = 0, + s = 0, + r = 0, + n = 0, + g = !1, + o = !0; + for (let c = 0, C = this.glyphs.length; c < C; c++) { + const [C, h, l, Q, E] = this.glyphs[c], + u = " " === Q, + d = o ? l : h; + if (E) { + a = Math.max(a, r); + r = 0; + s += n; + n = d; + t = -1; + i = 0; + o = !1; + } else if (u) + if (r + C > e) { + a = Math.max(a, r); + r = 0; + s += n; + n = d; + t = -1; + i = 0; + g = !0; + o = !1; + } else { + n = Math.max(d, n); + i = r; + r += C; + t = c; + } + else if (r + C > e) { + s += n; + n = d; + if (-1 !== t) { + c = t; + a = Math.max(a, i); + r = 0; + t = -1; + i = 0; + } else { + a = Math.max(a, r); + r = C; + } + g = !0; + o = !1; + } else { + r += C; + n = Math.max(d, n); + } + } + a = Math.max(a, r); + s += n + this.extraHeight; + return { width: 1.02 * a, height: s, isBroken: g }; + } +} +const Cn = /^[^.[]+/, + hn = /^[^\]]+/, + Bn = { dot: 0, dotDot: 1, dotHash: 2, dotBracket: 3, dotParen: 4 }, + ln = new Map([ + ["$data", (e, t) => (e.datasets ? e.datasets.data : e)], + ["$record", (e, t) => (e.datasets ? e.datasets.data : e)[Er]()[0]], + ["$template", (e, t) => e.template], + ["$connectionSet", (e, t) => e.connectionSet], + ["$form", (e, t) => e.form], + ["$layout", (e, t) => e.layout], + ["$host", (e, t) => e.host], + ["$dataWindow", (e, t) => e.dataWindow], + ["$event", (e, t) => e.event], + ["!", (e, t) => e.datasets], + ["$xfa", (e, t) => e], + ["xfa", (e, t) => e], + ["$", (e, t) => t], + ]), + Qn = new WeakMap(); +function parseExpression(e, t, i = !0) { + let a = e.match(Cn); + if (!a) return null; + let [s] = a; + const r = [ + { + name: s, + cacheName: "." + s, + index: 0, + js: null, + formCalc: null, + operator: Bn.dot, + }, + ]; + let n = s.length; + for (; n < e.length; ) { + const o = n; + if ("[" === e.charAt(n++)) { + a = e.slice(n).match(hn); + if (!a) { + warn("XFA - Invalid index in SOM expression"); + return null; + } + r.at(-1).index = + "*" === (g = (g = a[0]).trim()) ? 1 / 0 : parseInt(g, 10) || 0; + n += a[0].length + 1; + continue; + } + let c; + switch (e.charAt(n)) { + case ".": + if (!t) return null; + n++; + c = Bn.dotDot; + break; + case "#": + n++; + c = Bn.dotHash; + break; + case "[": + if (i) { + warn( + "XFA - SOM expression contains a FormCalc subexpression which is not supported for now.", + ); + return null; + } + c = Bn.dotBracket; + break; + case "(": + if (i) { + warn( + "XFA - SOM expression contains a JavaScript subexpression which is not supported for now.", + ); + return null; + } + c = Bn.dotParen; + break; + default: + c = Bn.dot; + } + a = e.slice(n).match(Cn); + if (!a) break; + [s] = a; + n += s.length; + r.push({ + name: s, + cacheName: e.slice(o, n), + operator: c, + index: 0, + js: null, + formCalc: null, + }); + } + var g; + return r; +} +function searchNode(e, t, i, a = !0, s = !0) { + const r = parseExpression(i, a); + if (!r) return null; + const n = ln.get(r[0].name); + let g, + o = 0; + if (n) { + g = !0; + e = [n(e, t)]; + o = 1; + } else { + g = null === t; + e = [t || e]; + } + for (let i = r.length; o < i; o++) { + const { name: i, cacheName: a, operator: n, index: c } = r[o], + C = []; + for (const t of e) { + if (!t.isXFAObject) continue; + let e, r; + if (s) { + r = Qn.get(t); + if (!r) { + r = new Map(); + Qn.set(t, r); + } + e = r.get(a); + } + if (!e) { + switch (n) { + case Bn.dot: + e = t[cr](i, !1); + break; + case Bn.dotDot: + e = t[cr](i, !0); + break; + case Bn.dotHash: + e = t[Ir](i); + e = e.isXFAObjectArray ? e.children : [e]; + } + s && r.set(a, e); + } + e.length > 0 && C.push(e); + } + if (0 !== C.length || g || 0 !== o) + e = isFinite(c) + ? C.filter((e) => c < e.length).map((e) => e[c]) + : C.flat(); + else { + const i = t[pr](); + if (!(t = i)) return null; + o = -1; + e = [t]; + } + } + return 0 === e.length ? null : e; +} +function createDataNode(e, t, i) { + const a = parseExpression(i); + if (!a) return null; + if (a.some((e) => e.operator === Bn.dotDot)) return null; + const s = ln.get(a[0].name); + let r = 0; + if (s) { + e = s(e, t); + r = 1; + } else e = t || e; + for (let t = a.length; r < t; r++) { + const { name: t, operator: i, index: s } = a[r]; + if (!isFinite(s)) { + a[r].index = 0; + return e.createNodes(a.slice(r)); + } + let n; + switch (i) { + case Bn.dot: + n = e[cr](t, !1); + break; + case Bn.dotDot: + n = e[cr](t, !0); + break; + case Bn.dotHash: + n = e[Ir](t); + n = n.isXFAObjectArray ? n.children : [n]; + } + if (0 === n.length) return e.createNodes(a.slice(r)); + if (!(s < n.length)) { + a[r].index = s - n.length; + return e.createNodes(a.slice(r)); + } + { + const t = n[s]; + if (!t.isXFAObject) { + warn("XFA - Cannot create a node."); + return null; + } + e = t; + } + } + return null; +} +const En = Symbol(), + un = Symbol(), + dn = Symbol(), + fn = Symbol("_children"), + pn = Symbol(), + mn = Symbol(), + yn = Symbol(), + wn = Symbol(), + Dn = Symbol(), + bn = Symbol(), + Fn = Symbol(), + Sn = Symbol(), + kn = Symbol(), + Rn = Symbol("parent"), + Nn = Symbol(), + Gn = Symbol(), + xn = Symbol(); +let Un = 0; +const Mn = on.datasets.id; +class XFAObject { + constructor(e, t, i = !1) { + this[Jr] = e; + this[Yr] = t; + this[Fn] = i; + this[Rn] = null; + this[fn] = []; + this[nn] = `${t}${Un++}`; + this[yr] = null; + } + get isXFAObject() { + return !0; + } + get isXFAObjectArray() { + return !1; + } + createNodes(e) { + let t = this, + i = null; + for (const { name: a, index: s } of e) { + for (let e = 0, r = isFinite(s) ? s : 0; e <= r; e++) { + const e = t[Jr] === Mn ? -1 : t[Jr]; + i = new XmlObject(e, a); + t[Xs](i); + } + t = i; + } + return i; + } + [Kr](e) { + if (!this[Fn] || !this[Tr](e)) return !1; + const t = e[Yr], + i = this[t]; + if (!(i instanceof XFAObjectArray)) { + null !== i && this[jr](i); + this[t] = e; + this[Xs](e); + return !0; + } + if (i.push(e)) { + this[Xs](e); + return !0; + } + let a = ""; + this.id + ? (a = ` (id: ${this.id})`) + : this.name && (a = ` (name: ${this.name} ${this.h.value})`); + warn(`XFA - node "${this[Yr]}"${a} has already enough "${t}"!`); + return !1; + } + [Tr](e) { + return this.hasOwnProperty(e[Yr]) && e[Jr] === this[Jr]; + } + [Gr]() { + return !1; + } + [Ws]() { + return !1; + } + [Sr]() { + return !1; + } + [kr]() { + return !1; + } + [Pr]() { + this.para && this[mr]()[ar].paraStack.pop(); + } + [Wr]() { + this[mr]()[ar].paraStack.push(this.para); + } + [zr](e) { + this.id && this[Jr] === on.template.id && e.set(this.id, this); + } + [mr]() { + return this[yr].template; + } + [xr]() { + return !1; + } + [Ur]() { + return !1; + } + [Xs](e) { + e[Rn] = this; + this[fn].push(e); + !e[yr] && this[yr] && (e[yr] = this[yr]); + } + [jr](e) { + const t = this[fn].indexOf(e); + this[fn].splice(t, 1); + } + [wr]() { + return this.hasOwnProperty("value"); + } + [$r](e) {} + [qr](e) {} + [sr]() {} + [Vs](e) { + delete this[Fn]; + if (this[_s]) { + e.clean(this[_s]); + delete this[_s]; + } + } + [br](e) { + return this[fn].indexOf(e); + } + [Fr](e, t) { + t[Rn] = this; + this[fn].splice(e, 0, t); + !t[yr] && this[yr] && (t[yr] = this[yr]); + } + [Mr]() { + return !this.name; + } + [Hr]() { + return ""; + } + [en]() { + return 0 === this[fn].length + ? this[er] + : this[fn].map((e) => e[en]()).join(""); + } + get [dn]() { + const e = Object.getPrototypeOf(this); + if (!e._attributes) { + const t = (e._attributes = new Set()); + for (const e of Object.getOwnPropertyNames(this)) { + if ( + null === this[e] || + this[e] instanceof XFAObject || + this[e] instanceof XFAObjectArray + ) + break; + t.add(e); + } + } + return shadow(this, dn, e._attributes); + } + [Nr](e) { + let t = this; + for (; t; ) { + if (t === e) return !0; + t = t[pr](); + } + return !1; + } + [pr]() { + return this[Rn]; + } + [fr]() { + return this[pr](); + } + [Er](e = null) { + return e ? this[e] : this[fn]; + } + [ir]() { + const e = Object.create(null); + this[er] && (e.$content = this[er]); + for (const t of Object.getOwnPropertyNames(this)) { + const i = this[t]; + null !== i && + (i instanceof XFAObject + ? (e[t] = i[ir]()) + : i instanceof XFAObjectArray + ? i.isEmpty() || (e[t] = i.dump()) + : (e[t] = i)); + } + return e; + } + [rn]() { + return null; + } + [an]() { + return HTMLResult.EMPTY; + } + *[ur]() { + for (const e of this[Er]()) yield e; + } + *[wn](e, t) { + for (const i of this[ur]()) + if (!e || t === e.has(i[Yr])) { + const e = this[or](), + t = i[an](e); + t.success || (this[ar].failingNode = i); + yield t; + } + } + [rr]() { + return null; + } + [js](e, t) { + this[ar].children.push(e); + } + [or]() {} + [Zs]({ filter: e = null, include: t = !0 }) { + if (this[ar].generator) { + const e = this[or](), + t = this[ar].failingNode[an](e); + if (!t.success) return t; + t.html && this[js](t.html, t.bbox); + delete this[ar].failingNode; + } else this[ar].generator = this[wn](e, t); + for (;;) { + const e = this[ar].generator.next(); + if (e.done) break; + const t = e.value; + if (!t.success) return t; + t.html && this[js](t.html, t.bbox); + } + this[ar].generator = null; + return HTMLResult.EMPTY; + } + [_r](e) { + this[Gn] = new Set(Object.keys(e)); + } + [bn](e) { + const t = this[dn], + i = this[Gn]; + return [...e].filter((e) => t.has(e) && !i.has(e)); + } + [Zr](e, t = new Set()) { + for (const i of this[fn]) i[Nn](e, t); + } + [Nn](e, t) { + const i = this[Dn](e, t); + i ? this[En](i, e, t) : this[Zr](e, t); + } + [Dn](e, t) { + const { use: i, usehref: a } = this; + if (!i && !a) return null; + let s = null, + r = null, + n = null, + g = i; + if (a) { + g = a; + a.startsWith("#som(") && a.endsWith(")") + ? (r = a.slice(5, -1)) + : a.startsWith(".#som(") && a.endsWith(")") + ? (r = a.slice(6, -1)) + : a.startsWith("#") + ? (n = a.slice(1)) + : a.startsWith(".#") && (n = a.slice(2)); + } else i.startsWith("#") ? (n = i.slice(1)) : (r = i); + this.use = this.usehref = ""; + if (n) s = e.get(n); + else { + s = searchNode(e.get(Xr), this, r, !0, !1); + s && (s = s[0]); + } + if (!s) { + warn(`XFA - Invalid prototype reference: ${g}.`); + return null; + } + if (s[Yr] !== this[Yr]) { + warn(`XFA - Incompatible prototype: ${s[Yr]} !== ${this[Yr]}.`); + return null; + } + if (t.has(s)) { + warn("XFA - Cycle detected in prototypes use."); + return null; + } + t.add(s); + const o = s[Dn](e, t); + o && s[En](o, e, t); + s[Zr](e, t); + t.delete(s); + return s; + } + [En](e, t, i) { + if (i.has(e)) { + warn("XFA - Cycle detected in prototypes use."); + return; + } + !this[er] && e[er] && (this[er] = e[er]); + new Set(i).add(e); + for (const t of this[bn](e[Gn])) { + this[t] = e[t]; + this[Gn] && this[Gn].add(t); + } + for (const a of Object.getOwnPropertyNames(this)) { + if (this[dn].has(a)) continue; + const s = this[a], + r = e[a]; + if (s instanceof XFAObjectArray) { + for (const e of s[fn]) e[Nn](t, i); + for (let a = s[fn].length, n = r[fn].length; a < n; a++) { + const r = e[fn][a][$s](); + if (!s.push(r)) break; + r[Rn] = this; + this[fn].push(r); + r[Nn](t, i); + } + } else if (null === s) { + if (null !== r) { + const e = r[$s](); + e[Rn] = this; + this[a] = e; + this[fn].push(e); + e[Nn](t, i); + } + } else { + s[Zr](t, i); + r && s[En](r, t, i); + } + } + } + static [pn](e) { + return Array.isArray(e) + ? e.map((e) => XFAObject[pn](e)) + : "object" == typeof e && null !== e + ? Object.assign({}, e) + : e; + } + [$s]() { + const e = Object.create(Object.getPrototypeOf(this)); + for (const t of Object.getOwnPropertySymbols(this)) + try { + e[t] = this[t]; + } catch { + shadow(e, t, this[t]); + } + e[nn] = `${e[Yr]}${Un++}`; + e[fn] = []; + for (const t of Object.getOwnPropertyNames(this)) { + if (this[dn].has(t)) { + e[t] = XFAObject[pn](this[t]); + continue; + } + const i = this[t]; + e[t] = i instanceof XFAObjectArray ? new XFAObjectArray(i[Sn]) : null; + } + for (const t of this[fn]) { + const i = t[Yr], + a = t[$s](); + e[fn].push(a); + a[Rn] = e; + null === e[i] ? (e[i] = a) : e[i][fn].push(a); + } + return e; + } + [Er](e = null) { + return e ? this[fn].filter((t) => t[Yr] === e) : this[fn]; + } + [Ir](e) { + return this[e]; + } + [cr](e, t, i = !0) { + return Array.from(this[Cr](e, t, i)); + } + *[Cr](e, t, i = !0) { + if ("parent" !== e) { + for (const i of this[fn]) { + i[Yr] === e && (yield i); + i.name === e && (yield i); + (t || i[Mr]()) && (yield* i[Cr](e, t, !1)); + } + i && this[dn].has(e) && (yield new XFAAttribute(this, e, this[e])); + } else yield this[Rn]; + } +} +class XFAObjectArray { + constructor(e = 1 / 0) { + this[Sn] = e; + this[fn] = []; + } + get isXFAObject() { + return !1; + } + get isXFAObjectArray() { + return !0; + } + push(e) { + if (this[fn].length <= this[Sn]) { + this[fn].push(e); + return !0; + } + warn(`XFA - node "${e[Yr]}" accepts no more than ${this[Sn]} children`); + return !1; + } + isEmpty() { + return 0 === this[fn].length; + } + dump() { + return 1 === this[fn].length + ? this[fn][0][ir]() + : this[fn].map((e) => e[ir]()); + } + [$s]() { + const e = new XFAObjectArray(this[Sn]); + e[fn] = this[fn].map((e) => e[$s]()); + return e; + } + get children() { + return this[fn]; + } + clear() { + this[fn].length = 0; + } +} +class XFAAttribute { + constructor(e, t, i) { + this[Rn] = e; + this[Yr] = t; + this[er] = i; + this[Ar] = !1; + this[nn] = "attribute" + Un++; + } + [pr]() { + return this[Rn]; + } + [Rr]() { + return !0; + } + [hr]() { + return this[er].trim(); + } + [$r](e) { + e = e.value || ""; + this[er] = e.toString(); + } + [en]() { + return this[er]; + } + [Nr](e) { + return this[Rn] === e || this[Rn][Nr](e); + } +} +class XmlObject extends XFAObject { + constructor(e, t, i = {}) { + super(e, t); + this[er] = ""; + this[mn] = null; + if ("#text" !== t) { + const e = new Map(); + this[un] = e; + for (const [t, a] of Object.entries(i)) + e.set(t, new XFAAttribute(this, t, a)); + if (i.hasOwnProperty(vr)) { + const e = i[vr].xfa.dataNode; + void 0 !== e && + ("dataGroup" === e + ? (this[mn] = !1) + : "dataValue" === e && (this[mn] = !0)); + } + } + this[Ar] = !1; + } + [sn](e) { + const t = this[Yr]; + if ("#text" === t) { + e.push(encodeToXmlString(this[er])); + return; + } + const i = utf8StringToString(t), + a = this[Jr] === Mn ? "xfa:" : ""; + e.push(`<${a}${i}`); + for (const [t, i] of this[un].entries()) { + const a = utf8StringToString(t); + e.push(` ${a}="${encodeToXmlString(i[er])}"`); + } + null !== this[mn] && + (this[mn] + ? e.push(' xfa:dataNode="dataValue"') + : e.push(' xfa:dataNode="dataGroup"')); + if (this[er] || 0 !== this[fn].length) { + e.push(">"); + if (this[er]) + "string" == typeof this[er] + ? e.push(encodeToXmlString(this[er])) + : this[er][sn](e); + else for (const t of this[fn]) t[sn](e); + e.push(``); + } else e.push("/>"); + } + [Kr](e) { + if (this[er]) { + const e = new XmlObject(this[Jr], "#text"); + this[Xs](e); + e[er] = this[er]; + this[er] = ""; + } + this[Xs](e); + return !0; + } + [qr](e) { + this[er] += e; + } + [sr]() { + if (this[er] && this[fn].length > 0) { + const e = new XmlObject(this[Jr], "#text"); + this[Xs](e); + e[er] = this[er]; + delete this[er]; + } + } + [an]() { + return "#text" === this[Yr] + ? HTMLResult.success({ name: "#text", value: this[er] }) + : HTMLResult.EMPTY; + } + [Er](e = null) { + return e ? this[fn].filter((t) => t[Yr] === e) : this[fn]; + } + [gr]() { + return this[un]; + } + [Ir](e) { + const t = this[un].get(e); + return void 0 !== t ? t : this[Er](e); + } + *[Cr](e, t) { + const i = this[un].get(e); + i && (yield i); + for (const i of this[fn]) { + i[Yr] === e && (yield i); + t && (yield* i[Cr](e, t)); + } + } + *[nr](e, t) { + const i = this[un].get(e); + !i || (t && i[Ar]) || (yield i); + for (const i of this[fn]) yield* i[nr](e, t); + } + *[Qr](e, t, i) { + for (const a of this[fn]) { + a[Yr] !== e || (i && a[Ar]) || (yield a); + t && (yield* a[Qr](e, t, i)); + } + } + [Rr]() { + return null === this[mn] + ? 0 === this[fn].length || this[fn][0][Jr] === on.xhtml.id + : this[mn]; + } + [hr]() { + return null === this[mn] + ? 0 === this[fn].length + ? this[er].trim() + : this[fn][0][Jr] === on.xhtml.id + ? this[fn][0][en]().trim() + : null + : this[er].trim(); + } + [$r](e) { + e = e.value || ""; + this[er] = e.toString(); + } + [ir](e = !1) { + const t = Object.create(null); + e && (t.$ns = this[Jr]); + this[er] && (t.$content = this[er]); + t.$name = this[Yr]; + t.children = []; + for (const i of this[fn]) t.children.push(i[ir](e)); + t.attributes = Object.create(null); + for (const [e, i] of this[un]) t.attributes[e] = i[er]; + return t; + } +} +class ContentObject extends XFAObject { + constructor(e, t) { + super(e, t); + this[er] = ""; + } + [qr](e) { + this[er] += e; + } + [sr]() {} +} +class OptionObject extends ContentObject { + constructor(e, t, i) { + super(e, t); + this[kn] = i; + } + [sr]() { + this[er] = getKeyword({ + data: this[er], + defaultValue: this[kn][0], + validate: (e) => this[kn].includes(e), + }); + } + [Vs](e) { + super[Vs](e); + delete this[kn]; + } +} +class StringObject extends ContentObject { + [sr]() { + this[er] = this[er].trim(); + } +} +class IntegerObject extends ContentObject { + constructor(e, t, i, a) { + super(e, t); + this[yn] = i; + this[xn] = a; + } + [sr]() { + this[er] = getInteger({ + data: this[er], + defaultValue: this[yn], + validate: this[xn], + }); + } + [Vs](e) { + super[Vs](e); + delete this[yn]; + delete this[xn]; + } +} +class Option01 extends IntegerObject { + constructor(e, t) { + super(e, t, 0, (e) => 1 === e); + } +} +class Option10 extends IntegerObject { + constructor(e, t) { + super(e, t, 1, (e) => 0 === e); + } +} +function measureToString(e) { + return "string" == typeof e + ? "0px" + : Number.isInteger(e) + ? `${e}px` + : `${e.toFixed(2)}px`; +} +const Ln = { + anchorType(e, t) { + const i = e[fr](); + if (i && (!i.layout || "position" === i.layout)) { + "transform" in t || (t.transform = ""); + switch (e.anchorType) { + case "bottomCenter": + t.transform += "translate(-50%, -100%)"; + break; + case "bottomLeft": + t.transform += "translate(0,-100%)"; + break; + case "bottomRight": + t.transform += "translate(-100%,-100%)"; + break; + case "middleCenter": + t.transform += "translate(-50%,-50%)"; + break; + case "middleLeft": + t.transform += "translate(0,-50%)"; + break; + case "middleRight": + t.transform += "translate(-100%,-50%)"; + break; + case "topCenter": + t.transform += "translate(-50%,0)"; + break; + case "topRight": + t.transform += "translate(-100%,0)"; + } + } + }, + dimensions(e, t) { + const i = e[fr](); + let a = e.w; + const s = e.h; + if (i.layout?.includes("row")) { + const t = i[ar], + s = e.colSpan; + let r; + if (-1 === s) { + r = t.columnWidths.slice(t.currentColumn).reduce((e, t) => e + t, 0); + t.currentColumn = 0; + } else { + r = t.columnWidths + .slice(t.currentColumn, t.currentColumn + s) + .reduce((e, t) => e + t, 0); + t.currentColumn = (t.currentColumn + e.colSpan) % t.columnWidths.length; + } + isNaN(r) || (a = e.w = r); + } + t.width = "" !== a ? measureToString(a) : "auto"; + t.height = "" !== s ? measureToString(s) : "auto"; + }, + position(e, t) { + const i = e[fr](); + if (!i?.layout || "position" === i.layout) { + t.position = "absolute"; + t.left = measureToString(e.x); + t.top = measureToString(e.y); + } + }, + rotate(e, t) { + if (e.rotate) { + "transform" in t || (t.transform = ""); + t.transform += `rotate(-${e.rotate}deg)`; + t.transformOrigin = "top left"; + } + }, + presence(e, t) { + switch (e.presence) { + case "invisible": + t.visibility = "hidden"; + break; + case "hidden": + case "inactive": + t.display = "none"; + } + }, + hAlign(e, t) { + if ("para" === e[Yr]) + switch (e.hAlign) { + case "justifyAll": + t.textAlign = "justify-all"; + break; + case "radix": + t.textAlign = "left"; + break; + default: + t.textAlign = e.hAlign; + } + else + switch (e.hAlign) { + case "left": + t.alignSelf = "start"; + break; + case "center": + t.alignSelf = "center"; + break; + case "right": + t.alignSelf = "end"; + } + }, + margin(e, t) { + e.margin && (t.margin = e.margin[rn]().margin); + }, +}; +function setMinMaxDimensions(e, t) { + if ("position" === e[fr]().layout) { + e.minW > 0 && (t.minWidth = measureToString(e.minW)); + e.maxW > 0 && (t.maxWidth = measureToString(e.maxW)); + e.minH > 0 && (t.minHeight = measureToString(e.minH)); + e.maxH > 0 && (t.maxHeight = measureToString(e.maxH)); + } +} +function layoutText(e, t, i, a, s, r) { + const n = new TextMeasure(t, i, a, s); + "string" == typeof e ? n.addString(e) : e[Or](n); + return n.compute(r); +} +function layoutNode(e, t) { + let i = null, + a = null, + s = !1; + if ((!e.w || !e.h) && e.value) { + let r = 0, + n = 0; + if (e.margin) { + r = e.margin.leftInset + e.margin.rightInset; + n = e.margin.topInset + e.margin.bottomInset; + } + let g = null, + o = null; + if (e.para) { + o = Object.create(null); + g = "" === e.para.lineHeight ? null : e.para.lineHeight; + o.top = "" === e.para.spaceAbove ? 0 : e.para.spaceAbove; + o.bottom = "" === e.para.spaceBelow ? 0 : e.para.spaceBelow; + o.left = "" === e.para.marginLeft ? 0 : e.para.marginLeft; + o.right = "" === e.para.marginRight ? 0 : e.para.marginRight; + } + let c = e.font; + if (!c) { + const t = e[mr](); + let i = e[pr](); + for (; i && i !== t; ) { + if (i.font) { + c = i.font; + break; + } + i = i[pr](); + } + } + const C = (e.w || t.width) - r, + h = e[yr].fontFinder; + if ( + e.value.exData && + e.value.exData[er] && + "text/html" === e.value.exData.contentType + ) { + const t = layoutText(e.value.exData[er], c, o, g, h, C); + a = t.width; + i = t.height; + s = t.isBroken; + } else { + const t = e.value[en](); + if (t) { + const e = layoutText(t, c, o, g, h, C); + a = e.width; + i = e.height; + s = e.isBroken; + } + } + null === a || e.w || (a += r); + null === i || e.h || (i += n); + } + return { w: a, h: i, isBroken: s }; +} +function computeBbox(e, t, i) { + let a; + if ("" !== e.w && "" !== e.h) a = [e.x, e.y, e.w, e.h]; + else { + if (!i) return null; + let s = e.w; + if ("" === s) { + if (0 === e.maxW) { + const t = e[fr](); + s = "position" === t.layout && "" !== t.w ? 0 : e.minW; + } else s = Math.min(e.maxW, i.width); + t.attributes.style.width = measureToString(s); + } + let r = e.h; + if ("" === r) { + if (0 === e.maxH) { + const t = e[fr](); + r = "position" === t.layout && "" !== t.h ? 0 : e.minH; + } else r = Math.min(e.maxH, i.height); + t.attributes.style.height = measureToString(r); + } + a = [e.x, e.y, s, r]; + } + return a; +} +function fixDimensions(e) { + const t = e[fr](); + if (t.layout?.includes("row")) { + const i = t[ar], + a = e.colSpan; + let s; + s = + -1 === a + ? i.columnWidths.slice(i.currentColumn).reduce((e, t) => e + t, 0) + : i.columnWidths + .slice(i.currentColumn, i.currentColumn + a) + .reduce((e, t) => e + t, 0); + isNaN(s) || (e.w = s); + } + t.layout && "position" !== t.layout && (e.x = e.y = 0); + "table" === e.layout && + "" === e.w && + Array.isArray(e.columnWidths) && + (e.w = e.columnWidths.reduce((e, t) => e + t, 0)); +} +function layoutClass(e) { + switch (e.layout) { + case "position": + default: + return "xfaPosition"; + case "lr-tb": + return "xfaLrTb"; + case "rl-row": + return "xfaRlRow"; + case "rl-tb": + return "xfaRlTb"; + case "row": + return "xfaRow"; + case "table": + return "xfaTable"; + case "tb": + return "xfaTb"; + } +} +function toStyle(e, ...t) { + const i = Object.create(null); + for (const a of t) { + const t = e[a]; + if (null !== t) + if (Ln.hasOwnProperty(a)) Ln[a](e, i); + else if (t instanceof XFAObject) { + const e = t[rn](); + e + ? Object.assign(i, e) + : warn(`(DEBUG) - XFA - style for ${a} not implemented yet`); + } + } + return i; +} +function createWrapper(e, t) { + const { attributes: i } = t, + { style: a } = i, + s = { + name: "div", + attributes: { class: ["xfaWrapper"], style: Object.create(null) }, + children: [], + }; + i.class.push("xfaWrapped"); + if (e.border) { + const { widths: i, insets: r } = e.border[ar]; + let n, + g, + o = r[0], + c = r[3]; + const C = r[0] + r[2], + h = r[1] + r[3]; + switch (e.border.hand) { + case "even": + o -= i[0] / 2; + c -= i[3] / 2; + n = `calc(100% + ${(i[1] + i[3]) / 2 - h}px)`; + g = `calc(100% + ${(i[0] + i[2]) / 2 - C}px)`; + break; + case "left": + o -= i[0]; + c -= i[3]; + n = `calc(100% + ${i[1] + i[3] - h}px)`; + g = `calc(100% + ${i[0] + i[2] - C}px)`; + break; + case "right": + n = h ? `calc(100% - ${h}px)` : "100%"; + g = C ? `calc(100% - ${C}px)` : "100%"; + } + const l = ["xfaBorder"]; + isPrintOnly(e.border) && l.push("xfaPrintOnly"); + const Q = { + name: "div", + attributes: { + class: l, + style: { top: `${o}px`, left: `${c}px`, width: n, height: g }, + }, + children: [], + }; + for (const e of [ + "border", + "borderWidth", + "borderColor", + "borderRadius", + "borderStyle", + ]) + if (void 0 !== a[e]) { + Q.attributes.style[e] = a[e]; + delete a[e]; + } + s.children.push(Q, t); + } else s.children.push(t); + for (const e of [ + "background", + "backgroundClip", + "top", + "left", + "width", + "height", + "minWidth", + "minHeight", + "maxWidth", + "maxHeight", + "transform", + "transformOrigin", + "visibility", + ]) + if (void 0 !== a[e]) { + s.attributes.style[e] = a[e]; + delete a[e]; + } + s.attributes.style.position = + "absolute" === a.position ? "absolute" : "relative"; + delete a.position; + if (a.alignSelf) { + s.attributes.style.alignSelf = a.alignSelf; + delete a.alignSelf; + } + return s; +} +function fixTextIndent(e) { + const t = getMeasurement(e.textIndent, "0px"); + if (t >= 0) return; + const i = + "padding" + + ("left" === ("right" === e.textAlign ? "right" : "left") + ? "Left" + : "Right"), + a = getMeasurement(e[i], "0px"); + e[i] = a - t + "px"; +} +function setAccess(e, t) { + switch (e.access) { + case "nonInteractive": + t.push("xfaNonInteractive"); + break; + case "readOnly": + t.push("xfaReadOnly"); + break; + case "protected": + t.push("xfaDisabled"); + } +} +function isPrintOnly(e) { + return ( + e.relevant.length > 0 && + !e.relevant[0].excluded && + "print" === e.relevant[0].viewname + ); +} +function getCurrentPara(e) { + const t = e[mr]()[ar].paraStack; + return t.length ? t.at(-1) : null; +} +function setPara(e, t, i) { + if (i.attributes.class?.includes("xfaRich")) { + if (t) { + "" === e.h && (t.height = "auto"); + "" === e.w && (t.width = "auto"); + } + const a = getCurrentPara(e); + if (a) { + const e = i.attributes.style; + e.display = "flex"; + e.flexDirection = "column"; + switch (a.vAlign) { + case "top": + e.justifyContent = "start"; + break; + case "bottom": + e.justifyContent = "end"; + break; + case "middle": + e.justifyContent = "center"; + } + const t = a[rn](); + for (const [i, a] of Object.entries(t)) i in e || (e[i] = a); + } + } +} +function setFontFamily(e, t, i, a) { + if (!i) { + delete a.fontFamily; + return; + } + const s = stripQuotes(e.typeface); + a.fontFamily = `"${s}"`; + const r = i.find(s); + if (r) { + const { fontFamily: i } = r.regular.cssFontInfo; + i !== s && (a.fontFamily = `"${i}"`); + const n = getCurrentPara(t); + if (n && "" !== n.lineHeight) return; + if (a.lineHeight) return; + const g = selectFont(e, r); + g && (a.lineHeight = Math.max(1.2, g.lineHeight)); + } +} +function fixURL(e) { + const t = createValidAbsoluteUrl(e, null, { + addDefaultProtocol: !0, + tryConvertEncoding: !0, + }); + return t ? t.href : null; +} +function createLine(e, t) { + return { + name: "div", + attributes: { class: ["lr-tb" === e.layout ? "xfaLr" : "xfaRl"] }, + children: t, + }; +} +function flushHTML(e) { + if (!e[ar]) return null; + const t = { + name: "div", + attributes: e[ar].attributes, + children: e[ar].children, + }; + if (e[ar].failingNode) { + const i = e[ar].failingNode[rr](); + i && + (e.layout.endsWith("-tb") + ? t.children.push(createLine(e, [i])) + : t.children.push(i)); + } + return 0 === t.children.length ? null : t; +} +function addHTML(e, t, i) { + const a = e[ar], + s = a.availableSpace, + [r, n, g, o] = i; + switch (e.layout) { + case "position": + a.width = Math.max(a.width, r + g); + a.height = Math.max(a.height, n + o); + a.children.push(t); + break; + case "lr-tb": + case "rl-tb": + if (!a.line || 1 === a.attempt) { + a.line = createLine(e, []); + a.children.push(a.line); + a.numberInLine = 0; + } + a.numberInLine += 1; + a.line.children.push(t); + if (0 === a.attempt) { + a.currentWidth += g; + a.height = Math.max(a.height, a.prevHeight + o); + } else { + a.currentWidth = g; + a.prevHeight = a.height; + a.height += o; + a.attempt = 0; + } + a.width = Math.max(a.width, a.currentWidth); + break; + case "rl-row": + case "row": { + a.children.push(t); + a.width += g; + a.height = Math.max(a.height, o); + const e = measureToString(a.height); + for (const t of a.children) t.attributes.style.height = e; + break; + } + case "table": + case "tb": + a.width = Math.min(s.width, Math.max(a.width, g)); + a.height += o; + a.children.push(t); + } +} +function getAvailableSpace(e) { + const t = e[ar].availableSpace, + i = e.margin ? e.margin.topInset + e.margin.bottomInset : 0, + a = e.margin ? e.margin.leftInset + e.margin.rightInset : 0; + switch (e.layout) { + case "lr-tb": + case "rl-tb": + return 0 === e[ar].attempt + ? { + width: t.width - a - e[ar].currentWidth, + height: t.height - i - e[ar].prevHeight, + } + : { width: t.width - a, height: t.height - i - e[ar].height }; + case "rl-row": + case "row": + return { + width: e[ar].columnWidths + .slice(e[ar].currentColumn) + .reduce((e, t) => e + t), + height: t.height - a, + }; + case "table": + case "tb": + return { width: t.width - a, height: t.height - i - e[ar].height }; + default: + return t; + } +} +function checkDimensions(e, t) { + if (null === e[mr]()[ar].firstUnsplittable) return !0; + if (0 === e.w || 0 === e.h) return !0; + const i = e[fr](), + a = i[ar]?.attempt || 0, + [, s, r, n] = (function getTransformedBBox(e) { + let t, + i, + a = "" === e.w ? NaN : e.w, + s = "" === e.h ? NaN : e.h, + [r, n] = [0, 0]; + switch (e.anchorType || "") { + case "bottomCenter": + [r, n] = [a / 2, s]; + break; + case "bottomLeft": + [r, n] = [0, s]; + break; + case "bottomRight": + [r, n] = [a, s]; + break; + case "middleCenter": + [r, n] = [a / 2, s / 2]; + break; + case "middleLeft": + [r, n] = [0, s / 2]; + break; + case "middleRight": + [r, n] = [a, s / 2]; + break; + case "topCenter": + [r, n] = [a / 2, 0]; + break; + case "topRight": + [r, n] = [a, 0]; + } + switch (e.rotate || 0) { + case 0: + [t, i] = [-r, -n]; + break; + case 90: + [t, i] = [-n, r]; + [a, s] = [s, -a]; + break; + case 180: + [t, i] = [r, n]; + [a, s] = [-a, -s]; + break; + case 270: + [t, i] = [n, -r]; + [a, s] = [-s, a]; + } + return [ + e.x + t + Math.min(0, a), + e.y + i + Math.min(0, s), + Math.abs(a), + Math.abs(s), + ]; + })(e); + switch (i.layout) { + case "lr-tb": + case "rl-tb": + return 0 === a + ? e[mr]()[ar].noLayoutFailure + ? "" !== e.w + ? Math.round(r - t.width) <= 2 + : t.width > 2 + : !("" !== e.h && Math.round(n - t.height) > 2) && + ("" !== e.w + ? Math.round(r - t.width) <= 2 || + (0 === i[ar].numberInLine && t.height > 2) + : t.width > 2) + : !!e[mr]()[ar].noLayoutFailure || + (!("" !== e.h && Math.round(n - t.height) > 2) && + ("" === e.w || Math.round(r - t.width) <= 2 || !i[Ur]()) && + t.height > 2); + case "table": + case "tb": + return ( + !!e[mr]()[ar].noLayoutFailure || + ("" === e.h || e[xr]() + ? ("" === e.w || Math.round(r - t.width) <= 2 || !i[Ur]()) && + t.height > 2 + : Math.round(n - t.height) <= 2) + ); + case "position": + if (e[mr]()[ar].noLayoutFailure) return !0; + if ("" === e.h || Math.round(n + s - t.height) <= 2) return !0; + return n + s > e[mr]()[ar].currentContentArea.h; + case "rl-row": + case "row": + return ( + !!e[mr]()[ar].noLayoutFailure || + "" === e.h || + Math.round(n - t.height) <= 2 + ); + default: + return !0; + } +} +const Hn = on.template.id, + Jn = "http://www.w3.org/2000/svg", + Yn = /^H(\d+)$/, + vn = new Set([ + "image/gif", + "image/jpeg", + "image/jpg", + "image/pjpeg", + "image/png", + "image/apng", + "image/x-png", + "image/bmp", + "image/x-ms-bmp", + "image/tiff", + "image/tif", + "application/octet-stream", + ]), + Kn = [ + [[66, 77], "image/bmp"], + [[255, 216, 255], "image/jpeg"], + [[73, 73, 42, 0], "image/tiff"], + [[77, 77, 0, 42], "image/tiff"], + [[71, 73, 70, 56, 57, 97], "image/gif"], + [[137, 80, 78, 71, 13, 10, 26, 10], "image/png"], + ]; +function getBorderDims(e) { + if (!e || !e.border) return { w: 0, h: 0 }; + const t = e.border[lr](); + return t + ? { + w: t.widths[0] + t.widths[2] + t.insets[0] + t.insets[2], + h: t.widths[1] + t.widths[3] + t.insets[1] + t.insets[3], + } + : { w: 0, h: 0 }; +} +function hasMargin(e) { + return ( + e.margin && + (e.margin.topInset || + e.margin.rightInset || + e.margin.bottomInset || + e.margin.leftInset) + ); +} +function _setValue(e, t) { + if (!e.value) { + const t = new Value({}); + e[Xs](t); + e.value = t; + } + e.value[$r](t); +} +function* getContainedChildren(e) { + for (const t of e[Er]()) t instanceof SubformSet ? yield* t[ur]() : yield t; +} +function isRequired(e) { + return "error" === e.validate?.nullTest; +} +function setTabIndex(e) { + for (; e; ) { + if (!e.traversal) { + e[An] = e[pr]()[An]; + return; + } + if (e[An]) return; + let t = null; + for (const i of e.traversal[Er]()) + if ("next" === i.operation) { + t = i; + break; + } + if (!t || !t.ref) { + e[An] = e[pr]()[An]; + return; + } + const i = e[mr](); + e[An] = ++i[An]; + const a = i[Vr](t.ref, e); + if (!a) return; + e = a[0]; + } +} +function applyAssist(e, t) { + const i = e.assist; + if (i) { + const e = i[an](); + e && (t.title = e); + const a = i.role.match(Yn); + if (a) { + const e = "heading", + i = a[1]; + t.role = e; + t["aria-level"] = i; + } + } + if ("table" === e.layout) t.role = "table"; + else if ("row" === e.layout) t.role = "row"; + else { + const i = e[pr](); + "row" === i.layout && + (t.role = "TH" === i.assist?.role ? "columnheader" : "cell"); + } +} +function ariaLabel(e) { + if (!e.assist) return null; + const t = e.assist; + return t.speak && "" !== t.speak[er] + ? t.speak[er] + : t.toolTip + ? t.toolTip[er] + : null; +} +function valueToHtml(e) { + return HTMLResult.success({ + name: "div", + attributes: { class: ["xfaRich"], style: Object.create(null) }, + children: [ + { name: "span", attributes: { style: Object.create(null) }, value: e }, + ], + }); +} +function setFirstUnsplittable(e) { + const t = e[mr](); + if (null === t[ar].firstUnsplittable) { + t[ar].firstUnsplittable = e; + t[ar].noLayoutFailure = !0; + } +} +function unsetFirstUnsplittable(e) { + const t = e[mr](); + t[ar].firstUnsplittable === e && (t[ar].noLayoutFailure = !1); +} +function handleBreak(e) { + if (e[ar]) return !1; + e[ar] = Object.create(null); + if ("auto" === e.targetType) return !1; + const t = e[mr](); + let i = null; + if (e.target) { + i = t[Vr](e.target, e[pr]()); + if (!i) return !1; + i = i[0]; + } + const { currentPageArea: a, currentContentArea: s } = t[ar]; + if ("pageArea" === e.targetType) { + i instanceof PageArea || (i = null); + if (e.startNew) { + e[ar].target = i || a; + return !0; + } + if (i && i !== a) { + e[ar].target = i; + return !0; + } + return !1; + } + i instanceof ContentArea || (i = null); + const r = i && i[pr](); + let n, + g = r; + if (e.startNew) + if (i) { + const e = r.contentArea.children, + t = e.indexOf(s), + a = e.indexOf(i); + -1 !== t && t < a && (g = null); + n = a - 1; + } else n = a.contentArea.children.indexOf(s); + else { + if (!i || i === s) return !1; + n = r.contentArea.children.indexOf(i) - 1; + g = r === a ? null : r; + } + e[ar].target = g; + e[ar].index = n; + return !0; +} +function handleOverflow(e, t, i) { + const a = e[mr](), + s = a[ar].noLayoutFailure, + r = t[fr]; + t[fr] = () => e; + a[ar].noLayoutFailure = !0; + const n = t[an](i); + e[js](n.html, n.bbox); + a[ar].noLayoutFailure = s; + t[fr] = r; +} +class AppearanceFilter extends StringObject { + constructor(e) { + super(Hn, "appearanceFilter"); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Arc extends XFAObject { + constructor(e) { + super(Hn, "arc", !0); + this.circular = getInteger({ + data: e.circular, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.hand = getStringOption(e.hand, ["even", "left", "right"]); + this.id = e.id || ""; + this.startAngle = getFloat({ + data: e.startAngle, + defaultValue: 0, + validate: (e) => !0, + }); + this.sweepAngle = getFloat({ + data: e.sweepAngle, + defaultValue: 360, + validate: (e) => !0, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.edge = null; + this.fill = null; + } + [an]() { + const e = this.edge || new Edge({}), + t = e[rn](), + i = Object.create(null); + "visible" === this.fill?.presence + ? Object.assign(i, this.fill[rn]()) + : (i.fill = "transparent"); + i.strokeWidth = measureToString("visible" === e.presence ? e.thickness : 0); + i.stroke = t.color; + let a; + const s = { + xmlns: Jn, + style: { width: "100%", height: "100%", overflow: "visible" }, + }; + if (360 === this.sweepAngle) + a = { + name: "ellipse", + attributes: { + xmlns: Jn, + cx: "50%", + cy: "50%", + rx: "50%", + ry: "50%", + style: i, + }, + }; + else { + const e = (this.startAngle * Math.PI) / 180, + t = (this.sweepAngle * Math.PI) / 180, + r = this.sweepAngle > 180 ? 1 : 0, + [n, g, o, c] = [ + 50 * (1 + Math.cos(e)), + 50 * (1 - Math.sin(e)), + 50 * (1 + Math.cos(e + t)), + 50 * (1 - Math.sin(e + t)), + ]; + a = { + name: "path", + attributes: { + xmlns: Jn, + d: `M ${n} ${g} A 50 50 0 ${r} 0 ${o} ${c}`, + vectorEffect: "non-scaling-stroke", + style: i, + }, + }; + Object.assign(s, { viewBox: "0 0 100 100", preserveAspectRatio: "none" }); + } + const r = { name: "svg", children: [a], attributes: s }; + if (hasMargin(this[pr]()[pr]())) + return HTMLResult.success({ + name: "div", + attributes: { + style: { display: "inline", width: "100%", height: "100%" }, + }, + children: [r], + }); + r.attributes.style.position = "absolute"; + return HTMLResult.success(r); + } +} +class Area extends XFAObject { + constructor(e) { + super(Hn, "area", !0); + this.colSpan = getInteger({ + data: e.colSpan, + defaultValue: 1, + validate: (e) => e >= 1 || -1 === e, + }); + this.id = e.id || ""; + this.name = e.name || ""; + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.desc = null; + this.extras = null; + this.area = new XFAObjectArray(); + this.draw = new XFAObjectArray(); + this.exObject = new XFAObjectArray(); + this.exclGroup = new XFAObjectArray(); + this.field = new XFAObjectArray(); + this.subform = new XFAObjectArray(); + this.subformSet = new XFAObjectArray(); + } + *[ur]() { + yield* getContainedChildren(this); + } + [Mr]() { + return !0; + } + [kr]() { + return !0; + } + [js](e, t) { + const [i, a, s, r] = t; + this[ar].width = Math.max(this[ar].width, i + s); + this[ar].height = Math.max(this[ar].height, a + r); + this[ar].children.push(e); + } + [or]() { + return this[ar].availableSpace; + } + [an](e) { + const t = toStyle(this, "position"), + i = { style: t, id: this[nn], class: ["xfaArea"] }; + isPrintOnly(this) && i.class.push("xfaPrintOnly"); + this.name && (i.xfaName = this.name); + const a = []; + this[ar] = { children: a, width: 0, height: 0, availableSpace: e }; + const s = this[Zs]({ + filter: new Set([ + "area", + "draw", + "field", + "exclGroup", + "subform", + "subformSet", + ]), + include: !0, + }); + if (!s.success) { + if (s.isBreak()) return s; + delete this[ar]; + return HTMLResult.FAILURE; + } + t.width = measureToString(this[ar].width); + t.height = measureToString(this[ar].height); + const r = { name: "div", attributes: i, children: a }, + n = [this.x, this.y, this[ar].width, this[ar].height]; + delete this[ar]; + return HTMLResult.success(r, n); + } +} +class Assist extends XFAObject { + constructor(e) { + super(Hn, "assist", !0); + this.id = e.id || ""; + this.role = e.role || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.speak = null; + this.toolTip = null; + } + [an]() { + return this.toolTip?.[er] || null; + } +} +class Barcode extends XFAObject { + constructor(e) { + super(Hn, "barcode", !0); + this.charEncoding = getKeyword({ + data: e.charEncoding ? e.charEncoding.toLowerCase() : "", + defaultValue: "", + validate: (e) => + [ + "utf-8", + "big-five", + "fontspecific", + "gbk", + "gb-18030", + "gb-2312", + "ksc-5601", + "none", + "shift-jis", + "ucs-2", + "utf-16", + ].includes(e) || e.match(/iso-8859-\d{2}/), + }); + this.checksum = getStringOption(e.checksum, [ + "none", + "1mod10", + "1mod10_1mod11", + "2mod10", + "auto", + ]); + this.dataColumnCount = getInteger({ + data: e.dataColumnCount, + defaultValue: -1, + validate: (e) => e >= 0, + }); + this.dataLength = getInteger({ + data: e.dataLength, + defaultValue: -1, + validate: (e) => e >= 0, + }); + this.dataPrep = getStringOption(e.dataPrep, ["none", "flateCompress"]); + this.dataRowCount = getInteger({ + data: e.dataRowCount, + defaultValue: -1, + validate: (e) => e >= 0, + }); + this.endChar = e.endChar || ""; + this.errorCorrectionLevel = getInteger({ + data: e.errorCorrectionLevel, + defaultValue: -1, + validate: (e) => e >= 0 && e <= 8, + }); + this.id = e.id || ""; + this.moduleHeight = getMeasurement(e.moduleHeight, "5mm"); + this.moduleWidth = getMeasurement(e.moduleWidth, "0.25mm"); + this.printCheckDigit = getInteger({ + data: e.printCheckDigit, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.rowColumnRatio = getRatio(e.rowColumnRatio); + this.startChar = e.startChar || ""; + this.textLocation = getStringOption(e.textLocation, [ + "below", + "above", + "aboveEmbedded", + "belowEmbedded", + "none", + ]); + this.truncate = getInteger({ + data: e.truncate, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.type = getStringOption(e.type ? e.type.toLowerCase() : "", [ + "aztec", + "codabar", + "code2of5industrial", + "code2of5interleaved", + "code2of5matrix", + "code2of5standard", + "code3of9", + "code3of9extended", + "code11", + "code49", + "code93", + "code128", + "code128a", + "code128b", + "code128c", + "code128sscc", + "datamatrix", + "ean8", + "ean8add2", + "ean8add5", + "ean13", + "ean13add2", + "ean13add5", + "ean13pwcd", + "fim", + "logmars", + "maxicode", + "msi", + "pdf417", + "pdf417macro", + "plessey", + "postauscust2", + "postauscust3", + "postausreplypaid", + "postausstandard", + "postukrm4scc", + "postusdpbc", + "postusimb", + "postusstandard", + "postus5zip", + "qrcode", + "rfid", + "rss14", + "rss14expanded", + "rss14limited", + "rss14stacked", + "rss14stackedomni", + "rss14truncated", + "telepen", + "ucc128", + "ucc128random", + "ucc128sscc", + "upca", + "upcaadd2", + "upcaadd5", + "upcapwcd", + "upce", + "upceadd2", + "upceadd5", + "upcean2", + "upcean5", + "upsmaxicode", + ]); + this.upsMode = getStringOption(e.upsMode, [ + "usCarrier", + "internationalCarrier", + "secureSymbol", + "standardSymbol", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.wideNarrowRatio = getRatio(e.wideNarrowRatio); + this.encrypt = null; + this.extras = null; + } +} +class Bind extends XFAObject { + constructor(e) { + super(Hn, "bind", !0); + this.match = getStringOption(e.match, [ + "once", + "dataRef", + "global", + "none", + ]); + this.ref = e.ref || ""; + this.picture = null; + } +} +class BindItems extends XFAObject { + constructor(e) { + super(Hn, "bindItems"); + this.connection = e.connection || ""; + this.labelRef = e.labelRef || ""; + this.ref = e.ref || ""; + this.valueRef = e.valueRef || ""; + } +} +class Bookend extends XFAObject { + constructor(e) { + super(Hn, "bookend"); + this.id = e.id || ""; + this.leader = e.leader || ""; + this.trailer = e.trailer || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class BooleanElement extends Option01 { + constructor(e) { + super(Hn, "boolean"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [an](e) { + return valueToHtml(1 === this[er] ? "1" : "0"); + } +} +class Border extends XFAObject { + constructor(e) { + super(Hn, "border", !0); + this.break = getStringOption(e.break, ["close", "open"]); + this.hand = getStringOption(e.hand, ["even", "left", "right"]); + this.id = e.id || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.corner = new XFAObjectArray(4); + this.edge = new XFAObjectArray(4); + this.extras = null; + this.fill = null; + this.margin = null; + } + [lr]() { + if (!this[ar]) { + const e = this.edge.children.slice(); + if (e.length < 4) { + const t = e.at(-1) || new Edge({}); + for (let i = e.length; i < 4; i++) e.push(t); + } + const t = e.map((e) => e.thickness), + i = [0, 0, 0, 0]; + if (this.margin) { + i[0] = this.margin.topInset; + i[1] = this.margin.rightInset; + i[2] = this.margin.bottomInset; + i[3] = this.margin.leftInset; + } + this[ar] = { widths: t, insets: i, edges: e }; + } + return this[ar]; + } + [rn]() { + const { edges: e } = this[lr](), + t = e.map((e) => { + const t = e[rn](); + t.color ||= "#000000"; + return t; + }), + i = Object.create(null); + this.margin && Object.assign(i, this.margin[rn]()); + "visible" === this.fill?.presence && Object.assign(i, this.fill[rn]()); + if (this.corner.children.some((e) => 0 !== e.radius)) { + const e = this.corner.children.map((e) => e[rn]()); + if (2 === e.length || 3 === e.length) { + const t = e.at(-1); + for (let i = e.length; i < 4; i++) e.push(t); + } + i.borderRadius = e.map((e) => e.radius).join(" "); + } + switch (this.presence) { + case "invisible": + case "hidden": + i.borderStyle = ""; + break; + case "inactive": + i.borderStyle = "none"; + break; + default: + i.borderStyle = t.map((e) => e.style).join(" "); + } + i.borderWidth = t.map((e) => e.width).join(" "); + i.borderColor = t.map((e) => e.color).join(" "); + return i; + } +} +class Break extends XFAObject { + constructor(e) { + super(Hn, "break", !0); + this.after = getStringOption(e.after, [ + "auto", + "contentArea", + "pageArea", + "pageEven", + "pageOdd", + ]); + this.afterTarget = e.afterTarget || ""; + this.before = getStringOption(e.before, [ + "auto", + "contentArea", + "pageArea", + "pageEven", + "pageOdd", + ]); + this.beforeTarget = e.beforeTarget || ""; + this.bookendLeader = e.bookendLeader || ""; + this.bookendTrailer = e.bookendTrailer || ""; + this.id = e.id || ""; + this.overflowLeader = e.overflowLeader || ""; + this.overflowTarget = e.overflowTarget || ""; + this.overflowTrailer = e.overflowTrailer || ""; + this.startNew = getInteger({ + data: e.startNew, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } +} +class BreakAfter extends XFAObject { + constructor(e) { + super(Hn, "breakAfter", !0); + this.id = e.id || ""; + this.leader = e.leader || ""; + this.startNew = getInteger({ + data: e.startNew, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.target = e.target || ""; + this.targetType = getStringOption(e.targetType, [ + "auto", + "contentArea", + "pageArea", + ]); + this.trailer = e.trailer || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.script = null; + } +} +class BreakBefore extends XFAObject { + constructor(e) { + super(Hn, "breakBefore", !0); + this.id = e.id || ""; + this.leader = e.leader || ""; + this.startNew = getInteger({ + data: e.startNew, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.target = e.target || ""; + this.targetType = getStringOption(e.targetType, [ + "auto", + "contentArea", + "pageArea", + ]); + this.trailer = e.trailer || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.script = null; + } + [an](e) { + this[ar] = {}; + return HTMLResult.FAILURE; + } +} +class Button extends XFAObject { + constructor(e) { + super(Hn, "button", !0); + this.highlight = getStringOption(e.highlight, [ + "inverted", + "none", + "outline", + "push", + ]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } + [an](e) { + const t = this[pr]()[pr](), + i = { + name: "button", + attributes: { id: this[nn], class: ["xfaButton"], style: {} }, + children: [], + }; + for (const e of t.event.children) { + if ("click" !== e.activity || !e.script) continue; + const t = recoverJsURL(e.script[er]); + if (!t) continue; + const a = fixURL(t.url); + a && + i.children.push({ + name: "a", + attributes: { + id: "link" + this[nn], + href: a, + newWindow: t.newWindow, + class: ["xfaLink"], + style: {}, + }, + children: [], + }); + } + return HTMLResult.success(i); + } +} +class Calculate extends XFAObject { + constructor(e) { + super(Hn, "calculate", !0); + this.id = e.id || ""; + this.override = getStringOption(e.override, [ + "disabled", + "error", + "ignore", + "warning", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.message = null; + this.script = null; + } +} +class Caption extends XFAObject { + constructor(e) { + super(Hn, "caption", !0); + this.id = e.id || ""; + this.placement = getStringOption(e.placement, [ + "left", + "bottom", + "inline", + "right", + "top", + ]); + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.reserve = Math.ceil(getMeasurement(e.reserve)); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.font = null; + this.margin = null; + this.para = null; + this.value = null; + } + [$r](e) { + _setValue(this, e); + } + [lr](e) { + if (!this[ar]) { + let { width: t, height: i } = e; + switch (this.placement) { + case "left": + case "right": + case "inline": + t = this.reserve <= 0 ? t : this.reserve; + break; + case "top": + case "bottom": + i = this.reserve <= 0 ? i : this.reserve; + } + this[ar] = layoutNode(this, { width: t, height: i }); + } + return this[ar]; + } + [an](e) { + if (!this.value) return HTMLResult.EMPTY; + this[Wr](); + const t = this.value[an](e).html; + if (!t) { + this[Pr](); + return HTMLResult.EMPTY; + } + const i = this.reserve; + if (this.reserve <= 0) { + const { w: t, h: i } = this[lr](e); + switch (this.placement) { + case "left": + case "right": + case "inline": + this.reserve = t; + break; + case "top": + case "bottom": + this.reserve = i; + } + } + const a = []; + "string" == typeof t ? a.push({ name: "#text", value: t }) : a.push(t); + const s = toStyle(this, "font", "margin", "visibility"); + switch (this.placement) { + case "left": + case "right": + this.reserve > 0 && (s.width = measureToString(this.reserve)); + break; + case "top": + case "bottom": + this.reserve > 0 && (s.height = measureToString(this.reserve)); + } + setPara(this, null, t); + this[Pr](); + this.reserve = i; + return HTMLResult.success({ + name: "div", + attributes: { style: s, class: ["xfaCaption"] }, + children: a, + }); + } +} +class Certificate extends StringObject { + constructor(e) { + super(Hn, "certificate"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Certificates extends XFAObject { + constructor(e) { + super(Hn, "certificates", !0); + this.credentialServerPolicy = getStringOption(e.credentialServerPolicy, [ + "optional", + "required", + ]); + this.id = e.id || ""; + this.url = e.url || ""; + this.urlPolicy = e.urlPolicy || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.encryption = null; + this.issuers = null; + this.keyUsage = null; + this.oids = null; + this.signing = null; + this.subjectDNs = null; + } +} +class CheckButton extends XFAObject { + constructor(e) { + super(Hn, "checkButton", !0); + this.id = e.id || ""; + this.mark = getStringOption(e.mark, [ + "default", + "check", + "circle", + "cross", + "diamond", + "square", + "star", + ]); + this.shape = getStringOption(e.shape, ["square", "round"]); + this.size = getMeasurement(e.size, "10pt"); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + [an](e) { + const t = toStyle("margin"), + i = measureToString(this.size); + t.width = t.height = i; + let a, s, r; + const n = this[pr]()[pr](), + g = (n.items.children.length && n.items.children[0][an]().html) || [], + o = { + on: (void 0 !== g[0] ? g[0] : "on").toString(), + off: (void 0 !== g[1] ? g[1] : "off").toString(), + }, + c = (n.value?.[en]() || "off") === o.on || void 0, + C = n[fr](), + h = n[nn]; + let l; + if (C instanceof ExclGroup) { + r = C[nn]; + a = "radio"; + s = "xfaRadio"; + l = C[tr]?.[nn] || C[nn]; + } else { + a = "checkbox"; + s = "xfaCheckbox"; + l = n[tr]?.[nn] || n[nn]; + } + const Q = { + name: "input", + attributes: { + class: [s], + style: t, + fieldId: h, + dataId: l, + type: a, + checked: c, + xfaOn: o.on, + xfaOff: o.off, + "aria-label": ariaLabel(n), + "aria-required": !1, + }, + }; + r && (Q.attributes.name = r); + if (isRequired(n)) { + Q.attributes["aria-required"] = !0; + Q.attributes.required = !0; + } + return HTMLResult.success({ + name: "label", + attributes: { class: ["xfaLabel"] }, + children: [Q], + }); + } +} +class ChoiceList extends XFAObject { + constructor(e) { + super(Hn, "choiceList", !0); + this.commitOn = getStringOption(e.commitOn, ["select", "exit"]); + this.id = e.id || ""; + this.open = getStringOption(e.open, [ + "userControl", + "always", + "multiSelect", + "onEntry", + ]); + this.textEntry = getInteger({ + data: e.textEntry, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + [an](e) { + const t = toStyle(this, "border", "margin"), + i = this[pr]()[pr](), + a = { fontSize: `calc(${i.font?.size || 10}px * var(--scale-factor))` }, + s = []; + if (i.items.children.length > 0) { + const e = i.items; + let t = 0, + r = 0; + if (2 === e.children.length) { + t = e.children[0].save; + r = 1 - t; + } + const n = e.children[t][an]().html, + g = e.children[r][an]().html; + let o = !1; + const c = i.value?.[en]() || ""; + for (let e = 0, t = n.length; e < t; e++) { + const t = { + name: "option", + attributes: { value: g[e] || n[e], style: a }, + value: n[e], + }; + g[e] === c && (t.attributes.selected = o = !0); + s.push(t); + } + o || + s.splice(0, 0, { + name: "option", + attributes: { hidden: !0, selected: !0 }, + value: " ", + }); + } + const r = { + class: ["xfaSelect"], + fieldId: i[nn], + dataId: i[tr]?.[nn] || i[nn], + style: t, + "aria-label": ariaLabel(i), + "aria-required": !1, + }; + if (isRequired(i)) { + r["aria-required"] = !0; + r.required = !0; + } + "multiSelect" === this.open && (r.multiple = !0); + return HTMLResult.success({ + name: "label", + attributes: { class: ["xfaLabel"] }, + children: [{ name: "select", children: s, attributes: r }], + }); + } +} +class Color extends XFAObject { + constructor(e) { + super(Hn, "color", !0); + this.cSpace = getStringOption(e.cSpace, ["SRGB"]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.value = e.value + ? (function getColor(e, t = [0, 0, 0]) { + let [i, a, s] = t; + if (!e) return { r: i, g: a, b: s }; + const r = e + .trim() + .split(/\s*,\s*/) + .map((e) => Math.min(Math.max(0, parseInt(e.trim(), 10)), 255)) + .map((e) => (isNaN(e) ? 0 : e)); + if (r.length < 3) return { r: i, g: a, b: s }; + [i, a, s] = r; + return { r: i, g: a, b: s }; + })(e.value) + : ""; + this.extras = null; + } + [wr]() { + return !1; + } + [rn]() { + return this.value + ? Util.makeHexColor(this.value.r, this.value.g, this.value.b) + : null; + } +} +class Comb extends XFAObject { + constructor(e) { + super(Hn, "comb"); + this.id = e.id || ""; + this.numberOfCells = getInteger({ + data: e.numberOfCells, + defaultValue: 0, + validate: (e) => e >= 0, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Connect extends XFAObject { + constructor(e) { + super(Hn, "connect", !0); + this.connection = e.connection || ""; + this.id = e.id || ""; + this.ref = e.ref || ""; + this.usage = getStringOption(e.usage, [ + "exportAndImport", + "exportOnly", + "importOnly", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.picture = null; + } +} +class ContentArea extends XFAObject { + constructor(e) { + super(Hn, "contentArea", !0); + this.h = getMeasurement(e.h); + this.id = e.id || ""; + this.name = e.name || ""; + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.w = getMeasurement(e.w); + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.desc = null; + this.extras = null; + } + [an](e) { + const t = { + left: measureToString(this.x), + top: measureToString(this.y), + width: measureToString(this.w), + height: measureToString(this.h), + }, + i = ["xfaContentarea"]; + isPrintOnly(this) && i.push("xfaPrintOnly"); + return HTMLResult.success({ + name: "div", + children: [], + attributes: { style: t, class: i, id: this[nn] }, + }); + } +} +class Corner extends XFAObject { + constructor(e) { + super(Hn, "corner", !0); + this.id = e.id || ""; + this.inverted = getInteger({ + data: e.inverted, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.join = getStringOption(e.join, ["square", "round"]); + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.radius = getMeasurement(e.radius); + this.stroke = getStringOption(e.stroke, [ + "solid", + "dashDot", + "dashDotDot", + "dashed", + "dotted", + "embossed", + "etched", + "lowered", + "raised", + ]); + this.thickness = getMeasurement(e.thickness, "0.5pt"); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn]() { + const e = toStyle(this, "visibility"); + e.radius = measureToString("square" === this.join ? 0 : this.radius); + return e; + } +} +class DateElement extends ContentObject { + constructor(e) { + super(Hn, "date"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = this[er].trim(); + this[er] = e ? new Date(e) : null; + } + [an](e) { + return valueToHtml(this[er] ? this[er].toString() : ""); + } +} +class DateTime extends ContentObject { + constructor(e) { + super(Hn, "dateTime"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = this[er].trim(); + this[er] = e ? new Date(e) : null; + } + [an](e) { + return valueToHtml(this[er] ? this[er].toString() : ""); + } +} +class DateTimeEdit extends XFAObject { + constructor(e) { + super(Hn, "dateTimeEdit", !0); + this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ + "auto", + "off", + "on", + ]); + this.id = e.id || ""; + this.picker = getStringOption(e.picker, ["host", "none"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + [an](e) { + const t = toStyle(this, "border", "font", "margin"), + i = this[pr]()[pr](), + a = { + name: "input", + attributes: { + type: "text", + fieldId: i[nn], + dataId: i[tr]?.[nn] || i[nn], + class: ["xfaTextfield"], + style: t, + "aria-label": ariaLabel(i), + "aria-required": !1, + }, + }; + if (isRequired(i)) { + a.attributes["aria-required"] = !0; + a.attributes.required = !0; + } + return HTMLResult.success({ + name: "label", + attributes: { class: ["xfaLabel"] }, + children: [a], + }); + } +} +class Decimal extends ContentObject { + constructor(e) { + super(Hn, "decimal"); + this.fracDigits = getInteger({ + data: e.fracDigits, + defaultValue: 2, + validate: (e) => !0, + }); + this.id = e.id || ""; + this.leadDigits = getInteger({ + data: e.leadDigits, + defaultValue: -1, + validate: (e) => !0, + }); + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = parseFloat(this[er].trim()); + this[er] = isNaN(e) ? null : e; + } + [an](e) { + return valueToHtml(null !== this[er] ? this[er].toString() : ""); + } +} +class DefaultUi extends XFAObject { + constructor(e) { + super(Hn, "defaultUi", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } +} +class Desc extends XFAObject { + constructor(e) { + super(Hn, "desc", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.boolean = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.time = new XFAObjectArray(); + } +} +class DigestMethod extends OptionObject { + constructor(e) { + super(Hn, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class DigestMethods extends XFAObject { + constructor(e) { + super(Hn, "digestMethods", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.digestMethod = new XFAObjectArray(); + } +} +class Draw extends XFAObject { + constructor(e) { + super(Hn, "draw", !0); + this.anchorType = getStringOption(e.anchorType, [ + "topLeft", + "bottomCenter", + "bottomLeft", + "bottomRight", + "middleCenter", + "middleLeft", + "middleRight", + "topCenter", + "topRight", + ]); + this.colSpan = getInteger({ + data: e.colSpan, + defaultValue: 1, + validate: (e) => e >= 1 || -1 === e, + }); + this.h = e.h ? getMeasurement(e.h) : ""; + this.hAlign = getStringOption(e.hAlign, [ + "left", + "center", + "justify", + "justifyAll", + "radix", + "right", + ]); + this.id = e.id || ""; + this.locale = e.locale || ""; + this.maxH = getMeasurement(e.maxH, "0pt"); + this.maxW = getMeasurement(e.maxW, "0pt"); + this.minH = getMeasurement(e.minH, "0pt"); + this.minW = getMeasurement(e.minW, "0pt"); + this.name = e.name || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.relevant = getRelevant(e.relevant); + this.rotate = getInteger({ + data: e.rotate, + defaultValue: 0, + validate: (e) => e % 90 == 0, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.w = e.w ? getMeasurement(e.w) : ""; + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.assist = null; + this.border = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.font = null; + this.keep = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.ui = null; + this.value = null; + this.setProperty = new XFAObjectArray(); + } + [$r](e) { + _setValue(this, e); + } + [an](e) { + setTabIndex(this); + if ("hidden" === this.presence || "inactive" === this.presence) + return HTMLResult.EMPTY; + fixDimensions(this); + this[Wr](); + const t = this.w, + i = this.h, + { w: a, h: s, isBroken: r } = layoutNode(this, e); + if (a && "" === this.w) { + if (r && this[fr]()[Ur]()) { + this[Pr](); + return HTMLResult.FAILURE; + } + this.w = a; + } + s && "" === this.h && (this.h = s); + setFirstUnsplittable(this); + if (!checkDimensions(this, e)) { + this.w = t; + this.h = i; + this[Pr](); + return HTMLResult.FAILURE; + } + unsetFirstUnsplittable(this); + const n = toStyle( + this, + "font", + "hAlign", + "dimensions", + "position", + "presence", + "rotate", + "anchorType", + "border", + "margin", + ); + setMinMaxDimensions(this, n); + if (n.margin) { + n.padding = n.margin; + delete n.margin; + } + const g = ["xfaDraw"]; + this.font && g.push("xfaFont"); + isPrintOnly(this) && g.push("xfaPrintOnly"); + const o = { style: n, id: this[nn], class: g }; + this.name && (o.xfaName = this.name); + const c = { name: "div", attributes: o, children: [] }; + applyAssist(this, o); + const C = computeBbox(this, c, e), + h = this.value ? this.value[an](e).html : null; + if (null === h) { + this.w = t; + this.h = i; + this[Pr](); + return HTMLResult.success(createWrapper(this, c), C); + } + c.children.push(h); + setPara(this, n, h); + this.w = t; + this.h = i; + this[Pr](); + return HTMLResult.success(createWrapper(this, c), C); + } +} +class Edge extends XFAObject { + constructor(e) { + super(Hn, "edge", !0); + this.cap = getStringOption(e.cap, ["square", "butt", "round"]); + this.id = e.id || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.stroke = getStringOption(e.stroke, [ + "solid", + "dashDot", + "dashDotDot", + "dashed", + "dotted", + "embossed", + "etched", + "lowered", + "raised", + ]); + this.thickness = getMeasurement(e.thickness, "0.5pt"); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn]() { + const e = toStyle(this, "visibility"); + Object.assign(e, { + linecap: this.cap, + width: measureToString(this.thickness), + color: this.color ? this.color[rn]() : "#000000", + style: "", + }); + if ("visible" !== this.presence) e.style = "none"; + else + switch (this.stroke) { + case "solid": + e.style = "solid"; + break; + case "dashDot": + case "dashDotDot": + case "dashed": + e.style = "dashed"; + break; + case "dotted": + e.style = "dotted"; + break; + case "embossed": + e.style = "ridge"; + break; + case "etched": + e.style = "groove"; + break; + case "lowered": + e.style = "inset"; + break; + case "raised": + e.style = "outset"; + } + return e; + } +} +class Encoding extends OptionObject { + constructor(e) { + super(Hn, "encoding", [ + "adbe.x509.rsa_sha1", + "adbe.pkcs7.detached", + "adbe.pkcs7.sha1", + ]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Encodings extends XFAObject { + constructor(e) { + super(Hn, "encodings", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.encoding = new XFAObjectArray(); + } +} +class Encrypt extends XFAObject { + constructor(e) { + super(Hn, "encrypt", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.certificate = null; + } +} +class EncryptData extends XFAObject { + constructor(e) { + super(Hn, "encryptData", !0); + this.id = e.id || ""; + this.operation = getStringOption(e.operation, ["encrypt", "decrypt"]); + this.target = e.target || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.filter = null; + this.manifest = null; + } +} +class Encryption extends XFAObject { + constructor(e) { + super(Hn, "encryption", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.certificate = new XFAObjectArray(); + } +} +class EncryptionMethod extends OptionObject { + constructor(e) { + super(Hn, "encryptionMethod", [ + "", + "AES256-CBC", + "TRIPLEDES-CBC", + "AES128-CBC", + "AES192-CBC", + ]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class EncryptionMethods extends XFAObject { + constructor(e) { + super(Hn, "encryptionMethods", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.encryptionMethod = new XFAObjectArray(); + } +} +class Event extends XFAObject { + constructor(e) { + super(Hn, "event", !0); + this.activity = getStringOption(e.activity, [ + "click", + "change", + "docClose", + "docReady", + "enter", + "exit", + "full", + "indexChange", + "initialize", + "mouseDown", + "mouseEnter", + "mouseExit", + "mouseUp", + "postExecute", + "postOpen", + "postPrint", + "postSave", + "postSign", + "postSubmit", + "preExecute", + "preOpen", + "prePrint", + "preSave", + "preSign", + "preSubmit", + "ready", + "validationState", + ]); + this.id = e.id || ""; + this.listen = getStringOption(e.listen, ["refOnly", "refAndDescendents"]); + this.name = e.name || ""; + this.ref = e.ref || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.encryptData = null; + this.execute = null; + this.script = null; + this.signData = null; + this.submit = null; + } +} +class ExData extends ContentObject { + constructor(e) { + super(Hn, "exData"); + this.contentType = e.contentType || ""; + this.href = e.href || ""; + this.id = e.id || ""; + this.maxLength = getInteger({ + data: e.maxLength, + defaultValue: -1, + validate: (e) => e >= -1, + }); + this.name = e.name || ""; + this.rid = e.rid || ""; + this.transferEncoding = getStringOption(e.transferEncoding, [ + "none", + "base64", + "package", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [Sr]() { + return "text/html" === this.contentType; + } + [Kr](e) { + if ("text/html" === this.contentType && e[Jr] === on.xhtml.id) { + this[er] = e; + return !0; + } + if ("text/xml" === this.contentType) { + this[er] = e; + return !0; + } + return !1; + } + [an](e) { + return "text/html" === this.contentType && this[er] + ? this[er][an](e) + : HTMLResult.EMPTY; + } +} +class ExObject extends XFAObject { + constructor(e) { + super(Hn, "exObject", !0); + this.archive = e.archive || ""; + this.classId = e.classId || ""; + this.codeBase = e.codeBase || ""; + this.codeType = e.codeType || ""; + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.boolean = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.exObject = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.time = new XFAObjectArray(); + } +} +class ExclGroup extends XFAObject { + constructor(e) { + super(Hn, "exclGroup", !0); + this.access = getStringOption(e.access, [ + "open", + "nonInteractive", + "protected", + "readOnly", + ]); + this.accessKey = e.accessKey || ""; + this.anchorType = getStringOption(e.anchorType, [ + "topLeft", + "bottomCenter", + "bottomLeft", + "bottomRight", + "middleCenter", + "middleLeft", + "middleRight", + "topCenter", + "topRight", + ]); + this.colSpan = getInteger({ + data: e.colSpan, + defaultValue: 1, + validate: (e) => e >= 1 || -1 === e, + }); + this.h = e.h ? getMeasurement(e.h) : ""; + this.hAlign = getStringOption(e.hAlign, [ + "left", + "center", + "justify", + "justifyAll", + "radix", + "right", + ]); + this.id = e.id || ""; + this.layout = getStringOption(e.layout, [ + "position", + "lr-tb", + "rl-row", + "rl-tb", + "row", + "table", + "tb", + ]); + this.maxH = getMeasurement(e.maxH, "0pt"); + this.maxW = getMeasurement(e.maxW, "0pt"); + this.minH = getMeasurement(e.minH, "0pt"); + this.minW = getMeasurement(e.minW, "0pt"); + this.name = e.name || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.w = e.w ? getMeasurement(e.w) : ""; + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.assist = null; + this.bind = null; + this.border = null; + this.calculate = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.validate = null; + this.connect = new XFAObjectArray(); + this.event = new XFAObjectArray(); + this.field = new XFAObjectArray(); + this.setProperty = new XFAObjectArray(); + } + [kr]() { + return !0; + } + [wr]() { + return !0; + } + [$r](e) { + for (const t of this.field.children) { + if (!t.value) { + const e = new Value({}); + t[Xs](e); + t.value = e; + } + t.value[$r](e); + } + } + [Ur]() { + return ( + (this.layout.endsWith("-tb") && + 0 === this[ar].attempt && + this[ar].numberInLine > 0) || + this[pr]()[Ur]() + ); + } + [xr]() { + const e = this[fr](); + if (!e[xr]()) return !1; + if (void 0 !== this[ar]._isSplittable) return this[ar]._isSplittable; + if ("position" === this.layout || this.layout.includes("row")) { + this[ar]._isSplittable = !1; + return !1; + } + if (e.layout?.endsWith("-tb") && 0 !== e[ar].numberInLine) return !1; + this[ar]._isSplittable = !0; + return !0; + } + [rr]() { + return flushHTML(this); + } + [js](e, t) { + addHTML(this, e, t); + } + [or]() { + return getAvailableSpace(this); + } + [an](e) { + setTabIndex(this); + if ( + "hidden" === this.presence || + "inactive" === this.presence || + 0 === this.h || + 0 === this.w + ) + return HTMLResult.EMPTY; + fixDimensions(this); + const t = [], + i = { id: this[nn], class: [] }; + setAccess(this, i.class); + this[ar] || (this[ar] = Object.create(null)); + Object.assign(this[ar], { + children: t, + attributes: i, + attempt: 0, + line: null, + numberInLine: 0, + availableSpace: { + width: Math.min(this.w || 1 / 0, e.width), + height: Math.min(this.h || 1 / 0, e.height), + }, + width: 0, + height: 0, + prevHeight: 0, + currentWidth: 0, + }); + const a = this[xr](); + a || setFirstUnsplittable(this); + if (!checkDimensions(this, e)) return HTMLResult.FAILURE; + const s = new Set(["field"]); + if (this.layout.includes("row")) { + const e = this[fr]().columnWidths; + if (Array.isArray(e) && e.length > 0) { + this[ar].columnWidths = e; + this[ar].currentColumn = 0; + } + } + const r = toStyle( + this, + "anchorType", + "dimensions", + "position", + "presence", + "border", + "margin", + "hAlign", + ), + n = ["xfaExclgroup"], + g = layoutClass(this); + g && n.push(g); + isPrintOnly(this) && n.push("xfaPrintOnly"); + i.style = r; + i.class = n; + this.name && (i.xfaName = this.name); + this[Wr](); + const o = "lr-tb" === this.layout || "rl-tb" === this.layout, + c = o ? 2 : 1; + for (; this[ar].attempt < c; this[ar].attempt++) { + o && 1 === this[ar].attempt && (this[ar].numberInLine = 0); + const e = this[Zs]({ filter: s, include: !0 }); + if (e.success) break; + if (e.isBreak()) { + this[Pr](); + return e; + } + if ( + o && + 0 === this[ar].attempt && + 0 === this[ar].numberInLine && + !this[mr]()[ar].noLayoutFailure + ) { + this[ar].attempt = c; + break; + } + } + this[Pr](); + a || unsetFirstUnsplittable(this); + if (this[ar].attempt === c) { + a || delete this[ar]; + return HTMLResult.FAILURE; + } + let C = 0, + h = 0; + if (this.margin) { + C = this.margin.leftInset + this.margin.rightInset; + h = this.margin.topInset + this.margin.bottomInset; + } + const l = Math.max(this[ar].width + C, this.w || 0), + Q = Math.max(this[ar].height + h, this.h || 0), + E = [this.x, this.y, l, Q]; + "" === this.w && (r.width = measureToString(l)); + "" === this.h && (r.height = measureToString(Q)); + const u = { name: "div", attributes: i, children: t }; + applyAssist(this, i); + delete this[ar]; + return HTMLResult.success(createWrapper(this, u), E); + } +} +class Execute extends XFAObject { + constructor(e) { + super(Hn, "execute"); + this.connection = e.connection || ""; + this.executeType = getStringOption(e.executeType, ["import", "remerge"]); + this.id = e.id || ""; + this.runAt = getStringOption(e.runAt, ["client", "both", "server"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Extras extends XFAObject { + constructor(e) { + super(Hn, "extras", !0); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.boolean = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.extras = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.time = new XFAObjectArray(); + } +} +class Field extends XFAObject { + constructor(e) { + super(Hn, "field", !0); + this.access = getStringOption(e.access, [ + "open", + "nonInteractive", + "protected", + "readOnly", + ]); + this.accessKey = e.accessKey || ""; + this.anchorType = getStringOption(e.anchorType, [ + "topLeft", + "bottomCenter", + "bottomLeft", + "bottomRight", + "middleCenter", + "middleLeft", + "middleRight", + "topCenter", + "topRight", + ]); + this.colSpan = getInteger({ + data: e.colSpan, + defaultValue: 1, + validate: (e) => e >= 1 || -1 === e, + }); + this.h = e.h ? getMeasurement(e.h) : ""; + this.hAlign = getStringOption(e.hAlign, [ + "left", + "center", + "justify", + "justifyAll", + "radix", + "right", + ]); + this.id = e.id || ""; + this.locale = e.locale || ""; + this.maxH = getMeasurement(e.maxH, "0pt"); + this.maxW = getMeasurement(e.maxW, "0pt"); + this.minH = getMeasurement(e.minH, "0pt"); + this.minW = getMeasurement(e.minW, "0pt"); + this.name = e.name || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.relevant = getRelevant(e.relevant); + this.rotate = getInteger({ + data: e.rotate, + defaultValue: 0, + validate: (e) => e % 90 == 0, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.w = e.w ? getMeasurement(e.w) : ""; + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.assist = null; + this.bind = null; + this.border = null; + this.calculate = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.font = null; + this.format = null; + this.items = new XFAObjectArray(2); + this.keep = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.ui = null; + this.validate = null; + this.value = null; + this.bindItems = new XFAObjectArray(); + this.connect = new XFAObjectArray(); + this.event = new XFAObjectArray(); + this.setProperty = new XFAObjectArray(); + } + [kr]() { + return !0; + } + [$r](e) { + _setValue(this, e); + } + [an](e) { + setTabIndex(this); + if (!this.ui) { + this.ui = new Ui({}); + this.ui[yr] = this[yr]; + this[Xs](this.ui); + let e; + switch (this.items.children.length) { + case 0: + e = new TextEdit({}); + this.ui.textEdit = e; + break; + case 1: + e = new CheckButton({}); + this.ui.checkButton = e; + break; + case 2: + e = new ChoiceList({}); + this.ui.choiceList = e; + } + this.ui[Xs](e); + } + if ( + !this.ui || + "hidden" === this.presence || + "inactive" === this.presence || + 0 === this.h || + 0 === this.w + ) + return HTMLResult.EMPTY; + this.caption && delete this.caption[ar]; + this[Wr](); + const t = this.caption ? this.caption[an](e).html : null, + i = this.w, + a = this.h; + let s = 0, + r = 0; + if (this.margin) { + s = this.margin.leftInset + this.margin.rightInset; + r = this.margin.topInset + this.margin.bottomInset; + } + let n = null; + if ("" === this.w || "" === this.h) { + let t = null, + i = null, + a = 0, + g = 0; + if (this.ui.checkButton) a = g = this.ui.checkButton.size; + else { + const { w: t, h: i } = layoutNode(this, e); + if (null !== t) { + a = t; + g = i; + } else + g = (function fonts_getMetrics(e, t = !1) { + let i = null; + if (e) { + const t = stripQuotes(e.typeface), + a = e[yr].fontFinder.find(t); + i = selectFont(e, a); + } + if (!i) return { lineHeight: 12, lineGap: 2, lineNoGap: 10 }; + const a = e.size || 10, + s = i.lineHeight ? Math.max(t ? 0 : 1.2, i.lineHeight) : 1.2, + r = void 0 === i.lineGap ? 0.2 : i.lineGap; + return { + lineHeight: s * a, + lineGap: r * a, + lineNoGap: Math.max(1, s - r) * a, + }; + })(this.font, !0).lineNoGap; + } + n = getBorderDims(this.ui[lr]()); + a += n.w; + g += n.h; + if (this.caption) { + const { w: s, h: r, isBroken: n } = this.caption[lr](e); + if (n && this[fr]()[Ur]()) { + this[Pr](); + return HTMLResult.FAILURE; + } + t = s; + i = r; + switch (this.caption.placement) { + case "left": + case "right": + case "inline": + t += a; + break; + case "top": + case "bottom": + i += g; + } + } else { + t = a; + i = g; + } + if (t && "" === this.w) { + t += s; + this.w = Math.min( + this.maxW <= 0 ? 1 / 0 : this.maxW, + this.minW + 1 < t ? t : this.minW, + ); + } + if (i && "" === this.h) { + i += r; + this.h = Math.min( + this.maxH <= 0 ? 1 / 0 : this.maxH, + this.minH + 1 < i ? i : this.minH, + ); + } + } + this[Pr](); + fixDimensions(this); + setFirstUnsplittable(this); + if (!checkDimensions(this, e)) { + this.w = i; + this.h = a; + this[Pr](); + return HTMLResult.FAILURE; + } + unsetFirstUnsplittable(this); + const g = toStyle( + this, + "font", + "dimensions", + "position", + "rotate", + "anchorType", + "presence", + "margin", + "hAlign", + ); + setMinMaxDimensions(this, g); + const o = ["xfaField"]; + this.font && o.push("xfaFont"); + isPrintOnly(this) && o.push("xfaPrintOnly"); + const c = { style: g, id: this[nn], class: o }; + if (g.margin) { + g.padding = g.margin; + delete g.margin; + } + setAccess(this, o); + this.name && (c.xfaName = this.name); + const C = [], + h = { name: "div", attributes: c, children: C }; + applyAssist(this, c); + const l = this.border ? this.border[rn]() : null, + Q = computeBbox(this, h, e), + E = this.ui[an]().html; + if (!E) { + Object.assign(g, l); + return HTMLResult.success(createWrapper(this, h), Q); + } + this[An] && + (E.children?.[0] + ? (E.children[0].attributes.tabindex = this[An]) + : (E.attributes.tabindex = this[An])); + E.attributes.style || (E.attributes.style = Object.create(null)); + let u = null; + if (this.ui.button) { + 1 === E.children.length && ([u] = E.children.splice(0, 1)); + Object.assign(E.attributes.style, l); + } else Object.assign(g, l); + C.push(E); + if (this.value) + if (this.ui.imageEdit) E.children.push(this.value[an]().html); + else if (!this.ui.button) { + let e = ""; + if (this.value.exData) e = this.value.exData[en](); + else if (this.value.text) e = this.value.text[lr](); + else { + const t = this.value[an]().html; + null !== t && (e = t.children[0].value); + } + this.ui.textEdit && + this.value.text?.maxChars && + (E.children[0].attributes.maxLength = this.value.text.maxChars); + if (e) { + if (this.ui.numericEdit) { + e = parseFloat(e); + e = isNaN(e) ? "" : e.toString(); + } + "textarea" === E.children[0].name + ? (E.children[0].attributes.textContent = e) + : (E.children[0].attributes.value = e); + } + } + if (!this.ui.imageEdit && E.children?.[0] && this.h) { + n = n || getBorderDims(this.ui[lr]()); + let t = 0; + if (this.caption && ["top", "bottom"].includes(this.caption.placement)) { + t = this.caption.reserve; + t <= 0 && (t = this.caption[lr](e).h); + const i = this.h - t - r - n.h; + E.children[0].attributes.style.height = measureToString(i); + } else E.children[0].attributes.style.height = "100%"; + } + u && E.children.push(u); + if (!t) { + E.attributes.class && E.attributes.class.push("xfaLeft"); + this.w = i; + this.h = a; + return HTMLResult.success(createWrapper(this, h), Q); + } + if (this.ui.button) { + g.padding && delete g.padding; + "div" === t.name && (t.name = "span"); + E.children.push(t); + return HTMLResult.success(h, Q); + } + this.ui.checkButton && (t.attributes.class[0] = "xfaCaptionForCheckButton"); + E.attributes.class || (E.attributes.class = []); + E.children.splice(0, 0, t); + switch (this.caption.placement) { + case "left": + case "inline": + E.attributes.class.push("xfaLeft"); + break; + case "right": + E.attributes.class.push("xfaRight"); + break; + case "top": + E.attributes.class.push("xfaTop"); + break; + case "bottom": + E.attributes.class.push("xfaBottom"); + } + this.w = i; + this.h = a; + return HTMLResult.success(createWrapper(this, h), Q); + } +} +class Fill extends XFAObject { + constructor(e) { + super(Hn, "fill", !0); + this.id = e.id || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + this.linear = null; + this.pattern = null; + this.radial = null; + this.solid = null; + this.stipple = null; + } + [rn]() { + const e = this[pr](), + t = e[pr]()[pr](), + i = Object.create(null); + let a = "color", + s = a; + if (e instanceof Border) { + a = "background-color"; + s = "background"; + t instanceof Ui && (i.backgroundColor = "white"); + } + if (e instanceof Rectangle || e instanceof Arc) { + a = s = "fill"; + i.fill = "white"; + } + for (const e of Object.getOwnPropertyNames(this)) { + if ("extras" === e || "color" === e) continue; + const t = this[e]; + if (!(t instanceof XFAObject)) continue; + const r = t[rn](this.color); + r && (i[r.startsWith("#") ? a : s] = r); + return i; + } + if (this.color?.value) { + const e = this.color[rn](); + i[e.startsWith("#") ? a : s] = e; + } + return i; + } +} +class Filter extends XFAObject { + constructor(e) { + super(Hn, "filter", !0); + this.addRevocationInfo = getStringOption(e.addRevocationInfo, [ + "", + "required", + "optional", + "none", + ]); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.version = getInteger({ + data: this.version, + defaultValue: 5, + validate: (e) => e >= 1 && e <= 5, + }); + this.appearanceFilter = null; + this.certificates = null; + this.digestMethods = null; + this.encodings = null; + this.encryptionMethods = null; + this.handler = null; + this.lockDocument = null; + this.mdp = null; + this.reasons = null; + this.timeStamp = null; + } +} +class Float extends ContentObject { + constructor(e) { + super(Hn, "float"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = parseFloat(this[er].trim()); + this[er] = isNaN(e) ? null : e; + } + [an](e) { + return valueToHtml(null !== this[er] ? this[er].toString() : ""); + } +} +class template_Font extends XFAObject { + constructor(e) { + super(Hn, "font", !0); + this.baselineShift = getMeasurement(e.baselineShift); + this.fontHorizontalScale = getFloat({ + data: e.fontHorizontalScale, + defaultValue: 100, + validate: (e) => e >= 0, + }); + this.fontVerticalScale = getFloat({ + data: e.fontVerticalScale, + defaultValue: 100, + validate: (e) => e >= 0, + }); + this.id = e.id || ""; + this.kerningMode = getStringOption(e.kerningMode, ["none", "pair"]); + this.letterSpacing = getMeasurement(e.letterSpacing, "0"); + this.lineThrough = getInteger({ + data: e.lineThrough, + defaultValue: 0, + validate: (e) => 1 === e || 2 === e, + }); + this.lineThroughPeriod = getStringOption(e.lineThroughPeriod, [ + "all", + "word", + ]); + this.overline = getInteger({ + data: e.overline, + defaultValue: 0, + validate: (e) => 1 === e || 2 === e, + }); + this.overlinePeriod = getStringOption(e.overlinePeriod, ["all", "word"]); + this.posture = getStringOption(e.posture, ["normal", "italic"]); + this.size = getMeasurement(e.size, "10pt"); + this.typeface = e.typeface || "Courier"; + this.underline = getInteger({ + data: e.underline, + defaultValue: 0, + validate: (e) => 1 === e || 2 === e, + }); + this.underlinePeriod = getStringOption(e.underlinePeriod, ["all", "word"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.weight = getStringOption(e.weight, ["normal", "bold"]); + this.extras = null; + this.fill = null; + } + [Vs](e) { + super[Vs](e); + this[yr].usedTypefaces.add(this.typeface); + } + [rn]() { + const e = toStyle(this, "fill"), + t = e.color; + if (t) + if ("#000000" === t) delete e.color; + else if (!t.startsWith("#")) { + e.background = t; + e.backgroundClip = "text"; + e.color = "transparent"; + } + this.baselineShift && + (e.verticalAlign = measureToString(this.baselineShift)); + e.fontKerning = "none" === this.kerningMode ? "none" : "normal"; + e.letterSpacing = measureToString(this.letterSpacing); + if (0 !== this.lineThrough) { + e.textDecoration = "line-through"; + 2 === this.lineThrough && (e.textDecorationStyle = "double"); + } + if (0 !== this.overline) { + e.textDecoration = "overline"; + 2 === this.overline && (e.textDecorationStyle = "double"); + } + e.fontStyle = this.posture; + e.fontSize = measureToString(0.99 * this.size); + setFontFamily(this, this, this[yr].fontFinder, e); + if (0 !== this.underline) { + e.textDecoration = "underline"; + 2 === this.underline && (e.textDecorationStyle = "double"); + } + e.fontWeight = this.weight; + return e; + } +} +class Format extends XFAObject { + constructor(e) { + super(Hn, "format", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.picture = null; + } +} +class Handler extends StringObject { + constructor(e) { + super(Hn, "handler"); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Hyphenation extends XFAObject { + constructor(e) { + super(Hn, "hyphenation"); + this.excludeAllCaps = getInteger({ + data: e.excludeAllCaps, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.excludeInitialCap = getInteger({ + data: e.excludeInitialCap, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.hyphenate = getInteger({ + data: e.hyphenate, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.id = e.id || ""; + this.pushCharacterCount = getInteger({ + data: e.pushCharacterCount, + defaultValue: 3, + validate: (e) => e >= 0, + }); + this.remainCharacterCount = getInteger({ + data: e.remainCharacterCount, + defaultValue: 3, + validate: (e) => e >= 0, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.wordCharacterCount = getInteger({ + data: e.wordCharacterCount, + defaultValue: 7, + validate: (e) => e >= 0, + }); + } +} +class Image extends StringObject { + constructor(e) { + super(Hn, "image"); + this.aspect = getStringOption(e.aspect, [ + "fit", + "actual", + "height", + "none", + "width", + ]); + this.contentType = e.contentType || ""; + this.href = e.href || ""; + this.id = e.id || ""; + this.name = e.name || ""; + this.transferEncoding = getStringOption(e.transferEncoding, [ + "base64", + "none", + "package", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [an]() { + if (this.contentType && !vn.has(this.contentType.toLowerCase())) + return HTMLResult.EMPTY; + let e = this[yr].images && this[yr].images.get(this.href); + if (!e && (this.href || !this[er])) return HTMLResult.EMPTY; + e || + "base64" !== this.transferEncoding || + (e = stringToBytes(atob(this[er]))); + if (!e) return HTMLResult.EMPTY; + if (!this.contentType) { + for (const [t, i] of Kn) + if (e.length > t.length && t.every((t, i) => t === e[i])) { + this.contentType = i; + break; + } + if (!this.contentType) return HTMLResult.EMPTY; + } + const t = new Blob([e], { type: this.contentType }); + let i; + switch (this.aspect) { + case "fit": + case "actual": + break; + case "height": + i = { height: "100%", objectFit: "fill" }; + break; + case "none": + i = { width: "100%", height: "100%", objectFit: "fill" }; + break; + case "width": + i = { width: "100%", objectFit: "fill" }; + } + const a = this[pr](); + return HTMLResult.success({ + name: "img", + attributes: { + class: ["xfaImage"], + style: i, + src: URL.createObjectURL(t), + alt: a ? ariaLabel(a[pr]()) : null, + }, + }); + } +} +class ImageEdit extends XFAObject { + constructor(e) { + super(Hn, "imageEdit", !0); + this.data = getStringOption(e.data, ["link", "embed"]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + [an](e) { + return "embed" === this.data + ? HTMLResult.success({ name: "div", children: [], attributes: {} }) + : HTMLResult.EMPTY; + } +} +class Integer extends ContentObject { + constructor(e) { + super(Hn, "integer"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = parseInt(this[er].trim(), 10); + this[er] = isNaN(e) ? null : e; + } + [an](e) { + return valueToHtml(null !== this[er] ? this[er].toString() : ""); + } +} +class Issuers extends XFAObject { + constructor(e) { + super(Hn, "issuers", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.certificate = new XFAObjectArray(); + } +} +class Items extends XFAObject { + constructor(e) { + super(Hn, "items", !0); + this.id = e.id || ""; + this.name = e.name || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.ref = e.ref || ""; + this.save = getInteger({ + data: e.save, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.boolean = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.time = new XFAObjectArray(); + } + [an]() { + const e = []; + for (const t of this[Er]()) e.push(t[en]()); + return HTMLResult.success(e); + } +} +class Keep extends XFAObject { + constructor(e) { + super(Hn, "keep", !0); + this.id = e.id || ""; + const t = ["none", "contentArea", "pageArea"]; + this.intact = getStringOption(e.intact, t); + this.next = getStringOption(e.next, t); + this.previous = getStringOption(e.previous, t); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } +} +class KeyUsage extends XFAObject { + constructor(e) { + super(Hn, "keyUsage"); + const t = ["", "yes", "no"]; + this.crlSign = getStringOption(e.crlSign, t); + this.dataEncipherment = getStringOption(e.dataEncipherment, t); + this.decipherOnly = getStringOption(e.decipherOnly, t); + this.digitalSignature = getStringOption(e.digitalSignature, t); + this.encipherOnly = getStringOption(e.encipherOnly, t); + this.id = e.id || ""; + this.keyAgreement = getStringOption(e.keyAgreement, t); + this.keyCertSign = getStringOption(e.keyCertSign, t); + this.keyEncipherment = getStringOption(e.keyEncipherment, t); + this.nonRepudiation = getStringOption(e.nonRepudiation, t); + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Line extends XFAObject { + constructor(e) { + super(Hn, "line", !0); + this.hand = getStringOption(e.hand, ["even", "left", "right"]); + this.id = e.id || ""; + this.slope = getStringOption(e.slope, ["\\", "/"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.edge = null; + } + [an]() { + const e = this[pr]()[pr](), + t = this.edge || new Edge({}), + i = t[rn](), + a = Object.create(null), + s = "visible" === t.presence ? t.thickness : 0; + a.strokeWidth = measureToString(s); + a.stroke = i.color; + let r, + n, + g, + o, + c = "100%", + C = "100%"; + if (e.w <= s) { + [r, n, g, o] = ["50%", 0, "50%", "100%"]; + c = a.strokeWidth; + } else if (e.h <= s) { + [r, n, g, o] = [0, "50%", "100%", "50%"]; + C = a.strokeWidth; + } else + "\\" === this.slope + ? ([r, n, g, o] = [0, 0, "100%", "100%"]) + : ([r, n, g, o] = [0, "100%", "100%", 0]); + const h = { + name: "svg", + children: [ + { + name: "line", + attributes: { xmlns: Jn, x1: r, y1: n, x2: g, y2: o, style: a }, + }, + ], + attributes: { + xmlns: Jn, + width: c, + height: C, + style: { overflow: "visible" }, + }, + }; + if (hasMargin(e)) + return HTMLResult.success({ + name: "div", + attributes: { + style: { display: "inline", width: "100%", height: "100%" }, + }, + children: [h], + }); + h.attributes.style.position = "absolute"; + return HTMLResult.success(h); + } +} +class Linear extends XFAObject { + constructor(e) { + super(Hn, "linear", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, [ + "toRight", + "toBottom", + "toLeft", + "toTop", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn](e) { + e = e ? e[rn]() : "#FFFFFF"; + return `linear-gradient(${this.type.replace(/([RBLT])/, " $1").toLowerCase()}, ${e}, ${this.color ? this.color[rn]() : "#000000"})`; + } +} +class LockDocument extends ContentObject { + constructor(e) { + super(Hn, "lockDocument"); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + this[er] = getStringOption(this[er], ["auto", "0", "1"]); + } +} +class Manifest extends XFAObject { + constructor(e) { + super(Hn, "manifest", !0); + this.action = getStringOption(e.action, ["include", "all", "exclude"]); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.ref = new XFAObjectArray(); + } +} +class Margin extends XFAObject { + constructor(e) { + super(Hn, "margin", !0); + this.bottomInset = getMeasurement(e.bottomInset, "0"); + this.id = e.id || ""; + this.leftInset = getMeasurement(e.leftInset, "0"); + this.rightInset = getMeasurement(e.rightInset, "0"); + this.topInset = getMeasurement(e.topInset, "0"); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } + [rn]() { + return { + margin: + measureToString(this.topInset) + + " " + + measureToString(this.rightInset) + + " " + + measureToString(this.bottomInset) + + " " + + measureToString(this.leftInset), + }; + } +} +class Mdp extends XFAObject { + constructor(e) { + super(Hn, "mdp"); + this.id = e.id || ""; + this.permissions = getInteger({ + data: e.permissions, + defaultValue: 2, + validate: (e) => 1 === e || 3 === e, + }); + this.signatureType = getStringOption(e.signatureType, ["filler", "author"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Medium extends XFAObject { + constructor(e) { + super(Hn, "medium"); + this.id = e.id || ""; + this.imagingBBox = (function getBBox(e) { + const t = -1; + if (!e) return { x: t, y: t, width: t, height: t }; + const i = e + .trim() + .split(/\s*,\s*/) + .map((e) => getMeasurement(e, "-1")); + if (i.length < 4 || i[2] < 0 || i[3] < 0) + return { x: t, y: t, width: t, height: t }; + const [a, s, r, n] = i; + return { x: a, y: s, width: r, height: n }; + })(e.imagingBBox); + this.long = getMeasurement(e.long); + this.orientation = getStringOption(e.orientation, [ + "portrait", + "landscape", + ]); + this.short = getMeasurement(e.short); + this.stock = e.stock || ""; + this.trayIn = getStringOption(e.trayIn, ["auto", "delegate", "pageFront"]); + this.trayOut = getStringOption(e.trayOut, ["auto", "delegate"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Message extends XFAObject { + constructor(e) { + super(Hn, "message", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.text = new XFAObjectArray(); + } +} +class NumericEdit extends XFAObject { + constructor(e) { + super(Hn, "numericEdit", !0); + this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ + "auto", + "off", + "on", + ]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + [an](e) { + const t = toStyle(this, "border", "font", "margin"), + i = this[pr]()[pr](), + a = { + name: "input", + attributes: { + type: "text", + fieldId: i[nn], + dataId: i[tr]?.[nn] || i[nn], + class: ["xfaTextfield"], + style: t, + "aria-label": ariaLabel(i), + "aria-required": !1, + }, + }; + if (isRequired(i)) { + a.attributes["aria-required"] = !0; + a.attributes.required = !0; + } + return HTMLResult.success({ + name: "label", + attributes: { class: ["xfaLabel"] }, + children: [a], + }); + } +} +class Occur extends XFAObject { + constructor(e) { + super(Hn, "occur", !0); + this.id = e.id || ""; + this.initial = + "" !== e.initial + ? getInteger({ data: e.initial, defaultValue: "", validate: (e) => !0 }) + : ""; + this.max = + "" !== e.max + ? getInteger({ data: e.max, defaultValue: 1, validate: (e) => !0 }) + : ""; + this.min = + "" !== e.min + ? getInteger({ data: e.min, defaultValue: 1, validate: (e) => !0 }) + : ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } + [Vs]() { + const e = this[pr](), + t = this.min; + "" === this.min && + (this.min = e instanceof PageArea || e instanceof PageSet ? 0 : 1); + "" === this.max && + (this.max = + "" === t + ? e instanceof PageArea || e instanceof PageSet + ? -1 + : 1 + : this.min); + -1 !== this.max && this.max < this.min && (this.max = this.min); + "" === this.initial && + (this.initial = e instanceof Template ? 1 : this.min); + } +} +class Oid extends StringObject { + constructor(e) { + super(Hn, "oid"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Oids extends XFAObject { + constructor(e) { + super(Hn, "oids", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.oid = new XFAObjectArray(); + } +} +class Overflow extends XFAObject { + constructor(e) { + super(Hn, "overflow"); + this.id = e.id || ""; + this.leader = e.leader || ""; + this.target = e.target || ""; + this.trailer = e.trailer || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [lr]() { + if (!this[ar]) { + const e = this[pr](), + t = this[mr](), + i = t[Vr](this.target, e), + a = t[Vr](this.leader, e), + s = t[Vr](this.trailer, e); + this[ar] = { + target: i?.[0] || null, + leader: a?.[0] || null, + trailer: s?.[0] || null, + addLeader: !1, + addTrailer: !1, + }; + } + return this[ar]; + } +} +class PageArea extends XFAObject { + constructor(e) { + super(Hn, "pageArea", !0); + this.blankOrNotBlank = getStringOption(e.blankOrNotBlank, [ + "any", + "blank", + "notBlank", + ]); + this.id = e.id || ""; + this.initialNumber = getInteger({ + data: e.initialNumber, + defaultValue: 1, + validate: (e) => !0, + }); + this.name = e.name || ""; + this.numbered = getInteger({ + data: e.numbered, + defaultValue: 1, + validate: (e) => !0, + }); + this.oddOrEven = getStringOption(e.oddOrEven, ["any", "even", "odd"]); + this.pagePosition = getStringOption(e.pagePosition, [ + "any", + "first", + "last", + "only", + "rest", + ]); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.desc = null; + this.extras = null; + this.medium = null; + this.occur = null; + this.area = new XFAObjectArray(); + this.contentArea = new XFAObjectArray(); + this.draw = new XFAObjectArray(); + this.exclGroup = new XFAObjectArray(); + this.field = new XFAObjectArray(); + this.subform = new XFAObjectArray(); + } + [Lr]() { + if (!this[ar]) { + this[ar] = { numberOfUse: 0 }; + return !0; + } + return ( + !this.occur || + -1 === this.occur.max || + this[ar].numberOfUse < this.occur.max + ); + } + [zs]() { + delete this[ar]; + } + [dr]() { + this[ar] || (this[ar] = { numberOfUse: 0 }); + const e = this[pr](); + if ("orderedOccurrence" === e.relation && this[Lr]()) { + this[ar].numberOfUse += 1; + return this; + } + return e[dr](); + } + [or]() { + return this[ar].space || { width: 0, height: 0 }; + } + [an]() { + this[ar] || (this[ar] = { numberOfUse: 1 }); + const e = []; + this[ar].children = e; + const t = Object.create(null); + if (this.medium && this.medium.short && this.medium.long) { + t.width = measureToString(this.medium.short); + t.height = measureToString(this.medium.long); + this[ar].space = { width: this.medium.short, height: this.medium.long }; + if ("landscape" === this.medium.orientation) { + const e = t.width; + t.width = t.height; + t.height = e; + this[ar].space = { width: this.medium.long, height: this.medium.short }; + } + } else warn("XFA - No medium specified in pageArea: please file a bug."); + this[Zs]({ + filter: new Set(["area", "draw", "field", "subform"]), + include: !0, + }); + this[Zs]({ filter: new Set(["contentArea"]), include: !0 }); + return HTMLResult.success({ + name: "div", + children: e, + attributes: { + class: ["xfaPage"], + id: this[nn], + style: t, + xfaName: this.name, + }, + }); + } +} +class PageSet extends XFAObject { + constructor(e) { + super(Hn, "pageSet", !0); + this.duplexImposition = getStringOption(e.duplexImposition, [ + "longEdge", + "shortEdge", + ]); + this.id = e.id || ""; + this.name = e.name || ""; + this.relation = getStringOption(e.relation, [ + "orderedOccurrence", + "duplexPaginated", + "simplexPaginated", + ]); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.occur = null; + this.pageArea = new XFAObjectArray(); + this.pageSet = new XFAObjectArray(); + } + [zs]() { + for (const e of this.pageArea.children) e[zs](); + for (const e of this.pageSet.children) e[zs](); + } + [Lr]() { + return ( + !this.occur || + -1 === this.occur.max || + this[ar].numberOfUse < this.occur.max + ); + } + [dr]() { + this[ar] || + (this[ar] = { numberOfUse: 1, pageIndex: -1, pageSetIndex: -1 }); + if ("orderedOccurrence" === this.relation) { + if (this[ar].pageIndex + 1 < this.pageArea.children.length) { + this[ar].pageIndex += 1; + return this.pageArea.children[this[ar].pageIndex][dr](); + } + if (this[ar].pageSetIndex + 1 < this.pageSet.children.length) { + this[ar].pageSetIndex += 1; + return this.pageSet.children[this[ar].pageSetIndex][dr](); + } + if (this[Lr]()) { + this[ar].numberOfUse += 1; + this[ar].pageIndex = -1; + this[ar].pageSetIndex = -1; + return this[dr](); + } + const e = this[pr](); + if (e instanceof PageSet) return e[dr](); + this[zs](); + return this[dr](); + } + const e = this[mr]()[ar].pageNumber, + t = e % 2 == 0 ? "even" : "odd", + i = 0 === e ? "first" : "rest"; + let a = this.pageArea.children.find( + (e) => e.oddOrEven === t && e.pagePosition === i, + ); + if (a) return a; + a = this.pageArea.children.find( + (e) => "any" === e.oddOrEven && e.pagePosition === i, + ); + if (a) return a; + a = this.pageArea.children.find( + (e) => "any" === e.oddOrEven && "any" === e.pagePosition, + ); + return a || this.pageArea.children[0]; + } +} +class Para extends XFAObject { + constructor(e) { + super(Hn, "para", !0); + this.hAlign = getStringOption(e.hAlign, [ + "left", + "center", + "justify", + "justifyAll", + "radix", + "right", + ]); + this.id = e.id || ""; + this.lineHeight = e.lineHeight ? getMeasurement(e.lineHeight, "0pt") : ""; + this.marginLeft = e.marginLeft ? getMeasurement(e.marginLeft, "0pt") : ""; + this.marginRight = e.marginRight + ? getMeasurement(e.marginRight, "0pt") + : ""; + this.orphans = getInteger({ + data: e.orphans, + defaultValue: 0, + validate: (e) => e >= 0, + }); + this.preserve = e.preserve || ""; + this.radixOffset = e.radixOffset + ? getMeasurement(e.radixOffset, "0pt") + : ""; + this.spaceAbove = e.spaceAbove ? getMeasurement(e.spaceAbove, "0pt") : ""; + this.spaceBelow = e.spaceBelow ? getMeasurement(e.spaceBelow, "0pt") : ""; + this.tabDefault = e.tabDefault ? getMeasurement(this.tabDefault) : ""; + this.tabStops = (e.tabStops || "") + .trim() + .split(/\s+/) + .map((e, t) => (t % 2 == 1 ? getMeasurement(e) : e)); + this.textIndent = e.textIndent ? getMeasurement(e.textIndent, "0pt") : ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.vAlign = getStringOption(e.vAlign, ["top", "bottom", "middle"]); + this.widows = getInteger({ + data: e.widows, + defaultValue: 0, + validate: (e) => e >= 0, + }); + this.hyphenation = null; + } + [rn]() { + const e = toStyle(this, "hAlign"); + "" !== this.marginLeft && + (e.paddingLeft = measureToString(this.marginLeft)); + "" !== this.marginRight && + (e.paddingight = measureToString(this.marginRight)); + "" !== this.spaceAbove && (e.paddingTop = measureToString(this.spaceAbove)); + "" !== this.spaceBelow && + (e.paddingBottom = measureToString(this.spaceBelow)); + if ("" !== this.textIndent) { + e.textIndent = measureToString(this.textIndent); + fixTextIndent(e); + } + this.lineHeight > 0 && (e.lineHeight = measureToString(this.lineHeight)); + "" !== this.tabDefault && (e.tabSize = measureToString(this.tabDefault)); + this.tabStops.length; + this.hyphenatation && Object.assign(e, this.hyphenatation[rn]()); + return e; + } +} +class PasswordEdit extends XFAObject { + constructor(e) { + super(Hn, "passwordEdit", !0); + this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ + "auto", + "off", + "on", + ]); + this.id = e.id || ""; + this.passwordChar = e.passwordChar || "*"; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } +} +class template_Pattern extends XFAObject { + constructor(e) { + super(Hn, "pattern", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, [ + "crossHatch", + "crossDiagonal", + "diagonalLeft", + "diagonalRight", + "horizontal", + "vertical", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn](e) { + e = e ? e[rn]() : "#FFFFFF"; + const t = this.color ? this.color[rn]() : "#000000", + i = "repeating-linear-gradient", + a = `${e},${e} 5px,${t} 5px,${t} 10px`; + switch (this.type) { + case "crossHatch": + return `${i}(to top,${a}) ${i}(to right,${a})`; + case "crossDiagonal": + return `${i}(45deg,${a}) ${i}(-45deg,${a})`; + case "diagonalLeft": + return `${i}(45deg,${a})`; + case "diagonalRight": + return `${i}(-45deg,${a})`; + case "horizontal": + return `${i}(to top,${a})`; + case "vertical": + return `${i}(to right,${a})`; + } + return ""; + } +} +class Picture extends StringObject { + constructor(e) { + super(Hn, "picture"); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Proto extends XFAObject { + constructor(e) { + super(Hn, "proto", !0); + this.appearanceFilter = new XFAObjectArray(); + this.arc = new XFAObjectArray(); + this.area = new XFAObjectArray(); + this.assist = new XFAObjectArray(); + this.barcode = new XFAObjectArray(); + this.bindItems = new XFAObjectArray(); + this.bookend = new XFAObjectArray(); + this.boolean = new XFAObjectArray(); + this.border = new XFAObjectArray(); + this.break = new XFAObjectArray(); + this.breakAfter = new XFAObjectArray(); + this.breakBefore = new XFAObjectArray(); + this.button = new XFAObjectArray(); + this.calculate = new XFAObjectArray(); + this.caption = new XFAObjectArray(); + this.certificate = new XFAObjectArray(); + this.certificates = new XFAObjectArray(); + this.checkButton = new XFAObjectArray(); + this.choiceList = new XFAObjectArray(); + this.color = new XFAObjectArray(); + this.comb = new XFAObjectArray(); + this.connect = new XFAObjectArray(); + this.contentArea = new XFAObjectArray(); + this.corner = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.dateTimeEdit = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.defaultUi = new XFAObjectArray(); + this.desc = new XFAObjectArray(); + this.digestMethod = new XFAObjectArray(); + this.digestMethods = new XFAObjectArray(); + this.draw = new XFAObjectArray(); + this.edge = new XFAObjectArray(); + this.encoding = new XFAObjectArray(); + this.encodings = new XFAObjectArray(); + this.encrypt = new XFAObjectArray(); + this.encryptData = new XFAObjectArray(); + this.encryption = new XFAObjectArray(); + this.encryptionMethod = new XFAObjectArray(); + this.encryptionMethods = new XFAObjectArray(); + this.event = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.exObject = new XFAObjectArray(); + this.exclGroup = new XFAObjectArray(); + this.execute = new XFAObjectArray(); + this.extras = new XFAObjectArray(); + this.field = new XFAObjectArray(); + this.fill = new XFAObjectArray(); + this.filter = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.font = new XFAObjectArray(); + this.format = new XFAObjectArray(); + this.handler = new XFAObjectArray(); + this.hyphenation = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.imageEdit = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.issuers = new XFAObjectArray(); + this.items = new XFAObjectArray(); + this.keep = new XFAObjectArray(); + this.keyUsage = new XFAObjectArray(); + this.line = new XFAObjectArray(); + this.linear = new XFAObjectArray(); + this.lockDocument = new XFAObjectArray(); + this.manifest = new XFAObjectArray(); + this.margin = new XFAObjectArray(); + this.mdp = new XFAObjectArray(); + this.medium = new XFAObjectArray(); + this.message = new XFAObjectArray(); + this.numericEdit = new XFAObjectArray(); + this.occur = new XFAObjectArray(); + this.oid = new XFAObjectArray(); + this.oids = new XFAObjectArray(); + this.overflow = new XFAObjectArray(); + this.pageArea = new XFAObjectArray(); + this.pageSet = new XFAObjectArray(); + this.para = new XFAObjectArray(); + this.passwordEdit = new XFAObjectArray(); + this.pattern = new XFAObjectArray(); + this.picture = new XFAObjectArray(); + this.radial = new XFAObjectArray(); + this.reason = new XFAObjectArray(); + this.reasons = new XFAObjectArray(); + this.rectangle = new XFAObjectArray(); + this.ref = new XFAObjectArray(); + this.script = new XFAObjectArray(); + this.setProperty = new XFAObjectArray(); + this.signData = new XFAObjectArray(); + this.signature = new XFAObjectArray(); + this.signing = new XFAObjectArray(); + this.solid = new XFAObjectArray(); + this.speak = new XFAObjectArray(); + this.stipple = new XFAObjectArray(); + this.subform = new XFAObjectArray(); + this.subformSet = new XFAObjectArray(); + this.subjectDN = new XFAObjectArray(); + this.subjectDNs = new XFAObjectArray(); + this.submit = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.textEdit = new XFAObjectArray(); + this.time = new XFAObjectArray(); + this.timeStamp = new XFAObjectArray(); + this.toolTip = new XFAObjectArray(); + this.traversal = new XFAObjectArray(); + this.traverse = new XFAObjectArray(); + this.ui = new XFAObjectArray(); + this.validate = new XFAObjectArray(); + this.value = new XFAObjectArray(); + this.variables = new XFAObjectArray(); + } +} +class Radial extends XFAObject { + constructor(e) { + super(Hn, "radial", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["toEdge", "toCenter"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn](e) { + e = e ? e[rn]() : "#FFFFFF"; + const t = this.color ? this.color[rn]() : "#000000"; + return `radial-gradient(circle at center, ${"toEdge" === this.type ? `${e},${t}` : `${t},${e}`})`; + } +} +class Reason extends StringObject { + constructor(e) { + super(Hn, "reason"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Reasons extends XFAObject { + constructor(e) { + super(Hn, "reasons", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.reason = new XFAObjectArray(); + } +} +class Rectangle extends XFAObject { + constructor(e) { + super(Hn, "rectangle", !0); + this.hand = getStringOption(e.hand, ["even", "left", "right"]); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.corner = new XFAObjectArray(4); + this.edge = new XFAObjectArray(4); + this.fill = null; + } + [an]() { + const e = this.edge.children.length ? this.edge.children[0] : new Edge({}), + t = e[rn](), + i = Object.create(null); + "visible" === this.fill?.presence + ? Object.assign(i, this.fill[rn]()) + : (i.fill = "transparent"); + i.strokeWidth = measureToString("visible" === e.presence ? e.thickness : 0); + i.stroke = t.color; + const a = ( + this.corner.children.length ? this.corner.children[0] : new Corner({}) + )[rn](), + s = { + name: "svg", + children: [ + { + name: "rect", + attributes: { + xmlns: Jn, + width: "100%", + height: "100%", + x: 0, + y: 0, + rx: a.radius, + ry: a.radius, + style: i, + }, + }, + ], + attributes: { + xmlns: Jn, + style: { overflow: "visible" }, + width: "100%", + height: "100%", + }, + }; + if (hasMargin(this[pr]()[pr]())) + return HTMLResult.success({ + name: "div", + attributes: { + style: { display: "inline", width: "100%", height: "100%" }, + }, + children: [s], + }); + s.attributes.style.position = "absolute"; + return HTMLResult.success(s); + } +} +class RefElement extends StringObject { + constructor(e) { + super(Hn, "ref"); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Script extends StringObject { + constructor(e) { + super(Hn, "script"); + this.binding = e.binding || ""; + this.contentType = e.contentType || ""; + this.id = e.id || ""; + this.name = e.name || ""; + this.runAt = getStringOption(e.runAt, ["client", "both", "server"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class SetProperty extends XFAObject { + constructor(e) { + super(Hn, "setProperty"); + this.connection = e.connection || ""; + this.ref = e.ref || ""; + this.target = e.target || ""; + } +} +class SignData extends XFAObject { + constructor(e) { + super(Hn, "signData", !0); + this.id = e.id || ""; + this.operation = getStringOption(e.operation, ["sign", "clear", "verify"]); + this.ref = e.ref || ""; + this.target = e.target || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.filter = null; + this.manifest = null; + } +} +class Signature extends XFAObject { + constructor(e) { + super(Hn, "signature", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["PDF1.3", "PDF1.6"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.border = null; + this.extras = null; + this.filter = null; + this.manifest = null; + this.margin = null; + } +} +class Signing extends XFAObject { + constructor(e) { + super(Hn, "signing", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.certificate = new XFAObjectArray(); + } +} +class Solid extends XFAObject { + constructor(e) { + super(Hn, "solid", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + } + [rn](e) { + return e ? e[rn]() : "#FFFFFF"; + } +} +class Speak extends StringObject { + constructor(e) { + super(Hn, "speak"); + this.disable = getInteger({ + data: e.disable, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.id = e.id || ""; + this.priority = getStringOption(e.priority, [ + "custom", + "caption", + "name", + "toolTip", + ]); + this.rid = e.rid || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Stipple extends XFAObject { + constructor(e) { + super(Hn, "stipple", !0); + this.id = e.id || ""; + this.rate = getInteger({ + data: e.rate, + defaultValue: 50, + validate: (e) => e >= 0 && e <= 100, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.color = null; + this.extras = null; + } + [rn](e) { + const t = this.rate / 100; + return Util.makeHexColor( + Math.round(e.value.r * (1 - t) + this.value.r * t), + Math.round(e.value.g * (1 - t) + this.value.g * t), + Math.round(e.value.b * (1 - t) + this.value.b * t), + ); + } +} +class Subform extends XFAObject { + constructor(e) { + super(Hn, "subform", !0); + this.access = getStringOption(e.access, [ + "open", + "nonInteractive", + "protected", + "readOnly", + ]); + this.allowMacro = getInteger({ + data: e.allowMacro, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.anchorType = getStringOption(e.anchorType, [ + "topLeft", + "bottomCenter", + "bottomLeft", + "bottomRight", + "middleCenter", + "middleLeft", + "middleRight", + "topCenter", + "topRight", + ]); + this.colSpan = getInteger({ + data: e.colSpan, + defaultValue: 1, + validate: (e) => e >= 1 || -1 === e, + }); + this.columnWidths = (e.columnWidths || "") + .trim() + .split(/\s+/) + .map((e) => ("-1" === e ? -1 : getMeasurement(e))); + this.h = e.h ? getMeasurement(e.h) : ""; + this.hAlign = getStringOption(e.hAlign, [ + "left", + "center", + "justify", + "justifyAll", + "radix", + "right", + ]); + this.id = e.id || ""; + this.layout = getStringOption(e.layout, [ + "position", + "lr-tb", + "rl-row", + "rl-tb", + "row", + "table", + "tb", + ]); + this.locale = e.locale || ""; + this.maxH = getMeasurement(e.maxH, "0pt"); + this.maxW = getMeasurement(e.maxW, "0pt"); + this.mergeMode = getStringOption(e.mergeMode, [ + "consumeData", + "matchTemplate", + ]); + this.minH = getMeasurement(e.minH, "0pt"); + this.minW = getMeasurement(e.minW, "0pt"); + this.name = e.name || ""; + this.presence = getStringOption(e.presence, [ + "visible", + "hidden", + "inactive", + "invisible", + ]); + this.relevant = getRelevant(e.relevant); + this.restoreState = getStringOption(e.restoreState, ["manual", "auto"]); + this.scope = getStringOption(e.scope, ["name", "none"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.w = e.w ? getMeasurement(e.w) : ""; + this.x = getMeasurement(e.x, "0pt"); + this.y = getMeasurement(e.y, "0pt"); + this.assist = null; + this.bind = null; + this.bookend = null; + this.border = null; + this.break = null; + this.calculate = null; + this.desc = null; + this.extras = null; + this.keep = null; + this.margin = null; + this.occur = null; + this.overflow = null; + this.pageSet = null; + this.para = null; + this.traversal = null; + this.validate = null; + this.variables = null; + this.area = new XFAObjectArray(); + this.breakAfter = new XFAObjectArray(); + this.breakBefore = new XFAObjectArray(); + this.connect = new XFAObjectArray(); + this.draw = new XFAObjectArray(); + this.event = new XFAObjectArray(); + this.exObject = new XFAObjectArray(); + this.exclGroup = new XFAObjectArray(); + this.field = new XFAObjectArray(); + this.proto = new XFAObjectArray(); + this.setProperty = new XFAObjectArray(); + this.subform = new XFAObjectArray(); + this.subformSet = new XFAObjectArray(); + } + [fr]() { + const e = this[pr](); + return e instanceof SubformSet ? e[fr]() : e; + } + [kr]() { + return !0; + } + [Ur]() { + return ( + (this.layout.endsWith("-tb") && + 0 === this[ar].attempt && + this[ar].numberInLine > 0) || + this[pr]()[Ur]() + ); + } + *[ur]() { + yield* getContainedChildren(this); + } + [rr]() { + return flushHTML(this); + } + [js](e, t) { + addHTML(this, e, t); + } + [or]() { + return getAvailableSpace(this); + } + [xr]() { + const e = this[fr](); + if (!e[xr]()) return !1; + if (void 0 !== this[ar]._isSplittable) return this[ar]._isSplittable; + if ("position" === this.layout || this.layout.includes("row")) { + this[ar]._isSplittable = !1; + return !1; + } + if (this.keep && "none" !== this.keep.intact) { + this[ar]._isSplittable = !1; + return !1; + } + if (e.layout?.endsWith("-tb") && 0 !== e[ar].numberInLine) return !1; + this[ar]._isSplittable = !0; + return !0; + } + [an](e) { + setTabIndex(this); + if (this.break) { + if ("auto" !== this.break.after || "" !== this.break.afterTarget) { + const e = new BreakAfter({ + targetType: this.break.after, + target: this.break.afterTarget, + startNew: this.break.startNew.toString(), + }); + e[yr] = this[yr]; + this[Xs](e); + this.breakAfter.push(e); + } + if ("auto" !== this.break.before || "" !== this.break.beforeTarget) { + const e = new BreakBefore({ + targetType: this.break.before, + target: this.break.beforeTarget, + startNew: this.break.startNew.toString(), + }); + e[yr] = this[yr]; + this[Xs](e); + this.breakBefore.push(e); + } + if ("" !== this.break.overflowTarget) { + const e = new Overflow({ + target: this.break.overflowTarget, + leader: this.break.overflowLeader, + trailer: this.break.overflowTrailer, + }); + e[yr] = this[yr]; + this[Xs](e); + this.overflow.push(e); + } + this[jr](this.break); + this.break = null; + } + if ("hidden" === this.presence || "inactive" === this.presence) + return HTMLResult.EMPTY; + (this.breakBefore.children.length > 1 || + this.breakAfter.children.length > 1) && + warn( + "XFA - Several breakBefore or breakAfter in subforms: please file a bug.", + ); + if (this.breakBefore.children.length >= 1) { + const e = this.breakBefore.children[0]; + if (handleBreak(e)) return HTMLResult.breakNode(e); + } + if (this[ar]?.afterBreakAfter) return HTMLResult.EMPTY; + fixDimensions(this); + const t = [], + i = { id: this[nn], class: [] }; + setAccess(this, i.class); + this[ar] || (this[ar] = Object.create(null)); + Object.assign(this[ar], { + children: t, + line: null, + attributes: i, + attempt: 0, + numberInLine: 0, + availableSpace: { + width: Math.min(this.w || 1 / 0, e.width), + height: Math.min(this.h || 1 / 0, e.height), + }, + width: 0, + height: 0, + prevHeight: 0, + currentWidth: 0, + }); + const a = this[mr](), + s = a[ar].noLayoutFailure, + r = this[xr](); + r || setFirstUnsplittable(this); + if (!checkDimensions(this, e)) return HTMLResult.FAILURE; + const n = new Set([ + "area", + "draw", + "exclGroup", + "field", + "subform", + "subformSet", + ]); + if (this.layout.includes("row")) { + const e = this[fr]().columnWidths; + if (Array.isArray(e) && e.length > 0) { + this[ar].columnWidths = e; + this[ar].currentColumn = 0; + } + } + const g = toStyle( + this, + "anchorType", + "dimensions", + "position", + "presence", + "border", + "margin", + "hAlign", + ), + o = ["xfaSubform"], + c = layoutClass(this); + c && o.push(c); + i.style = g; + i.class = o; + this.name && (i.xfaName = this.name); + if (this.overflow) { + const t = this.overflow[lr](); + if (t.addLeader) { + t.addLeader = !1; + handleOverflow(this, t.leader, e); + } + } + this[Wr](); + const C = "lr-tb" === this.layout || "rl-tb" === this.layout, + h = C ? 2 : 1; + for (; this[ar].attempt < h; this[ar].attempt++) { + C && 1 === this[ar].attempt && (this[ar].numberInLine = 0); + const e = this[Zs]({ filter: n, include: !0 }); + if (e.success) break; + if (e.isBreak()) { + this[Pr](); + return e; + } + if ( + C && + 0 === this[ar].attempt && + 0 === this[ar].numberInLine && + !a[ar].noLayoutFailure + ) { + this[ar].attempt = h; + break; + } + } + this[Pr](); + r || unsetFirstUnsplittable(this); + a[ar].noLayoutFailure = s; + if (this[ar].attempt === h) { + this.overflow && (this[mr]()[ar].overflowNode = this.overflow); + r || delete this[ar]; + return HTMLResult.FAILURE; + } + if (this.overflow) { + const t = this.overflow[lr](); + if (t.addTrailer) { + t.addTrailer = !1; + handleOverflow(this, t.trailer, e); + } + } + let l = 0, + Q = 0; + if (this.margin) { + l = this.margin.leftInset + this.margin.rightInset; + Q = this.margin.topInset + this.margin.bottomInset; + } + const E = Math.max(this[ar].width + l, this.w || 0), + u = Math.max(this[ar].height + Q, this.h || 0), + d = [this.x, this.y, E, u]; + "" === this.w && (g.width = measureToString(E)); + "" === this.h && (g.height = measureToString(u)); + if (("0px" === g.width || "0px" === g.height) && 0 === t.length) + return HTMLResult.EMPTY; + const f = { name: "div", attributes: i, children: t }; + applyAssist(this, i); + const p = HTMLResult.success(createWrapper(this, f), d); + if (this.breakAfter.children.length >= 1) { + const e = this.breakAfter.children[0]; + if (handleBreak(e)) { + this[ar].afterBreakAfter = p; + return HTMLResult.breakNode(e); + } + } + delete this[ar]; + return p; + } +} +class SubformSet extends XFAObject { + constructor(e) { + super(Hn, "subformSet", !0); + this.id = e.id || ""; + this.name = e.name || ""; + this.relation = getStringOption(e.relation, [ + "ordered", + "choice", + "unordered", + ]); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.bookend = null; + this.break = null; + this.desc = null; + this.extras = null; + this.occur = null; + this.overflow = null; + this.breakAfter = new XFAObjectArray(); + this.breakBefore = new XFAObjectArray(); + this.subform = new XFAObjectArray(); + this.subformSet = new XFAObjectArray(); + } + *[ur]() { + yield* getContainedChildren(this); + } + [fr]() { + let e = this[pr](); + for (; !(e instanceof Subform); ) e = e[pr](); + return e; + } + [kr]() { + return !0; + } +} +class SubjectDN extends ContentObject { + constructor(e) { + super(Hn, "subjectDN"); + this.delimiter = e.delimiter || ","; + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + this[er] = new Map( + this[er].split(this.delimiter).map((e) => { + (e = e.split("=", 2))[0] = e[0].trim(); + return e; + }), + ); + } +} +class SubjectDNs extends XFAObject { + constructor(e) { + super(Hn, "subjectDNs", !0); + this.id = e.id || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.subjectDN = new XFAObjectArray(); + } +} +class Submit extends XFAObject { + constructor(e) { + super(Hn, "submit", !0); + this.embedPDF = getInteger({ + data: e.embedPDF, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.format = getStringOption(e.format, [ + "xdp", + "formdata", + "pdf", + "urlencoded", + "xfd", + "xml", + ]); + this.id = e.id || ""; + this.target = e.target || ""; + this.textEncoding = getKeyword({ + data: e.textEncoding ? e.textEncoding.toLowerCase() : "", + defaultValue: "", + validate: (e) => + [ + "utf-8", + "big-five", + "fontspecific", + "gbk", + "gb-18030", + "gb-2312", + "ksc-5601", + "none", + "shift-jis", + "ucs-2", + "utf-16", + ].includes(e) || e.match(/iso-8859-\d{2}/), + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.xdpContent = e.xdpContent || ""; + this.encrypt = null; + this.encryptData = new XFAObjectArray(); + this.signData = new XFAObjectArray(); + } +} +class Template extends XFAObject { + constructor(e) { + super(Hn, "template", !0); + this.baseProfile = getStringOption(e.baseProfile, [ + "full", + "interactiveForms", + ]); + this.extras = null; + this.subform = new XFAObjectArray(); + } + [sr]() { + 0 === this.subform.children.length && + warn("XFA - No subforms in template node."); + this.subform.children.length >= 2 && + warn("XFA - Several subforms in template node: please file a bug."); + this[An] = 5e3; + } + [xr]() { + return !0; + } + [Vr](e, t) { + return e.startsWith("#") + ? [this[Dr].get(e.slice(1))] + : searchNode(this, t, e, !0, !0); + } + *[tn]() { + if (!this.subform.children.length) + return HTMLResult.success({ name: "div", children: [] }); + this[ar] = { + overflowNode: null, + firstUnsplittable: null, + currentContentArea: null, + currentPageArea: null, + noLayoutFailure: !1, + pageNumber: 1, + pagePosition: "first", + oddOrEven: "odd", + blankOrNotBlank: "nonBlank", + paraStack: [], + }; + const e = this.subform.children[0]; + e.pageSet[zs](); + const t = e.pageSet.pageArea.children, + i = { name: "div", children: [] }; + let a = null, + s = null, + r = null; + if (e.breakBefore.children.length >= 1) { + s = e.breakBefore.children[0]; + r = s.target; + } else if ( + e.subform.children.length >= 1 && + e.subform.children[0].breakBefore.children.length >= 1 + ) { + s = e.subform.children[0].breakBefore.children[0]; + r = s.target; + } else if (e.break?.beforeTarget) { + s = e.break; + r = s.beforeTarget; + } else if ( + e.subform.children.length >= 1 && + e.subform.children[0].break?.beforeTarget + ) { + s = e.subform.children[0].break; + r = s.beforeTarget; + } + if (s) { + const e = this[Vr](r, s[pr]()); + if (e instanceof PageArea) { + a = e; + s[ar] = {}; + } + } + a || (a = t[0]); + a[ar] = { numberOfUse: 1 }; + const n = a[pr](); + n[ar] = { + numberOfUse: 1, + pageIndex: n.pageArea.children.indexOf(a), + pageSetIndex: 0, + }; + let g, + o = null, + c = null, + C = !0, + h = 0, + l = 0; + for (;;) { + if (C) h = 0; + else { + i.children.pop(); + if (3 == ++h) { + warn("XFA - Something goes wrong: please file a bug."); + return i; + } + } + g = null; + this[ar].currentPageArea = a; + const t = a[an]().html; + i.children.push(t); + if (o) { + this[ar].noLayoutFailure = !0; + t.children.push(o[an](a[ar].space).html); + o = null; + } + if (c) { + this[ar].noLayoutFailure = !0; + t.children.push(c[an](a[ar].space).html); + c = null; + } + const s = a.contentArea.children, + r = t.children.filter((e) => + e.attributes.class.includes("xfaContentarea"), + ); + C = !1; + this[ar].firstUnsplittable = null; + this[ar].noLayoutFailure = !1; + const flush = (t) => { + const i = e[rr](); + if (i) { + C ||= i.children?.length > 0; + r[t].children.push(i); + } + }; + for (let t = l, a = s.length; t < a; t++) { + const a = (this[ar].currentContentArea = s[t]), + n = { width: a.w, height: a.h }; + l = 0; + if (o) { + r[t].children.push(o[an](n).html); + o = null; + } + if (c) { + r[t].children.push(c[an](n).html); + c = null; + } + const h = e[an](n); + if (h.success) { + if (h.html) { + C ||= h.html.children?.length > 0; + r[t].children.push(h.html); + } else !C && i.children.length > 1 && i.children.pop(); + return i; + } + if (h.isBreak()) { + const e = h.breakNode; + flush(t); + if ("auto" === e.targetType) continue; + if (e.leader) { + o = this[Vr](e.leader, e[pr]()); + o = o ? o[0] : null; + } + if (e.trailer) { + c = this[Vr](e.trailer, e[pr]()); + c = c ? c[0] : null; + } + if ("pageArea" === e.targetType) { + g = e[ar].target; + t = 1 / 0; + } else if (e[ar].target) { + g = e[ar].target; + l = e[ar].index + 1; + t = 1 / 0; + } else t = e[ar].index; + } else if (this[ar].overflowNode) { + const e = this[ar].overflowNode; + this[ar].overflowNode = null; + const i = e[lr](), + a = i.target; + i.addLeader = null !== i.leader; + i.addTrailer = null !== i.trailer; + flush(t); + const r = t; + t = 1 / 0; + if (a instanceof PageArea) g = a; + else if (a instanceof ContentArea) { + const e = s.indexOf(a); + if (-1 !== e) e > r ? (t = e - 1) : (l = e); + else { + g = a[pr](); + l = g.contentArea.children.indexOf(a); + } + } + } else flush(t); + } + this[ar].pageNumber += 1; + g && (g[Lr]() ? (g[ar].numberOfUse += 1) : (g = null)); + a = g || a[dr](); + yield null; + } + } +} +class Text extends ContentObject { + constructor(e) { + super(Hn, "text"); + this.id = e.id || ""; + this.maxChars = getInteger({ + data: e.maxChars, + defaultValue: 0, + validate: (e) => e >= 0, + }); + this.name = e.name || ""; + this.rid = e.rid || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [Ws]() { + return !0; + } + [Kr](e) { + if (e[Jr] === on.xhtml.id) { + this[er] = e; + return !0; + } + warn(`XFA - Invalid content in Text: ${e[Yr]}.`); + return !1; + } + [qr](e) { + this[er] instanceof XFAObject || super[qr](e); + } + [sr]() { + "string" == typeof this[er] && + (this[er] = this[er].replaceAll("\r\n", "\n")); + } + [lr]() { + return "string" == typeof this[er] + ? this[er] + .split(/[\u2029\u2028\n]/) + .reduce((e, t) => { + t && e.push(t); + return e; + }, []) + .join("\n") + : this[er][en](); + } + [an](e) { + if ("string" == typeof this[er]) { + const e = valueToHtml(this[er]).html; + if (this[er].includes("\u2029")) { + e.name = "div"; + e.children = []; + this[er] + .split("\u2029") + .map((e) => + e.split(/[\u2028\n]/).reduce((e, t) => { + e.push({ name: "span", value: t }, { name: "br" }); + return e; + }, []), + ) + .forEach((t) => { + e.children.push({ name: "p", children: t }); + }); + } else if (/[\u2028\n]/.test(this[er])) { + e.name = "div"; + e.children = []; + this[er].split(/[\u2028\n]/).forEach((t) => { + e.children.push({ name: "span", value: t }, { name: "br" }); + }); + } + return HTMLResult.success(e); + } + return this[er][an](e); + } +} +class TextEdit extends XFAObject { + constructor(e) { + super(Hn, "textEdit", !0); + this.allowRichText = getInteger({ + data: e.allowRichText, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ + "auto", + "off", + "on", + ]); + this.id = e.id || ""; + this.multiLine = getInteger({ + data: e.multiLine, + defaultValue: "", + validate: (e) => 0 === e || 1 === e, + }); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.vScrollPolicy = getStringOption(e.vScrollPolicy, [ + "auto", + "off", + "on", + ]); + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + [an](e) { + const t = toStyle(this, "border", "font", "margin"); + let i; + const a = this[pr]()[pr](); + "" === this.multiLine && (this.multiLine = a instanceof Draw ? 1 : 0); + i = + 1 === this.multiLine + ? { + name: "textarea", + attributes: { + dataId: a[tr]?.[nn] || a[nn], + fieldId: a[nn], + class: ["xfaTextfield"], + style: t, + "aria-label": ariaLabel(a), + "aria-required": !1, + }, + } + : { + name: "input", + attributes: { + type: "text", + dataId: a[tr]?.[nn] || a[nn], + fieldId: a[nn], + class: ["xfaTextfield"], + style: t, + "aria-label": ariaLabel(a), + "aria-required": !1, + }, + }; + if (isRequired(a)) { + i.attributes["aria-required"] = !0; + i.attributes.required = !0; + } + return HTMLResult.success({ + name: "label", + attributes: { class: ["xfaLabel"] }, + children: [i], + }); + } +} +class Time extends StringObject { + constructor(e) { + super(Hn, "time"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } + [sr]() { + const e = this[er].trim(); + this[er] = e ? new Date(e) : null; + } + [an](e) { + return valueToHtml(this[er] ? this[er].toString() : ""); + } +} +class TimeStamp extends XFAObject { + constructor(e) { + super(Hn, "timeStamp"); + this.id = e.id || ""; + this.server = e.server || ""; + this.type = getStringOption(e.type, ["optional", "required"]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class ToolTip extends StringObject { + constructor(e) { + super(Hn, "toolTip"); + this.id = e.id || ""; + this.rid = e.rid || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Traversal extends XFAObject { + constructor(e) { + super(Hn, "traversal", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.traverse = new XFAObjectArray(); + } +} +class Traverse extends XFAObject { + constructor(e) { + super(Hn, "traverse", !0); + this.id = e.id || ""; + this.operation = getStringOption(e.operation, [ + "next", + "back", + "down", + "first", + "left", + "right", + "up", + ]); + this.ref = e.ref || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.script = null; + } + get name() { + return this.operation; + } + [Mr]() { + return !1; + } +} +class Ui extends XFAObject { + constructor(e) { + super(Hn, "ui", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.picture = null; + this.barcode = null; + this.button = null; + this.checkButton = null; + this.choiceList = null; + this.dateTimeEdit = null; + this.defaultUi = null; + this.imageEdit = null; + this.numericEdit = null; + this.passwordEdit = null; + this.signature = null; + this.textEdit = null; + } + [lr]() { + if (void 0 === this[ar]) { + for (const e of Object.getOwnPropertyNames(this)) { + if ("extras" === e || "picture" === e) continue; + const t = this[e]; + if (t instanceof XFAObject) { + this[ar] = t; + return t; + } + } + this[ar] = null; + } + return this[ar]; + } + [an](e) { + const t = this[lr](); + return t ? t[an](e) : HTMLResult.EMPTY; + } +} +class Validate extends XFAObject { + constructor(e) { + super(Hn, "validate", !0); + this.formatTest = getStringOption(e.formatTest, [ + "warning", + "disabled", + "error", + ]); + this.id = e.id || ""; + this.nullTest = getStringOption(e.nullTest, [ + "disabled", + "error", + "warning", + ]); + this.scriptTest = getStringOption(e.scriptTest, [ + "error", + "disabled", + "warning", + ]); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.extras = null; + this.message = null; + this.picture = null; + this.script = null; + } +} +class Value extends XFAObject { + constructor(e) { + super(Hn, "value", !0); + this.id = e.id || ""; + this.override = getInteger({ + data: e.override, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.relevant = getRelevant(e.relevant); + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.arc = null; + this.boolean = null; + this.date = null; + this.dateTime = null; + this.decimal = null; + this.exData = null; + this.float = null; + this.image = null; + this.integer = null; + this.line = null; + this.rectangle = null; + this.text = null; + this.time = null; + } + [$r](e) { + const t = this[pr](); + if (t instanceof Field && t.ui?.imageEdit) { + if (!this.image) { + this.image = new Image({}); + this[Xs](this.image); + } + this.image[er] = e[er]; + return; + } + const i = e[Yr]; + if (null === this[i]) { + for (const e of Object.getOwnPropertyNames(this)) { + const t = this[e]; + if (t instanceof XFAObject) { + this[e] = null; + this[jr](t); + } + } + this[e[Yr]] = e; + this[Xs](e); + } else this[i][er] = e[er]; + } + [en]() { + if (this.exData) + return "string" == typeof this.exData[er] + ? this.exData[er].trim() + : this.exData[er][en]().trim(); + for (const e of Object.getOwnPropertyNames(this)) { + if ("image" === e) continue; + const t = this[e]; + if (t instanceof XFAObject) return (t[er] || "").toString().trim(); + } + return null; + } + [an](e) { + for (const t of Object.getOwnPropertyNames(this)) { + const i = this[t]; + if (i instanceof XFAObject) return i[an](e); + } + return HTMLResult.EMPTY; + } +} +class Variables extends XFAObject { + constructor(e) { + super(Hn, "variables", !0); + this.id = e.id || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + this.boolean = new XFAObjectArray(); + this.date = new XFAObjectArray(); + this.dateTime = new XFAObjectArray(); + this.decimal = new XFAObjectArray(); + this.exData = new XFAObjectArray(); + this.float = new XFAObjectArray(); + this.image = new XFAObjectArray(); + this.integer = new XFAObjectArray(); + this.manifest = new XFAObjectArray(); + this.script = new XFAObjectArray(); + this.text = new XFAObjectArray(); + this.time = new XFAObjectArray(); + } + [Mr]() { + return !0; + } +} +class TemplateNamespace { + static [gn](e, t) { + if (TemplateNamespace.hasOwnProperty(e)) { + const i = TemplateNamespace[e](t); + i[_r](t); + return i; + } + } + static appearanceFilter(e) { + return new AppearanceFilter(e); + } + static arc(e) { + return new Arc(e); + } + static area(e) { + return new Area(e); + } + static assist(e) { + return new Assist(e); + } + static barcode(e) { + return new Barcode(e); + } + static bind(e) { + return new Bind(e); + } + static bindItems(e) { + return new BindItems(e); + } + static bookend(e) { + return new Bookend(e); + } + static boolean(e) { + return new BooleanElement(e); + } + static border(e) { + return new Border(e); + } + static break(e) { + return new Break(e); + } + static breakAfter(e) { + return new BreakAfter(e); + } + static breakBefore(e) { + return new BreakBefore(e); + } + static button(e) { + return new Button(e); + } + static calculate(e) { + return new Calculate(e); + } + static caption(e) { + return new Caption(e); + } + static certificate(e) { + return new Certificate(e); + } + static certificates(e) { + return new Certificates(e); + } + static checkButton(e) { + return new CheckButton(e); + } + static choiceList(e) { + return new ChoiceList(e); + } + static color(e) { + return new Color(e); + } + static comb(e) { + return new Comb(e); + } + static connect(e) { + return new Connect(e); + } + static contentArea(e) { + return new ContentArea(e); + } + static corner(e) { + return new Corner(e); + } + static date(e) { + return new DateElement(e); + } + static dateTime(e) { + return new DateTime(e); + } + static dateTimeEdit(e) { + return new DateTimeEdit(e); + } + static decimal(e) { + return new Decimal(e); + } + static defaultUi(e) { + return new DefaultUi(e); + } + static desc(e) { + return new Desc(e); + } + static digestMethod(e) { + return new DigestMethod(e); + } + static digestMethods(e) { + return new DigestMethods(e); + } + static draw(e) { + return new Draw(e); + } + static edge(e) { + return new Edge(e); + } + static encoding(e) { + return new Encoding(e); + } + static encodings(e) { + return new Encodings(e); + } + static encrypt(e) { + return new Encrypt(e); + } + static encryptData(e) { + return new EncryptData(e); + } + static encryption(e) { + return new Encryption(e); + } + static encryptionMethod(e) { + return new EncryptionMethod(e); + } + static encryptionMethods(e) { + return new EncryptionMethods(e); + } + static event(e) { + return new Event(e); + } + static exData(e) { + return new ExData(e); + } + static exObject(e) { + return new ExObject(e); + } + static exclGroup(e) { + return new ExclGroup(e); + } + static execute(e) { + return new Execute(e); + } + static extras(e) { + return new Extras(e); + } + static field(e) { + return new Field(e); + } + static fill(e) { + return new Fill(e); + } + static filter(e) { + return new Filter(e); + } + static float(e) { + return new Float(e); + } + static font(e) { + return new template_Font(e); + } + static format(e) { + return new Format(e); + } + static handler(e) { + return new Handler(e); + } + static hyphenation(e) { + return new Hyphenation(e); + } + static image(e) { + return new Image(e); + } + static imageEdit(e) { + return new ImageEdit(e); + } + static integer(e) { + return new Integer(e); + } + static issuers(e) { + return new Issuers(e); + } + static items(e) { + return new Items(e); + } + static keep(e) { + return new Keep(e); + } + static keyUsage(e) { + return new KeyUsage(e); + } + static line(e) { + return new Line(e); + } + static linear(e) { + return new Linear(e); + } + static lockDocument(e) { + return new LockDocument(e); + } + static manifest(e) { + return new Manifest(e); + } + static margin(e) { + return new Margin(e); + } + static mdp(e) { + return new Mdp(e); + } + static medium(e) { + return new Medium(e); + } + static message(e) { + return new Message(e); + } + static numericEdit(e) { + return new NumericEdit(e); + } + static occur(e) { + return new Occur(e); + } + static oid(e) { + return new Oid(e); + } + static oids(e) { + return new Oids(e); + } + static overflow(e) { + return new Overflow(e); + } + static pageArea(e) { + return new PageArea(e); + } + static pageSet(e) { + return new PageSet(e); + } + static para(e) { + return new Para(e); + } + static passwordEdit(e) { + return new PasswordEdit(e); + } + static pattern(e) { + return new template_Pattern(e); + } + static picture(e) { + return new Picture(e); + } + static proto(e) { + return new Proto(e); + } + static radial(e) { + return new Radial(e); + } + static reason(e) { + return new Reason(e); + } + static reasons(e) { + return new Reasons(e); + } + static rectangle(e) { + return new Rectangle(e); + } + static ref(e) { + return new RefElement(e); + } + static script(e) { + return new Script(e); + } + static setProperty(e) { + return new SetProperty(e); + } + static signData(e) { + return new SignData(e); + } + static signature(e) { + return new Signature(e); + } + static signing(e) { + return new Signing(e); + } + static solid(e) { + return new Solid(e); + } + static speak(e) { + return new Speak(e); + } + static stipple(e) { + return new Stipple(e); + } + static subform(e) { + return new Subform(e); + } + static subformSet(e) { + return new SubformSet(e); + } + static subjectDN(e) { + return new SubjectDN(e); + } + static subjectDNs(e) { + return new SubjectDNs(e); + } + static submit(e) { + return new Submit(e); + } + static template(e) { + return new Template(e); + } + static text(e) { + return new Text(e); + } + static textEdit(e) { + return new TextEdit(e); + } + static time(e) { + return new Time(e); + } + static timeStamp(e) { + return new TimeStamp(e); + } + static toolTip(e) { + return new ToolTip(e); + } + static traversal(e) { + return new Traversal(e); + } + static traverse(e) { + return new Traverse(e); + } + static ui(e) { + return new Ui(e); + } + static validate(e) { + return new Validate(e); + } + static value(e) { + return new Value(e); + } + static variables(e) { + return new Variables(e); + } +} +const Tn = on.datasets.id; +function createText(e) { + const t = new Text({}); + t[er] = e; + return t; +} +class Binder { + constructor(e) { + this.root = e; + this.datasets = e.datasets; + this.data = e.datasets?.data || new XmlObject(on.datasets.id, "data"); + this.emptyMerge = 0 === this.data[Er]().length; + this.root.form = this.form = e.template[$s](); + } + _isConsumeData() { + return !this.emptyMerge && this._mergeMode; + } + _isMatchTemplate() { + return !this._isConsumeData(); + } + bind() { + this._bindElement(this.form, this.data); + return this.form; + } + getData() { + return this.data; + } + _bindValue(e, t, i) { + e[tr] = t; + if (e[wr]()) + if (t[Rr]()) { + const i = t[hr](); + e[$r](createText(i)); + } else if ( + e instanceof Field && + "multiSelect" === e.ui?.choiceList?.open + ) { + const i = t[Er]() + .map((e) => e[er].trim()) + .join("\n"); + e[$r](createText(i)); + } else + this._isConsumeData() && warn("XFA - Nodes haven't the same type."); + else + !t[Rr]() || this._isMatchTemplate() + ? this._bindElement(e, t) + : warn("XFA - Nodes haven't the same type."); + } + _findDataByNameToConsume(e, t, i, a) { + if (!e) return null; + let s, r; + for (let a = 0; a < 3; a++) { + s = i[Qr](e, !1, !0); + for (;;) { + r = s.next().value; + if (!r) break; + if (t === r[Rr]()) return r; + } + if (i[Jr] === on.datasets.id && "data" === i[Yr]) break; + i = i[pr](); + } + if (!a) return null; + s = this.data[Qr](e, !0, !1); + r = s.next().value; + if (r) return r; + s = this.data[nr](e, !0); + r = s.next().value; + return r?.[Rr]() ? r : null; + } + _setProperties(e, t) { + if (e.hasOwnProperty("setProperty")) + for (const { ref: i, target: a, connection: s } of e.setProperty + .children) { + if (s) continue; + if (!i) continue; + const r = searchNode(this.root, t, i, !1, !1); + if (!r) { + warn(`XFA - Invalid reference: ${i}.`); + continue; + } + const [n] = r; + if (!n[Nr](this.data)) { + warn("XFA - Invalid node: must be a data node."); + continue; + } + const g = searchNode(this.root, e, a, !1, !1); + if (!g) { + warn(`XFA - Invalid target: ${a}.`); + continue; + } + const [o] = g; + if (!o[Nr](e)) { + warn("XFA - Invalid target: must be a property or subproperty."); + continue; + } + const c = o[pr](); + if (o instanceof SetProperty || c instanceof SetProperty) { + warn( + "XFA - Invalid target: cannot be a setProperty or one of its properties.", + ); + continue; + } + if (o instanceof BindItems || c instanceof BindItems) { + warn( + "XFA - Invalid target: cannot be a bindItems or one of its properties.", + ); + continue; + } + const C = n[en](), + h = o[Yr]; + if (o instanceof XFAAttribute) { + const e = Object.create(null); + e[h] = C; + const t = Reflect.construct(Object.getPrototypeOf(c).constructor, [ + e, + ]); + c[h] = t[h]; + } else if (o.hasOwnProperty(er)) { + o[tr] = n; + o[er] = C; + o[sr](); + } else warn("XFA - Invalid node to use in setProperty"); + } + } + _bindItems(e, t) { + if ( + !e.hasOwnProperty("items") || + !e.hasOwnProperty("bindItems") || + e.bindItems.isEmpty() + ) + return; + for (const t of e.items.children) e[jr](t); + e.items.clear(); + const i = new Items({}), + a = new Items({}); + e[Xs](i); + e.items.push(i); + e[Xs](a); + e.items.push(a); + for (const { ref: s, labelRef: r, valueRef: n, connection: g } of e + .bindItems.children) { + if (g) continue; + if (!s) continue; + const e = searchNode(this.root, t, s, !1, !1); + if (e) + for (const t of e) { + if (!t[Nr](this.datasets)) { + warn(`XFA - Invalid ref (${s}): must be a datasets child.`); + continue; + } + const e = searchNode(this.root, t, r, !0, !1); + if (!e) { + warn(`XFA - Invalid label: ${r}.`); + continue; + } + const [g] = e; + if (!g[Nr](this.datasets)) { + warn("XFA - Invalid label: must be a datasets child."); + continue; + } + const o = searchNode(this.root, t, n, !0, !1); + if (!o) { + warn(`XFA - Invalid value: ${n}.`); + continue; + } + const [c] = o; + if (!c[Nr](this.datasets)) { + warn("XFA - Invalid value: must be a datasets child."); + continue; + } + const C = createText(g[en]()), + h = createText(c[en]()); + i[Xs](C); + i.text.push(C); + a[Xs](h); + a.text.push(h); + } + else warn(`XFA - Invalid reference: ${s}.`); + } + } + _bindOccurrences(e, t, i) { + let a; + if (t.length > 1) { + a = e[$s](); + a[jr](a.occur); + a.occur = null; + } + this._bindValue(e, t[0], i); + this._setProperties(e, t[0]); + this._bindItems(e, t[0]); + if (1 === t.length) return; + const s = e[pr](), + r = e[Yr], + n = s[br](e); + for (let e = 1, g = t.length; e < g; e++) { + const g = t[e], + o = a[$s](); + s[r].push(o); + s[Fr](n + e, o); + this._bindValue(o, g, i); + this._setProperties(o, g); + this._bindItems(o, g); + } + } + _createOccurrences(e) { + if (!this.emptyMerge) return; + const { occur: t } = e; + if (!t || t.initial <= 1) return; + const i = e[pr](), + a = e[Yr]; + if (!(i[a] instanceof XFAObjectArray)) return; + let s; + s = e.name + ? i[a].children.filter((t) => t.name === e.name).length + : i[a].children.length; + const r = i[br](e) + 1, + n = t.initial - s; + if (n) { + const t = e[$s](); + t[jr](t.occur); + t.occur = null; + i[a].push(t); + i[Fr](r, t); + for (let e = 1; e < n; e++) { + const s = t[$s](); + i[a].push(s); + i[Fr](r + e, s); + } + } + } + _getOccurInfo(e) { + const { name: t, occur: i } = e; + if (!i || !t) return [1, 1]; + const a = -1 === i.max ? 1 / 0 : i.max; + return [i.min, a]; + } + _setAndBind(e, t) { + this._setProperties(e, t); + this._bindItems(e, t); + this._bindElement(e, t); + } + _bindElement(e, t) { + const i = []; + this._createOccurrences(e); + for (const a of e[Er]()) { + if (a[tr]) continue; + if (void 0 === this._mergeMode && "subform" === a[Yr]) { + this._mergeMode = "consumeData" === a.mergeMode; + const e = t[Er](); + if (e.length > 0) this._bindOccurrences(a, [e[0]], null); + else if (this.emptyMerge) { + const e = t[Jr] === Tn ? -1 : t[Jr], + i = (a[tr] = new XmlObject(e, a.name || "root")); + t[Xs](i); + this._bindElement(a, i); + } + continue; + } + if (!a[kr]()) continue; + let e = !1, + s = null, + r = null, + n = null; + if (a.bind) { + switch (a.bind.match) { + case "none": + this._setAndBind(a, t); + continue; + case "global": + e = !0; + break; + case "dataRef": + if (!a.bind.ref) { + warn(`XFA - ref is empty in node ${a[Yr]}.`); + this._setAndBind(a, t); + continue; + } + r = a.bind.ref; + } + a.bind.picture && (s = a.bind.picture[er]); + } + const [g, o] = this._getOccurInfo(a); + if (r) { + n = searchNode(this.root, t, r, !0, !1); + if (null === n) { + n = createDataNode(this.data, t, r); + if (!n) continue; + this._isConsumeData() && (n[Ar] = !0); + this._setAndBind(a, n); + continue; + } + this._isConsumeData() && (n = n.filter((e) => !e[Ar])); + n.length > o ? (n = n.slice(0, o)) : 0 === n.length && (n = null); + n && + this._isConsumeData() && + n.forEach((e) => { + e[Ar] = !0; + }); + } else { + if (!a.name) { + this._setAndBind(a, t); + continue; + } + if (this._isConsumeData()) { + const i = []; + for (; i.length < o; ) { + const s = this._findDataByNameToConsume(a.name, a[wr](), t, e); + if (!s) break; + s[Ar] = !0; + i.push(s); + } + n = i.length > 0 ? i : null; + } else { + n = t[Qr](a.name, !1, this.emptyMerge).next().value; + if (!n) { + if (0 === g) { + i.push(a); + continue; + } + const e = t[Jr] === Tn ? -1 : t[Jr]; + n = a[tr] = new XmlObject(e, a.name); + this.emptyMerge && (n[Ar] = !0); + t[Xs](n); + this._setAndBind(a, n); + continue; + } + this.emptyMerge && (n[Ar] = !0); + n = [n]; + } + } + n + ? this._bindOccurrences(a, n, s) + : g > 0 + ? this._setAndBind(a, t) + : i.push(a); + } + i.forEach((e) => e[pr]()[jr](e)); + } +} +class DataHandler { + constructor(e, t) { + this.data = t; + this.dataset = e.datasets || null; + } + serialize(e) { + const t = [[-1, this.data[Er]()]]; + for (; t.length > 0; ) { + const i = t.at(-1), + [a, s] = i; + if (a + 1 === s.length) { + t.pop(); + continue; + } + const r = s[++i[0]], + n = e.get(r[nn]); + if (n) r[$r](n); + else { + const t = r[gr](); + for (const i of t.values()) { + const t = e.get(i[nn]); + if (t) { + i[$r](t); + break; + } + } + } + const g = r[Er](); + g.length > 0 && t.push([-1, g]); + } + const i = [ + '', + ]; + if (this.dataset) + for (const e of this.dataset[Er]()) "data" !== e[Yr] && e[sn](i); + this.data[sn](i); + i.push(""); + return i.join(""); + } +} +const qn = on.config.id; +class Acrobat extends XFAObject { + constructor(e) { + super(qn, "acrobat", !0); + this.acrobat7 = null; + this.autoSave = null; + this.common = null; + this.validate = null; + this.validateApprovalSignatures = null; + this.submitUrl = new XFAObjectArray(); + } +} +class Acrobat7 extends XFAObject { + constructor(e) { + super(qn, "acrobat7", !0); + this.dynamicRender = null; + } +} +class ADBE_JSConsole extends OptionObject { + constructor(e) { + super(qn, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]); + } +} +class ADBE_JSDebugger extends OptionObject { + constructor(e) { + super(qn, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]); + } +} +class AddSilentPrint extends Option01 { + constructor(e) { + super(qn, "addSilentPrint"); + } +} +class AddViewerPreferences extends Option01 { + constructor(e) { + super(qn, "addViewerPreferences"); + } +} +class AdjustData extends Option10 { + constructor(e) { + super(qn, "adjustData"); + } +} +class AdobeExtensionLevel extends IntegerObject { + constructor(e) { + super(qn, "adobeExtensionLevel", 0, (e) => e >= 1 && e <= 8); + } +} +class Agent extends XFAObject { + constructor(e) { + super(qn, "agent", !0); + this.name = e.name ? e.name.trim() : ""; + this.common = new XFAObjectArray(); + } +} +class AlwaysEmbed extends ContentObject { + constructor(e) { + super(qn, "alwaysEmbed"); + } +} +class Amd extends StringObject { + constructor(e) { + super(qn, "amd"); + } +} +class config_Area extends XFAObject { + constructor(e) { + super(qn, "area"); + this.level = getInteger({ + data: e.level, + defaultValue: 0, + validate: (e) => e >= 1 && e <= 3, + }); + this.name = getStringOption(e.name, [ + "", + "barcode", + "coreinit", + "deviceDriver", + "font", + "general", + "layout", + "merge", + "script", + "signature", + "sourceSet", + "templateCache", + ]); + } +} +class Attributes extends OptionObject { + constructor(e) { + super(qn, "attributes", ["preserve", "delegate", "ignore"]); + } +} +class AutoSave extends OptionObject { + constructor(e) { + super(qn, "autoSave", ["disabled", "enabled"]); + } +} +class Base extends StringObject { + constructor(e) { + super(qn, "base"); + } +} +class BatchOutput extends XFAObject { + constructor(e) { + super(qn, "batchOutput"); + this.format = getStringOption(e.format, [ + "none", + "concat", + "zip", + "zipCompress", + ]); + } +} +class BehaviorOverride extends ContentObject { + constructor(e) { + super(qn, "behaviorOverride"); + } + [sr]() { + this[er] = new Map( + this[er] + .trim() + .split(/\s+/) + .filter((e) => e.includes(":")) + .map((e) => e.split(":", 2)), + ); + } +} +class Cache extends XFAObject { + constructor(e) { + super(qn, "cache", !0); + this.templateCache = null; + } +} +class Change extends Option01 { + constructor(e) { + super(qn, "change"); + } +} +class Common extends XFAObject { + constructor(e) { + super(qn, "common", !0); + this.data = null; + this.locale = null; + this.localeSet = null; + this.messaging = null; + this.suppressBanner = null; + this.template = null; + this.validationMessaging = null; + this.versionControl = null; + this.log = new XFAObjectArray(); + } +} +class Compress extends XFAObject { + constructor(e) { + super(qn, "compress"); + this.scope = getStringOption(e.scope, ["imageOnly", "document"]); + } +} +class CompressLogicalStructure extends Option01 { + constructor(e) { + super(qn, "compressLogicalStructure"); + } +} +class CompressObjectStream extends Option10 { + constructor(e) { + super(qn, "compressObjectStream"); + } +} +class Compression extends XFAObject { + constructor(e) { + super(qn, "compression", !0); + this.compressLogicalStructure = null; + this.compressObjectStream = null; + this.level = null; + this.type = null; + } +} +class Config extends XFAObject { + constructor(e) { + super(qn, "config", !0); + this.acrobat = null; + this.present = null; + this.trace = null; + this.agent = new XFAObjectArray(); + } +} +class Conformance extends OptionObject { + constructor(e) { + super(qn, "conformance", ["A", "B"]); + } +} +class ContentCopy extends Option01 { + constructor(e) { + super(qn, "contentCopy"); + } +} +class Copies extends IntegerObject { + constructor(e) { + super(qn, "copies", 1, (e) => e >= 1); + } +} +class Creator extends StringObject { + constructor(e) { + super(qn, "creator"); + } +} +class CurrentPage extends IntegerObject { + constructor(e) { + super(qn, "currentPage", 0, (e) => e >= 0); + } +} +class Data extends XFAObject { + constructor(e) { + super(qn, "data", !0); + this.adjustData = null; + this.attributes = null; + this.incrementalLoad = null; + this.outputXSL = null; + this.range = null; + this.record = null; + this.startNode = null; + this.uri = null; + this.window = null; + this.xsl = null; + this.excludeNS = new XFAObjectArray(); + this.transform = new XFAObjectArray(); + } +} +class Debug extends XFAObject { + constructor(e) { + super(qn, "debug", !0); + this.uri = null; + } +} +class DefaultTypeface extends ContentObject { + constructor(e) { + super(qn, "defaultTypeface"); + this.writingScript = getStringOption(e.writingScript, [ + "*", + "Arabic", + "Cyrillic", + "EastEuropeanRoman", + "Greek", + "Hebrew", + "Japanese", + "Korean", + "Roman", + "SimplifiedChinese", + "Thai", + "TraditionalChinese", + "Vietnamese", + ]); + } +} +class Destination extends OptionObject { + constructor(e) { + super(qn, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]); + } +} +class DocumentAssembly extends Option01 { + constructor(e) { + super(qn, "documentAssembly"); + } +} +class Driver extends XFAObject { + constructor(e) { + super(qn, "driver", !0); + this.name = e.name ? e.name.trim() : ""; + this.fontInfo = null; + this.xdc = null; + } +} +class DuplexOption extends OptionObject { + constructor(e) { + super(qn, "duplexOption", [ + "simplex", + "duplexFlipLongEdge", + "duplexFlipShortEdge", + ]); + } +} +class DynamicRender extends OptionObject { + constructor(e) { + super(qn, "dynamicRender", ["forbidden", "required"]); + } +} +class Embed extends Option01 { + constructor(e) { + super(qn, "embed"); + } +} +class config_Encrypt extends Option01 { + constructor(e) { + super(qn, "encrypt"); + } +} +class config_Encryption extends XFAObject { + constructor(e) { + super(qn, "encryption", !0); + this.encrypt = null; + this.encryptionLevel = null; + this.permissions = null; + } +} +class EncryptionLevel extends OptionObject { + constructor(e) { + super(qn, "encryptionLevel", ["40bit", "128bit"]); + } +} +class Enforce extends StringObject { + constructor(e) { + super(qn, "enforce"); + } +} +class Equate extends XFAObject { + constructor(e) { + super(qn, "equate"); + this.force = getInteger({ + data: e.force, + defaultValue: 1, + validate: (e) => 0 === e, + }); + this.from = e.from || ""; + this.to = e.to || ""; + } +} +class EquateRange extends XFAObject { + constructor(e) { + super(qn, "equateRange"); + this.from = e.from || ""; + this.to = e.to || ""; + this._unicodeRange = e.unicodeRange || ""; + } + get unicodeRange() { + const e = [], + t = /U\+([0-9a-fA-F]+)/, + i = this._unicodeRange; + for (let a of i + .split(",") + .map((e) => e.trim()) + .filter((e) => !!e)) { + a = a.split("-", 2).map((e) => { + const i = e.match(t); + return i ? parseInt(i[1], 16) : 0; + }); + 1 === a.length && a.push(a[0]); + e.push(a); + } + return shadow(this, "unicodeRange", e); + } +} +class Exclude extends ContentObject { + constructor(e) { + super(qn, "exclude"); + } + [sr]() { + this[er] = this[er] + .trim() + .split(/\s+/) + .filter( + (e) => + e && + [ + "calculate", + "close", + "enter", + "exit", + "initialize", + "ready", + "validate", + ].includes(e), + ); + } +} +class ExcludeNS extends StringObject { + constructor(e) { + super(qn, "excludeNS"); + } +} +class FlipLabel extends OptionObject { + constructor(e) { + super(qn, "flipLabel", ["usePrinterSetting", "on", "off"]); + } +} +class config_FontInfo extends XFAObject { + constructor(e) { + super(qn, "fontInfo", !0); + this.embed = null; + this.map = null; + this.subsetBelow = null; + this.alwaysEmbed = new XFAObjectArray(); + this.defaultTypeface = new XFAObjectArray(); + this.neverEmbed = new XFAObjectArray(); + } +} +class FormFieldFilling extends Option01 { + constructor(e) { + super(qn, "formFieldFilling"); + } +} +class GroupParent extends StringObject { + constructor(e) { + super(qn, "groupParent"); + } +} +class IfEmpty extends OptionObject { + constructor(e) { + super(qn, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]); + } +} +class IncludeXDPContent extends StringObject { + constructor(e) { + super(qn, "includeXDPContent"); + } +} +class IncrementalLoad extends OptionObject { + constructor(e) { + super(qn, "incrementalLoad", ["none", "forwardOnly"]); + } +} +class IncrementalMerge extends Option01 { + constructor(e) { + super(qn, "incrementalMerge"); + } +} +class Interactive extends Option01 { + constructor(e) { + super(qn, "interactive"); + } +} +class Jog extends OptionObject { + constructor(e) { + super(qn, "jog", ["usePrinterSetting", "none", "pageSet"]); + } +} +class LabelPrinter extends XFAObject { + constructor(e) { + super(qn, "labelPrinter", !0); + this.name = getStringOption(e.name, ["zpl", "dpl", "ipl", "tcpl"]); + this.batchOutput = null; + this.flipLabel = null; + this.fontInfo = null; + this.xdc = null; + } +} +class Layout extends OptionObject { + constructor(e) { + super(qn, "layout", ["paginate", "panel"]); + } +} +class Level extends IntegerObject { + constructor(e) { + super(qn, "level", 0, (e) => e > 0); + } +} +class Linearized extends Option01 { + constructor(e) { + super(qn, "linearized"); + } +} +class Locale extends StringObject { + constructor(e) { + super(qn, "locale"); + } +} +class LocaleSet extends StringObject { + constructor(e) { + super(qn, "localeSet"); + } +} +class Log extends XFAObject { + constructor(e) { + super(qn, "log", !0); + this.mode = null; + this.threshold = null; + this.to = null; + this.uri = null; + } +} +class MapElement extends XFAObject { + constructor(e) { + super(qn, "map", !0); + this.equate = new XFAObjectArray(); + this.equateRange = new XFAObjectArray(); + } +} +class MediumInfo extends XFAObject { + constructor(e) { + super(qn, "mediumInfo", !0); + this.map = null; + } +} +class config_Message extends XFAObject { + constructor(e) { + super(qn, "message", !0); + this.msgId = null; + this.severity = null; + } +} +class Messaging extends XFAObject { + constructor(e) { + super(qn, "messaging", !0); + this.message = new XFAObjectArray(); + } +} +class Mode extends OptionObject { + constructor(e) { + super(qn, "mode", ["append", "overwrite"]); + } +} +class ModifyAnnots extends Option01 { + constructor(e) { + super(qn, "modifyAnnots"); + } +} +class MsgId extends IntegerObject { + constructor(e) { + super(qn, "msgId", 1, (e) => e >= 1); + } +} +class NameAttr extends StringObject { + constructor(e) { + super(qn, "nameAttr"); + } +} +class NeverEmbed extends ContentObject { + constructor(e) { + super(qn, "neverEmbed"); + } +} +class NumberOfCopies extends IntegerObject { + constructor(e) { + super(qn, "numberOfCopies", null, (e) => e >= 2 && e <= 5); + } +} +class OpenAction extends XFAObject { + constructor(e) { + super(qn, "openAction", !0); + this.destination = null; + } +} +class Output extends XFAObject { + constructor(e) { + super(qn, "output", !0); + this.to = null; + this.type = null; + this.uri = null; + } +} +class OutputBin extends StringObject { + constructor(e) { + super(qn, "outputBin"); + } +} +class OutputXSL extends XFAObject { + constructor(e) { + super(qn, "outputXSL", !0); + this.uri = null; + } +} +class Overprint extends OptionObject { + constructor(e) { + super(qn, "overprint", ["none", "both", "draw", "field"]); + } +} +class Packets extends StringObject { + constructor(e) { + super(qn, "packets"); + } + [sr]() { + "*" !== this[er] && + (this[er] = this[er] + .trim() + .split(/\s+/) + .filter((e) => + ["config", "datasets", "template", "xfdf", "xslt"].includes(e), + )); + } +} +class PageOffset extends XFAObject { + constructor(e) { + super(qn, "pageOffset"); + this.x = getInteger({ + data: e.x, + defaultValue: "useXDCSetting", + validate: (e) => !0, + }); + this.y = getInteger({ + data: e.y, + defaultValue: "useXDCSetting", + validate: (e) => !0, + }); + } +} +class PageRange extends StringObject { + constructor(e) { + super(qn, "pageRange"); + } + [sr]() { + const e = this[er] + .trim() + .split(/\s+/) + .map((e) => parseInt(e, 10)), + t = []; + for (let i = 0, a = e.length; i < a; i += 2) t.push(e.slice(i, i + 2)); + this[er] = t; + } +} +class Pagination extends OptionObject { + constructor(e) { + super(qn, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]); + } +} +class PaginationOverride extends OptionObject { + constructor(e) { + super(qn, "paginationOverride", [ + "none", + "forceDuplex", + "forceDuplexLongEdge", + "forceDuplexShortEdge", + "forceSimplex", + ]); + } +} +class Part extends IntegerObject { + constructor(e) { + super(qn, "part", 1, (e) => !1); + } +} +class Pcl extends XFAObject { + constructor(e) { + super(qn, "pcl", !0); + this.name = e.name || ""; + this.batchOutput = null; + this.fontInfo = null; + this.jog = null; + this.mediumInfo = null; + this.outputBin = null; + this.pageOffset = null; + this.staple = null; + this.xdc = null; + } +} +class Pdf extends XFAObject { + constructor(e) { + super(qn, "pdf", !0); + this.name = e.name || ""; + this.adobeExtensionLevel = null; + this.batchOutput = null; + this.compression = null; + this.creator = null; + this.encryption = null; + this.fontInfo = null; + this.interactive = null; + this.linearized = null; + this.openAction = null; + this.pdfa = null; + this.producer = null; + this.renderPolicy = null; + this.scriptModel = null; + this.silentPrint = null; + this.submitFormat = null; + this.tagged = null; + this.version = null; + this.viewerPreferences = null; + this.xdc = null; + } +} +class Pdfa extends XFAObject { + constructor(e) { + super(qn, "pdfa", !0); + this.amd = null; + this.conformance = null; + this.includeXDPContent = null; + this.part = null; + } +} +class Permissions extends XFAObject { + constructor(e) { + super(qn, "permissions", !0); + this.accessibleContent = null; + this.change = null; + this.contentCopy = null; + this.documentAssembly = null; + this.formFieldFilling = null; + this.modifyAnnots = null; + this.plaintextMetadata = null; + this.print = null; + this.printHighQuality = null; + } +} +class PickTrayByPDFSize extends Option01 { + constructor(e) { + super(qn, "pickTrayByPDFSize"); + } +} +class config_Picture extends StringObject { + constructor(e) { + super(qn, "picture"); + } +} +class PlaintextMetadata extends Option01 { + constructor(e) { + super(qn, "plaintextMetadata"); + } +} +class Presence extends OptionObject { + constructor(e) { + super(qn, "presence", [ + "preserve", + "dissolve", + "dissolveStructure", + "ignore", + "remove", + ]); + } +} +class Present extends XFAObject { + constructor(e) { + super(qn, "present", !0); + this.behaviorOverride = null; + this.cache = null; + this.common = null; + this.copies = null; + this.destination = null; + this.incrementalMerge = null; + this.layout = null; + this.output = null; + this.overprint = null; + this.pagination = null; + this.paginationOverride = null; + this.script = null; + this.validate = null; + this.xdp = null; + this.driver = new XFAObjectArray(); + this.labelPrinter = new XFAObjectArray(); + this.pcl = new XFAObjectArray(); + this.pdf = new XFAObjectArray(); + this.ps = new XFAObjectArray(); + this.submitUrl = new XFAObjectArray(); + this.webClient = new XFAObjectArray(); + this.zpl = new XFAObjectArray(); + } +} +class Print extends Option01 { + constructor(e) { + super(qn, "print"); + } +} +class PrintHighQuality extends Option01 { + constructor(e) { + super(qn, "printHighQuality"); + } +} +class PrintScaling extends OptionObject { + constructor(e) { + super(qn, "printScaling", ["appdefault", "noScaling"]); + } +} +class PrinterName extends StringObject { + constructor(e) { + super(qn, "printerName"); + } +} +class Producer extends StringObject { + constructor(e) { + super(qn, "producer"); + } +} +class Ps extends XFAObject { + constructor(e) { + super(qn, "ps", !0); + this.name = e.name || ""; + this.batchOutput = null; + this.fontInfo = null; + this.jog = null; + this.mediumInfo = null; + this.outputBin = null; + this.staple = null; + this.xdc = null; + } +} +class Range extends ContentObject { + constructor(e) { + super(qn, "range"); + } + [sr]() { + this[er] = this[er] + .trim() + .split(/\s*,\s*/, 2) + .map((e) => e.split("-").map((e) => parseInt(e.trim(), 10))) + .filter((e) => e.every((e) => !isNaN(e))) + .map((e) => { + 1 === e.length && e.push(e[0]); + return e; + }); + } +} +class Record extends ContentObject { + constructor(e) { + super(qn, "record"); + } + [sr]() { + this[er] = this[er].trim(); + const e = parseInt(this[er], 10); + !isNaN(e) && e >= 0 && (this[er] = e); + } +} +class Relevant extends ContentObject { + constructor(e) { + super(qn, "relevant"); + } + [sr]() { + this[er] = this[er].trim().split(/\s+/); + } +} +class Rename extends ContentObject { + constructor(e) { + super(qn, "rename"); + } + [sr]() { + this[er] = this[er].trim(); + (this[er].toLowerCase().startsWith("xml") || + new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u").test(this[er])) && + warn("XFA - Rename: invalid XFA name"); + } +} +class RenderPolicy extends OptionObject { + constructor(e) { + super(qn, "renderPolicy", ["server", "client"]); + } +} +class RunScripts extends OptionObject { + constructor(e) { + super(qn, "runScripts", ["both", "client", "none", "server"]); + } +} +class config_Script extends XFAObject { + constructor(e) { + super(qn, "script", !0); + this.currentPage = null; + this.exclude = null; + this.runScripts = null; + } +} +class ScriptModel extends OptionObject { + constructor(e) { + super(qn, "scriptModel", ["XFA", "none"]); + } +} +class Severity extends OptionObject { + constructor(e) { + super(qn, "severity", [ + "ignore", + "error", + "information", + "trace", + "warning", + ]); + } +} +class SilentPrint extends XFAObject { + constructor(e) { + super(qn, "silentPrint", !0); + this.addSilentPrint = null; + this.printerName = null; + } +} +class Staple extends XFAObject { + constructor(e) { + super(qn, "staple"); + this.mode = getStringOption(e.mode, ["usePrinterSetting", "on", "off"]); + } +} +class StartNode extends StringObject { + constructor(e) { + super(qn, "startNode"); + } +} +class StartPage extends IntegerObject { + constructor(e) { + super(qn, "startPage", 0, (e) => !0); + } +} +class SubmitFormat extends OptionObject { + constructor(e) { + super(qn, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]); + } +} +class SubmitUrl extends StringObject { + constructor(e) { + super(qn, "submitUrl"); + } +} +class SubsetBelow extends IntegerObject { + constructor(e) { + super(qn, "subsetBelow", 100, (e) => e >= 0 && e <= 100); + } +} +class SuppressBanner extends Option01 { + constructor(e) { + super(qn, "suppressBanner"); + } +} +class Tagged extends Option01 { + constructor(e) { + super(qn, "tagged"); + } +} +class config_Template extends XFAObject { + constructor(e) { + super(qn, "template", !0); + this.base = null; + this.relevant = null; + this.startPage = null; + this.uri = null; + this.xsl = null; + } +} +class Threshold extends OptionObject { + constructor(e) { + super(qn, "threshold", ["trace", "error", "information", "warning"]); + } +} +class To extends OptionObject { + constructor(e) { + super(qn, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]); + } +} +class TemplateCache extends XFAObject { + constructor(e) { + super(qn, "templateCache"); + this.maxEntries = getInteger({ + data: e.maxEntries, + defaultValue: 5, + validate: (e) => e >= 0, + }); + } +} +class Trace extends XFAObject { + constructor(e) { + super(qn, "trace", !0); + this.area = new XFAObjectArray(); + } +} +class Transform extends XFAObject { + constructor(e) { + super(qn, "transform", !0); + this.groupParent = null; + this.ifEmpty = null; + this.nameAttr = null; + this.picture = null; + this.presence = null; + this.rename = null; + this.whitespace = null; + } +} +class Type extends OptionObject { + constructor(e) { + super(qn, "type", [ + "none", + "ascii85", + "asciiHex", + "ccittfax", + "flate", + "lzw", + "runLength", + "native", + "xdp", + "mergedXDP", + ]); + } +} +class Uri extends StringObject { + constructor(e) { + super(qn, "uri"); + } +} +class config_Validate extends OptionObject { + constructor(e) { + super(qn, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]); + } +} +class ValidateApprovalSignatures extends ContentObject { + constructor(e) { + super(qn, "validateApprovalSignatures"); + } + [sr]() { + this[er] = this[er] + .trim() + .split(/\s+/) + .filter((e) => ["docReady", "postSign"].includes(e)); + } +} +class ValidationMessaging extends OptionObject { + constructor(e) { + super(qn, "validationMessaging", [ + "allMessagesIndividually", + "allMessagesTogether", + "firstMessageOnly", + "noMessages", + ]); + } +} +class Version extends OptionObject { + constructor(e) { + super(qn, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]); + } +} +class VersionControl extends XFAObject { + constructor(e) { + super(qn, "VersionControl"); + this.outputBelow = getStringOption(e.outputBelow, [ + "warn", + "error", + "update", + ]); + this.sourceAbove = getStringOption(e.sourceAbove, ["warn", "error"]); + this.sourceBelow = getStringOption(e.sourceBelow, ["update", "maintain"]); + } +} +class ViewerPreferences extends XFAObject { + constructor(e) { + super(qn, "viewerPreferences", !0); + this.ADBE_JSConsole = null; + this.ADBE_JSDebugger = null; + this.addViewerPreferences = null; + this.duplexOption = null; + this.enforce = null; + this.numberOfCopies = null; + this.pageRange = null; + this.pickTrayByPDFSize = null; + this.printScaling = null; + } +} +class WebClient extends XFAObject { + constructor(e) { + super(qn, "webClient", !0); + this.name = e.name ? e.name.trim() : ""; + this.fontInfo = null; + this.xdc = null; + } +} +class Whitespace extends OptionObject { + constructor(e) { + super(qn, "whitespace", [ + "preserve", + "ltrim", + "normalize", + "rtrim", + "trim", + ]); + } +} +class Window extends ContentObject { + constructor(e) { + super(qn, "window"); + } + [sr]() { + const e = this[er] + .trim() + .split(/\s*,\s*/, 2) + .map((e) => parseInt(e, 10)); + if (e.some((e) => isNaN(e))) this[er] = [0, 0]; + else { + 1 === e.length && e.push(e[0]); + this[er] = e; + } + } +} +class Xdc extends XFAObject { + constructor(e) { + super(qn, "xdc", !0); + this.uri = new XFAObjectArray(); + this.xsl = new XFAObjectArray(); + } +} +class Xdp extends XFAObject { + constructor(e) { + super(qn, "xdp", !0); + this.packets = null; + } +} +class Xsl extends XFAObject { + constructor(e) { + super(qn, "xsl", !0); + this.debug = null; + this.uri = null; + } +} +class Zpl extends XFAObject { + constructor(e) { + super(qn, "zpl", !0); + this.name = e.name ? e.name.trim() : ""; + this.batchOutput = null; + this.flipLabel = null; + this.fontInfo = null; + this.xdc = null; + } +} +class ConfigNamespace { + static [gn](e, t) { + if (ConfigNamespace.hasOwnProperty(e)) return ConfigNamespace[e](t); + } + static acrobat(e) { + return new Acrobat(e); + } + static acrobat7(e) { + return new Acrobat7(e); + } + static ADBE_JSConsole(e) { + return new ADBE_JSConsole(e); + } + static ADBE_JSDebugger(e) { + return new ADBE_JSDebugger(e); + } + static addSilentPrint(e) { + return new AddSilentPrint(e); + } + static addViewerPreferences(e) { + return new AddViewerPreferences(e); + } + static adjustData(e) { + return new AdjustData(e); + } + static adobeExtensionLevel(e) { + return new AdobeExtensionLevel(e); + } + static agent(e) { + return new Agent(e); + } + static alwaysEmbed(e) { + return new AlwaysEmbed(e); + } + static amd(e) { + return new Amd(e); + } + static area(e) { + return new config_Area(e); + } + static attributes(e) { + return new Attributes(e); + } + static autoSave(e) { + return new AutoSave(e); + } + static base(e) { + return new Base(e); + } + static batchOutput(e) { + return new BatchOutput(e); + } + static behaviorOverride(e) { + return new BehaviorOverride(e); + } + static cache(e) { + return new Cache(e); + } + static change(e) { + return new Change(e); + } + static common(e) { + return new Common(e); + } + static compress(e) { + return new Compress(e); + } + static compressLogicalStructure(e) { + return new CompressLogicalStructure(e); + } + static compressObjectStream(e) { + return new CompressObjectStream(e); + } + static compression(e) { + return new Compression(e); + } + static config(e) { + return new Config(e); + } + static conformance(e) { + return new Conformance(e); + } + static contentCopy(e) { + return new ContentCopy(e); + } + static copies(e) { + return new Copies(e); + } + static creator(e) { + return new Creator(e); + } + static currentPage(e) { + return new CurrentPage(e); + } + static data(e) { + return new Data(e); + } + static debug(e) { + return new Debug(e); + } + static defaultTypeface(e) { + return new DefaultTypeface(e); + } + static destination(e) { + return new Destination(e); + } + static documentAssembly(e) { + return new DocumentAssembly(e); + } + static driver(e) { + return new Driver(e); + } + static duplexOption(e) { + return new DuplexOption(e); + } + static dynamicRender(e) { + return new DynamicRender(e); + } + static embed(e) { + return new Embed(e); + } + static encrypt(e) { + return new config_Encrypt(e); + } + static encryption(e) { + return new config_Encryption(e); + } + static encryptionLevel(e) { + return new EncryptionLevel(e); + } + static enforce(e) { + return new Enforce(e); + } + static equate(e) { + return new Equate(e); + } + static equateRange(e) { + return new EquateRange(e); + } + static exclude(e) { + return new Exclude(e); + } + static excludeNS(e) { + return new ExcludeNS(e); + } + static flipLabel(e) { + return new FlipLabel(e); + } + static fontInfo(e) { + return new config_FontInfo(e); + } + static formFieldFilling(e) { + return new FormFieldFilling(e); + } + static groupParent(e) { + return new GroupParent(e); + } + static ifEmpty(e) { + return new IfEmpty(e); + } + static includeXDPContent(e) { + return new IncludeXDPContent(e); + } + static incrementalLoad(e) { + return new IncrementalLoad(e); + } + static incrementalMerge(e) { + return new IncrementalMerge(e); + } + static interactive(e) { + return new Interactive(e); + } + static jog(e) { + return new Jog(e); + } + static labelPrinter(e) { + return new LabelPrinter(e); + } + static layout(e) { + return new Layout(e); + } + static level(e) { + return new Level(e); + } + static linearized(e) { + return new Linearized(e); + } + static locale(e) { + return new Locale(e); + } + static localeSet(e) { + return new LocaleSet(e); + } + static log(e) { + return new Log(e); + } + static map(e) { + return new MapElement(e); + } + static mediumInfo(e) { + return new MediumInfo(e); + } + static message(e) { + return new config_Message(e); + } + static messaging(e) { + return new Messaging(e); + } + static mode(e) { + return new Mode(e); + } + static modifyAnnots(e) { + return new ModifyAnnots(e); + } + static msgId(e) { + return new MsgId(e); + } + static nameAttr(e) { + return new NameAttr(e); + } + static neverEmbed(e) { + return new NeverEmbed(e); + } + static numberOfCopies(e) { + return new NumberOfCopies(e); + } + static openAction(e) { + return new OpenAction(e); + } + static output(e) { + return new Output(e); + } + static outputBin(e) { + return new OutputBin(e); + } + static outputXSL(e) { + return new OutputXSL(e); + } + static overprint(e) { + return new Overprint(e); + } + static packets(e) { + return new Packets(e); + } + static pageOffset(e) { + return new PageOffset(e); + } + static pageRange(e) { + return new PageRange(e); + } + static pagination(e) { + return new Pagination(e); + } + static paginationOverride(e) { + return new PaginationOverride(e); + } + static part(e) { + return new Part(e); + } + static pcl(e) { + return new Pcl(e); + } + static pdf(e) { + return new Pdf(e); + } + static pdfa(e) { + return new Pdfa(e); + } + static permissions(e) { + return new Permissions(e); + } + static pickTrayByPDFSize(e) { + return new PickTrayByPDFSize(e); + } + static picture(e) { + return new config_Picture(e); + } + static plaintextMetadata(e) { + return new PlaintextMetadata(e); + } + static presence(e) { + return new Presence(e); + } + static present(e) { + return new Present(e); + } + static print(e) { + return new Print(e); + } + static printHighQuality(e) { + return new PrintHighQuality(e); + } + static printScaling(e) { + return new PrintScaling(e); + } + static printerName(e) { + return new PrinterName(e); + } + static producer(e) { + return new Producer(e); + } + static ps(e) { + return new Ps(e); + } + static range(e) { + return new Range(e); + } + static record(e) { + return new Record(e); + } + static relevant(e) { + return new Relevant(e); + } + static rename(e) { + return new Rename(e); + } + static renderPolicy(e) { + return new RenderPolicy(e); + } + static runScripts(e) { + return new RunScripts(e); + } + static script(e) { + return new config_Script(e); + } + static scriptModel(e) { + return new ScriptModel(e); + } + static severity(e) { + return new Severity(e); + } + static silentPrint(e) { + return new SilentPrint(e); + } + static staple(e) { + return new Staple(e); + } + static startNode(e) { + return new StartNode(e); + } + static startPage(e) { + return new StartPage(e); + } + static submitFormat(e) { + return new SubmitFormat(e); + } + static submitUrl(e) { + return new SubmitUrl(e); + } + static subsetBelow(e) { + return new SubsetBelow(e); + } + static suppressBanner(e) { + return new SuppressBanner(e); + } + static tagged(e) { + return new Tagged(e); + } + static template(e) { + return new config_Template(e); + } + static templateCache(e) { + return new TemplateCache(e); + } + static threshold(e) { + return new Threshold(e); + } + static to(e) { + return new To(e); + } + static trace(e) { + return new Trace(e); + } + static transform(e) { + return new Transform(e); + } + static type(e) { + return new Type(e); + } + static uri(e) { + return new Uri(e); + } + static validate(e) { + return new config_Validate(e); + } + static validateApprovalSignatures(e) { + return new ValidateApprovalSignatures(e); + } + static validationMessaging(e) { + return new ValidationMessaging(e); + } + static version(e) { + return new Version(e); + } + static versionControl(e) { + return new VersionControl(e); + } + static viewerPreferences(e) { + return new ViewerPreferences(e); + } + static webClient(e) { + return new WebClient(e); + } + static whitespace(e) { + return new Whitespace(e); + } + static window(e) { + return new Window(e); + } + static xdc(e) { + return new Xdc(e); + } + static xdp(e) { + return new Xdp(e); + } + static xsl(e) { + return new Xsl(e); + } + static zpl(e) { + return new Zpl(e); + } +} +const On = on.connectionSet.id; +class ConnectionSet extends XFAObject { + constructor(e) { + super(On, "connectionSet", !0); + this.wsdlConnection = new XFAObjectArray(); + this.xmlConnection = new XFAObjectArray(); + this.xsdConnection = new XFAObjectArray(); + } +} +class EffectiveInputPolicy extends XFAObject { + constructor(e) { + super(On, "effectiveInputPolicy"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class EffectiveOutputPolicy extends XFAObject { + constructor(e) { + super(On, "effectiveOutputPolicy"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class Operation extends StringObject { + constructor(e) { + super(On, "operation"); + this.id = e.id || ""; + this.input = e.input || ""; + this.name = e.name || ""; + this.output = e.output || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class RootElement extends StringObject { + constructor(e) { + super(On, "rootElement"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class SoapAction extends StringObject { + constructor(e) { + super(On, "soapAction"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class SoapAddress extends StringObject { + constructor(e) { + super(On, "soapAddress"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class connection_set_Uri extends StringObject { + constructor(e) { + super(On, "uri"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class WsdlAddress extends StringObject { + constructor(e) { + super(On, "wsdlAddress"); + this.id = e.id || ""; + this.name = e.name || ""; + this.use = e.use || ""; + this.usehref = e.usehref || ""; + } +} +class WsdlConnection extends XFAObject { + constructor(e) { + super(On, "wsdlConnection", !0); + this.dataDescription = e.dataDescription || ""; + this.name = e.name || ""; + this.effectiveInputPolicy = null; + this.effectiveOutputPolicy = null; + this.operation = null; + this.soapAction = null; + this.soapAddress = null; + this.wsdlAddress = null; + } +} +class XmlConnection extends XFAObject { + constructor(e) { + super(On, "xmlConnection", !0); + this.dataDescription = e.dataDescription || ""; + this.name = e.name || ""; + this.uri = null; + } +} +class XsdConnection extends XFAObject { + constructor(e) { + super(On, "xsdConnection", !0); + this.dataDescription = e.dataDescription || ""; + this.name = e.name || ""; + this.rootElement = null; + this.uri = null; + } +} +class ConnectionSetNamespace { + static [gn](e, t) { + if (ConnectionSetNamespace.hasOwnProperty(e)) + return ConnectionSetNamespace[e](t); + } + static connectionSet(e) { + return new ConnectionSet(e); + } + static effectiveInputPolicy(e) { + return new EffectiveInputPolicy(e); + } + static effectiveOutputPolicy(e) { + return new EffectiveOutputPolicy(e); + } + static operation(e) { + return new Operation(e); + } + static rootElement(e) { + return new RootElement(e); + } + static soapAction(e) { + return new SoapAction(e); + } + static soapAddress(e) { + return new SoapAddress(e); + } + static uri(e) { + return new connection_set_Uri(e); + } + static wsdlAddress(e) { + return new WsdlAddress(e); + } + static wsdlConnection(e) { + return new WsdlConnection(e); + } + static xmlConnection(e) { + return new XmlConnection(e); + } + static xsdConnection(e) { + return new XsdConnection(e); + } +} +const Pn = on.datasets.id; +class datasets_Data extends XmlObject { + constructor(e) { + super(Pn, "data", e); + } + [Gr]() { + return !0; + } +} +class Datasets extends XFAObject { + constructor(e) { + super(Pn, "datasets", !0); + this.data = null; + this.Signature = null; + } + [Kr](e) { + const t = e[Yr]; + (("data" === t && e[Jr] === Pn) || + ("Signature" === t && e[Jr] === on.signature.id)) && + (this[t] = e); + this[Xs](e); + } +} +class DatasetsNamespace { + static [gn](e, t) { + if (DatasetsNamespace.hasOwnProperty(e)) return DatasetsNamespace[e](t); + } + static datasets(e) { + return new Datasets(e); + } + static data(e) { + return new datasets_Data(e); + } +} +const Wn = on.localeSet.id; +class CalendarSymbols extends XFAObject { + constructor(e) { + super(Wn, "calendarSymbols", !0); + this.name = "gregorian"; + this.dayNames = new XFAObjectArray(2); + this.eraNames = null; + this.meridiemNames = null; + this.monthNames = new XFAObjectArray(2); + } +} +class CurrencySymbol extends StringObject { + constructor(e) { + super(Wn, "currencySymbol"); + this.name = getStringOption(e.name, ["symbol", "isoname", "decimal"]); + } +} +class CurrencySymbols extends XFAObject { + constructor(e) { + super(Wn, "currencySymbols", !0); + this.currencySymbol = new XFAObjectArray(3); + } +} +class DatePattern extends StringObject { + constructor(e) { + super(Wn, "datePattern"); + this.name = getStringOption(e.name, ["full", "long", "med", "short"]); + } +} +class DatePatterns extends XFAObject { + constructor(e) { + super(Wn, "datePatterns", !0); + this.datePattern = new XFAObjectArray(4); + } +} +class DateTimeSymbols extends ContentObject { + constructor(e) { + super(Wn, "dateTimeSymbols"); + } +} +class Day extends StringObject { + constructor(e) { + super(Wn, "day"); + } +} +class DayNames extends XFAObject { + constructor(e) { + super(Wn, "dayNames", !0); + this.abbr = getInteger({ + data: e.abbr, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.day = new XFAObjectArray(7); + } +} +class Era extends StringObject { + constructor(e) { + super(Wn, "era"); + } +} +class EraNames extends XFAObject { + constructor(e) { + super(Wn, "eraNames", !0); + this.era = new XFAObjectArray(2); + } +} +class locale_set_Locale extends XFAObject { + constructor(e) { + super(Wn, "locale", !0); + this.desc = e.desc || ""; + this.name = "isoname"; + this.calendarSymbols = null; + this.currencySymbols = null; + this.datePatterns = null; + this.dateTimeSymbols = null; + this.numberPatterns = null; + this.numberSymbols = null; + this.timePatterns = null; + this.typeFaces = null; + } +} +class locale_set_LocaleSet extends XFAObject { + constructor(e) { + super(Wn, "localeSet", !0); + this.locale = new XFAObjectArray(); + } +} +class Meridiem extends StringObject { + constructor(e) { + super(Wn, "meridiem"); + } +} +class MeridiemNames extends XFAObject { + constructor(e) { + super(Wn, "meridiemNames", !0); + this.meridiem = new XFAObjectArray(2); + } +} +class Month extends StringObject { + constructor(e) { + super(Wn, "month"); + } +} +class MonthNames extends XFAObject { + constructor(e) { + super(Wn, "monthNames", !0); + this.abbr = getInteger({ + data: e.abbr, + defaultValue: 0, + validate: (e) => 1 === e, + }); + this.month = new XFAObjectArray(12); + } +} +class NumberPattern extends StringObject { + constructor(e) { + super(Wn, "numberPattern"); + this.name = getStringOption(e.name, ["full", "long", "med", "short"]); + } +} +class NumberPatterns extends XFAObject { + constructor(e) { + super(Wn, "numberPatterns", !0); + this.numberPattern = new XFAObjectArray(4); + } +} +class NumberSymbol extends StringObject { + constructor(e) { + super(Wn, "numberSymbol"); + this.name = getStringOption(e.name, [ + "decimal", + "grouping", + "percent", + "minus", + "zero", + ]); + } +} +class NumberSymbols extends XFAObject { + constructor(e) { + super(Wn, "numberSymbols", !0); + this.numberSymbol = new XFAObjectArray(5); + } +} +class TimePattern extends StringObject { + constructor(e) { + super(Wn, "timePattern"); + this.name = getStringOption(e.name, ["full", "long", "med", "short"]); + } +} +class TimePatterns extends XFAObject { + constructor(e) { + super(Wn, "timePatterns", !0); + this.timePattern = new XFAObjectArray(4); + } +} +class TypeFace extends XFAObject { + constructor(e) { + super(Wn, "typeFace", !0); + this.name = "" | e.name; + } +} +class TypeFaces extends XFAObject { + constructor(e) { + super(Wn, "typeFaces", !0); + this.typeFace = new XFAObjectArray(); + } +} +class LocaleSetNamespace { + static [gn](e, t) { + if (LocaleSetNamespace.hasOwnProperty(e)) return LocaleSetNamespace[e](t); + } + static calendarSymbols(e) { + return new CalendarSymbols(e); + } + static currencySymbol(e) { + return new CurrencySymbol(e); + } + static currencySymbols(e) { + return new CurrencySymbols(e); + } + static datePattern(e) { + return new DatePattern(e); + } + static datePatterns(e) { + return new DatePatterns(e); + } + static dateTimeSymbols(e) { + return new DateTimeSymbols(e); + } + static day(e) { + return new Day(e); + } + static dayNames(e) { + return new DayNames(e); + } + static era(e) { + return new Era(e); + } + static eraNames(e) { + return new EraNames(e); + } + static locale(e) { + return new locale_set_Locale(e); + } + static localeSet(e) { + return new locale_set_LocaleSet(e); + } + static meridiem(e) { + return new Meridiem(e); + } + static meridiemNames(e) { + return new MeridiemNames(e); + } + static month(e) { + return new Month(e); + } + static monthNames(e) { + return new MonthNames(e); + } + static numberPattern(e) { + return new NumberPattern(e); + } + static numberPatterns(e) { + return new NumberPatterns(e); + } + static numberSymbol(e) { + return new NumberSymbol(e); + } + static numberSymbols(e) { + return new NumberSymbols(e); + } + static timePattern(e) { + return new TimePattern(e); + } + static timePatterns(e) { + return new TimePatterns(e); + } + static typeFace(e) { + return new TypeFace(e); + } + static typeFaces(e) { + return new TypeFaces(e); + } +} +const jn = on.signature.id; +class signature_Signature extends XFAObject { + constructor(e) { + super(jn, "signature", !0); + } +} +class SignatureNamespace { + static [gn](e, t) { + if (SignatureNamespace.hasOwnProperty(e)) return SignatureNamespace[e](t); + } + static signature(e) { + return new signature_Signature(e); + } +} +const Xn = on.stylesheet.id; +class Stylesheet extends XFAObject { + constructor(e) { + super(Xn, "stylesheet", !0); + } +} +class StylesheetNamespace { + static [gn](e, t) { + if (StylesheetNamespace.hasOwnProperty(e)) return StylesheetNamespace[e](t); + } + static stylesheet(e) { + return new Stylesheet(e); + } +} +const Zn = on.xdp.id; +class xdp_Xdp extends XFAObject { + constructor(e) { + super(Zn, "xdp", !0); + this.uuid = e.uuid || ""; + this.timeStamp = e.timeStamp || ""; + this.config = null; + this.connectionSet = null; + this.datasets = null; + this.localeSet = null; + this.stylesheet = new XFAObjectArray(); + this.template = null; + } + [Tr](e) { + const t = on[e[Yr]]; + return t && e[Jr] === t.id; + } +} +class XdpNamespace { + static [gn](e, t) { + if (XdpNamespace.hasOwnProperty(e)) return XdpNamespace[e](t); + } + static xdp(e) { + return new xdp_Xdp(e); + } +} +const Vn = on.xhtml.id, + zn = Symbol(), + _n = new Set([ + "color", + "font", + "font-family", + "font-size", + "font-stretch", + "font-style", + "font-weight", + "margin", + "margin-bottom", + "margin-left", + "margin-right", + "margin-top", + "letter-spacing", + "line-height", + "orphans", + "page-break-after", + "page-break-before", + "page-break-inside", + "tab-interval", + "tab-stop", + "text-align", + "text-decoration", + "text-indent", + "vertical-align", + "widows", + "kerning-mode", + "xfa-font-horizontal-scale", + "xfa-font-vertical-scale", + "xfa-spacerun", + "xfa-tab-stops", + ]), + $n = new Map([ + ["page-break-after", "breakAfter"], + ["page-break-before", "breakBefore"], + ["page-break-inside", "breakInside"], + ["kerning-mode", (e) => ("none" === e ? "none" : "normal")], + [ + "xfa-font-horizontal-scale", + (e) => `scaleX(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`, + ], + [ + "xfa-font-vertical-scale", + (e) => `scaleY(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`, + ], + ["xfa-spacerun", ""], + ["xfa-tab-stops", ""], + [ + "font-size", + (e, t) => measureToString(0.99 * (e = t.fontSize = getMeasurement(e))), + ], + ["letter-spacing", (e) => measureToString(getMeasurement(e))], + ["line-height", (e) => measureToString(getMeasurement(e))], + ["margin", (e) => measureToString(getMeasurement(e))], + ["margin-bottom", (e) => measureToString(getMeasurement(e))], + ["margin-left", (e) => measureToString(getMeasurement(e))], + ["margin-right", (e) => measureToString(getMeasurement(e))], + ["margin-top", (e) => measureToString(getMeasurement(e))], + ["text-indent", (e) => measureToString(getMeasurement(e))], + ["font-family", (e) => e], + ["vertical-align", (e) => measureToString(getMeasurement(e))], + ]), + Ag = /\s+/g, + eg = /[\r\n]+/g, + tg = /\r\n?/g; +function mapStyle(e, t, i) { + const a = Object.create(null); + if (!e) return a; + const s = Object.create(null); + for (const [t, i] of e.split(";").map((e) => e.split(":", 2))) { + const e = $n.get(t); + if ("" === e) continue; + let r = i; + e && (r = "string" == typeof e ? e : e(i, s)); + t.endsWith("scale") + ? (a.transform = a.transform ? `${a[t]} ${r}` : r) + : (a[t.replaceAll(/-([a-zA-Z])/g, (e, t) => t.toUpperCase())] = r); + } + a.fontFamily && + setFontFamily( + { + typeface: a.fontFamily, + weight: a.fontWeight || "normal", + posture: a.fontStyle || "normal", + size: s.fontSize || 0, + }, + t, + t[yr].fontFinder, + a, + ); + if (i && a.verticalAlign && "0px" !== a.verticalAlign && a.fontSize) { + const e = 0.583, + t = 0.333, + i = getMeasurement(a.fontSize); + a.fontSize = measureToString(i * e); + a.verticalAlign = measureToString( + Math.sign(getMeasurement(a.verticalAlign)) * i * t, + ); + } + i && a.fontSize && (a.fontSize = `calc(${a.fontSize} * var(--scale-factor))`); + fixTextIndent(a); + return a; +} +const ig = new Set(["body", "html"]); +class XhtmlObject extends XmlObject { + constructor(e, t) { + super(Vn, t); + this[zn] = !1; + this.style = e.style || ""; + } + [Vs](e) { + super[Vs](e); + this.style = (function checkStyle(e) { + return e.style + ? e.style + .trim() + .split(/\s*;\s*/) + .filter((e) => !!e) + .map((e) => e.split(/\s*:\s*/, 2)) + .filter(([t, i]) => { + "font-family" === t && e[yr].usedTypefaces.add(i); + return _n.has(t); + }) + .map((e) => e.join(":")) + .join(";") + : ""; + })(this); + } + [Ws]() { + return !ig.has(this[Yr]); + } + [qr](e, t = !1) { + if (t) this[zn] = !0; + else { + e = e.replaceAll(eg, ""); + this.style.includes("xfa-spacerun:yes") || (e = e.replaceAll(Ag, " ")); + } + e && (this[er] += e); + } + [Or](e, t = !0) { + const i = Object.create(null), + a = { top: NaN, bottom: NaN, left: NaN, right: NaN }; + let s = null; + for (const [e, t] of this.style.split(";").map((e) => e.split(":", 2))) + switch (e) { + case "font-family": + i.typeface = stripQuotes(t); + break; + case "font-size": + i.size = getMeasurement(t); + break; + case "font-weight": + i.weight = t; + break; + case "font-style": + i.posture = t; + break; + case "letter-spacing": + i.letterSpacing = getMeasurement(t); + break; + case "margin": + const e = t.split(/ \t/).map((e) => getMeasurement(e)); + switch (e.length) { + case 1: + a.top = a.bottom = a.left = a.right = e[0]; + break; + case 2: + a.top = a.bottom = e[0]; + a.left = a.right = e[1]; + break; + case 3: + a.top = e[0]; + a.bottom = e[2]; + a.left = a.right = e[1]; + break; + case 4: + a.top = e[0]; + a.left = e[1]; + a.bottom = e[2]; + a.right = e[3]; + } + break; + case "margin-top": + a.top = getMeasurement(t); + break; + case "margin-bottom": + a.bottom = getMeasurement(t); + break; + case "margin-left": + a.left = getMeasurement(t); + break; + case "margin-right": + a.right = getMeasurement(t); + break; + case "line-height": + s = getMeasurement(t); + } + e.pushData(i, a, s); + if (this[er]) e.addString(this[er]); + else + for (const t of this[Er]()) + "#text" !== t[Yr] ? t[Or](e) : e.addString(t[er]); + t && e.popFont(); + } + [an](e) { + const t = []; + this[ar] = { children: t }; + this[Zs]({}); + if (0 === t.length && !this[er]) return HTMLResult.EMPTY; + let i; + i = this[zn] + ? this[er] + ? this[er].replaceAll(tg, "\n") + : void 0 + : this[er] || void 0; + return HTMLResult.success({ + name: this[Yr], + attributes: { + href: this.href, + style: mapStyle(this.style, this, this[zn]), + }, + children: t, + value: i, + }); + } +} +class A extends XhtmlObject { + constructor(e) { + super(e, "a"); + this.href = fixURL(e.href) || ""; + } +} +class B extends XhtmlObject { + constructor(e) { + super(e, "b"); + } + [Or](e) { + e.pushFont({ weight: "bold" }); + super[Or](e); + e.popFont(); + } +} +class Body extends XhtmlObject { + constructor(e) { + super(e, "body"); + } + [an](e) { + const t = super[an](e), + { html: i } = t; + if (!i) return HTMLResult.EMPTY; + i.name = "div"; + i.attributes.class = ["xfaRich"]; + return t; + } +} +class Br extends XhtmlObject { + constructor(e) { + super(e, "br"); + } + [en]() { + return "\n"; + } + [Or](e) { + e.addString("\n"); + } + [an](e) { + return HTMLResult.success({ name: "br" }); + } +} +class Html extends XhtmlObject { + constructor(e) { + super(e, "html"); + } + [an](e) { + const t = []; + this[ar] = { children: t }; + this[Zs]({}); + if (0 === t.length) + return HTMLResult.success({ + name: "div", + attributes: { class: ["xfaRich"], style: {} }, + value: this[er] || "", + }); + if (1 === t.length) { + const e = t[0]; + if (e.attributes?.class.includes("xfaRich")) return HTMLResult.success(e); + } + return HTMLResult.success({ + name: "div", + attributes: { class: ["xfaRich"], style: {} }, + children: t, + }); + } +} +class I extends XhtmlObject { + constructor(e) { + super(e, "i"); + } + [Or](e) { + e.pushFont({ posture: "italic" }); + super[Or](e); + e.popFont(); + } +} +class Li extends XhtmlObject { + constructor(e) { + super(e, "li"); + } +} +class Ol extends XhtmlObject { + constructor(e) { + super(e, "ol"); + } +} +class P extends XhtmlObject { + constructor(e) { + super(e, "p"); + } + [Or](e) { + super[Or](e, !1); + e.addString("\n"); + e.addPara(); + e.popFont(); + } + [en]() { + return this[pr]()[Er]().at(-1) === this ? super[en]() : super[en]() + "\n"; + } +} +class Span extends XhtmlObject { + constructor(e) { + super(e, "span"); + } +} +class Sub extends XhtmlObject { + constructor(e) { + super(e, "sub"); + } +} +class Sup extends XhtmlObject { + constructor(e) { + super(e, "sup"); + } +} +class Ul extends XhtmlObject { + constructor(e) { + super(e, "ul"); + } +} +class XhtmlNamespace { + static [gn](e, t) { + if (XhtmlNamespace.hasOwnProperty(e)) return XhtmlNamespace[e](t); + } + static a(e) { + return new A(e); + } + static b(e) { + return new B(e); + } + static body(e) { + return new Body(e); + } + static br(e) { + return new Br(e); + } + static html(e) { + return new Html(e); + } + static i(e) { + return new I(e); + } + static li(e) { + return new Li(e); + } + static ol(e) { + return new Ol(e); + } + static p(e) { + return new P(e); + } + static span(e) { + return new Span(e); + } + static sub(e) { + return new Sub(e); + } + static sup(e) { + return new Sup(e); + } + static ul(e) { + return new Ul(e); + } +} +const ag = { + config: ConfigNamespace, + connection: ConnectionSetNamespace, + datasets: DatasetsNamespace, + localeSet: LocaleSetNamespace, + signature: SignatureNamespace, + stylesheet: StylesheetNamespace, + template: TemplateNamespace, + xdp: XdpNamespace, + xhtml: XhtmlNamespace, +}; +class UnknownNamespace { + constructor(e) { + this.namespaceId = e; + } + [gn](e, t) { + return new XmlObject(this.namespaceId, e, t); + } +} +class Root extends XFAObject { + constructor(e) { + super(-1, "root", Object.create(null)); + this.element = null; + this[Dr] = e; + } + [Kr](e) { + this.element = e; + return !0; + } + [sr]() { + super[sr](); + if (this.element.template instanceof Template) { + this[Dr].set(Xr, this.element); + this.element.template[Zr](this[Dr]); + this.element.template[Dr] = this[Dr]; + } + } +} +class Empty extends XFAObject { + constructor() { + super(-1, "", Object.create(null)); + } + [Kr](e) { + return !1; + } +} +class Builder { + constructor(e = null) { + this._namespaceStack = []; + this._nsAgnosticLevel = 0; + this._namespacePrefixes = new Map(); + this._namespaces = new Map(); + this._nextNsId = Math.max(...Object.values(on).map(({ id: e }) => e)); + this._currentNamespace = e || new UnknownNamespace(++this._nextNsId); + } + buildRoot(e) { + return new Root(e); + } + build({ nsPrefix: e, name: t, attributes: i, namespace: a, prefixes: s }) { + const r = null !== a; + if (r) { + this._namespaceStack.push(this._currentNamespace); + this._currentNamespace = this._searchNamespace(a); + } + s && this._addNamespacePrefix(s); + if (i.hasOwnProperty(vr)) { + const e = ag.datasets, + t = i[vr]; + let a = null; + for (const [i, s] of Object.entries(t)) { + if (this._getNamespaceToUse(i) === e) { + a = { xfa: s }; + break; + } + } + a ? (i[vr] = a) : delete i[vr]; + } + const n = this._getNamespaceToUse(e), + g = n?.[gn](t, i) || new Empty(); + g[Gr]() && this._nsAgnosticLevel++; + (r || s || g[Gr]()) && + (g[_s] = { hasNamespace: r, prefixes: s, nsAgnostic: g[Gr]() }); + return g; + } + isNsAgnostic() { + return this._nsAgnosticLevel > 0; + } + _searchNamespace(e) { + let t = this._namespaces.get(e); + if (t) return t; + for (const [i, { check: a }] of Object.entries(on)) + if (a(e)) { + t = ag[i]; + if (t) { + this._namespaces.set(e, t); + return t; + } + break; + } + t = new UnknownNamespace(++this._nextNsId); + this._namespaces.set(e, t); + return t; + } + _addNamespacePrefix(e) { + for (const { prefix: t, value: i } of e) { + const e = this._searchNamespace(i); + let a = this._namespacePrefixes.get(t); + if (!a) { + a = []; + this._namespacePrefixes.set(t, a); + } + a.push(e); + } + } + _getNamespaceToUse(e) { + if (!e) return this._currentNamespace; + const t = this._namespacePrefixes.get(e); + if (t?.length > 0) return t.at(-1); + warn(`Unknown namespace prefix: ${e}.`); + return null; + } + clean(e) { + const { hasNamespace: t, prefixes: i, nsAgnostic: a } = e; + t && (this._currentNamespace = this._namespaceStack.pop()); + i && + i.forEach(({ prefix: e }) => { + this._namespacePrefixes.get(e).pop(); + }); + a && this._nsAgnosticLevel--; + } +} +class XFAParser extends XMLParserBase { + constructor(e = null, t = !1) { + super(); + this._builder = new Builder(e); + this._stack = []; + this._globalData = { usedTypefaces: new Set() }; + this._ids = new Map(); + this._current = this._builder.buildRoot(this._ids); + this._errorCode = Rs; + this._whiteRegex = /^\s+$/; + this._nbsps = /\xa0+/g; + this._richText = t; + } + parse(e) { + this.parseXml(e); + if (this._errorCode === Rs) { + this._current[sr](); + return this._current.element; + } + } + onText(e) { + e = e.replace(this._nbsps, (e) => e.slice(1) + " "); + this._richText || this._current[Ws]() + ? this._current[qr](e, this._richText) + : this._whiteRegex.test(e) || this._current[qr](e.trim()); + } + onCdata(e) { + this._current[qr](e); + } + _mkAttributes(e, t) { + let i = null, + a = null; + const s = Object.create({}); + for (const { name: r, value: n } of e) + if ("xmlns" === r) + i ? warn(`XFA - multiple namespace definition in <${t}>`) : (i = n); + else if (r.startsWith("xmlns:")) { + const e = r.substring(6); + a || (a = []); + a.push({ prefix: e, value: n }); + } else { + const e = r.indexOf(":"); + if (-1 === e) s[r] = n; + else { + let t = s[vr]; + t || (t = s[vr] = Object.create(null)); + const [i, a] = [r.slice(0, e), r.slice(e + 1)]; + (t[i] ||= Object.create(null))[a] = n; + } + } + return [i, a, s]; + } + _getNameAndPrefix(e, t) { + const i = e.indexOf(":"); + return -1 === i + ? [e, null] + : [e.substring(i + 1), t ? "" : e.substring(0, i)]; + } + onBeginElement(e, t, i) { + const [a, s, r] = this._mkAttributes(t, e), + [n, g] = this._getNameAndPrefix(e, this._builder.isNsAgnostic()), + o = this._builder.build({ + nsPrefix: g, + name: n, + attributes: r, + namespace: a, + prefixes: s, + }); + o[yr] = this._globalData; + if (i) { + o[sr](); + this._current[Kr](o) && o[zr](this._ids); + o[Vs](this._builder); + } else { + this._stack.push(this._current); + this._current = o; + } + } + onEndElement(e) { + const t = this._current; + if (t[Sr]() && "string" == typeof t[er]) { + const e = new XFAParser(); + e._globalData = this._globalData; + const i = e.parse(t[er]); + t[er] = null; + t[Kr](i); + } + t[sr](); + this._current = this._stack.pop(); + this._current[Kr](t) && t[zr](this._ids); + t[Vs](this._builder); + } + onError(e) { + this._errorCode = e; + } +} +class XFAFactory { + constructor(e) { + try { + this.root = new XFAParser().parse(XFAFactory._createDocument(e)); + const t = new Binder(this.root); + this.form = t.bind(); + this.dataHandler = new DataHandler(this.root, t.getData()); + this.form[yr].template = this.form; + } catch (e) { + warn(`XFA - an error occurred during parsing and binding: ${e}`); + } + } + isValid() { + return this.root && this.form; + } + _createPagesHelper() { + const e = this.form[tn](); + return new Promise((t, i) => { + const nextIteration = () => { + try { + const i = e.next(); + i.done ? t(i.value) : setTimeout(nextIteration, 0); + } catch (e) { + i(e); + } + }; + setTimeout(nextIteration, 0); + }); + } + async _createPages() { + try { + this.pages = await this._createPagesHelper(); + this.dims = this.pages.children.map((e) => { + const { width: t, height: i } = e.attributes.style; + return [0, 0, parseInt(t), parseInt(i)]; + }); + } catch (e) { + warn(`XFA - an error occurred during layout: ${e}`); + } + } + getBoundingBox(e) { + return this.dims[e]; + } + async getNumPages() { + this.pages || (await this._createPages()); + return this.dims.length; + } + setImages(e) { + this.form[yr].images = e; + } + setFonts(e) { + this.form[yr].fontFinder = new FontFinder(e); + const t = []; + for (let e of this.form[yr].usedTypefaces) { + e = stripQuotes(e); + this.form[yr].fontFinder.find(e) || t.push(e); + } + return t.length > 0 ? t : null; + } + appendFonts(e, t) { + this.form[yr].fontFinder.add(e, t); + } + async getPages() { + this.pages || (await this._createPages()); + const e = this.pages; + this.pages = null; + return e; + } + serializeData(e) { + return this.dataHandler.serialize(e); + } + static _createDocument(e) { + return e["/xdp:xdp"] ? Object.values(e).join("") : e["xdp:xdp"]; + } + static getRichTextAsHtml(e) { + if (!e || "string" != typeof e) return null; + try { + let t = new XFAParser(XhtmlNamespace, !0).parse(e); + if (!["body", "xhtml"].includes(t[Yr])) { + const e = XhtmlNamespace.body({}); + e[Xs](t); + t = e; + } + const i = t[an](); + if (!i.success) return null; + const { html: a } = i, + { attributes: s } = a; + if (s) { + s.class && (s.class = s.class.filter((e) => !e.startsWith("xfa"))); + s.dir = "auto"; + } + return { html: a, str: t[en]() }; + } catch (e) { + warn(`XFA - an error occurred during parsing of rich text: ${e}`); + } + return null; + } +} +class AnnotationFactory { + static createGlobals(e) { + return Promise.all([ + e.ensureCatalog("acroForm"), + e.ensureDoc("xfaDatasets"), + e.ensureCatalog("structTreeRoot"), + e.ensureCatalog("baseUrl"), + e.ensureCatalog("attachments"), + ]).then( + ([t, i, a, s, r]) => ({ + pdfManager: e, + acroForm: t instanceof Dict ? t : Dict.empty, + xfaDatasets: i, + structTreeRoot: a, + baseUrl: s, + attachments: r, + }), + (e) => { + warn(`createGlobals: "${e}".`); + return null; + }, + ); + } + static async create(e, t, i, a, s, r) { + const n = s ? await this._getPageIndex(e, t, i.pdfManager) : null; + return i.pdfManager.ensure(this, "_create", [e, t, i, a, s, n, r]); + } + static _create(e, t, i, a, s = !1, r = null, n = null) { + const g = e.fetchIfRef(t); + if (!(g instanceof Dict)) return; + const { acroForm: o, pdfManager: c } = i, + C = t instanceof Ref ? t.toString() : `annot_${a.createObjId()}`; + let h = g.get("Subtype"); + h = h instanceof Name ? h.name : null; + const l = { + xref: e, + ref: t, + dict: g, + subtype: h, + id: C, + annotationGlobals: i, + collectFields: s, + needAppearances: !s && !0 === o.get("NeedAppearances"), + pageIndex: r, + evaluatorOptions: c.evaluatorOptions, + pageRef: n, + }; + switch (h) { + case "Link": + return new LinkAnnotation(l); + case "Text": + return new TextAnnotation(l); + case "Widget": + let e = getInheritableProperty({ dict: g, key: "FT" }); + e = e instanceof Name ? e.name : null; + switch (e) { + case "Tx": + return new TextWidgetAnnotation(l); + case "Btn": + return new ButtonWidgetAnnotation(l); + case "Ch": + return new ChoiceWidgetAnnotation(l); + case "Sig": + return new SignatureWidgetAnnotation(l); + } + warn( + `Unimplemented widget field type "${e}", falling back to base field type.`, + ); + return new WidgetAnnotation(l); + case "Popup": + return new PopupAnnotation(l); + case "FreeText": + return new FreeTextAnnotation(l); + case "Line": + return new LineAnnotation(l); + case "Square": + return new SquareAnnotation(l); + case "Circle": + return new CircleAnnotation(l); + case "PolyLine": + return new PolylineAnnotation(l); + case "Polygon": + return new PolygonAnnotation(l); + case "Caret": + return new CaretAnnotation(l); + case "Ink": + return new InkAnnotation(l); + case "Highlight": + return new HighlightAnnotation(l); + case "Underline": + return new UnderlineAnnotation(l); + case "Squiggly": + return new SquigglyAnnotation(l); + case "StrikeOut": + return new StrikeOutAnnotation(l); + case "Stamp": + return new StampAnnotation(l); + case "FileAttachment": + return new FileAttachmentAnnotation(l); + default: + s || + warn( + h + ? `Unimplemented annotation type "${h}", falling back to base annotation.` + : "Annotation is missing the required /Subtype.", + ); + return new Annotation(l); + } + } + static async _getPageIndex(e, t, i) { + try { + const a = await e.fetchIfRefAsync(t); + if (!(a instanceof Dict)) return -1; + const s = a.getRaw("P"); + if (s instanceof Ref) + try { + return await i.ensureCatalog("getPageIndex", [s]); + } catch (e) { + info(`_getPageIndex -- not a valid page reference: "${e}".`); + } + if (a.has("Kids")) return -1; + const r = await i.ensureDoc("numPages"); + for (let e = 0; e < r; e++) { + const a = await i.getPage(e), + s = await i.ensure(a, "annotations"); + for (const i of s) if (i instanceof Ref && isRefsEqual(i, t)) return e; + } + } catch (e) { + warn(`_getPageIndex: "${e}".`); + } + return -1; + } + static generateImages(e, t, i) { + if (!i) { + warn( + "generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.", + ); + return null; + } + let a; + for (const { bitmapId: i, bitmap: s } of e) + if (s) { + a ||= new Map(); + a.set(i, StampAnnotation.createImage(s, t)); + } + return a; + } + static async saveNewAnnotations(e, t, i, a) { + const s = e.xref; + let r; + const n = [], + g = [], + { isOffscreenCanvasSupported: o } = e.options; + for (const c of i) + if (!c.deleted) + switch (c.annotationType) { + case u: + if (!r) { + const e = new Dict(s); + e.set("BaseFont", Name.get("Helvetica")); + e.set("Type", Name.get("Font")); + e.set("Subtype", Name.get("Type1")); + e.set("Encoding", Name.get("WinAnsiEncoding")); + const t = []; + r = s.getNewTemporaryRef(); + await writeObject(r, e, t, s); + n.push({ ref: r, data: t.join("") }); + } + g.push( + FreeTextAnnotation.createNewAnnotation(s, c, n, { + evaluator: e, + task: t, + baseFontRef: r, + }), + ); + break; + case d: + c.quadPoints + ? g.push(HighlightAnnotation.createNewAnnotation(s, c, n)) + : g.push(InkAnnotation.createNewAnnotation(s, c, n)); + break; + case p: + g.push(InkAnnotation.createNewAnnotation(s, c, n)); + break; + case f: + if (!o) break; + const i = await a.get(c.bitmapId); + if (i.imageStream) { + const { imageStream: e, smaskStream: t } = i, + a = []; + if (t) { + const i = s.getNewTemporaryRef(); + await writeObject(i, t, a, s); + n.push({ ref: i, data: a.join("") }); + e.dict.set("SMask", i); + a.length = 0; + } + const r = (i.imageRef = s.getNewTemporaryRef()); + await writeObject(r, e, a, s); + n.push({ ref: r, data: a.join("") }); + i.imageStream = i.smaskStream = null; + } + g.push(StampAnnotation.createNewAnnotation(s, c, n, { image: i })); + } + return { annotations: await Promise.all(g), dependencies: n }; + } + static async printNewAnnotations(e, t, i, a, s) { + if (!a) return null; + const { options: r, xref: n } = t, + g = []; + for (const o of a) + if (!o.deleted) + switch (o.annotationType) { + case u: + g.push( + FreeTextAnnotation.createNewPrintAnnotation(e, n, o, { + evaluator: t, + task: i, + evaluatorOptions: r, + }), + ); + break; + case d: + o.quadPoints + ? g.push( + HighlightAnnotation.createNewPrintAnnotation(e, n, o, { + evaluatorOptions: r, + }), + ) + : g.push( + InkAnnotation.createNewPrintAnnotation(e, n, o, { + evaluatorOptions: r, + }), + ); + break; + case p: + g.push( + InkAnnotation.createNewPrintAnnotation(e, n, o, { + evaluatorOptions: r, + }), + ); + break; + case f: + if (!r.isOffscreenCanvasSupported) break; + const a = await s.get(o.bitmapId); + if (a.imageStream) { + const { imageStream: e, smaskStream: t } = a; + t && e.dict.set("SMask", t); + a.imageRef = new JpegStream(e, e.length); + a.imageStream = a.smaskStream = null; + } + g.push( + StampAnnotation.createNewPrintAnnotation(e, n, o, { + image: a, + evaluatorOptions: r, + }), + ); + } + return Promise.all(g); + } +} +function getRgbColor(e, t = new Uint8ClampedArray(3)) { + if (!Array.isArray(e)) return t; + const i = t || new Uint8ClampedArray(3); + switch (e.length) { + case 0: + return null; + case 1: + ColorSpace.singletons.gray.getRgbItem(e, 0, i, 0); + return i; + case 3: + ColorSpace.singletons.rgb.getRgbItem(e, 0, i, 0); + return i; + case 4: + ColorSpace.singletons.cmyk.getRgbItem(e, 0, i, 0); + return i; + default: + return t; + } +} +function getPdfColorArray(e) { + return Array.from(e, (e) => e / 255); +} +function getQuadPoints(e, t) { + const i = e.getArray("QuadPoints"); + if (!isNumberArray(i, null) || 0 === i.length || i.length % 8 > 0) + return null; + const a = new Float32Array(i.length); + for (let e = 0, s = i.length; e < s; e += 8) { + const [s, r, n, g, o, c, C, h] = i.slice(e, e + 8), + l = Math.min(s, n, o, C), + Q = Math.max(s, n, o, C), + E = Math.min(r, g, c, h), + u = Math.max(r, g, c, h); + if (null !== t && (l < t[0] || Q > t[2] || E < t[1] || u > t[3])) + return null; + a.set([l, u, Q, u, l, E, Q, E], e); + } + return a; +} +function getTransformMatrix(e, t, i) { + const [a, s, r, n] = Util.getAxialAlignedBoundingBox(t, i); + if (a === r || s === n) return [1, 0, 0, 1, e[0], e[1]]; + const g = (e[2] - e[0]) / (r - a), + o = (e[3] - e[1]) / (n - s); + return [g, 0, 0, o, e[0] - a * g, e[1] - s * o]; +} +class Annotation { + constructor(e) { + const { dict: t, xref: i, annotationGlobals: a } = e; + this.setTitle(t.get("T")); + this.setContents(t.get("Contents")); + this.setModificationDate(t.get("M")); + this.setFlags(t.get("F")); + this.setRectangle(t.getArray("Rect")); + this.setColor(t.getArray("C")); + this.setBorderStyle(t); + this.setAppearance(t); + this.setOptionalContent(t); + const s = t.get("MK"); + this.setBorderAndBackgroundColors(s); + this.setRotation(s, t); + this.ref = e.ref instanceof Ref ? e.ref : null; + this._streams = []; + this.appearance && this._streams.push(this.appearance); + const r = !!(this.flags & AA), + n = !!(this.flags & eA); + if (a.structTreeRoot) { + let i = t.get("StructParent"); + i = Number.isInteger(i) && i >= 0 ? i : -1; + a.structTreeRoot.addAnnotationIdToPage(e.pageRef, i); + } + this.data = { + annotationFlags: this.flags, + borderStyle: this.borderStyle, + color: this.color, + backgroundColor: this.backgroundColor, + borderColor: this.borderColor, + rotation: this.rotation, + contentsObj: this._contents, + hasAppearance: !!this.appearance, + id: e.id, + modificationDate: this.modificationDate, + rect: this.rectangle, + subtype: e.subtype, + hasOwnCanvas: !1, + noRotate: !!(this.flags & _), + noHTML: r && n, + }; + if (e.collectFields) { + const a = t.get("Kids"); + if (Array.isArray(a)) { + const e = []; + for (const t of a) t instanceof Ref && e.push(t.toString()); + 0 !== e.length && (this.data.kidIds = e); + } + this.data.actions = collectActions(i, t, uA); + this.data.fieldName = this._constructFieldName(t); + this.data.pageIndex = e.pageIndex; + } + this._isOffscreenCanvasSupported = + e.evaluatorOptions.isOffscreenCanvasSupported; + this._fallbackFontDict = null; + this._needAppearances = !1; + } + _hasFlag(e, t) { + return !!(e & t); + } + _isViewable(e) { + return !this._hasFlag(e, Z) && !this._hasFlag(e, $); + } + _isPrintable(e) { + return this._hasFlag(e, z) && !this._hasFlag(e, V) && !this._hasFlag(e, Z); + } + mustBeViewed(e, t) { + const i = e?.get(this.data.id)?.noView; + return void 0 !== i ? !i : this.viewable && !this._hasFlag(this.flags, V); + } + mustBePrinted(e) { + const t = e?.get(this.data.id)?.noPrint; + return void 0 !== t ? !t : this.printable; + } + get viewable() { + return ( + null !== this.data.quadPoints && + (0 === this.flags || this._isViewable(this.flags)) + ); + } + get printable() { + return ( + null !== this.data.quadPoints && + 0 !== this.flags && + this._isPrintable(this.flags) + ); + } + _parseStringHelper(e) { + const t = "string" == typeof e ? stringToPDFString(e) : ""; + return { str: t, dir: t && "rtl" === bidi(t).dir ? "rtl" : "ltr" }; + } + setDefaultAppearance(e) { + const { dict: t, annotationGlobals: i } = e, + a = + getInheritableProperty({ dict: t, key: "DA" }) || i.acroForm.get("DA"); + this._defaultAppearance = "string" == typeof a ? a : ""; + this.data.defaultAppearanceData = parseDefaultAppearance( + this._defaultAppearance, + ); + } + setTitle(e) { + this._title = this._parseStringHelper(e); + } + setContents(e) { + this._contents = this._parseStringHelper(e); + } + setModificationDate(e) { + this.modificationDate = "string" == typeof e ? e : null; + } + setFlags(e) { + this.flags = Number.isInteger(e) && e > 0 ? e : 0; + this.flags & Z && + "Annotation" !== this.constructor.name && + (this.flags ^= Z); + } + hasFlag(e) { + return this._hasFlag(this.flags, e); + } + setRectangle(e) { + this.rectangle = lookupNormalRect(e, [0, 0, 0, 0]); + } + setColor(e) { + this.color = getRgbColor(e); + } + setLineEndings(e) { + this.lineEndings = ["None", "None"]; + if (Array.isArray(e) && 2 === e.length) + for (let t = 0; t < 2; t++) { + const i = e[t]; + if (i instanceof Name) + switch (i.name) { + case "None": + continue; + case "Square": + case "Circle": + case "Diamond": + case "OpenArrow": + case "ClosedArrow": + case "Butt": + case "ROpenArrow": + case "RClosedArrow": + case "Slash": + this.lineEndings[t] = i.name; + continue; + } + warn(`Ignoring invalid lineEnding: ${i}`); + } + } + setRotation(e, t) { + this.rotation = 0; + let i = e instanceof Dict ? e.get("R") || 0 : t.get("Rotate") || 0; + if (Number.isInteger(i) && 0 !== i) { + i %= 360; + i < 0 && (i += 360); + i % 90 == 0 && (this.rotation = i); + } + } + setBorderAndBackgroundColors(e) { + if (e instanceof Dict) { + this.borderColor = getRgbColor(e.getArray("BC"), null); + this.backgroundColor = getRgbColor(e.getArray("BG"), null); + } else this.borderColor = this.backgroundColor = null; + } + setBorderStyle(e) { + this.borderStyle = new AnnotationBorderStyle(); + if (e instanceof Dict) + if (e.has("BS")) { + const t = e.get("BS"); + if (t instanceof Dict) { + const e = t.get("Type"); + if (!e || isName(e, "Border")) { + this.borderStyle.setWidth(t.get("W"), this.rectangle); + this.borderStyle.setStyle(t.get("S")); + this.borderStyle.setDashArray(t.getArray("D")); + } + } + } else if (e.has("Border")) { + const t = e.getArray("Border"); + if (Array.isArray(t) && t.length >= 3) { + this.borderStyle.setHorizontalCornerRadius(t[0]); + this.borderStyle.setVerticalCornerRadius(t[1]); + this.borderStyle.setWidth(t[2], this.rectangle); + 4 === t.length && this.borderStyle.setDashArray(t[3], !0); + } + } else this.borderStyle.setWidth(0); + } + setAppearance(e) { + this.appearance = null; + const t = e.get("AP"); + if (!(t instanceof Dict)) return; + const i = t.get("N"); + if (i instanceof BaseStream) { + this.appearance = i; + return; + } + if (!(i instanceof Dict)) return; + const a = e.get("AS"); + if (!(a instanceof Name && i.has(a.name))) return; + const s = i.get(a.name); + s instanceof BaseStream && (this.appearance = s); + } + setOptionalContent(e) { + this.oc = null; + const t = e.get("OC"); + t instanceof Name + ? warn("setOptionalContent: Support for /Name-entry is not implemented.") + : t instanceof Dict && (this.oc = t); + } + loadResources(e, t) { + return t.dict.getAsync("Resources").then((t) => { + if (!t) return; + return new ObjectLoader(t, e, t.xref).load().then(function () { + return t; + }); + }); + } + async getOperatorList(e, t, a, s, r) { + const { hasOwnCanvas: n, id: g, rect: c } = this.data; + let C = this.appearance; + const h = !!(n && a & o); + if (h && (c[0] === c[2] || c[1] === c[3])) { + this.data.hasOwnCanvas = !1; + return { + opList: new OperatorList(), + separateForm: !1, + separateCanvas: !1, + }; + } + if (!C) { + if (!h) + return { + opList: new OperatorList(), + separateForm: !1, + separateCanvas: !1, + }; + C = new StringStream(""); + C.dict = new Dict(); + } + const l = C.dict, + Q = await this.loadResources( + ["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], + C, + ), + E = lookupRect(l.getArray("BBox"), [0, 0, 1, 1]), + u = lookupMatrix(l.getArray("Matrix"), i), + d = getTransformMatrix(c, E, u), + f = new OperatorList(); + let p; + this.oc && (p = await e.parseMarkedContentProps(this.oc, null)); + void 0 !== p && f.addOp(Je, ["OC", p]); + f.addOp(We, [g, c, d, u, h]); + await e.getOperatorList({ + stream: C, + task: t, + resources: Q, + operatorList: f, + fallbackFontDict: this._fallbackFontDict, + }); + f.addOp(je, []); + void 0 !== p && f.addOp(Ye, []); + this.reset(); + return { opList: f, separateForm: !1, separateCanvas: h }; + } + async save(e, t, i) { + return null; + } + get hasTextContent() { + return !1; + } + async extractTextContent(e, t, i) { + if (!this.appearance) return; + const a = await this.loadResources( + ["ExtGState", "Font", "Properties", "XObject"], + this.appearance, + ), + s = [], + r = []; + let n = null; + const g = { + desiredSize: Math.Infinity, + ready: !0, + enqueue(e, t) { + for (const t of e.items) + if (void 0 !== t.str) { + n ||= t.transform.slice(-2); + r.push(t.str); + if (t.hasEOL) { + s.push(r.join("").trimEnd()); + r.length = 0; + } + } + }, + }; + await e.getTextContent({ + stream: this.appearance, + task: t, + resources: a, + includeMarkedContent: !0, + keepWhiteSpace: !0, + sink: g, + viewBox: i, + }); + this.reset(); + r.length && s.push(r.join("").trimEnd()); + if (s.length > 1 || s[0]) { + const e = this.appearance.dict, + t = lookupRect(e.getArray("BBox"), null), + i = lookupMatrix(e.getArray("Matrix"), null); + this.data.textPosition = this._transformPoint(n, t, i); + this.data.textContent = s; + } + } + _transformPoint(e, t, i) { + const { rect: a } = this.data; + t ||= [0, 0, 1, 1]; + i ||= [1, 0, 0, 1, 0, 0]; + const s = getTransformMatrix(a, t, i); + s[4] -= a[0]; + s[5] -= a[1]; + e = Util.applyTransform(e, s); + return Util.applyTransform(e, i); + } + getFieldObject() { + return this.data.kidIds + ? { + id: this.data.id, + actions: this.data.actions, + name: this.data.fieldName, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + type: "", + kidIds: this.data.kidIds, + page: this.data.pageIndex, + rotation: this.rotation, + } + : null; + } + reset() { + for (const e of this._streams) e.reset(); + } + _constructFieldName(e) { + if (!e.has("T") && !e.has("Parent")) { + warn("Unknown field name, falling back to empty field name."); + return ""; + } + if (!e.has("Parent")) return stringToPDFString(e.get("T")); + const t = []; + e.has("T") && t.unshift(stringToPDFString(e.get("T"))); + let i = e; + const a = new RefSet(); + e.objId && a.put(e.objId); + for (; i.has("Parent"); ) { + i = i.get("Parent"); + if (!(i instanceof Dict) || (i.objId && a.has(i.objId))) break; + i.objId && a.put(i.objId); + i.has("T") && t.unshift(stringToPDFString(i.get("T"))); + } + return t.join("."); + } +} +class AnnotationBorderStyle { + constructor() { + this.width = 1; + this.style = hA; + this.dashArray = [3]; + this.horizontalCornerRadius = 0; + this.verticalCornerRadius = 0; + } + setWidth(e, t = [0, 0, 0, 0]) { + if (e instanceof Name) this.width = 0; + else if ("number" == typeof e) { + if (e > 0) { + const i = (t[2] - t[0]) / 2, + a = (t[3] - t[1]) / 2; + if (i > 0 && a > 0 && (e > i || e > a)) { + warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`); + e = 1; + } + } + this.width = e; + } + } + setStyle(e) { + if (e instanceof Name) + switch (e.name) { + case "S": + this.style = hA; + break; + case "D": + this.style = BA; + break; + case "B": + this.style = lA; + break; + case "I": + this.style = QA; + break; + case "U": + this.style = EA; + } + } + setDashArray(e, t = !1) { + if (Array.isArray(e)) { + let i = !0, + a = !0; + for (const t of e) { + if (!(+t >= 0)) { + i = !1; + break; + } + t > 0 && (a = !1); + } + if (0 === e.length || (i && !a)) { + this.dashArray = e; + t && this.setStyle(Name.get("D")); + } else this.width = 0; + } else e && (this.width = 0); + } + setHorizontalCornerRadius(e) { + Number.isInteger(e) && (this.horizontalCornerRadius = e); + } + setVerticalCornerRadius(e) { + Number.isInteger(e) && (this.verticalCornerRadius = e); + } +} +class MarkupAnnotation extends Annotation { + constructor(e) { + super(e); + const { dict: t } = e; + if (t.has("IRT")) { + const e = t.getRaw("IRT"); + this.data.inReplyTo = e instanceof Ref ? e.toString() : null; + const i = t.get("RT"); + this.data.replyType = i instanceof Name ? i.name : X; + } + let i = null; + if (this.data.replyType === j) { + const e = t.get("IRT"); + this.setTitle(e.get("T")); + this.data.titleObj = this._title; + this.setContents(e.get("Contents")); + this.data.contentsObj = this._contents; + if (e.has("CreationDate")) { + this.setCreationDate(e.get("CreationDate")); + this.data.creationDate = this.creationDate; + } else this.data.creationDate = null; + if (e.has("M")) { + this.setModificationDate(e.get("M")); + this.data.modificationDate = this.modificationDate; + } else this.data.modificationDate = null; + i = e.getRaw("Popup"); + if (e.has("C")) { + this.setColor(e.getArray("C")); + this.data.color = this.color; + } else this.data.color = null; + } else { + this.data.titleObj = this._title; + this.setCreationDate(t.get("CreationDate")); + this.data.creationDate = this.creationDate; + i = t.getRaw("Popup"); + t.has("C") || (this.data.color = null); + } + this.data.popupRef = i instanceof Ref ? i.toString() : null; + t.has("RC") && + (this.data.richText = XFAFactory.getRichTextAsHtml(t.get("RC"))); + } + setCreationDate(e) { + this.creationDate = "string" == typeof e ? e : null; + } + _setDefaultAppearance({ + xref: e, + extra: t, + strokeColor: i, + fillColor: a, + blendMode: s, + strokeAlpha: r, + fillAlpha: n, + pointsCallback: g, + }) { + let o = Number.MAX_VALUE, + c = Number.MAX_VALUE, + C = Number.MIN_VALUE, + h = Number.MIN_VALUE; + const l = ["q"]; + t && l.push(t); + i && l.push(`${i[0]} ${i[1]} ${i[2]} RG`); + a && l.push(`${a[0]} ${a[1]} ${a[2]} rg`); + let Q = this.data.quadPoints; + Q || + (Q = Float32Array.from([ + this.rectangle[0], + this.rectangle[3], + this.rectangle[2], + this.rectangle[3], + this.rectangle[0], + this.rectangle[1], + this.rectangle[2], + this.rectangle[1], + ])); + for (let e = 0, t = Q.length; e < t; e += 8) { + const [t, i, a, s] = g(l, Q.subarray(e, e + 8)); + o = Math.min(o, t); + C = Math.max(C, i); + c = Math.min(c, a); + h = Math.max(h, s); + } + l.push("Q"); + const E = new Dict(e), + u = new Dict(e); + u.set("Subtype", Name.get("Form")); + const d = new StringStream(l.join(" ")); + d.dict = u; + E.set("Fm0", d); + const f = new Dict(e); + s && f.set("BM", Name.get(s)); + "number" == typeof r && f.set("CA", r); + "number" == typeof n && f.set("ca", n); + const p = new Dict(e); + p.set("GS0", f); + const m = new Dict(e); + m.set("ExtGState", p); + m.set("XObject", E); + const y = new Dict(e); + y.set("Resources", m); + const w = (this.data.rect = [o, c, C, h]); + y.set("BBox", w); + this.appearance = new StringStream("/GS0 gs /Fm0 Do"); + this.appearance.dict = y; + this._streams.push(this.appearance, d); + } + static async createNewAnnotation(e, t, i, a) { + const s = (t.ref ||= e.getNewTemporaryRef()), + r = await this.createNewAppearanceStream(t, e, a), + n = []; + let g; + if (r) { + const a = e.getNewTemporaryRef(); + g = this.createNewDict(t, e, { apRef: a }); + await writeObject(a, r, n, e); + i.push({ ref: a, data: n.join("") }); + } else g = this.createNewDict(t, e, {}); + Number.isInteger(t.parentTreeId) && g.set("StructParent", t.parentTreeId); + n.length = 0; + await writeObject(s, g, n, e); + return { ref: s, data: n.join("") }; + } + static async createNewPrintAnnotation(e, t, i, a) { + const s = await this.createNewAppearanceStream(i, t, a), + r = this.createNewDict(i, t, { ap: s }), + n = new this.prototype.constructor({ + dict: r, + xref: t, + annotationGlobals: e, + evaluatorOptions: a.evaluatorOptions, + }); + i.ref && (n.ref = n.refToReplace = i.ref); + return n; + } +} +class WidgetAnnotation extends Annotation { + constructor(e) { + super(e); + const { dict: t, xref: i, annotationGlobals: a } = e, + s = this.data; + this._needAppearances = e.needAppearances; + s.annotationType = W; + void 0 === s.fieldName && (s.fieldName = this._constructFieldName(t)); + void 0 === s.actions && (s.actions = collectActions(i, t, uA)); + let r = getInheritableProperty({ dict: t, key: "V", getArray: !0 }); + s.fieldValue = this._decodeFormValue(r); + const n = getInheritableProperty({ dict: t, key: "DV", getArray: !0 }); + s.defaultFieldValue = this._decodeFormValue(n); + if (void 0 === r && a.xfaDatasets) { + const e = this._title.str; + if (e) { + this._hasValueFromXFA = !0; + s.fieldValue = r = a.xfaDatasets.getValue(e); + } + } + void 0 === r && + null !== s.defaultFieldValue && + (s.fieldValue = s.defaultFieldValue); + s.alternativeText = stringToPDFString(t.get("TU") || ""); + this.setDefaultAppearance(e); + s.hasAppearance ||= + this._needAppearances && void 0 !== s.fieldValue && null !== s.fieldValue; + const g = getInheritableProperty({ dict: t, key: "FT" }); + s.fieldType = g instanceof Name ? g.name : null; + const o = getInheritableProperty({ dict: t, key: "DR" }), + c = a.acroForm.get("DR"), + C = this.appearance?.dict.get("Resources"); + this._fieldResources = { + localResources: o, + acroFormResources: c, + appearanceResources: C, + mergedResources: Dict.merge({ + xref: i, + dictArray: [o, C, c], + mergeSubDicts: !0, + }), + }; + s.fieldFlags = getInheritableProperty({ dict: t, key: "Ff" }); + (!Number.isInteger(s.fieldFlags) || s.fieldFlags < 0) && (s.fieldFlags = 0); + s.readOnly = this.hasFieldFlag(tA); + s.required = this.hasFieldFlag(iA); + s.hidden = + this._hasFlag(s.annotationFlags, V) || + this._hasFlag(s.annotationFlags, $); + } + _decodeFormValue(e) { + return Array.isArray(e) + ? e.filter((e) => "string" == typeof e).map((e) => stringToPDFString(e)) + : e instanceof Name + ? stringToPDFString(e.name) + : "string" == typeof e + ? stringToPDFString(e) + : null; + } + hasFieldFlag(e) { + return !!(this.data.fieldFlags & e); + } + _isViewable(e) { + return !0; + } + mustBeViewed(e, t) { + return t + ? this.viewable + : super.mustBeViewed(e, t) && !this._hasFlag(this.flags, $); + } + getRotationMatrix(e) { + let t = e?.get(this.data.id)?.rotation; + void 0 === t && (t = this.rotation); + if (0 === t) return i; + return getRotationMatrix( + t, + this.data.rect[2] - this.data.rect[0], + this.data.rect[3] - this.data.rect[1], + ); + } + getBorderAndBackgroundAppearances(e) { + let t = e?.get(this.data.id)?.rotation; + void 0 === t && (t = this.rotation); + if (!this.backgroundColor && !this.borderColor) return ""; + const i = this.data.rect[2] - this.data.rect[0], + a = this.data.rect[3] - this.data.rect[1], + s = 0 === t || 180 === t ? `0 0 ${i} ${a} re` : `0 0 ${a} ${i} re`; + let r = ""; + this.backgroundColor && + (r = `${getPdfColor(this.backgroundColor, !0)} ${s} f `); + if (this.borderColor) { + r += `${this.borderStyle.width || 1} w ${getPdfColor(this.borderColor, !1)} ${s} S `; + } + return r; + } + async getOperatorList(e, t, i, a, s) { + if ( + a && + !(this instanceof SignatureWidgetAnnotation) && + !this.data.noHTML && + !this.data.hasOwnCanvas + ) + return { + opList: new OperatorList(), + separateForm: !0, + separateCanvas: !1, + }; + if (!this._hasText) return super.getOperatorList(e, t, i, a, s); + const r = await this._getAppearance(e, t, i, s); + if (this.appearance && null === r) + return super.getOperatorList(e, t, i, a, s); + const n = new OperatorList(); + if (!this._defaultAppearance || null === r) + return { opList: n, separateForm: !1, separateCanvas: !1 }; + const g = !!(this.data.hasOwnCanvas && i & o), + c = [ + 0, + 0, + this.data.rect[2] - this.data.rect[0], + this.data.rect[3] - this.data.rect[1], + ], + C = getTransformMatrix(this.data.rect, c, [1, 0, 0, 1, 0, 0]); + let h; + this.oc && (h = await e.parseMarkedContentProps(this.oc, null)); + void 0 !== h && n.addOp(Je, ["OC", h]); + n.addOp(We, [ + this.data.id, + this.data.rect, + C, + this.getRotationMatrix(s), + g, + ]); + const l = new StringStream(r); + await e.getOperatorList({ + stream: l, + task: t, + resources: this._fieldResources.mergedResources, + operatorList: n, + }); + n.addOp(je, []); + void 0 !== h && n.addOp(Ye, []); + return { opList: n, separateForm: !1, separateCanvas: g }; + } + _getMKDict(e) { + const t = new Dict(null); + e && t.set("R", e); + this.borderColor && t.set("BC", getPdfColorArray(this.borderColor)); + this.backgroundColor && t.set("BG", getPdfColorArray(this.backgroundColor)); + return t.size > 0 ? t : null; + } + amendSavedDict(e, t) {} + async save(e, t, a) { + const s = a?.get(this.data.id); + let r = s?.value, + n = s?.rotation; + if (r === this.data.fieldValue || void 0 === r) { + if (!this._hasValueFromXFA && void 0 === n) return null; + r ||= this.data.fieldValue; + } + if ( + void 0 === n && + !this._hasValueFromXFA && + Array.isArray(r) && + Array.isArray(this.data.fieldValue) && + r.length === this.data.fieldValue.length && + r.every((e, t) => e === this.data.fieldValue[t]) + ) + return null; + void 0 === n && (n = this.rotation); + let g = null; + if (!this._needAppearances) { + g = await this._getAppearance(e, t, C, a); + if (null === g) return null; + } + let o = !1; + if (g?.needAppearances) { + o = !0; + g = null; + } + const { xref: c } = e, + h = c.fetchIfRef(this.ref); + if (!(h instanceof Dict)) return null; + const l = new Dict(c); + for (const e of h.getKeys()) "AP" !== e && l.set(e, h.getRaw(e)); + const Q = { path: this.data.fieldName, value: r }, + encoder = (e) => (isAscii(e) ? e : stringToUTF16String(e, !0)); + l.set("V", Array.isArray(r) ? r.map(encoder) : encoder(r)); + this.amendSavedDict(a, l); + const E = this._getMKDict(n); + E && l.set("MK", E); + const u = [], + d = [{ ref: this.ref, data: "", xfa: Q, needAppearances: o }]; + if (null !== g) { + const e = c.getNewTemporaryRef(), + t = new Dict(c); + l.set("AP", t); + t.set("N", e); + const s = this._getSaveFieldResources(c), + r = new StringStream(g), + n = (r.dict = new Dict(c)); + n.set("Subtype", Name.get("Form")); + n.set("Resources", s); + n.set("BBox", [ + 0, + 0, + this.data.rect[2] - this.data.rect[0], + this.data.rect[3] - this.data.rect[1], + ]); + const o = this.getRotationMatrix(a); + o !== i && n.set("Matrix", o); + await writeObject(e, r, u, c); + d.push({ ref: e, data: u.join(""), xfa: null, needAppearances: !1 }); + u.length = 0; + } + l.set("M", `D:${getModificationDate()}`); + await writeObject(this.ref, l, u, c); + d[0].data = u.join(""); + return d; + } + async _getAppearance(e, t, i, a) { + if (this.hasFieldFlag(sA)) return null; + const s = a?.get(this.data.id); + let r, g; + if (s) { + r = s.formattedValue || s.value; + g = s.rotation; + } + if ( + void 0 === g && + void 0 === r && + !this._needAppearances && + (!this._hasValueFromXFA || this.appearance) + ) + return null; + const o = this.getBorderAndBackgroundAppearances(a); + if (void 0 === r) { + r = this.data.fieldValue; + if (!r) return `/Tx BMC q ${o}Q EMC`; + } + Array.isArray(r) && 1 === r.length && (r = r[0]); + assert("string" == typeof r, "Expected `value` to be a string."); + r = r.trim(); + if (this.data.combo) { + const e = this.data.options.find(({ exportValue: e }) => r === e); + r = e?.displayValue || r; + } + if ("" === r) return `/Tx BMC q ${o}Q EMC`; + void 0 === g && (g = this.rotation); + let c, + h = -1; + if (this.data.multiLine) { + c = r.split(/\r\n?|\n/).map((e) => e.normalize("NFC")); + h = c.length; + } else c = [r.replace(/\r\n?|\n/, "").normalize("NFC")]; + let l = this.data.rect[3] - this.data.rect[1], + Q = this.data.rect[2] - this.data.rect[0]; + (90 !== g && 270 !== g) || ([Q, l] = [l, Q]); + this._defaultAppearance || + (this.data.defaultAppearanceData = parseDefaultAppearance( + (this._defaultAppearance = "/Helvetica 0 Tf 0 g"), + )); + let E, + u, + d, + f = await WidgetAnnotation._getFontData( + e, + t, + this.data.defaultAppearanceData, + this._fieldResources.mergedResources, + ); + const p = []; + let m = !1; + for (const e of c) { + const t = f.encodeString(e); + t.length > 1 && (m = !0); + p.push(t.join("")); + } + if (m && i & C) return { needAppearances: !0 }; + if (m && this._isOffscreenCanvasSupported) { + const i = this.data.comb ? "monospace" : "sans-serif", + a = new FakeUnicodeFont(e.xref, i), + s = a.createFontResources(c.join("")), + n = s.getRaw("Font"); + if (this._fieldResources.mergedResources.has("Font")) { + const e = this._fieldResources.mergedResources.get("Font"); + for (const t of n.getKeys()) e.set(t, n.getRaw(t)); + } else this._fieldResources.mergedResources.set("Font", n); + const g = a.fontName.name; + f = await WidgetAnnotation._getFontData( + e, + t, + { fontName: g, fontSize: 0 }, + s, + ); + for (let e = 0, t = p.length; e < t; e++) + p[e] = stringToUTF16String(c[e]); + const o = Object.assign( + Object.create(null), + this.data.defaultAppearanceData, + ); + this.data.defaultAppearanceData.fontSize = 0; + this.data.defaultAppearanceData.fontName = g; + [E, u, d] = this._computeFontSize(l - 2, Q - 4, r, f, h); + this.data.defaultAppearanceData = o; + } else { + this._isOffscreenCanvasSupported || + warn( + "_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.", + ); + [E, u, d] = this._computeFontSize(l - 2, Q - 4, r, f, h); + } + let y = f.descent; + y = isNaN(y) ? n * d : Math.max(n * d, Math.abs(y) * u); + const w = Math.min(Math.floor((l - u) / 2), 1), + D = this.data.textAlignment; + if (this.data.multiLine) + return this._getMultilineAppearance(E, p, f, u, Q, l, D, 2, w, y, d, a); + if (this.data.comb) + return this._getCombAppearance(E, f, p[0], u, Q, l, 2, w, y, d, a); + const b = w + y; + if (0 === D || D > 2) + return ( + `/Tx BMC q ${o}BT ` + + E + + ` 1 0 0 1 ${numberToString(2)} ${numberToString(b)} Tm (${escapeString(p[0])}) Tj ET Q EMC` + ); + return ( + `/Tx BMC q ${o}BT ` + + E + + ` 1 0 0 1 0 0 Tm ${this._renderText(p[0], f, u, Q, D, { shift: 0 }, 2, b)} ET Q EMC` + ); + } + static async _getFontData(e, t, i, a) { + const s = new OperatorList(), + r = { + font: null, + clone() { + return this; + }, + }, + { fontName: n, fontSize: g } = i; + await e.handleSetFont(a, [n && Name.get(n), g], null, s, t, r, null); + return r.font; + } + _getTextWidth(e, t) { + return t.charsToGlyphs(e).reduce((e, t) => e + t.width, 0) / 1e3; + } + _computeFontSize(e, t, i, a, r) { + let { fontSize: n } = this.data.defaultAppearanceData, + g = (n || 12) * s, + o = Math.round(e / g); + if (!n) { + const roundWithTwoDigits = (e) => Math.floor(100 * e) / 100; + if (-1 === r) { + const r = this._getTextWidth(i, a); + n = roundWithTwoDigits(Math.min(e / s, r > t ? t / r : 1 / 0)); + o = 1; + } else { + const c = i.split(/\r\n?|\n/), + C = []; + for (const e of c) { + const t = a.encodeString(e).join(""), + i = a.charsToGlyphs(t), + s = a.getCharPositions(t); + C.push({ line: t, glyphs: i, positions: s }); + } + const isTooBig = (i) => { + let s = 0; + for (const r of C) { + s += this._splitLine(null, a, i, t, r).length * i; + if (s > e) return !0; + } + return !1; + }; + o = Math.max(o, r); + for (;;) { + g = e / o; + n = roundWithTwoDigits(g / s); + if (!isTooBig(n)) break; + o++; + } + } + const { fontName: c, fontColor: C } = this.data.defaultAppearanceData; + this._defaultAppearance = (function createDefaultAppearance({ + fontSize: e, + fontName: t, + fontColor: i, + }) { + return `/${escapePDFName(t)} ${e} Tf ${getPdfColor(i, !0)}`; + })({ fontSize: n, fontName: c, fontColor: C }); + } + return [this._defaultAppearance, n, e / o]; + } + _renderText(e, t, i, a, s, r, n, g) { + let o; + if (1 === s) { + o = (a - this._getTextWidth(e, t) * i) / 2; + } else if (2 === s) { + o = a - this._getTextWidth(e, t) * i - n; + } else o = n; + const c = numberToString(o - r.shift); + r.shift = o; + return `${c} ${(g = numberToString(g))} Td (${escapeString(e)}) Tj`; + } + _getSaveFieldResources(e) { + const { + localResources: t, + appearanceResources: i, + acroFormResources: a, + } = this._fieldResources, + s = this.data.defaultAppearanceData?.fontName; + if (!s) return t || Dict.empty; + for (const e of [t, i]) + if (e instanceof Dict) { + const t = e.get("Font"); + if (t instanceof Dict && t.has(s)) return e; + } + if (a instanceof Dict) { + const i = a.get("Font"); + if (i instanceof Dict && i.has(s)) { + const a = new Dict(e); + a.set(s, i.getRaw(s)); + const r = new Dict(e); + r.set("Font", a); + return Dict.merge({ xref: e, dictArray: [r, t], mergeSubDicts: !0 }); + } + } + return t || Dict.empty; + } + getFieldObject() { + return null; + } +} +class TextWidgetAnnotation extends WidgetAnnotation { + constructor(e) { + super(e); + const { dict: t } = e; + if (t.has("PMD")) { + this.flags |= V; + this.data.hidden = !0; + warn("Barcodes are not supported"); + } + this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML; + this._hasText = !0; + "string" != typeof this.data.fieldValue && (this.data.fieldValue = ""); + let i = getInheritableProperty({ dict: t, key: "Q" }); + (!Number.isInteger(i) || i < 0 || i > 2) && (i = null); + this.data.textAlignment = i; + let a = getInheritableProperty({ dict: t, key: "MaxLen" }); + (!Number.isInteger(a) || a < 0) && (a = 0); + this.data.maxLen = a; + this.data.multiLine = this.hasFieldFlag(aA); + this.data.comb = + this.hasFieldFlag(CA) && + !this.hasFieldFlag(aA) && + !this.hasFieldFlag(sA) && + !this.hasFieldFlag(oA) && + 0 !== this.data.maxLen; + this.data.doNotScroll = this.hasFieldFlag(cA); + } + get hasTextContent() { + return !!this.appearance && !this._needAppearances; + } + _getCombAppearance(e, t, i, a, s, r, n, g, o, c, C) { + const h = s / this.data.maxLen, + l = this.getBorderAndBackgroundAppearances(C), + Q = [], + E = t.getCharPositions(i); + for (const [e, t] of E) Q.push(`(${escapeString(i.substring(e, t))}) Tj`); + const u = Q.join(` ${numberToString(h)} 0 Td `); + return ( + `/Tx BMC q ${l}BT ` + + e + + ` 1 0 0 1 ${numberToString(n)} ${numberToString(g + o)} Tm ${u} ET Q EMC` + ); + } + _getMultilineAppearance(e, t, i, a, s, r, n, g, o, c, C, h) { + const l = [], + Q = s - 2 * g, + E = { shift: 0 }; + for (let e = 0, r = t.length; e < r; e++) { + const r = t[e], + h = this._splitLine(r, i, a, Q); + for (let t = 0, r = h.length; t < r; t++) { + const r = h[t], + Q = 0 === e && 0 === t ? -o - (C - c) : -C; + l.push(this._renderText(r, i, a, s, n, E, g, Q)); + } + } + const u = this.getBorderAndBackgroundAppearances(h), + d = l.join("\n"); + return ( + `/Tx BMC q ${u}BT ` + + e + + ` 1 0 0 1 0 ${numberToString(r)} Tm ${d} ET Q EMC` + ); + } + _splitLine(e, t, i, a, s = {}) { + e = s.line || e; + const r = s.glyphs || t.charsToGlyphs(e); + if (r.length <= 1) return [e]; + const n = s.positions || t.getCharPositions(e), + g = i / 1e3, + o = []; + let c = -1, + C = -1, + h = -1, + l = 0, + Q = 0; + for (let t = 0, i = r.length; t < i; t++) { + const [i, s] = n[t], + E = r[t], + u = E.width * g; + if (" " === E.unicode) + if (Q + u > a) { + o.push(e.substring(l, i)); + l = i; + Q = u; + c = -1; + h = -1; + } else { + Q += u; + c = i; + C = s; + h = t; + } + else if (Q + u > a) + if (-1 !== c) { + o.push(e.substring(l, C)); + l = C; + t = h + 1; + c = -1; + Q = 0; + } else { + o.push(e.substring(l, i)); + l = i; + Q = u; + } + else Q += u; + } + l < e.length && o.push(e.substring(l, e.length)); + return o; + } + getFieldObject() { + return { + id: this.data.id, + value: this.data.fieldValue, + defaultValue: this.data.defaultFieldValue || "", + multiline: this.data.multiLine, + password: this.hasFieldFlag(sA), + charLimit: this.data.maxLen, + comb: this.data.comb, + editable: !this.data.readOnly, + hidden: this.data.hidden, + name: this.data.fieldName, + rect: this.data.rect, + actions: this.data.actions, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type: "text", + }; + } +} +class ButtonWidgetAnnotation extends WidgetAnnotation { + constructor(e) { + super(e); + this.checkedAppearance = null; + this.uncheckedAppearance = null; + this.data.checkBox = !this.hasFieldFlag(rA) && !this.hasFieldFlag(nA); + this.data.radioButton = this.hasFieldFlag(rA) && !this.hasFieldFlag(nA); + this.data.pushButton = this.hasFieldFlag(nA); + this.data.isTooltipOnly = !1; + if (this.data.checkBox) this._processCheckBox(e); + else if (this.data.radioButton) this._processRadioButton(e); + else if (this.data.pushButton) { + this.data.hasOwnCanvas = !0; + this.data.noHTML = !1; + this._processPushButton(e); + } else warn("Invalid field flags for button widget annotation"); + } + async getOperatorList(e, t, a, s, r) { + if (this.data.pushButton) return super.getOperatorList(e, t, a, !1, r); + let n = null, + g = null; + if (r) { + const e = r.get(this.data.id); + n = e ? e.value : null; + g = e ? e.rotation : null; + } + if (null === n && this.appearance) + return super.getOperatorList(e, t, a, s, r); + null == n && + (n = this.data.checkBox + ? this.data.fieldValue === this.data.exportValue + : this.data.fieldValue === this.data.buttonValue); + const o = n ? this.checkedAppearance : this.uncheckedAppearance; + if (o) { + const n = this.appearance, + c = lookupMatrix(o.dict.getArray("Matrix"), i); + g && o.dict.set("Matrix", this.getRotationMatrix(r)); + this.appearance = o; + const C = super.getOperatorList(e, t, a, s, r); + this.appearance = n; + o.dict.set("Matrix", c); + return C; + } + return { opList: new OperatorList(), separateForm: !1, separateCanvas: !1 }; + } + async save(e, t, i) { + return this.data.checkBox + ? this._saveCheckbox(e, t, i) + : this.data.radioButton + ? this._saveRadioButton(e, t, i) + : null; + } + async _saveCheckbox(e, t, i) { + if (!i) return null; + const a = i.get(this.data.id); + let s = a?.rotation, + r = a?.value; + if (void 0 === s) { + if (void 0 === r) return null; + if ((this.data.fieldValue === this.data.exportValue) === r) return null; + } + const n = e.xref.fetchIfRef(this.ref); + if (!(n instanceof Dict)) return null; + void 0 === s && (s = this.rotation); + void 0 === r && (r = this.data.fieldValue === this.data.exportValue); + const g = { + path: this.data.fieldName, + value: r ? this.data.exportValue : "", + }, + o = Name.get(r ? this.data.exportValue : "Off"); + n.set("V", o); + n.set("AS", o); + n.set("M", `D:${getModificationDate()}`); + const c = this._getMKDict(s); + c && n.set("MK", c); + const C = []; + await writeObject(this.ref, n, C, e.xref); + return [{ ref: this.ref, data: C.join(""), xfa: g }]; + } + async _saveRadioButton(e, t, i) { + if (!i) return null; + const a = i.get(this.data.id); + let s = a?.rotation, + r = a?.value; + if (void 0 === s) { + if (void 0 === r) return null; + if ((this.data.fieldValue === this.data.buttonValue) === r) return null; + } + const n = e.xref.fetchIfRef(this.ref); + if (!(n instanceof Dict)) return null; + void 0 === r && (r = this.data.fieldValue === this.data.buttonValue); + void 0 === s && (s = this.rotation); + const g = { + path: this.data.fieldName, + value: r ? this.data.buttonValue : "", + }, + o = Name.get(r ? this.data.buttonValue : "Off"), + c = []; + let C = null; + if (r) + if (this.parent instanceof Ref) { + const t = e.xref.fetch(this.parent); + t.set("V", o); + await writeObject(this.parent, t, c, e.xref); + C = c.join(""); + c.length = 0; + } else this.parent instanceof Dict && this.parent.set("V", o); + n.set("AS", o); + n.set("M", `D:${getModificationDate()}`); + const h = this._getMKDict(s); + h && n.set("MK", h); + await writeObject(this.ref, n, c, e.xref); + const l = [{ ref: this.ref, data: c.join(""), xfa: g }]; + C && l.push({ ref: this.parent, data: C, xfa: null }); + return l; + } + _getDefaultCheckedAppearance(e, t) { + const i = this.data.rect[2] - this.data.rect[0], + a = this.data.rect[3] - this.data.rect[1], + s = [0, 0, i, a], + r = 0.8 * Math.min(i, a); + let n, g; + if ("check" === t) { + n = { width: 0.755 * r, height: 0.705 * r }; + g = "3"; + } else if ("disc" === t) { + n = { width: 0.791 * r, height: 0.705 * r }; + g = "l"; + } else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`); + const o = `q BT /PdfJsZaDb ${r} Tf 0 g ${numberToString((i - n.width) / 2)} ${numberToString((a - n.height) / 2)} Td (${g}) Tj ET Q`, + c = new Dict(e.xref); + c.set("FormType", 1); + c.set("Subtype", Name.get("Form")); + c.set("Type", Name.get("XObject")); + c.set("BBox", s); + c.set("Matrix", [1, 0, 0, 1, 0, 0]); + c.set("Length", o.length); + const C = new Dict(e.xref), + h = new Dict(e.xref); + h.set("PdfJsZaDb", this.fallbackFontDict); + C.set("Font", h); + c.set("Resources", C); + this.checkedAppearance = new StringStream(o); + this.checkedAppearance.dict = c; + this._streams.push(this.checkedAppearance); + } + _processCheckBox(e) { + const t = e.dict.get("AP"); + if (!(t instanceof Dict)) return; + const i = t.get("N"); + if (!(i instanceof Dict)) return; + const a = this._decodeFormValue(e.dict.get("AS")); + "string" == typeof a && (this.data.fieldValue = a); + const s = + null !== this.data.fieldValue && "Off" !== this.data.fieldValue + ? this.data.fieldValue + : "Yes", + r = i.getKeys(); + if (0 === r.length) r.push("Off", s); + else if (1 === r.length) "Off" === r[0] ? r.push(s) : r.unshift("Off"); + else if (r.includes(s)) { + r.length = 0; + r.push("Off", s); + } else { + const e = r.find((e) => "Off" !== e); + r.length = 0; + r.push("Off", e); + } + r.includes(this.data.fieldValue) || (this.data.fieldValue = "Off"); + this.data.exportValue = r[1]; + const n = i.get(this.data.exportValue); + this.checkedAppearance = n instanceof BaseStream ? n : null; + const g = i.get("Off"); + this.uncheckedAppearance = g instanceof BaseStream ? g : null; + this.checkedAppearance + ? this._streams.push(this.checkedAppearance) + : this._getDefaultCheckedAppearance(e, "check"); + this.uncheckedAppearance && this._streams.push(this.uncheckedAppearance); + this._fallbackFontDict = this.fallbackFontDict; + null === this.data.defaultFieldValue && + (this.data.defaultFieldValue = "Off"); + } + _processRadioButton(e) { + this.data.buttonValue = null; + const t = e.dict.get("Parent"); + if (t instanceof Dict) { + this.parent = e.dict.getRaw("Parent"); + const i = t.get("V"); + i instanceof Name && (this.data.fieldValue = this._decodeFormValue(i)); + } + const i = e.dict.get("AP"); + if (!(i instanceof Dict)) return; + const a = i.get("N"); + if (!(a instanceof Dict)) return; + for (const e of a.getKeys()) + if ("Off" !== e) { + this.data.buttonValue = this._decodeFormValue(e); + break; + } + const s = a.get(this.data.buttonValue); + this.checkedAppearance = s instanceof BaseStream ? s : null; + const r = a.get("Off"); + this.uncheckedAppearance = r instanceof BaseStream ? r : null; + this.checkedAppearance + ? this._streams.push(this.checkedAppearance) + : this._getDefaultCheckedAppearance(e, "disc"); + this.uncheckedAppearance && this._streams.push(this.uncheckedAppearance); + this._fallbackFontDict = this.fallbackFontDict; + null === this.data.defaultFieldValue && + (this.data.defaultFieldValue = "Off"); + } + _processPushButton(e) { + const { dict: t, annotationGlobals: i } = e; + if (t.has("A") || t.has("AA") || this.data.alternativeText) { + this.data.isTooltipOnly = !t.has("A") && !t.has("AA"); + Catalog.parseDestDictionary({ + destDict: t, + resultObj: this.data, + docBaseUrl: i.baseUrl, + docAttachments: i.attachments, + }); + } else warn("Push buttons without action dictionaries are not supported"); + } + getFieldObject() { + let e, + t = "button"; + if (this.data.checkBox) { + t = "checkbox"; + e = this.data.exportValue; + } else if (this.data.radioButton) { + t = "radiobutton"; + e = this.data.buttonValue; + } + return { + id: this.data.id, + value: this.data.fieldValue || "Off", + defaultValue: this.data.defaultFieldValue, + exportValues: e, + editable: !this.data.readOnly, + name: this.data.fieldName, + rect: this.data.rect, + hidden: this.data.hidden, + actions: this.data.actions, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type: t, + }; + } + get fallbackFontDict() { + const e = new Dict(); + e.set("BaseFont", Name.get("ZapfDingbats")); + e.set("Type", Name.get("FallbackType")); + e.set("Subtype", Name.get("FallbackType")); + e.set("Encoding", Name.get("ZapfDingbatsEncoding")); + return shadow(this, "fallbackFontDict", e); + } +} +class ChoiceWidgetAnnotation extends WidgetAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.indices = t.getArray("I"); + this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0; + this.data.options = []; + const a = getInheritableProperty({ dict: t, key: "Opt" }); + if (Array.isArray(a)) + for (let e = 0, t = a.length; e < t; e++) { + const t = i.fetchIfRef(a[e]), + s = Array.isArray(t); + this.data.options[e] = { + exportValue: this._decodeFormValue(s ? i.fetchIfRef(t[0]) : t), + displayValue: this._decodeFormValue(s ? i.fetchIfRef(t[1]) : t), + }; + } + if (this.hasIndices) { + this.data.fieldValue = []; + const e = this.data.options.length; + for (const t of this.indices) + Number.isInteger(t) && + t >= 0 && + t < e && + this.data.fieldValue.push(this.data.options[t].exportValue); + } else + "string" == typeof this.data.fieldValue + ? (this.data.fieldValue = [this.data.fieldValue]) + : this.data.fieldValue || (this.data.fieldValue = []); + this.data.combo = this.hasFieldFlag(gA); + this.data.multiSelect = this.hasFieldFlag(IA); + this._hasText = !0; + } + getFieldObject() { + const e = this.data.combo ? "combobox" : "listbox", + t = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; + return { + id: this.data.id, + value: t, + defaultValue: this.data.defaultFieldValue, + editable: !this.data.readOnly, + name: this.data.fieldName, + rect: this.data.rect, + numItems: this.data.fieldValue.length, + multipleSelection: this.data.multiSelect, + hidden: this.data.hidden, + actions: this.data.actions, + items: this.data.options, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type: e, + }; + } + amendSavedDict(e, t) { + if (!this.hasIndices) return; + let i = e?.get(this.data.id)?.value; + Array.isArray(i) || (i = [i]); + const a = [], + { options: s } = this.data; + for (let e = 0, t = 0, r = s.length; e < r; e++) + if (s[e].exportValue === i[t]) { + a.push(e); + t += 1; + } + t.set("I", a); + } + async _getAppearance(e, t, i, a) { + if (this.data.combo) return super._getAppearance(e, t, i, a); + let r, n; + const g = a?.get(this.data.id); + if (g) { + n = g.rotation; + r = g.value; + } + if (void 0 === n && void 0 === r && !this._needAppearances) return null; + void 0 === r ? (r = this.data.fieldValue) : Array.isArray(r) || (r = [r]); + let o = this.data.rect[3] - this.data.rect[1], + c = this.data.rect[2] - this.data.rect[0]; + (90 !== n && 270 !== n) || ([c, o] = [o, c]); + const C = this.data.options.length, + h = []; + for (let e = 0; e < C; e++) { + const { exportValue: t } = this.data.options[e]; + r.includes(t) && h.push(e); + } + this._defaultAppearance || + (this.data.defaultAppearanceData = parseDefaultAppearance( + (this._defaultAppearance = "/Helvetica 0 Tf 0 g"), + )); + const l = await WidgetAnnotation._getFontData( + e, + t, + this.data.defaultAppearanceData, + this._fieldResources.mergedResources, + ); + let Q, + { fontSize: E } = this.data.defaultAppearanceData; + if (E) Q = this._defaultAppearance; + else { + const e = (o - 1) / C; + let t, + i = -1; + for (const { displayValue: e } of this.data.options) { + const a = this._getTextWidth(e, l); + if (a > i) { + i = a; + t = e; + } + } + [Q, E] = this._computeFontSize(e, c - 4, t, l, -1); + } + const u = E * s, + d = (u - E) / 2, + f = Math.floor(o / u); + let p = 0; + if (h.length > 0) { + const e = Math.min(...h), + t = Math.max(...h); + p = Math.max(0, t - f + 1); + p > e && (p = e); + } + const m = Math.min(p + f + 1, C), + y = ["/Tx BMC q", `1 1 ${c} ${o} re W n`]; + if (h.length) { + y.push("0.600006 0.756866 0.854904 rg"); + for (const e of h) + p <= e && e < m && y.push(`1 ${o - (e - p + 1) * u} ${c} ${u} re f`); + } + y.push("BT", Q, `1 0 0 1 0 ${o} Tm`); + const w = { shift: 0 }; + for (let e = p; e < m; e++) { + const { displayValue: t } = this.data.options[e], + i = e === p ? d : 0; + y.push(this._renderText(t, l, E, c, 0, w, 2, -u + i)); + } + y.push("ET Q EMC"); + return y.join("\n"); + } +} +class SignatureWidgetAnnotation extends WidgetAnnotation { + constructor(e) { + super(e); + this.data.fieldValue = null; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !this.data.hasOwnCanvas; + } + getFieldObject() { + return { + id: this.data.id, + value: null, + page: this.data.pageIndex, + type: "signature", + }; + } +} +class TextAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + this.data.noRotate = !0; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + const { dict: t } = e; + this.data.annotationType = S; + if (this.data.hasAppearance) this.data.name = "NoIcon"; + else { + this.data.rect[1] = this.data.rect[3] - 22; + this.data.rect[2] = this.data.rect[0] + 22; + this.data.name = t.has("Name") ? t.get("Name").name : "Note"; + } + if (t.has("State")) { + this.data.state = t.get("State") || null; + this.data.stateModel = t.get("StateModel") || null; + } else { + this.data.state = null; + this.data.stateModel = null; + } + } +} +class LinkAnnotation extends Annotation { + constructor(e) { + super(e); + const { dict: t, annotationGlobals: i } = e; + this.data.annotationType = k; + this.data.noHTML = !1; + const a = getQuadPoints(t, this.rectangle); + a && (this.data.quadPoints = a); + this.data.borderColor ||= this.data.color; + Catalog.parseDestDictionary({ + destDict: t, + resultObj: this.data, + docBaseUrl: i.baseUrl, + docAttachments: i.attachments, + }); + } +} +class PopupAnnotation extends Annotation { + constructor(e) { + super(e); + const { dict: t } = e; + this.data.annotationType = q; + this.data.noHTML = !1; + (this.data.rect[0] !== this.data.rect[2] && + this.data.rect[1] !== this.data.rect[3]) || + (this.data.rect = null); + let i = t.get("Parent"); + if (!i) { + warn("Popup annotation has a missing or invalid parent annotation."); + return; + } + this.data.parentRect = lookupNormalRect(i.getArray("Rect"), null); + isName(i.get("RT"), j) && (i = i.get("IRT")); + if (i.has("M")) { + this.setModificationDate(i.get("M")); + this.data.modificationDate = this.modificationDate; + } else this.data.modificationDate = null; + if (i.has("C")) { + this.setColor(i.getArray("C")); + this.data.color = this.color; + } else this.data.color = null; + if (!this.viewable) { + const e = i.get("F"); + this._isViewable(e) && this.setFlags(e); + } + this.setTitle(i.get("T")); + this.data.titleObj = this._title; + this.setContents(i.get("Contents")); + this.data.contentsObj = this._contents; + i.has("RC") && + (this.data.richText = XFAFactory.getRichTextAsHtml(i.get("RC"))); + this.data.open = !!t.get("Open"); + } +} +class FreeTextAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + this.data.hasOwnCanvas = !this.data.noHTML; + this.data.noHTML = !1; + const { evaluatorOptions: t, xref: i } = e; + this.data.annotationType = R; + this.setDefaultAppearance(e); + this._hasAppearance = !!this.appearance; + if (this._hasAppearance) { + const { fontColor: e, fontSize: a } = (function parseAppearanceStream( + e, + t, + i, + ) { + return new AppearanceStreamEvaluator(e, t, i).parse(); + })(this.appearance, t, i); + this.data.defaultAppearanceData.fontColor = e; + this.data.defaultAppearanceData.fontSize = a || 10; + } else { + this.data.defaultAppearanceData.fontSize ||= 10; + const { fontColor: t, fontSize: a } = this.data.defaultAppearanceData; + if (this._contents.str) { + this.data.textContent = this._contents.str + .split(/\r\n?|\n/) + .map((e) => e.trimEnd()); + const { + coords: e, + bbox: t, + matrix: i, + } = FakeUnicodeFont.getFirstPositionInfo( + this.rectangle, + this.rotation, + a, + ); + this.data.textPosition = this._transformPoint(e, t, i); + } + if (this._isOffscreenCanvasSupported) { + const s = e.dict.get("CA"), + r = new FakeUnicodeFont(i, "sans-serif"); + this.appearance = r.createAppearance( + this._contents.str, + this.rectangle, + this.rotation, + a, + t, + s, + ); + this._streams.push(this.appearance); + } else + warn( + "FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.", + ); + } + } + get hasTextContent() { + return this._hasAppearance; + } + static createNewDict(e, t, { apRef: i, ap: a }) { + const { + color: s, + fontSize: r, + rect: n, + rotation: g, + user: o, + value: c, + } = e, + C = new Dict(t); + C.set("Type", Name.get("Annot")); + C.set("Subtype", Name.get("FreeText")); + C.set("CreationDate", `D:${getModificationDate()}`); + C.set("Rect", n); + const h = `/Helv ${r} Tf ${getPdfColor(s, !0)}`; + C.set("DA", h); + C.set("Contents", isAscii(c) ? c : stringToUTF16String(c, !0)); + C.set("F", 4); + C.set("Border", [0, 0, 0]); + C.set("Rotate", g); + o && C.set("T", isAscii(o) ? o : stringToUTF16String(o, !0)); + if (i || a) { + const e = new Dict(t); + C.set("AP", e); + i ? e.set("N", i) : e.set("N", a); + } + return C; + } + static async createNewAppearanceStream(e, t, i) { + const { baseFontRef: a, evaluator: r, task: n } = i, + { color: g, fontSize: o, rect: c, rotation: C, value: h } = e, + l = new Dict(t), + Q = new Dict(t); + if (a) Q.set("Helv", a); + else { + const e = new Dict(t); + e.set("BaseFont", Name.get("Helvetica")); + e.set("Type", Name.get("Font")); + e.set("Subtype", Name.get("Type1")); + e.set("Encoding", Name.get("WinAnsiEncoding")); + Q.set("Helv", e); + } + l.set("Font", Q); + const E = await WidgetAnnotation._getFontData( + r, + n, + { fontName: "Helv", fontSize: o }, + l, + ), + [u, d, f, p] = c; + let m = f - u, + y = p - d; + C % 180 != 0 && ([m, y] = [y, m]); + const w = h.split("\n"), + D = o / 1e3; + let b = -1 / 0; + const F = []; + for (let e of w) { + const t = E.encodeString(e); + if (t.length > 1) return null; + e = t.join(""); + F.push(e); + let i = 0; + const a = E.charsToGlyphs(e); + for (const e of a) i += e.width * D; + b = Math.max(b, i); + } + let S = 1; + b > m && (S = m / b); + let k = 1; + const R = s * o, + N = 1 * o, + G = R * w.length; + G > y && (k = y / G); + const x = o * Math.min(S, k); + let U, M, L; + switch (C) { + case 0: + L = [1, 0, 0, 1]; + M = [c[0], c[1], m, y]; + U = [c[0], c[3] - N]; + break; + case 90: + L = [0, 1, -1, 0]; + M = [c[1], -c[2], m, y]; + U = [c[1], -c[0] - N]; + break; + case 180: + L = [-1, 0, 0, -1]; + M = [-c[2], -c[3], m, y]; + U = [-c[2], -c[1] - N]; + break; + case 270: + L = [0, -1, 1, 0]; + M = [-c[3], c[0], m, y]; + U = [-c[3], c[2] - N]; + } + const H = [ + "q", + `${L.join(" ")} 0 0 cm`, + `${M.join(" ")} re W n`, + "BT", + `${getPdfColor(g, !0)}`, + `0 Tc /Helv ${numberToString(x)} Tf`, + ]; + H.push(`${U.join(" ")} Td (${escapeString(F[0])}) Tj`); + const J = numberToString(R); + for (let e = 1, t = F.length; e < t; e++) { + const t = F[e]; + H.push(`0 -${J} Td (${escapeString(t)}) Tj`); + } + H.push("ET", "Q"); + const Y = H.join("\n"), + v = new Dict(t); + v.set("FormType", 1); + v.set("Subtype", Name.get("Form")); + v.set("Type", Name.get("XObject")); + v.set("BBox", c); + v.set("Resources", l); + v.set("Matrix", [1, 0, 0, 1, -c[0], -c[1]]); + const K = new StringStream(Y); + K.dict = v; + return K; + } +} +class LineAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = N; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + const a = lookupRect(t.getArray("L"), [0, 0, 0, 0]); + this.data.lineCoordinates = Util.normalizeRect(a); + this.setLineEndings(t.getArray("LE")); + this.data.lineEndings = this.lineEndings; + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + s = t.get("CA"), + r = getRgbColor(t.getArray("IC"), null), + n = r ? getPdfColorArray(r) : null, + g = n ? s : null, + o = this.borderStyle.width || 1, + c = 2 * o, + C = [ + this.data.lineCoordinates[0] - c, + this.data.lineCoordinates[1] - c, + this.data.lineCoordinates[2] + c, + this.data.lineCoordinates[3] + c, + ]; + Util.intersect(this.rectangle, C) || (this.rectangle = C); + this._setDefaultAppearance({ + xref: i, + extra: `${o} w`, + strokeColor: e, + fillColor: n, + strokeAlpha: s, + fillAlpha: g, + pointsCallback: (e, t) => { + e.push(`${a[0]} ${a[1]} m`, `${a[2]} ${a[3]} l`, "S"); + return [t[0] - o, t[2] + o, t[7] - o, t[3] + o]; + }, + }); + } + } +} +class SquareAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = G; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"), + s = getRgbColor(t.getArray("IC"), null), + r = s ? getPdfColorArray(s) : null, + n = r ? a : null; + if (0 === this.borderStyle.width && !r) return; + this._setDefaultAppearance({ + xref: i, + extra: `${this.borderStyle.width} w`, + strokeColor: e, + fillColor: r, + strokeAlpha: a, + fillAlpha: n, + pointsCallback: (e, t) => { + const i = t[4] + this.borderStyle.width / 2, + a = t[5] + this.borderStyle.width / 2, + s = t[6] - t[4] - this.borderStyle.width, + n = t[3] - t[7] - this.borderStyle.width; + e.push(`${i} ${a} ${s} ${n} re`); + r ? e.push("B") : e.push("S"); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } +} +class CircleAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = x; + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"), + s = getRgbColor(t.getArray("IC"), null), + r = s ? getPdfColorArray(s) : null, + n = r ? a : null; + if (0 === this.borderStyle.width && !r) return; + const g = (4 / 3) * Math.tan(Math.PI / 8); + this._setDefaultAppearance({ + xref: i, + extra: `${this.borderStyle.width} w`, + strokeColor: e, + fillColor: r, + strokeAlpha: a, + fillAlpha: n, + pointsCallback: (e, t) => { + const i = t[0] + this.borderStyle.width / 2, + a = t[1] - this.borderStyle.width / 2, + s = t[6] - this.borderStyle.width / 2, + n = t[7] + this.borderStyle.width / 2, + o = i + (s - i) / 2, + c = a + (n - a) / 2, + C = ((s - i) / 2) * g, + h = ((n - a) / 2) * g; + e.push( + `${o} ${n} m`, + `${o + C} ${n} ${s} ${c + h} ${s} ${c} c`, + `${s} ${c - h} ${o + C} ${a} ${o} ${a} c`, + `${o - C} ${a} ${i} ${c - h} ${i} ${c} c`, + `${i} ${c + h} ${o - C} ${n} ${o} ${n} c`, + "h", + ); + r ? e.push("B") : e.push("S"); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } +} +class PolylineAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = M; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + this.data.vertices = null; + if (!(this instanceof PolygonAnnotation)) { + this.setLineEndings(t.getArray("LE")); + this.data.lineEndings = this.lineEndings; + } + const a = t.getArray("Vertices"); + if (!isNumberArray(a, null)) return; + const s = (this.data.vertices = Float32Array.from(a)); + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"), + r = this.borderStyle.width || 1, + n = 2 * r, + g = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; + for (let e = 0, t = s.length; e < t; e += 2) { + g[0] = Math.min(g[0], s[e] - n); + g[1] = Math.min(g[1], s[e + 1] - n); + g[2] = Math.max(g[2], s[e] + n); + g[3] = Math.max(g[3], s[e + 1] + n); + } + Util.intersect(this.rectangle, g) || (this.rectangle = g); + this._setDefaultAppearance({ + xref: i, + extra: `${r} w`, + strokeColor: e, + strokeAlpha: a, + pointsCallback: (e, t) => { + for (let t = 0, i = s.length; t < i; t += 2) + e.push(`${s[t]} ${s[t + 1]} ${0 === t ? "m" : "l"}`); + e.push("S"); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } +} +class PolygonAnnotation extends PolylineAnnotation { + constructor(e) { + super(e); + this.data.annotationType = U; + } +} +class CaretAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + this.data.annotationType = K; + } +} +class InkAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + const { dict: t, xref: i } = e; + this.data.annotationType = T; + this.data.inkLists = []; + const a = t.getArray("InkList"); + if (Array.isArray(a)) { + for (let e = 0, t = a.length; e < t; ++e) { + if (!Array.isArray(a[e])) continue; + const t = new Float32Array(a[e].length); + this.data.inkLists.push(t); + for (let s = 0, r = a[e].length; s < r; s += 2) { + const r = i.fetchIfRef(a[e][s]), + n = i.fetchIfRef(a[e][s + 1]); + if ("number" == typeof r && "number" == typeof n) { + t[s] = r; + t[s + 1] = n; + } + } + } + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"), + s = this.borderStyle.width || 1, + r = 2 * s, + n = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; + for (const e of this.data.inkLists) + for (let t = 0, i = e.length; t < i; t += 2) { + n[0] = Math.min(n[0], e[t] - r); + n[1] = Math.min(n[1], e[t + 1] - r); + n[2] = Math.max(n[2], e[t] + r); + n[3] = Math.max(n[3], e[t + 1] + r); + } + Util.intersect(this.rectangle, n) || (this.rectangle = n); + this._setDefaultAppearance({ + xref: i, + extra: `${s} w`, + strokeColor: e, + strokeAlpha: a, + pointsCallback: (e, t) => { + for (const t of this.data.inkLists) { + for (let i = 0, a = t.length; i < a; i += 2) + e.push(`${t[i]} ${t[i + 1]} ${0 === i ? "m" : "l"}`); + e.push("S"); + } + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } + } + static createNewDict(e, t, { apRef: i, ap: a }) { + const { + color: s, + opacity: r, + paths: n, + outlines: g, + rect: o, + rotation: c, + thickness: C, + } = e, + h = new Dict(t); + h.set("Type", Name.get("Annot")); + h.set("Subtype", Name.get("Ink")); + h.set("CreationDate", `D:${getModificationDate()}`); + h.set("Rect", o); + h.set("InkList", g?.points || n.map((e) => e.points)); + h.set("F", 4); + h.set("Rotate", c); + g && h.set("IT", Name.get("InkHighlight")); + const l = new Dict(t); + h.set("BS", l); + l.set("W", C); + h.set( + "C", + Array.from(s, (e) => e / 255), + ); + h.set("CA", r); + const Q = new Dict(t); + h.set("AP", Q); + i ? Q.set("N", i) : Q.set("N", a); + return h; + } + static async createNewAppearanceStream(e, t, i) { + if (e.outlines) return this.createNewAppearanceStreamForHighlight(e, t, i); + const { color: a, rect: s, paths: r, thickness: n, opacity: g } = e, + o = [`${n} w 1 J 1 j`, `${getPdfColor(a, !1)}`]; + 1 !== g && o.push("/R0 gs"); + const c = []; + for (const { bezier: e } of r) { + c.length = 0; + c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`); + if (2 === e.length) + c.push(`${numberToString(e[0])} ${numberToString(e[1])} l S`); + else { + for (let t = 2, i = e.length; t < i; t += 6) { + const i = e + .slice(t, t + 6) + .map(numberToString) + .join(" "); + c.push(`${i} c`); + } + c.push("S"); + } + o.push(c.join("\n")); + } + const C = o.join("\n"), + h = new Dict(t); + h.set("FormType", 1); + h.set("Subtype", Name.get("Form")); + h.set("Type", Name.get("XObject")); + h.set("BBox", s); + h.set("Length", C.length); + if (1 !== g) { + const e = new Dict(t), + i = new Dict(t), + a = new Dict(t); + a.set("CA", g); + a.set("Type", Name.get("ExtGState")); + i.set("R0", a); + e.set("ExtGState", i); + h.set("Resources", e); + } + const l = new StringStream(C); + l.dict = h; + return l; + } + static async createNewAppearanceStreamForHighlight(e, t, i) { + const { + color: a, + rect: s, + outlines: { outline: r }, + opacity: n, + } = e, + g = [`${getPdfColor(a, !0)}`, "/R0 gs"]; + g.push(`${numberToString(r[4])} ${numberToString(r[5])} m`); + for (let e = 6, t = r.length; e < t; e += 6) + if (isNaN(r[e]) || null === r[e]) + g.push(`${numberToString(r[e + 4])} ${numberToString(r[e + 5])} l`); + else { + const t = r + .slice(e, e + 6) + .map(numberToString) + .join(" "); + g.push(`${t} c`); + } + g.push("h f"); + const o = g.join("\n"), + c = new Dict(t); + c.set("FormType", 1); + c.set("Subtype", Name.get("Form")); + c.set("Type", Name.get("XObject")); + c.set("BBox", s); + c.set("Length", o.length); + const C = new Dict(t), + h = new Dict(t); + C.set("ExtGState", h); + c.set("Resources", C); + const l = new Dict(t); + h.set("R0", l); + l.set("BM", Name.get("Multiply")); + if (1 !== n) { + l.set("ca", n); + l.set("Type", Name.get("ExtGState")); + } + const Q = new StringStream(o); + Q.dict = c; + return Q; + } +} +class HighlightAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = L; + if ((this.data.quadPoints = getQuadPoints(t, null))) { + const e = this.appearance?.dict.get("Resources"); + if (!this.appearance || !e?.has("ExtGState")) { + this.appearance && + warn("HighlightAnnotation - ignoring built-in appearance stream."); + const e = this.color ? getPdfColorArray(this.color) : [1, 1, 0], + a = t.get("CA"); + this._setDefaultAppearance({ + xref: i, + fillColor: e, + blendMode: "Multiply", + fillAlpha: a, + pointsCallback: (e, t) => { + e.push( + `${t[0]} ${t[1]} m`, + `${t[2]} ${t[3]} l`, + `${t[6]} ${t[7]} l`, + `${t[4]} ${t[5]} l`, + "f", + ); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } else this.data.popupRef = null; + } + static createNewDict(e, t, { apRef: i, ap: a }) { + const { + color: s, + opacity: r, + rect: n, + rotation: g, + user: o, + quadPoints: c, + } = e, + C = new Dict(t); + C.set("Type", Name.get("Annot")); + C.set("Subtype", Name.get("Highlight")); + C.set("CreationDate", `D:${getModificationDate()}`); + C.set("Rect", n); + C.set("F", 4); + C.set("Border", [0, 0, 0]); + C.set("Rotate", g); + C.set("QuadPoints", c); + C.set( + "C", + Array.from(s, (e) => e / 255), + ); + C.set("CA", r); + o && C.set("T", isAscii(o) ? o : stringToUTF16String(o, !0)); + if (i || a) { + const e = new Dict(t); + C.set("AP", e); + e.set("N", i || a); + } + return C; + } + static async createNewAppearanceStream(e, t, i) { + const { color: a, rect: s, outlines: r, opacity: n } = e, + g = [`${getPdfColor(a, !0)}`, "/R0 gs"], + o = []; + for (const e of r) { + o.length = 0; + o.push(`${numberToString(e[0])} ${numberToString(e[1])} m`); + for (let t = 2, i = e.length; t < i; t += 2) + o.push(`${numberToString(e[t])} ${numberToString(e[t + 1])} l`); + o.push("h"); + g.push(o.join("\n")); + } + g.push("f*"); + const c = g.join("\n"), + C = new Dict(t); + C.set("FormType", 1); + C.set("Subtype", Name.get("Form")); + C.set("Type", Name.get("XObject")); + C.set("BBox", s); + C.set("Length", c.length); + const h = new Dict(t), + l = new Dict(t); + h.set("ExtGState", l); + C.set("Resources", h); + const Q = new Dict(t); + l.set("R0", Q); + Q.set("BM", Name.get("Multiply")); + if (1 !== n) { + Q.set("ca", n); + Q.set("Type", Name.get("ExtGState")); + } + const E = new StringStream(c); + E.dict = C; + return E; + } +} +class UnderlineAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = H; + if ((this.data.quadPoints = getQuadPoints(t, null))) { + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"); + this._setDefaultAppearance({ + xref: i, + extra: "[] 0 d 0.571 w", + strokeColor: e, + strokeAlpha: a, + pointsCallback: (e, t) => { + e.push(`${t[4]} ${t[5] + 1.3} m`, `${t[6]} ${t[7] + 1.3} l`, "S"); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } else this.data.popupRef = null; + } +} +class SquigglyAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = J; + if ((this.data.quadPoints = getQuadPoints(t, null))) { + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"); + this._setDefaultAppearance({ + xref: i, + extra: "[] 0 d 1 w", + strokeColor: e, + strokeAlpha: a, + pointsCallback: (e, t) => { + const i = (t[1] - t[5]) / 6; + let a = i, + s = t[4]; + const r = t[5], + n = t[6]; + e.push(`${s} ${r + a} m`); + do { + s += 2; + a = 0 === a ? i : 0; + e.push(`${s} ${r + a} l`); + } while (s < n); + e.push("S"); + return [t[4], n, r - 2 * i, r + 2 * i]; + }, + }); + } + } else this.data.popupRef = null; + } +} +class StrikeOutAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e; + this.data.annotationType = Y; + if ((this.data.quadPoints = getQuadPoints(t, null))) { + if (!this.appearance) { + const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], + a = t.get("CA"); + this._setDefaultAppearance({ + xref: i, + extra: "[] 0 d 1 w", + strokeColor: e, + strokeAlpha: a, + pointsCallback: (e, t) => { + e.push( + (t[0] + t[4]) / 2 + " " + (t[1] + t[5]) / 2 + " m", + (t[2] + t[6]) / 2 + " " + (t[3] + t[7]) / 2 + " l", + "S", + ); + return [t[0], t[2], t[7], t[3]]; + }, + }); + } + } else this.data.popupRef = null; + } +} +class StampAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + this.data.annotationType = v; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + } + static async createImage(e, t) { + const { width: i, height: a } = e, + s = new OffscreenCanvas(i, a), + r = s.getContext("2d", { alpha: !0 }); + r.drawImage(e, 0, 0); + const n = r.getImageData(0, 0, i, a).data, + g = new Uint32Array(n.buffer), + o = g.some( + FeatureTest.isLittleEndian + ? (e) => e >>> 24 != 255 + : (e) => 255 != (255 & e), + ); + if (o) { + r.fillStyle = "white"; + r.fillRect(0, 0, i, a); + r.drawImage(e, 0, 0); + } + const c = s + .convertToBlob({ type: "image/jpeg", quality: 1 }) + .then((e) => e.arrayBuffer()), + C = Name.get("XObject"), + h = Name.get("Image"), + l = new Dict(t); + l.set("Type", C); + l.set("Subtype", h); + l.set("BitsPerComponent", 8); + l.set("ColorSpace", Name.get("DeviceRGB")); + l.set("Filter", Name.get("DCTDecode")); + l.set("BBox", [0, 0, i, a]); + l.set("Width", i); + l.set("Height", a); + let Q = null; + if (o) { + const e = new Uint8Array(g.length); + if (FeatureTest.isLittleEndian) + for (let t = 0, i = g.length; t < i; t++) e[t] = g[t] >>> 24; + else for (let t = 0, i = g.length; t < i; t++) e[t] = 255 & g[t]; + const s = new Dict(t); + s.set("Type", C); + s.set("Subtype", h); + s.set("BitsPerComponent", 8); + s.set("ColorSpace", Name.get("DeviceGray")); + s.set("Width", i); + s.set("Height", a); + Q = new Stream(e, 0, 0, s); + } + return { + imageStream: new Stream(await c, 0, 0, l), + smaskStream: Q, + width: i, + height: a, + }; + } + static createNewDict(e, t, { apRef: i, ap: a }) { + const { rect: s, rotation: r, user: n } = e, + g = new Dict(t); + g.set("Type", Name.get("Annot")); + g.set("Subtype", Name.get("Stamp")); + g.set("CreationDate", `D:${getModificationDate()}`); + g.set("Rect", s); + g.set("F", 4); + g.set("Border", [0, 0, 0]); + g.set("Rotate", r); + n && g.set("T", isAscii(n) ? n : stringToUTF16String(n, !0)); + if (i || a) { + const e = new Dict(t); + g.set("AP", e); + i ? e.set("N", i) : e.set("N", a); + } + return g; + } + static async createNewAppearanceStream(e, t, i) { + const { rotation: a } = e, + { imageRef: s, width: r, height: n } = i.image, + g = new Dict(t), + o = new Dict(t); + g.set("XObject", o); + o.set("Im0", s); + const c = `q ${r} 0 0 ${n} 0 0 cm /Im0 Do Q`, + C = new Dict(t); + C.set("FormType", 1); + C.set("Subtype", Name.get("Form")); + C.set("Type", Name.get("XObject")); + C.set("BBox", [0, 0, r, n]); + C.set("Resources", g); + if (a) { + const e = getRotationMatrix(a, r, n); + C.set("Matrix", e); + } + const h = new StringStream(c); + h.dict = C; + return h; + } +} +class FileAttachmentAnnotation extends MarkupAnnotation { + constructor(e) { + super(e); + const { dict: t, xref: i } = e, + a = new FileSpec(t.get("FS"), i); + this.data.annotationType = O; + this.data.hasOwnCanvas = this.data.noRotate; + this.data.noHTML = !1; + this.data.file = a.serializable; + const s = t.get("Name"); + this.data.name = s instanceof Name ? stringToPDFString(s.name) : "PushPin"; + const r = t.get("ca"); + this.data.fillAlpha = "number" == typeof r && r >= 0 && r <= 1 ? r : null; + } +} +function decodeString(e) { + try { + return stringToUTF8String(e); + } catch (t) { + warn(`UTF-8 decoding failed: "${t}".`); + return e; + } +} +class DatasetXMLParser extends SimpleXMLParser { + constructor(e) { + super(e); + this.node = null; + } + onEndElement(e) { + const t = super.onEndElement(e); + if (t && "xfa:datasets" === e) { + this.node = t; + throw new Error("Aborting DatasetXMLParser."); + } + } +} +class DatasetReader { + constructor(e) { + if (e.datasets) + this.node = new SimpleXMLParser({ hasAttributes: !0 }).parseFromString( + e.datasets, + ).documentElement; + else { + const t = new DatasetXMLParser({ hasAttributes: !0 }); + try { + t.parseFromString(e["xdp:xdp"]); + } catch {} + this.node = t.node; + } + } + getValue(e) { + if (!this.node || !e) return ""; + const t = this.node.searchNode(parseXFAPath(e), 0); + if (!t) return ""; + const i = t.firstChild; + return "value" === i?.nodeName + ? t.children.map((e) => decodeString(e.textContent)) + : decodeString(t.textContent); + } +} +class XRef { + #K = null; + constructor(e, t) { + this.stream = e; + this.pdfManager = t; + this.entries = []; + this._xrefStms = new Set(); + this._cacheMap = new Map(); + this._pendingRefs = new RefSet(); + this._newPersistentRefNum = null; + this._newTemporaryRefNum = null; + this._persistentRefsCache = null; + } + getNewPersistentRef(e) { + null === this._newPersistentRefNum && + (this._newPersistentRefNum = this.entries.length || 1); + const t = this._newPersistentRefNum++; + this._cacheMap.set(t, e); + return Ref.get(t, 0); + } + getNewTemporaryRef() { + if (null === this._newTemporaryRefNum) { + this._newTemporaryRefNum = this.entries.length || 1; + if (this._newPersistentRefNum) { + this._persistentRefsCache = new Map(); + for ( + let e = this._newTemporaryRefNum; + e < this._newPersistentRefNum; + e++ + ) { + this._persistentRefsCache.set(e, this._cacheMap.get(e)); + this._cacheMap.delete(e); + } + } + } + return Ref.get(this._newTemporaryRefNum++, 0); + } + resetNewTemporaryRef() { + this._newTemporaryRefNum = null; + if (this._persistentRefsCache) + for (const [e, t] of this._persistentRefsCache) this._cacheMap.set(e, t); + this._persistentRefsCache = null; + } + setStartXRef(e) { + this.startXRefQueue = [e]; + } + parse(e = !1) { + let t, i, a; + if (e) { + warn("Indexing all PDF objects"); + t = this.indexObjects(); + } else t = this.readXRef(); + t.assignXref(this); + this.trailer = t; + try { + i = t.get("Encrypt"); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`XRef.parse - Invalid "Encrypt" reference: "${e}".`); + } + if (i instanceof Dict) { + const e = t.get("ID"), + a = e?.length ? e[0] : ""; + i.suppressEncryption = !0; + this.encrypt = new CipherTransformFactory(i, a, this.pdfManager.password); + } + try { + a = t.get("Root"); + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`XRef.parse - Invalid "Root" reference: "${e}".`); + } + if (a instanceof Dict) + try { + if (a.get("Pages") instanceof Dict) { + this.root = a; + return; + } + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`XRef.parse - Invalid "Pages" reference: "${e}".`); + } + if (!e) throw new XRefParseException(); + throw new InvalidPDFException("Invalid Root reference."); + } + processXRefTable(e) { + "tableState" in this || + (this.tableState = { + entryNum: 0, + streamPos: e.lexer.stream.pos, + parserBuf1: e.buf1, + parserBuf2: e.buf2, + }); + if (!isCmd(this.readXRefTable(e), "trailer")) + throw new FormatError( + "Invalid XRef table: could not find trailer dictionary", + ); + let t = e.getObj(); + t instanceof Dict || !t.dict || (t = t.dict); + if (!(t instanceof Dict)) + throw new FormatError( + "Invalid XRef table: could not parse trailer dictionary", + ); + delete this.tableState; + return t; + } + readXRefTable(e) { + const t = e.lexer.stream, + i = this.tableState; + t.pos = i.streamPos; + e.buf1 = i.parserBuf1; + e.buf2 = i.parserBuf2; + let a; + for (;;) { + if (!("firstEntryNum" in i) || !("entryCount" in i)) { + if (isCmd((a = e.getObj()), "trailer")) break; + i.firstEntryNum = a; + i.entryCount = e.getObj(); + } + let s = i.firstEntryNum; + const r = i.entryCount; + if (!Number.isInteger(s) || !Number.isInteger(r)) + throw new FormatError( + "Invalid XRef table: wrong types in subsection header", + ); + for (let a = i.entryNum; a < r; a++) { + i.streamPos = t.pos; + i.entryNum = a; + i.parserBuf1 = e.buf1; + i.parserBuf2 = e.buf2; + const n = {}; + n.offset = e.getObj(); + n.gen = e.getObj(); + const g = e.getObj(); + if (g instanceof Cmd) + switch (g.cmd) { + case "f": + n.free = !0; + break; + case "n": + n.uncompressed = !0; + } + if ( + !Number.isInteger(n.offset) || + !Number.isInteger(n.gen) || + (!n.free && !n.uncompressed) + ) + throw new FormatError(`Invalid entry in XRef subsection: ${s}, ${r}`); + 0 === a && n.free && 1 === s && (s = 0); + this.entries[a + s] || (this.entries[a + s] = n); + } + i.entryNum = 0; + i.streamPos = t.pos; + i.parserBuf1 = e.buf1; + i.parserBuf2 = e.buf2; + delete i.firstEntryNum; + delete i.entryCount; + } + if (this.entries[0] && !this.entries[0].free) + throw new FormatError("Invalid XRef table: unexpected first object"); + return a; + } + processXRefStream(e) { + if (!("streamState" in this)) { + const t = e.dict, + i = t.get("W"); + let a = t.get("Index"); + a || (a = [0, t.get("Size")]); + this.streamState = { + entryRanges: a, + byteWidths: i, + entryNum: 0, + streamPos: e.pos, + }; + } + this.readXRefStream(e); + delete this.streamState; + return e.dict; + } + readXRefStream(e) { + const t = this.streamState; + e.pos = t.streamPos; + const [i, a, s] = t.byteWidths, + r = t.entryRanges; + for (; r.length > 0; ) { + const [n, g] = r; + if (!Number.isInteger(n) || !Number.isInteger(g)) + throw new FormatError(`Invalid XRef range fields: ${n}, ${g}`); + if (!Number.isInteger(i) || !Number.isInteger(a) || !Number.isInteger(s)) + throw new FormatError(`Invalid XRef entry fields length: ${n}, ${g}`); + for (let r = t.entryNum; r < g; ++r) { + t.entryNum = r; + t.streamPos = e.pos; + let g = 0, + o = 0, + c = 0; + for (let t = 0; t < i; ++t) { + const t = e.getByte(); + if (-1 === t) + throw new FormatError("Invalid XRef byteWidths 'type'."); + g = (g << 8) | t; + } + 0 === i && (g = 1); + for (let t = 0; t < a; ++t) { + const t = e.getByte(); + if (-1 === t) + throw new FormatError("Invalid XRef byteWidths 'offset'."); + o = (o << 8) | t; + } + for (let t = 0; t < s; ++t) { + const t = e.getByte(); + if (-1 === t) + throw new FormatError("Invalid XRef byteWidths 'generation'."); + c = (c << 8) | t; + } + const C = {}; + C.offset = o; + C.gen = c; + switch (g) { + case 0: + C.free = !0; + break; + case 1: + C.uncompressed = !0; + break; + case 2: + break; + default: + throw new FormatError(`Invalid XRef entry type: ${g}`); + } + this.entries[n + r] || (this.entries[n + r] = C); + } + t.entryNum = 0; + t.streamPos = e.pos; + r.splice(0, 2); + } + } + indexObjects() { + function readToken(e, t) { + let i = "", + a = e[t]; + for (; 10 !== a && 13 !== a && 60 !== a && !(++t >= e.length); ) { + i += String.fromCharCode(a); + a = e[t]; + } + return i; + } + function skipUntil(e, t, i) { + const a = i.length, + s = e.length; + let r = 0; + for (; t < s; ) { + let s = 0; + for (; s < a && e[t + s] === i[s]; ) ++s; + if (s >= a) break; + t++; + r++; + } + return r; + } + const e = /\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g, + t = /\b(startxref|\d+\s+\d+\s+obj)\b/g, + i = /^(\d+)\s+(\d+)\s+obj\b/, + a = new Uint8Array([116, 114, 97, 105, 108, 101, 114]), + s = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]), + r = new Uint8Array([47, 88, 82, 101, 102]); + this.entries.length = 0; + this._cacheMap.clear(); + const n = this.stream; + n.pos = 0; + const g = n.getBytes(), + o = bytesToString(g), + c = g.length; + let C = n.start; + const h = [], + l = []; + for (; C < c; ) { + let Q = g[C]; + if (9 === Q || 10 === Q || 13 === Q || 32 === Q) { + ++C; + continue; + } + if (37 === Q) { + do { + ++C; + if (C >= c) break; + Q = g[C]; + } while (10 !== Q && 13 !== Q); + continue; + } + const E = readToken(g, C); + let u; + if (E.startsWith("xref") && (4 === E.length || /\s/.test(E[4]))) { + C += skipUntil(g, C, a); + h.push(C); + C += skipUntil(g, C, s); + } else if ((u = i.exec(E))) { + const t = 0 | u[1], + i = 0 | u[2], + a = C + E.length; + let s, + h = !1; + if (this.entries[t]) { + if (this.entries[t].gen === i) + try { + new Parser({ lexer: new Lexer(n.makeSubStream(a)) }).getObj(); + h = !0; + } catch (e) { + e instanceof ParserEOFException + ? warn(`indexObjects -- checking object (${E}): "${e}".`) + : (h = !0); + } + } else h = !0; + h && + (this.entries[t] = { offset: C - n.start, gen: i, uncompressed: !0 }); + e.lastIndex = a; + const Q = e.exec(o); + if (Q) { + s = e.lastIndex + 1 - C; + if ("endobj" !== Q[1]) { + warn( + `indexObjects: Found "${Q[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`, + ); + s -= Q[1].length + 1; + } + } else s = c - C; + const d = g.subarray(C, C + s), + f = skipUntil(d, 0, r); + if (f < s && d[f + 5] < 64) { + l.push(C - n.start); + this._xrefStms.add(C - n.start); + } + C += s; + } else if ( + E.startsWith("trailer") && + (7 === E.length || /\s/.test(E[7])) + ) { + h.push(C); + const e = C + E.length; + let i; + t.lastIndex = e; + const a = t.exec(o); + if (a) { + i = t.lastIndex + 1 - C; + if ("startxref" !== a[1]) { + warn( + `indexObjects: Found "${a[1]}" after "trailer", caused by missing "startxref" -- trying to recover.`, + ); + i -= a[1].length + 1; + } + } else i = c - C; + C += i; + } else C += E.length + 1; + } + for (const e of l) { + this.startXRefQueue.push(e); + this.readXRef(!0); + } + const Q = []; + let E, + u, + d = !1; + for (const e of h) { + n.pos = e; + const t = new Parser({ + lexer: new Lexer(n), + xref: this, + allowStreams: !0, + recoveryMode: !0, + }); + if (!isCmd(t.getObj(), "trailer")) continue; + const i = t.getObj(); + if (i instanceof Dict) { + Q.push(i); + i.has("Encrypt") && (d = !0); + } + } + for (const e of [...Q, "genFallback", ...Q]) { + if ("genFallback" === e) { + if (!u) break; + this._generationFallback = !0; + continue; + } + let t = !1; + try { + const i = e.get("Root"); + if (!(i instanceof Dict)) continue; + const a = i.get("Pages"); + if (!(a instanceof Dict)) continue; + const s = a.get("Count"); + Number.isInteger(s) && (t = !0); + } catch (e) { + u = e; + continue; + } + if (t && (!d || e.has("Encrypt")) && e.has("ID")) return e; + E = e; + } + if (E) return E; + if (this.topDict) return this.topDict; + throw new InvalidPDFException("Invalid PDF structure."); + } + readXRef(e = !1) { + const t = this.stream, + i = new Set(); + for (; this.startXRefQueue.length; ) { + try { + const e = this.startXRefQueue[0]; + if (i.has(e)) { + warn("readXRef - skipping XRef table since it was already parsed."); + this.startXRefQueue.shift(); + continue; + } + i.add(e); + t.pos = e + t.start; + const a = new Parser({ + lexer: new Lexer(t), + xref: this, + allowStreams: !0, + }); + let s, + r = a.getObj(); + if (isCmd(r, "xref")) { + s = this.processXRefTable(a); + this.topDict || (this.topDict = s); + r = s.get("XRefStm"); + if (Number.isInteger(r) && !this._xrefStms.has(r)) { + this._xrefStms.add(r); + this.startXRefQueue.push(r); + this.#K ??= r; + } + } else { + if (!Number.isInteger(r)) + throw new FormatError("Invalid XRef stream header"); + if ( + !( + Number.isInteger(a.getObj()) && + isCmd(a.getObj(), "obj") && + (r = a.getObj()) instanceof BaseStream + ) + ) + throw new FormatError("Invalid XRef stream"); + s = this.processXRefStream(r); + this.topDict || (this.topDict = s); + if (!s) throw new FormatError("Failed to read XRef stream"); + } + r = s.get("Prev"); + Number.isInteger(r) + ? this.startXRefQueue.push(r) + : r instanceof Ref && this.startXRefQueue.push(r.num); + } catch (e) { + if (e instanceof MissingDataException) throw e; + info("(while reading XRef): " + e); + } + this.startXRefQueue.shift(); + } + if (this.topDict) return this.topDict; + if (!e) throw new XRefParseException(); + } + get lastXRefStreamPos() { + return ( + this.#K ?? (this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null) + ); + } + getEntry(e) { + const t = this.entries[e]; + return t && !t.free && t.offset ? t : null; + } + fetchIfRef(e, t = !1) { + return e instanceof Ref ? this.fetch(e, t) : e; + } + fetch(e, t = !1) { + if (!(e instanceof Ref)) throw new Error("ref object is not a reference"); + const i = e.num, + a = this._cacheMap.get(i); + if (void 0 !== a) { + a instanceof Dict && !a.objId && (a.objId = e.toString()); + return a; + } + let s = this.getEntry(i); + if (null === s) { + this._cacheMap.set(i, s); + return s; + } + if (this._pendingRefs.has(e)) { + this._pendingRefs.remove(e); + warn(`Ignoring circular reference: ${e}.`); + return ft; + } + this._pendingRefs.put(e); + try { + s = s.uncompressed + ? this.fetchUncompressed(e, s, t) + : this.fetchCompressed(e, s, t); + this._pendingRefs.remove(e); + } catch (t) { + this._pendingRefs.remove(e); + throw t; + } + s instanceof Dict + ? (s.objId = e.toString()) + : s instanceof BaseStream && (s.dict.objId = e.toString()); + return s; + } + fetchUncompressed(e, t, i = !1) { + const a = e.gen; + let s = e.num; + if (t.gen !== a) { + const r = `Inconsistent generation in XRef: ${e}`; + if (this._generationFallback && t.gen < a) { + warn(r); + return this.fetchUncompressed(Ref.get(s, t.gen), t, i); + } + throw new XRefEntryException(r); + } + const r = this.stream.makeSubStream(t.offset + this.stream.start), + n = new Parser({ lexer: new Lexer(r), xref: this, allowStreams: !0 }), + g = n.getObj(), + o = n.getObj(), + c = n.getObj(); + if (g !== s || o !== a || !(c instanceof Cmd)) + throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`); + if ("obj" !== c.cmd) { + if (c.cmd.startsWith("obj")) { + s = parseInt(c.cmd.substring(3), 10); + if (!Number.isNaN(s)) return s; + } + throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`); + } + (t = + this.encrypt && !i + ? n.getObj(this.encrypt.createCipherTransform(s, a)) + : n.getObj()) instanceof BaseStream || this._cacheMap.set(s, t); + return t; + } + fetchCompressed(e, t, i = !1) { + const a = t.offset, + s = this.fetch(Ref.get(a, 0)); + if (!(s instanceof BaseStream)) throw new FormatError("bad ObjStm stream"); + const r = s.dict.get("First"), + n = s.dict.get("N"); + if (!Number.isInteger(r) || !Number.isInteger(n)) + throw new FormatError("invalid first and n parameters for ObjStm stream"); + let g = new Parser({ lexer: new Lexer(s), xref: this, allowStreams: !0 }); + const o = new Array(n), + c = new Array(n); + for (let e = 0; e < n; ++e) { + const t = g.getObj(); + if (!Number.isInteger(t)) + throw new FormatError( + `invalid object number in the ObjStm stream: ${t}`, + ); + const i = g.getObj(); + if (!Number.isInteger(i)) + throw new FormatError( + `invalid object offset in the ObjStm stream: ${i}`, + ); + o[e] = t; + c[e] = i; + } + const C = (s.start || 0) + r, + h = new Array(n); + for (let e = 0; e < n; ++e) { + const t = e < n - 1 ? c[e + 1] - c[e] : void 0; + if (t < 0) throw new FormatError("Invalid offset in the ObjStm stream."); + g = new Parser({ + lexer: new Lexer(s.makeSubStream(C + c[e], t, s.dict)), + xref: this, + allowStreams: !0, + }); + const i = g.getObj(); + h[e] = i; + if (i instanceof BaseStream) continue; + const r = o[e], + l = this.entries[r]; + l && l.offset === a && l.gen === e && this._cacheMap.set(r, i); + } + if (void 0 === (t = h[t.gen])) + throw new XRefEntryException(`Bad (compressed) XRef entry: ${e}`); + return t; + } + async fetchIfRefAsync(e, t) { + return e instanceof Ref ? this.fetchAsync(e, t) : e; + } + async fetchAsync(e, t) { + try { + return this.fetch(e, t); + } catch (i) { + if (!(i instanceof MissingDataException)) throw i; + await this.pdfManager.requestRange(i.begin, i.end); + return this.fetchAsync(e, t); + } + } + getCatalogObj() { + return this.root; + } +} +const sg = [0, 0, 612, 792]; +class Page { + constructor({ + pdfManager: e, + xref: t, + pageIndex: i, + pageDict: a, + ref: s, + globalIdFactory: r, + fontCache: n, + builtInCMapCache: g, + standardFontDataCache: o, + globalImageCache: c, + systemFontCache: C, + nonBlendModesSet: h, + xfaFactory: l, + }) { + this.pdfManager = e; + this.pageIndex = i; + this.pageDict = a; + this.xref = t; + this.ref = s; + this.fontCache = n; + this.builtInCMapCache = g; + this.standardFontDataCache = o; + this.globalImageCache = c; + this.systemFontCache = C; + this.nonBlendModesSet = h; + this.evaluatorOptions = e.evaluatorOptions; + this.resourcesPromise = null; + this.xfaFactory = l; + const Q = { obj: 0 }; + this._localIdFactory = class extends r { + static createObjId() { + return `p${i}_${++Q.obj}`; + } + static getPageObjId() { + return `p${s.toString()}`; + } + }; + } + _getInheritableProperty(e, t = !1) { + const i = getInheritableProperty({ + dict: this.pageDict, + key: e, + getArray: t, + stopWhenFound: !1, + }); + return Array.isArray(i) + ? 1 !== i.length && i[0] instanceof Dict + ? Dict.merge({ xref: this.xref, dictArray: i }) + : i[0] + : i; + } + get content() { + return this.pageDict.getArray("Contents"); + } + get resources() { + const e = this._getInheritableProperty("Resources"); + return shadow(this, "resources", e instanceof Dict ? e : Dict.empty); + } + _getBoundingBox(e) { + if (this.xfaData) return this.xfaData.bbox; + const t = lookupNormalRect(this._getInheritableProperty(e, !0), null); + if (t) { + if (t[2] - t[0] > 0 && t[3] - t[1] > 0) return t; + warn(`Empty, or invalid, /${e} entry.`); + } + return null; + } + get mediaBox() { + return shadow(this, "mediaBox", this._getBoundingBox("MediaBox") || sg); + } + get cropBox() { + return shadow( + this, + "cropBox", + this._getBoundingBox("CropBox") || this.mediaBox, + ); + } + get userUnit() { + let e = this.pageDict.get("UserUnit"); + ("number" != typeof e || e <= 0) && (e = 1); + return shadow(this, "userUnit", e); + } + get view() { + const { cropBox: e, mediaBox: t } = this; + if (e !== t && !isArrayEqual(e, t)) { + const i = Util.intersect(e, t); + if (i && i[2] - i[0] > 0 && i[3] - i[1] > 0) + return shadow(this, "view", i); + warn("Empty /CropBox and /MediaBox intersection."); + } + return shadow(this, "view", t); + } + get rotate() { + let e = this._getInheritableProperty("Rotate") || 0; + e % 90 != 0 + ? (e = 0) + : e >= 360 + ? (e %= 360) + : e < 0 && (e = ((e % 360) + 360) % 360); + return shadow(this, "rotate", e); + } + _onSubStreamError(e, t) { + if (!this.evaluatorOptions.ignoreErrors) throw e; + warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`); + } + getContentStream() { + return this.pdfManager + .ensure(this, "content") + .then((e) => + e instanceof BaseStream + ? e + : Array.isArray(e) + ? new StreamsSequenceStream(e, this._onSubStreamError.bind(this)) + : new NullStream(), + ); + } + get xfaData() { + return shadow( + this, + "xfaData", + this.xfaFactory + ? { bbox: this.xfaFactory.getBoundingBox(this.pageIndex) } + : null, + ); + } + #T(e, t, i) { + for (const a of e) + if (a.id) { + const e = Ref.fromString(a.id); + if (!e) { + warn(`A non-linked annotation cannot be modified: ${a.id}`); + continue; + } + if (a.deleted) { + t.put(e, e); + continue; + } + i?.put(e); + a.ref = e; + delete a.id; + } + } + async saveNewAnnotations(e, t, i, a) { + if (this.xfaFactory) throw new Error("XFA: Cannot save new annotations."); + const s = new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + systemFontCache: this.systemFontCache, + options: this.evaluatorOptions, + }), + r = new RefSetCache(), + n = new RefSet(); + this.#T(i, r, n); + const g = this.pageDict, + o = this.annotations.filter((e) => !(e instanceof Ref && r.has(e))), + c = await AnnotationFactory.saveNewAnnotations(s, t, i, a); + for (const { ref: e } of c.annotations) + e instanceof Ref && !n.has(e) && o.push(e); + const C = g.get("Annots"); + g.set("Annots", o); + const h = []; + await writeObject(this.ref, g, h, this.xref); + C && g.set("Annots", C); + const l = c.dependencies; + l.push({ ref: this.ref, data: h.join("") }, ...c.annotations); + for (const e of r) l.push({ ref: e, data: null }); + return l; + } + save(e, t, i) { + const a = new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + systemFontCache: this.systemFontCache, + options: this.evaluatorOptions, + }); + return this._parsedAnnotations.then(function (e) { + const s = []; + for (const r of e) + r.mustBePrinted(i) && + s.push( + r.save(a, t, i).catch(function (e) { + warn( + `save - ignoring annotation data during "${t.name}" task: "${e}".`, + ); + return null; + }), + ); + return Promise.all(s).then(function (e) { + return e.filter((e) => !!e); + }); + }); + } + loadResources(e) { + this.resourcesPromise ||= this.pdfManager.ensure(this, "resources"); + return this.resourcesPromise.then(() => + new ObjectLoader(this.resources, e, this.xref).load(), + ); + } + getOperatorList({ + handler: e, + sink: t, + task: i, + intent: a, + cacheKey: s, + annotationStorage: r = null, + }) { + const n = this.getContentStream(), + C = this.loadResources([ + "ColorSpace", + "ExtGState", + "Font", + "Pattern", + "Properties", + "Shading", + "XObject", + ]), + Q = new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + systemFontCache: this.systemFontCache, + options: this.evaluatorOptions, + }), + u = this.xfaFactory ? null : getNewAnnotationsMap(r), + d = u?.get(this.pageIndex); + let f = Promise.resolve(null), + p = null; + if (d) { + const e = this.pdfManager.ensureDoc("annotationGlobals"); + let t; + const a = new Set(); + for (const { bitmapId: e, bitmap: t } of d) + !e || t || a.has(e) || a.add(e); + const { isOffscreenCanvasSupported: s } = this.evaluatorOptions; + if (a.size > 0) { + const e = d.slice(); + for (const [t, i] of r) + t.startsWith(E) && i.bitmap && a.has(i.bitmapId) && e.push(i); + t = AnnotationFactory.generateImages(e, this.xref, s); + } else t = AnnotationFactory.generateImages(d, this.xref, s); + p = new RefSet(); + this.#T(d, p, null); + f = e.then((e) => + e ? AnnotationFactory.printNewAnnotations(e, Q, i, d, t) : null, + ); + } + const m = Promise.all([n, C]).then(([r]) => { + const n = new OperatorList(a, t); + e.send("StartRenderPage", { + transparency: Q.hasBlendModes(this.resources, this.nonBlendModesSet), + pageIndex: this.pageIndex, + cacheKey: s, + }); + return Q.getOperatorList({ + stream: r, + task: i, + resources: this.resources, + operatorList: n, + }).then(function () { + return n; + }); + }); + return Promise.all([m, this._parsedAnnotations, f]).then(function ([ + e, + t, + s, + ]) { + if (s) { + t = t.filter((e) => !(e.ref && p.has(e.ref))); + for (let e = 0, i = s.length; e < i; e++) { + const a = s[e]; + if (a.refToReplace) { + const r = t.findIndex( + (e) => e.ref && isRefsEqual(e.ref, a.refToReplace), + ); + if (r >= 0) { + t.splice(r, 1, a); + s.splice(e--, 1); + i--; + } + } + } + t = t.concat(s); + } + if (0 === t.length || a & l) { + e.flush(!0); + return { length: e.totalLength }; + } + const n = !!(a & h), + C = !!(a & g), + E = !!(a & o), + u = !!(a & c), + d = []; + for (const e of t) + (C || (E && e.mustBeViewed(r, n)) || (u && e.mustBePrinted(r))) && + d.push( + e.getOperatorList(Q, i, a, n, r).catch(function (e) { + warn( + `getOperatorList - ignoring annotation data during "${i.name}" task: "${e}".`, + ); + return { opList: null, separateForm: !1, separateCanvas: !1 }; + }), + ); + return Promise.all(d).then(function (t) { + let i = !1, + a = !1; + for (const { opList: s, separateForm: r, separateCanvas: n } of t) { + e.addOpList(s); + i ||= r; + a ||= n; + } + e.flush(!0, { form: i, canvas: a }); + return { length: e.totalLength }; + }); + }); + } + async extractTextContent({ + handler: e, + task: t, + includeMarkedContent: i, + disableNormalization: a, + sink: s, + }) { + const r = this.getContentStream(), + n = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]), + g = this.pdfManager.ensureCatalog("lang"), + [o, , c] = await Promise.all([r, n, g]); + return new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + systemFontCache: this.systemFontCache, + options: this.evaluatorOptions, + }).getTextContent({ + stream: o, + task: t, + resources: this.resources, + includeMarkedContent: i, + disableNormalization: a, + sink: s, + viewBox: this.view, + lang: c, + }); + } + async getStructTree() { + const e = await this.pdfManager.ensureCatalog("structTreeRoot"); + if (!e) return null; + await this._parsedAnnotations; + return (await this.pdfManager.ensure(this, "_parseStructTree", [e])) + .serializable; + } + _parseStructTree(e) { + const t = new StructTreePage(e, this.pageDict); + t.parse(this.ref); + return t; + } + async getAnnotationsData(e, t, i) { + const a = await this._parsedAnnotations; + if (0 === a.length) return a; + const s = [], + r = []; + let n; + const C = !!(i & g), + h = !!(i & o), + l = !!(i & c); + for (const i of a) { + const a = C || (h && i.viewable); + (a || (l && i.printable)) && s.push(i.data); + if (i.hasTextContent && a) { + n ||= new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + systemFontCache: this.systemFontCache, + options: this.evaluatorOptions, + }); + r.push( + i + .extractTextContent(n, t, [-1 / 0, -1 / 0, 1 / 0, 1 / 0]) + .catch(function (e) { + warn( + `getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`, + ); + }), + ); + } + } + await Promise.all(r); + return s; + } + get annotations() { + const e = this._getInheritableProperty("Annots"); + return shadow(this, "annotations", Array.isArray(e) ? e : []); + } + get _parsedAnnotations() { + return shadow( + this, + "_parsedAnnotations", + this.pdfManager.ensure(this, "annotations").then(async (e) => { + if (0 === e.length) return e; + const t = await this.pdfManager.ensureDoc("annotationGlobals"); + if (!t) return []; + const i = []; + for (const a of e) + i.push( + AnnotationFactory.create( + this.xref, + a, + t, + this._localIdFactory, + !1, + this.ref, + ).catch(function (e) { + warn(`_parsedAnnotations: "${e}".`); + return null; + }), + ); + const a = []; + let s, r; + for (const e of await Promise.all(i)) + e && + (e instanceof WidgetAnnotation + ? (r ||= []).push(e) + : e instanceof PopupAnnotation + ? (s ||= []).push(e) + : a.push(e)); + r && a.push(...r); + s && a.push(...s); + return a; + }), + ); + } + get jsActions() { + return shadow( + this, + "jsActions", + collectActions(this.xref, this.pageDict, fA), + ); + } +} +const rg = new Uint8Array([37, 80, 68, 70, 45]), + ng = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]), + gg = new Uint8Array([101, 110, 100, 111, 98, 106]); +function find(e, t, i = 1024, a = !1) { + const s = t.length, + r = e.peekBytes(i), + n = r.length - s; + if (n <= 0) return !1; + if (a) { + const i = s - 1; + let a = r.length - 1; + for (; a >= i; ) { + let n = 0; + for (; n < s && r[a - n] === t[i - n]; ) n++; + if (n >= s) { + e.pos += a - i; + return !0; + } + a--; + } + } else { + let i = 0; + for (; i <= n; ) { + let a = 0; + for (; a < s && r[i + a] === t[a]; ) a++; + if (a >= s) { + e.pos += i; + return !0; + } + i++; + } + } + return !1; +} +class PDFDocument { + constructor(e, t) { + if (t.length <= 0) + throw new InvalidPDFException( + "The PDF file is empty, i.e. its size is zero bytes.", + ); + this.pdfManager = e; + this.stream = t; + this.xref = new XRef(t, e); + this._pagePromises = new Map(); + this._version = null; + const i = { font: 0 }; + this._globalIdFactory = class { + static getDocId() { + return `g_${e.docId}`; + } + static createFontId() { + return "f" + ++i.font; + } + static createObjId() { + unreachable("Abstract method `createObjId` called."); + } + static getPageObjId() { + unreachable("Abstract method `getPageObjId` called."); + } + }; + } + parse(e) { + this.xref.parse(e); + this.catalog = new Catalog(this.pdfManager, this.xref); + } + get linearization() { + let e = null; + try { + e = Linearization.create(this.stream); + } catch (e) { + if (e instanceof MissingDataException) throw e; + info(e); + } + return shadow(this, "linearization", e); + } + get startXRef() { + const e = this.stream; + let t = 0; + if (this.linearization) { + e.reset(); + if (find(e, gg)) { + e.skip(6); + let i = e.peekByte(); + for (; isWhiteSpace(i); ) { + e.pos++; + i = e.peekByte(); + } + t = e.pos - e.start; + } + } else { + const i = 1024, + a = ng.length; + let s = !1, + r = e.end; + for (; !s && r > 0; ) { + r -= i - a; + r < 0 && (r = 0); + e.pos = r; + s = find(e, ng, i, !0); + } + if (s) { + e.skip(9); + let i; + do { + i = e.getByte(); + } while (isWhiteSpace(i)); + let a = ""; + for (; i >= 32 && i <= 57; ) { + a += String.fromCharCode(i); + i = e.getByte(); + } + t = parseInt(a, 10); + isNaN(t) && (t = 0); + } + } + return shadow(this, "startXRef", t); + } + checkHeader() { + const e = this.stream; + e.reset(); + if (!find(e, rg)) return; + e.moveStart(); + e.skip(rg.length); + let t, + i = ""; + for (; (t = e.getByte()) > 32 && i.length < 7; ) + i += String.fromCharCode(t); + bt.test(i) ? (this._version = i) : warn(`Invalid PDF header version: ${i}`); + } + parseStartXRef() { + this.xref.setStartXRef(this.startXRef); + } + get numPages() { + let e = 0; + e = this.catalog.hasActualNumPages + ? this.catalog.numPages + : this.xfaFactory + ? this.xfaFactory.getNumPages() + : this.linearization + ? this.linearization.numPages + : this.catalog.numPages; + return shadow(this, "numPages", e); + } + _hasOnlyDocumentSignatures(e, t = 0) { + return ( + !!Array.isArray(e) && + e.every((e) => { + if (!((e = this.xref.fetchIfRef(e)) instanceof Dict)) return !1; + if (e.has("Kids")) { + if (++t > 10) { + warn("_hasOnlyDocumentSignatures: maximum recursion depth reached"); + return !1; + } + return this._hasOnlyDocumentSignatures(e.get("Kids"), t); + } + const i = isName(e.get("FT"), "Sig"), + a = e.get("Rect"), + s = Array.isArray(a) && a.every((e) => 0 === e); + return i && s; + }) + ); + } + get _xfaStreams() { + const e = this.catalog.acroForm; + if (!e) return null; + const t = e.get("XFA"), + i = { + "xdp:xdp": "", + template: "", + datasets: "", + config: "", + connectionSet: "", + localeSet: "", + stylesheet: "", + "/xdp:xdp": "", + }; + if (t instanceof BaseStream && !t.isEmpty) { + i["xdp:xdp"] = t; + return i; + } + if (!Array.isArray(t) || 0 === t.length) return null; + for (let e = 0, a = t.length; e < a; e += 2) { + let s; + s = 0 === e ? "xdp:xdp" : e === a - 2 ? "/xdp:xdp" : t[e]; + if (!i.hasOwnProperty(s)) continue; + const r = this.xref.fetchIfRef(t[e + 1]); + r instanceof BaseStream && !r.isEmpty && (i[s] = r); + } + return i; + } + get xfaDatasets() { + const e = this._xfaStreams; + if (!e) return shadow(this, "xfaDatasets", null); + for (const t of ["datasets", "xdp:xdp"]) { + const i = e[t]; + if (i) + try { + const e = stringToUTF8String(i.getString()); + return shadow(this, "xfaDatasets", new DatasetReader({ [t]: e })); + } catch { + warn("XFA - Invalid utf-8 string."); + break; + } + } + return shadow(this, "xfaDatasets", null); + } + get xfaData() { + const e = this._xfaStreams; + if (!e) return null; + const t = Object.create(null); + for (const [i, a] of Object.entries(e)) + if (a) + try { + t[i] = stringToUTF8String(a.getString()); + } catch { + warn("XFA - Invalid utf-8 string."); + return null; + } + return t; + } + get xfaFactory() { + let e; + this.pdfManager.enableXfa && + this.catalog.needsRendering && + this.formInfo.hasXfa && + !this.formInfo.hasAcroForm && + (e = this.xfaData); + return shadow(this, "xfaFactory", e ? new XFAFactory(e) : null); + } + get isPureXfa() { + return !!this.xfaFactory && this.xfaFactory.isValid(); + } + get htmlForXfa() { + return this.xfaFactory ? this.xfaFactory.getPages() : null; + } + async loadXfaImages() { + const e = await this.pdfManager.ensureCatalog("xfaImages"); + if (!e) return; + const t = e.getKeys(), + i = new ObjectLoader(e, t, this.xref); + await i.load(); + const a = new Map(); + for (const i of t) { + const t = e.get(i); + t instanceof BaseStream && a.set(i, t.getBytes()); + } + this.xfaFactory.setImages(a); + } + async loadXfaFonts(e, t) { + const i = await this.pdfManager.ensureCatalog("acroForm"); + if (!i) return; + const a = await i.getAsync("DR"); + if (!(a instanceof Dict)) return; + const s = new ObjectLoader(a, ["Font"], this.xref); + await s.load(); + const r = a.get("Font"); + if (!(r instanceof Dict)) return; + const n = Object.assign( + Object.create(null), + this.pdfManager.evaluatorOptions, + ); + n.useSystemFonts = !1; + const g = new PartialEvaluator({ + xref: this.xref, + handler: e, + pageIndex: -1, + idFactory: this._globalIdFactory, + fontCache: this.catalog.fontCache, + builtInCMapCache: this.catalog.builtInCMapCache, + standardFontDataCache: this.catalog.standardFontDataCache, + options: n, + }), + o = new OperatorList(), + c = [], + C = { + get font() { + return c.at(-1); + }, + set font(e) { + c.push(e); + }, + clone() { + return this; + }, + }, + h = new Map(); + r.forEach((e, t) => { + h.set(e, t); + }); + const l = []; + for (const [e, i] of h) { + const s = i.get("FontDescriptor"); + if (!(s instanceof Dict)) continue; + let r = s.get("FontFamily"); + r = r.replaceAll(/[ ]+(\d)/g, "$1"); + const n = { + fontFamily: r, + fontWeight: s.get("FontWeight"), + italicAngle: -s.get("ItalicAngle"), + }; + validateCSSFont(n) && + l.push( + g + .handleSetFont(a, [Name.get(e), 1], null, o, t, C, null, n) + .catch(function (e) { + warn(`loadXfaFonts: "${e}".`); + return null; + }), + ); + } + await Promise.all(l); + const Q = this.xfaFactory.setFonts(c); + if (!Q) return; + n.ignoreErrors = !0; + l.length = 0; + c.length = 0; + const E = new Set(); + for (const e of Q) getXfaFontName(`${e}-Regular`) || E.add(e); + E.size && Q.push("PdfJS-Fallback"); + for (const e of Q) + if (!E.has(e)) + for (const i of [ + { name: "Regular", fontWeight: 400, italicAngle: 0 }, + { name: "Bold", fontWeight: 700, italicAngle: 0 }, + { name: "Italic", fontWeight: 400, italicAngle: 12 }, + { name: "BoldItalic", fontWeight: 700, italicAngle: 12 }, + ]) { + const s = `${e}-${i.name}`, + r = getXfaFontDict(s); + l.push( + g + .handleSetFont(a, [Name.get(s), 1], null, o, t, C, r, { + fontFamily: e, + fontWeight: i.fontWeight, + italicAngle: i.italicAngle, + }) + .catch(function (e) { + warn(`loadXfaFonts: "${e}".`); + return null; + }), + ); + } + await Promise.all(l); + this.xfaFactory.appendFonts(c, E); + } + async serializeXfaData(e) { + return this.xfaFactory ? this.xfaFactory.serializeData(e) : null; + } + get version() { + return this.catalog.version || this._version; + } + get formInfo() { + const e = { hasFields: !1, hasAcroForm: !1, hasXfa: !1, hasSignatures: !1 }, + t = this.catalog.acroForm; + if (!t) return shadow(this, "formInfo", e); + try { + const i = t.get("Fields"), + a = Array.isArray(i) && i.length > 0; + e.hasFields = a; + const s = t.get("XFA"); + e.hasXfa = + (Array.isArray(s) && s.length > 0) || + (s instanceof BaseStream && !s.isEmpty); + const r = !!(1 & t.get("SigFlags")), + n = r && this._hasOnlyDocumentSignatures(i); + e.hasAcroForm = a && !n; + e.hasSignatures = r; + } catch (e) { + if (e instanceof MissingDataException) throw e; + warn(`Cannot fetch form information: "${e}".`); + } + return shadow(this, "formInfo", e); + } + get documentInfo() { + const e = { + PDFFormatVersion: this.version, + Language: this.catalog.lang, + EncryptFilterName: this.xref.encrypt + ? this.xref.encrypt.filterName + : null, + IsLinearized: !!this.linearization, + IsAcroFormPresent: this.formInfo.hasAcroForm, + IsXFAPresent: this.formInfo.hasXfa, + IsCollectionPresent: !!this.catalog.collection, + IsSignaturesPresent: this.formInfo.hasSignatures, + }; + let t; + try { + t = this.xref.trailer.get("Info"); + } catch (e) { + if (e instanceof MissingDataException) throw e; + info("The document information dictionary is invalid."); + } + if (!(t instanceof Dict)) return shadow(this, "documentInfo", e); + for (const i of t.getKeys()) { + const a = t.get(i); + switch (i) { + case "Title": + case "Author": + case "Subject": + case "Keywords": + case "Creator": + case "Producer": + case "CreationDate": + case "ModDate": + if ("string" == typeof a) { + e[i] = stringToPDFString(a); + continue; + } + break; + case "Trapped": + if (a instanceof Name) { + e[i] = a; + continue; + } + break; + default: + let t; + switch (typeof a) { + case "string": + t = stringToPDFString(a); + break; + case "number": + case "boolean": + t = a; + break; + default: + a instanceof Name && (t = a); + } + if (void 0 === t) { + warn(`Bad value, for custom key "${i}", in Info: ${a}.`); + continue; + } + e.Custom || (e.Custom = Object.create(null)); + e.Custom[i] = t; + continue; + } + warn(`Bad value, for key "${i}", in Info: ${a}.`); + } + return shadow(this, "documentInfo", e); + } + get fingerprints() { + function validate(e) { + return ( + "string" == typeof e && + e.length > 0 && + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" !== e + ); + } + function hexString(e) { + const t = []; + for (const i of e) { + const e = i.toString(16); + t.push(e.padStart(2, "0")); + } + return t.join(""); + } + const e = this.xref.trailer.get("ID"); + let t, i; + if (Array.isArray(e) && validate(e[0])) { + t = stringToBytes(e[0]); + e[1] !== e[0] && validate(e[1]) && (i = stringToBytes(e[1])); + } else t = Hs(this.stream.getByteRange(0, 1024), 0, 1024); + return shadow(this, "fingerprints", [ + hexString(t), + i ? hexString(i) : null, + ]); + } + async _getLinearizationPage(e) { + const { catalog: t, linearization: i, xref: a } = this, + s = Ref.get(i.objectNumberFirst, 0); + try { + const e = await a.fetchAsync(s); + if (e instanceof Dict) { + let i = e.getRaw("Type"); + i instanceof Ref && (i = await a.fetchAsync(i)); + if ( + isName(i, "Page") || + (!e.has("Type") && !e.has("Kids") && e.has("Contents")) + ) { + t.pageKidsCountCache.has(s) || t.pageKidsCountCache.put(s, 1); + t.pageIndexCache.has(s) || t.pageIndexCache.put(s, 0); + return [e, s]; + } + } + throw new FormatError( + "The Linearization dictionary doesn't point to a valid Page dictionary.", + ); + } catch (i) { + warn(`_getLinearizationPage: "${i.message}".`); + return t.getPageDict(e); + } + } + getPage(e) { + const t = this._pagePromises.get(e); + if (t) return t; + const { catalog: i, linearization: a, xfaFactory: s } = this; + let r; + r = s + ? Promise.resolve([Dict.empty, null]) + : a?.pageFirst === e + ? this._getLinearizationPage(e) + : i.getPageDict(e); + r = r.then( + ([t, a]) => + new Page({ + pdfManager: this.pdfManager, + xref: this.xref, + pageIndex: e, + pageDict: t, + ref: a, + globalIdFactory: this._globalIdFactory, + fontCache: i.fontCache, + builtInCMapCache: i.builtInCMapCache, + standardFontDataCache: i.standardFontDataCache, + globalImageCache: i.globalImageCache, + systemFontCache: i.systemFontCache, + nonBlendModesSet: i.nonBlendModesSet, + xfaFactory: s, + }), + ); + this._pagePromises.set(e, r); + return r; + } + async checkFirstPage(e = !1) { + if (!e) + try { + await this.getPage(0); + } catch (e) { + if (e instanceof XRefEntryException) { + this._pagePromises.delete(0); + await this.cleanup(); + throw new XRefParseException(); + } + } + } + async checkLastPage(e = !1) { + const { catalog: t, pdfManager: i } = this; + t.setActualNumPages(); + let a; + try { + await Promise.all([ + i.ensureDoc("xfaFactory"), + i.ensureDoc("linearization"), + i.ensureCatalog("numPages"), + ]); + if (this.xfaFactory) return; + a = this.linearization ? this.linearization.numPages : t.numPages; + if (!Number.isInteger(a)) + throw new FormatError("Page count is not an integer."); + if (a <= 1) return; + await this.getPage(a - 1); + } catch (s) { + this._pagePromises.delete(a - 1); + await this.cleanup(); + if (s instanceof XRefEntryException && !e) throw new XRefParseException(); + warn(`checkLastPage - invalid /Pages tree /Count: ${a}.`); + let r; + try { + r = await t.getAllPageDicts(e); + } catch (i) { + if (i instanceof XRefEntryException && !e) + throw new XRefParseException(); + t.setActualNumPages(1); + return; + } + for (const [e, [a, s]] of r) { + let r; + if (a instanceof Error) { + r = Promise.reject(a); + r.catch(() => {}); + } else + r = Promise.resolve( + new Page({ + pdfManager: i, + xref: this.xref, + pageIndex: e, + pageDict: a, + ref: s, + globalIdFactory: this._globalIdFactory, + fontCache: t.fontCache, + builtInCMapCache: t.builtInCMapCache, + standardFontDataCache: t.standardFontDataCache, + globalImageCache: t.globalImageCache, + systemFontCache: t.systemFontCache, + nonBlendModesSet: t.nonBlendModesSet, + xfaFactory: null, + }), + ); + this._pagePromises.set(e, r); + } + t.setActualNumPages(r.size); + } + } + fontFallback(e, t) { + return this.catalog.fontFallback(e, t); + } + async cleanup(e = !1) { + return this.catalog ? this.catalog.cleanup(e) : clearGlobalCaches(); + } + async #q(e, t, i, a, s) { + const { xref: r } = this; + if (!(t instanceof Ref) || s.has(t)) return; + s.put(t); + const n = await r.fetchAsync(t); + if (!(n instanceof Dict)) return; + if (n.has("T")) { + const t = stringToPDFString(await n.getAsync("T")); + e = "" === e ? t : `${e}.${t}`; + } else { + let t = n; + for (;;) { + t = t.getRaw("Parent"); + if (t instanceof Ref) { + if (s.has(t)) break; + t = await r.fetchAsync(t); + } + if (!(t instanceof Dict)) break; + if (t.has("T")) { + const i = stringToPDFString(await t.getAsync("T")); + e = "" === e ? i : `${e}.${i}`; + break; + } + } + } + i.has(e) || i.set(e, []); + i.get(e).push( + AnnotationFactory.create(r, t, a, null, !0, null) + .then((e) => e?.getFieldObject()) + .catch(function (e) { + warn(`#collectFieldObjects: "${e}".`); + return null; + }), + ); + if (!n.has("Kids")) return; + const g = await n.getAsync("Kids"); + if (Array.isArray(g)) for (const t of g) await this.#q(e, t, i, a, s); + } + get fieldObjects() { + if (!this.formInfo.hasFields) + return shadow(this, "fieldObjects", Promise.resolve(null)); + return shadow( + this, + "fieldObjects", + Promise.all([ + this.pdfManager.ensureDoc("annotationGlobals"), + this.pdfManager.ensureCatalog("acroForm"), + ]).then(async ([e, t]) => { + if (!e) return null; + const i = new RefSet(), + a = Object.create(null), + s = new Map(); + for (const a of await t.getAsync("Fields")) + await this.#q("", a, s, e, i); + const r = []; + for (const [e, t] of s) + r.push( + Promise.all(t).then((t) => { + (t = t.filter((e) => !!e)).length > 0 && (a[e] = t); + }), + ); + await Promise.all(r); + return a; + }), + ); + } + get hasJSActions() { + return shadow( + this, + "hasJSActions", + this.pdfManager.ensureDoc("_parseHasJSActions"), + ); + } + async _parseHasJSActions() { + const [e, t] = await Promise.all([ + this.pdfManager.ensureCatalog("jsActions"), + this.pdfManager.ensureDoc("fieldObjects"), + ]); + return ( + !!e || + (!!t && Object.values(t).some((e) => e.some((e) => null !== e.actions))) + ); + } + get calculationOrderIds() { + const e = this.catalog.acroForm; + if (!e?.has("CO")) return shadow(this, "calculationOrderIds", null); + const t = e.get("CO"); + if (!Array.isArray(t) || 0 === t.length) + return shadow(this, "calculationOrderIds", null); + const i = []; + for (const e of t) e instanceof Ref && i.push(e.toString()); + return 0 === i.length + ? shadow(this, "calculationOrderIds", null) + : shadow(this, "calculationOrderIds", i); + } + get annotationGlobals() { + return shadow( + this, + "annotationGlobals", + AnnotationFactory.createGlobals(this.pdfManager), + ); + } +} +class BasePdfManager { + constructor(e) { + this.constructor === BasePdfManager && + unreachable("Cannot initialize BasePdfManager."); + this._docBaseUrl = (function parseDocBaseUrl(e) { + if (e) { + const t = createValidAbsoluteUrl(e); + if (t) return t.href; + warn(`Invalid absolute docBaseUrl: "${e}".`); + } + return null; + })(e.docBaseUrl); + this._docId = e.docId; + this._password = e.password; + this.enableXfa = e.enableXfa; + e.evaluatorOptions.isOffscreenCanvasSupported &&= + FeatureTest.isOffscreenCanvasSupported; + this.evaluatorOptions = Object.freeze(e.evaluatorOptions); + } + get docId() { + return this._docId; + } + get password() { + return this._password; + } + get docBaseUrl() { + return this._docBaseUrl; + } + get catalog() { + return this.pdfDocument.catalog; + } + ensureDoc(e, t) { + return this.ensure(this.pdfDocument, e, t); + } + ensureXRef(e, t) { + return this.ensure(this.pdfDocument.xref, e, t); + } + ensureCatalog(e, t) { + return this.ensure(this.pdfDocument.catalog, e, t); + } + getPage(e) { + return this.pdfDocument.getPage(e); + } + fontFallback(e, t) { + return this.pdfDocument.fontFallback(e, t); + } + loadXfaFonts(e, t) { + return this.pdfDocument.loadXfaFonts(e, t); + } + loadXfaImages() { + return this.pdfDocument.loadXfaImages(); + } + serializeXfaData(e) { + return this.pdfDocument.serializeXfaData(e); + } + cleanup(e = !1) { + return this.pdfDocument.cleanup(e); + } + async ensure(e, t, i) { + unreachable("Abstract method `ensure` called"); + } + requestRange(e, t) { + unreachable("Abstract method `requestRange` called"); + } + requestLoadedStream(e = !1) { + unreachable("Abstract method `requestLoadedStream` called"); + } + sendProgressiveData(e) { + unreachable("Abstract method `sendProgressiveData` called"); + } + updatePassword(e) { + this._password = e; + } + terminate(e) { + unreachable("Abstract method `terminate` called"); + } +} +class LocalPdfManager extends BasePdfManager { + constructor(e) { + super(e); + const t = new Stream(e.source); + this.pdfDocument = new PDFDocument(this, t); + this._loadedStreamPromise = Promise.resolve(t); + } + async ensure(e, t, i) { + const a = e[t]; + return "function" == typeof a ? a.apply(e, i) : a; + } + requestRange(e, t) { + return Promise.resolve(); + } + requestLoadedStream(e = !1) { + return this._loadedStreamPromise; + } + terminate(e) {} +} +class NetworkPdfManager extends BasePdfManager { + constructor(e) { + super(e); + this.streamManager = new ChunkedStreamManager(e.source, { + msgHandler: e.handler, + length: e.length, + disableAutoFetch: e.disableAutoFetch, + rangeChunkSize: e.rangeChunkSize, + }); + this.pdfDocument = new PDFDocument(this, this.streamManager.getStream()); + } + async ensure(e, t, i) { + try { + const a = e[t]; + return "function" == typeof a ? a.apply(e, i) : a; + } catch (a) { + if (!(a instanceof MissingDataException)) throw a; + await this.requestRange(a.begin, a.end); + return this.ensure(e, t, i); + } + } + requestRange(e, t) { + return this.streamManager.requestRange(e, t); + } + requestLoadedStream(e = !1) { + return this.streamManager.requestAllChunks(e); + } + sendProgressiveData(e) { + this.streamManager.onReceiveData({ chunk: e }); + } + terminate(e) { + this.streamManager.abort(e); + } +} +const og = 1, + Ig = 2, + cg = 1, + Cg = 2, + hg = 3, + Bg = 4, + lg = 5, + Qg = 6, + Eg = 7, + ug = 8; +function wrapReason(e) { + e instanceof Error || + ("object" == typeof e && null !== e) || + unreachable( + 'wrapReason: Expected "reason" to be a (possibly cloned) Error.', + ); + switch (e.name) { + case "AbortException": + return new AbortException(e.message); + case "MissingPDFException": + return new MissingPDFException(e.message); + case "PasswordException": + return new PasswordException(e.message, e.code); + case "UnexpectedResponseException": + return new UnexpectedResponseException(e.message, e.status); + case "UnknownErrorException": + return new UnknownErrorException(e.message, e.details); + default: + return new UnknownErrorException(e.message, e.toString()); + } +} +class MessageHandler { + constructor(e, t, i) { + this.sourceName = e; + this.targetName = t; + this.comObj = i; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + this._onComObjOnMessage = (e) => { + const t = e.data; + if (t.targetName !== this.sourceName) return; + if (t.stream) { + this.#O(t); + return; + } + if (t.callback) { + const e = t.callbackId, + i = this.callbackCapabilities[e]; + if (!i) throw new Error(`Cannot resolve callback ${e}`); + delete this.callbackCapabilities[e]; + if (t.callback === og) i.resolve(t.data); + else { + if (t.callback !== Ig) throw new Error("Unexpected callback case"); + i.reject(wrapReason(t.reason)); + } + return; + } + const a = this.actionHandler[t.action]; + if (!a) throw new Error(`Unknown action from worker: ${t.action}`); + if (t.callbackId) { + const e = this.sourceName, + s = t.sourceName; + new Promise(function (e) { + e(a(t.data)); + }).then( + function (a) { + i.postMessage({ + sourceName: e, + targetName: s, + callback: og, + callbackId: t.callbackId, + data: a, + }); + }, + function (a) { + i.postMessage({ + sourceName: e, + targetName: s, + callback: Ig, + callbackId: t.callbackId, + reason: wrapReason(a), + }); + }, + ); + } else t.streamId ? this.#P(t) : a(t.data); + }; + i.addEventListener("message", this._onComObjOnMessage); + } + on(e, t) { + const i = this.actionHandler; + if (i[e]) throw new Error(`There is already an actionName called "${e}"`); + i[e] = t; + } + send(e, t, i) { + this.comObj.postMessage( + { + sourceName: this.sourceName, + targetName: this.targetName, + action: e, + data: t, + }, + i, + ); + } + sendWithPromise(e, t, i) { + const a = this.callbackId++, + s = Promise.withResolvers(); + this.callbackCapabilities[a] = s; + try { + this.comObj.postMessage( + { + sourceName: this.sourceName, + targetName: this.targetName, + action: e, + callbackId: a, + data: t, + }, + i, + ); + } catch (e) { + s.reject(e); + } + return s.promise; + } + sendWithStream(e, t, i, a) { + const s = this.streamId++, + r = this.sourceName, + n = this.targetName, + g = this.comObj; + return new ReadableStream( + { + start: (i) => { + const o = Promise.withResolvers(); + this.streamControllers[s] = { + controller: i, + startCall: o, + pullCall: null, + cancelCall: null, + isClosed: !1, + }; + g.postMessage( + { + sourceName: r, + targetName: n, + action: e, + streamId: s, + data: t, + desiredSize: i.desiredSize, + }, + a, + ); + return o.promise; + }, + pull: (e) => { + const t = Promise.withResolvers(); + this.streamControllers[s].pullCall = t; + g.postMessage({ + sourceName: r, + targetName: n, + stream: Qg, + streamId: s, + desiredSize: e.desiredSize, + }); + return t.promise; + }, + cancel: (e) => { + assert(e instanceof Error, "cancel must have a valid reason"); + const t = Promise.withResolvers(); + this.streamControllers[s].cancelCall = t; + this.streamControllers[s].isClosed = !0; + g.postMessage({ + sourceName: r, + targetName: n, + stream: cg, + streamId: s, + reason: wrapReason(e), + }); + return t.promise; + }, + }, + i, + ); + } + #P(e) { + const t = e.streamId, + i = this.sourceName, + a = e.sourceName, + s = this.comObj, + r = this, + n = this.actionHandler[e.action], + g = { + enqueue(e, r = 1, n) { + if (this.isCancelled) return; + const g = this.desiredSize; + this.desiredSize -= r; + if (g > 0 && this.desiredSize <= 0) { + this.sinkCapability = Promise.withResolvers(); + this.ready = this.sinkCapability.promise; + } + s.postMessage( + { sourceName: i, targetName: a, stream: Bg, streamId: t, chunk: e }, + n, + ); + }, + close() { + if (!this.isCancelled) { + this.isCancelled = !0; + s.postMessage({ + sourceName: i, + targetName: a, + stream: hg, + streamId: t, + }); + delete r.streamSinks[t]; + } + }, + error(e) { + assert(e instanceof Error, "error must have a valid reason"); + if (!this.isCancelled) { + this.isCancelled = !0; + s.postMessage({ + sourceName: i, + targetName: a, + stream: lg, + streamId: t, + reason: wrapReason(e), + }); + } + }, + sinkCapability: Promise.withResolvers(), + onPull: null, + onCancel: null, + isCancelled: !1, + desiredSize: e.desiredSize, + ready: null, + }; + g.sinkCapability.resolve(); + g.ready = g.sinkCapability.promise; + this.streamSinks[t] = g; + new Promise(function (t) { + t(n(e.data, g)); + }).then( + function () { + s.postMessage({ + sourceName: i, + targetName: a, + stream: ug, + streamId: t, + success: !0, + }); + }, + function (e) { + s.postMessage({ + sourceName: i, + targetName: a, + stream: ug, + streamId: t, + reason: wrapReason(e), + }); + }, + ); + } + #O(e) { + const t = e.streamId, + i = this.sourceName, + a = e.sourceName, + s = this.comObj, + r = this.streamControllers[t], + n = this.streamSinks[t]; + switch (e.stream) { + case ug: + e.success + ? r.startCall.resolve() + : r.startCall.reject(wrapReason(e.reason)); + break; + case Eg: + e.success + ? r.pullCall.resolve() + : r.pullCall.reject(wrapReason(e.reason)); + break; + case Qg: + if (!n) { + s.postMessage({ + sourceName: i, + targetName: a, + stream: Eg, + streamId: t, + success: !0, + }); + break; + } + n.desiredSize <= 0 && e.desiredSize > 0 && n.sinkCapability.resolve(); + n.desiredSize = e.desiredSize; + new Promise(function (e) { + e(n.onPull?.()); + }).then( + function () { + s.postMessage({ + sourceName: i, + targetName: a, + stream: Eg, + streamId: t, + success: !0, + }); + }, + function (e) { + s.postMessage({ + sourceName: i, + targetName: a, + stream: Eg, + streamId: t, + reason: wrapReason(e), + }); + }, + ); + break; + case Bg: + assert(r, "enqueue should have stream controller"); + if (r.isClosed) break; + r.controller.enqueue(e.chunk); + break; + case hg: + assert(r, "close should have stream controller"); + if (r.isClosed) break; + r.isClosed = !0; + r.controller.close(); + this.#W(r, t); + break; + case lg: + assert(r, "error should have stream controller"); + r.controller.error(wrapReason(e.reason)); + this.#W(r, t); + break; + case Cg: + e.success + ? r.cancelCall.resolve() + : r.cancelCall.reject(wrapReason(e.reason)); + this.#W(r, t); + break; + case cg: + if (!n) break; + new Promise(function (t) { + t(n.onCancel?.(wrapReason(e.reason))); + }).then( + function () { + s.postMessage({ + sourceName: i, + targetName: a, + stream: Cg, + streamId: t, + success: !0, + }); + }, + function (e) { + s.postMessage({ + sourceName: i, + targetName: a, + stream: Cg, + streamId: t, + reason: wrapReason(e), + }); + }, + ); + n.sinkCapability.reject(wrapReason(e.reason)); + n.isCancelled = !0; + delete this.streamSinks[t]; + break; + default: + throw new Error("Unexpected stream case"); + } + } + async #W(e, t) { + await Promise.allSettled([ + e.startCall?.promise, + e.pullCall?.promise, + e.cancelCall?.promise, + ]); + delete this.streamControllers[t]; + } + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } +} +class PDFWorkerStream { + constructor(e) { + this._msgHandler = e; + this._contentLength = null; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + getFullReader() { + assert( + !this._fullRequestReader, + "PDFWorkerStream.getFullReader can only be called once.", + ); + this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); + return this._fullRequestReader; + } + getRangeReader(e, t) { + const i = new PDFWorkerStreamRangeReader(e, t, this._msgHandler); + this._rangeRequestReaders.push(i); + return i; + } + cancelAllRequests(e) { + this._fullRequestReader?.cancel(e); + for (const t of this._rangeRequestReaders.slice(0)) t.cancel(e); + } +} +class PDFWorkerStreamReader { + constructor(e) { + this._msgHandler = e; + this.onProgress = null; + this._contentLength = null; + this._isRangeSupported = !1; + this._isStreamingSupported = !1; + const t = this._msgHandler.sendWithStream("GetReader"); + this._reader = t.getReader(); + this._headersReady = this._msgHandler + .sendWithPromise("ReaderHeadersReady") + .then((e) => { + this._isStreamingSupported = e.isStreamingSupported; + this._isRangeSupported = e.isRangeSupported; + this._contentLength = e.contentLength; + }); + } + get headersReady() { + return this._headersReady; + } + get contentLength() { + return this._contentLength; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get isRangeSupported() { + return this._isRangeSupported; + } + async read() { + const { value: e, done: t } = await this._reader.read(); + return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 }; + } + cancel(e) { + this._reader.cancel(e); + } +} +class PDFWorkerStreamRangeReader { + constructor(e, t, i) { + this._msgHandler = i; + this.onProgress = null; + const a = this._msgHandler.sendWithStream("GetRangeReader", { + begin: e, + end: t, + }); + this._reader = a.getReader(); + } + get isStreamingSupported() { + return !1; + } + async read() { + const { value: e, done: t } = await this._reader.read(); + return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 }; + } + cancel(e) { + this._reader.cancel(e); + } +} +class WorkerTask { + constructor(e) { + this.name = e; + this.terminated = !1; + this._capability = Promise.withResolvers(); + } + get finished() { + return this._capability.promise; + } + finish() { + this._capability.resolve(); + } + terminate() { + this.terminated = !0; + } + ensureNotTerminated() { + if (this.terminated) throw new Error("Worker task was terminated"); + } +} +class WorkerMessageHandler { + static setup(e, t) { + let i = !1; + e.on("test", function (t) { + if (!i) { + i = !0; + e.send("test", t instanceof Uint8Array); + } + }); + e.on("configure", function (e) { + !(function setVerbosityLevel(e) { + Number.isInteger(e) && (st = e); + })(e.verbosity); + }); + e.on("GetDocRequest", function (e) { + return WorkerMessageHandler.createDocumentHandler(e, t); + }); + } + static createDocumentHandler(e, t) { + let i, + a = !1, + s = null; + const r = new Set(), + n = getVerbosityLevel(), + { docId: g, apiVersion: o } = e, + c = "4.4.168"; + if (o !== c) + throw new Error( + `The API version "${o}" does not match the Worker version "${c}".`, + ); + const C = []; + for (const e in []) C.push(e); + if (C.length) + throw new Error( + "The `Array.prototype` contains unexpected enumerable properties: " + + C.join(", ") + + "; thus breaking e.g. `for...in` iteration of `Array`s.", + ); + const h = g + "_worker"; + let l = new MessageHandler(h, g, t); + function ensureNotTerminated() { + if (a) throw new Error("Worker was terminated"); + } + function startWorkerTask(e) { + r.add(e); + } + function finishWorkerTask(e) { + e.finish(); + r.delete(e); + } + async function loadDocument(e) { + await i.ensureDoc("checkHeader"); + await i.ensureDoc("parseStartXRef"); + await i.ensureDoc("parse", [e]); + await i.ensureDoc("checkFirstPage", [e]); + await i.ensureDoc("checkLastPage", [e]); + const t = await i.ensureDoc("isPureXfa"); + if (t) { + const e = new WorkerTask("loadXfaFonts"); + startWorkerTask(e); + await Promise.all([ + i + .loadXfaFonts(l, e) + .catch((e) => {}) + .then(() => finishWorkerTask(e)), + i.loadXfaImages(), + ]); + } + const [a, s] = await Promise.all([ + i.ensureDoc("numPages"), + i.ensureDoc("fingerprints"), + ]); + return { + numPages: a, + fingerprints: s, + htmlForXfa: t ? await i.ensureDoc("htmlForXfa") : null, + }; + } + function getPdfManager({ + data: e, + password: t, + disableAutoFetch: i, + rangeChunkSize: a, + length: r, + docBaseUrl: n, + enableXfa: o, + evaluatorOptions: c, + }) { + const C = { + source: null, + disableAutoFetch: i, + docBaseUrl: n, + docId: g, + enableXfa: o, + evaluatorOptions: c, + handler: l, + length: r, + password: t, + rangeChunkSize: a, + }, + h = Promise.withResolvers(); + let Q; + if (e) { + try { + C.source = e; + Q = new LocalPdfManager(C); + h.resolve(Q); + } catch (e) { + h.reject(e); + } + return h.promise; + } + let E, + u = []; + try { + E = new PDFWorkerStream(l); + } catch (e) { + h.reject(e); + return h.promise; + } + const d = E.getFullReader(); + d.headersReady + .then(function () { + if (d.isRangeSupported) { + C.source = E; + C.length = d.contentLength; + C.disableAutoFetch ||= d.isStreamingSupported; + Q = new NetworkPdfManager(C); + for (const e of u) Q.sendProgressiveData(e); + u = []; + h.resolve(Q); + s = null; + } + }) + .catch(function (e) { + h.reject(e); + s = null; + }); + let f = 0; + new Promise(function (e, t) { + const readChunk = function ({ value: e, done: i }) { + try { + ensureNotTerminated(); + if (i) { + Q || + (function () { + const e = arrayBuffersToBytes(u); + r && + e.length !== r && + warn("reported HTTP length is different from actual"); + try { + C.source = e; + Q = new LocalPdfManager(C); + h.resolve(Q); + } catch (e) { + h.reject(e); + } + u = []; + })(); + s = null; + return; + } + f += e.byteLength; + d.isStreamingSupported || + l.send("DocProgress", { + loaded: f, + total: Math.max(f, d.contentLength || 0), + }); + Q ? Q.sendProgressiveData(e) : u.push(e); + d.read().then(readChunk, t); + } catch (e) { + t(e); + } + }; + d.read().then(readChunk, t); + }).catch(function (e) { + h.reject(e); + s = null; + }); + s = function (e) { + E.cancelAllRequests(e); + }; + return h.promise; + } + l.on("GetPage", function (e) { + return i.getPage(e.pageIndex).then(function (e) { + return Promise.all([ + i.ensure(e, "rotate"), + i.ensure(e, "ref"), + i.ensure(e, "userUnit"), + i.ensure(e, "view"), + ]).then(function ([e, t, i, a]) { + return { + rotate: e, + ref: t, + refStr: t?.toString() ?? null, + userUnit: i, + view: a, + }; + }); + }); + }); + l.on("GetPageIndex", function (e) { + const t = Ref.get(e.num, e.gen); + return i.ensureCatalog("getPageIndex", [t]); + }); + l.on("GetDestinations", function (e) { + return i.ensureCatalog("destinations"); + }); + l.on("GetDestination", function (e) { + return i.ensureCatalog("getDestination", [e.id]); + }); + l.on("GetPageLabels", function (e) { + return i.ensureCatalog("pageLabels"); + }); + l.on("GetPageLayout", function (e) { + return i.ensureCatalog("pageLayout"); + }); + l.on("GetPageMode", function (e) { + return i.ensureCatalog("pageMode"); + }); + l.on("GetViewerPreferences", function (e) { + return i.ensureCatalog("viewerPreferences"); + }); + l.on("GetOpenAction", function (e) { + return i.ensureCatalog("openAction"); + }); + l.on("GetAttachments", function (e) { + return i.ensureCatalog("attachments"); + }); + l.on("GetDocJSActions", function (e) { + return i.ensureCatalog("jsActions"); + }); + l.on("GetPageJSActions", function ({ pageIndex: e }) { + return i.getPage(e).then(function (e) { + return i.ensure(e, "jsActions"); + }); + }); + l.on("GetOutline", function (e) { + return i.ensureCatalog("documentOutline"); + }); + l.on("GetOptionalContentConfig", function (e) { + return i.ensureCatalog("optionalContentConfig"); + }); + l.on("GetPermissions", function (e) { + return i.ensureCatalog("permissions"); + }); + l.on("GetMetadata", function (e) { + return Promise.all([ + i.ensureDoc("documentInfo"), + i.ensureCatalog("metadata"), + ]); + }); + l.on("GetMarkInfo", function (e) { + return i.ensureCatalog("markInfo"); + }); + l.on("GetData", function (e) { + return i.requestLoadedStream().then(function (e) { + return e.bytes; + }); + }); + l.on("GetAnnotations", function ({ pageIndex: e, intent: t }) { + return i.getPage(e).then(function (i) { + const a = new WorkerTask(`GetAnnotations: page ${e}`); + startWorkerTask(a); + return i.getAnnotationsData(l, a, t).then( + (e) => { + finishWorkerTask(a); + return e; + }, + (e) => { + finishWorkerTask(a); + throw e; + }, + ); + }); + }); + l.on("GetFieldObjects", function (e) { + return i.ensureDoc("fieldObjects"); + }); + l.on("HasJSActions", function (e) { + return i.ensureDoc("hasJSActions"); + }); + l.on("GetCalculationOrderIds", function (e) { + return i.ensureDoc("calculationOrderIds"); + }); + l.on( + "SaveDocument", + async function ({ + isPureXfa: e, + numPages: t, + annotationStorage: a, + filename: s, + }) { + const r = [ + i.requestLoadedStream(), + i.ensureCatalog("acroForm"), + i.ensureCatalog("acroFormRef"), + i.ensureDoc("startXRef"), + i.ensureDoc("xref"), + i.ensureDoc("linearization"), + i.ensureCatalog("structTreeRoot"), + ], + n = [], + g = e ? null : getNewAnnotationsMap(a), + [o, c, C, h, Q, E, u] = await Promise.all(r), + d = Q.trailer.getRaw("Root") || null; + let f; + if (g) { + u + ? (await u.canUpdateStructTree({ + pdfManager: i, + xref: Q, + newAnnotationsByPage: g, + })) && (f = u) + : (await StructTreeRoot.canCreateStructureTree({ + catalogRef: d, + pdfManager: i, + newAnnotationsByPage: g, + })) && (f = null); + const e = AnnotationFactory.generateImages( + a.values(), + Q, + i.evaluatorOptions.isOffscreenCanvasSupported, + ), + t = void 0 === f ? n : []; + for (const [a, s] of g) + t.push( + i.getPage(a).then((t) => { + const i = new WorkerTask(`Save (editor): page ${a}`); + return t.saveNewAnnotations(l, i, s, e).finally(function () { + finishWorkerTask(i); + }); + }), + ); + null === f + ? n.push( + Promise.all(t).then(async (e) => { + await StructTreeRoot.createStructureTree({ + newAnnotationsByPage: g, + xref: Q, + catalogRef: d, + pdfManager: i, + newRefs: e, + }); + return e; + }), + ) + : f && + n.push( + Promise.all(t).then(async (e) => { + await f.updateStructureTree({ + newAnnotationsByPage: g, + pdfManager: i, + newRefs: e, + }); + return e; + }), + ); + } + if (e) n.push(i.serializeXfaData(a)); + else + for (let e = 0; e < t; e++) + n.push( + i.getPage(e).then(function (t) { + const i = new WorkerTask(`Save: page ${e}`); + return t.save(l, i, a).finally(function () { + finishWorkerTask(i); + }); + }), + ); + const p = await Promise.all(n); + let m = [], + y = null; + if (e) { + y = p[0]; + if (!y) return o.bytes; + } else { + m = p.flat(2); + if (0 === m.length) return o.bytes; + } + const w = C && c instanceof Dict && m.some((e) => e.needAppearances), + D = (c instanceof Dict && c.get("XFA")) || null; + let b = null, + F = !1; + if (Array.isArray(D)) { + for (let e = 0, t = D.length; e < t; e += 2) + if ("datasets" === D[e]) { + b = D[e + 1]; + F = !0; + } + null === b && (b = Q.getNewTemporaryRef()); + } else D && warn("Unsupported XFA type."); + let S = Object.create(null); + if (Q.trailer) { + const e = Object.create(null), + t = Q.trailer.get("Info") || null; + t instanceof Dict && + t.forEach((t, i) => { + "string" == typeof i && (e[t] = stringToPDFString(i)); + }); + S = { + rootRef: d, + encryptRef: Q.trailer.getRaw("Encrypt") || null, + newRef: Q.getNewTemporaryRef(), + infoRef: Q.trailer.getRaw("Info") || null, + info: e, + fileIds: Q.trailer.get("ID") || null, + startXRef: E ? h : Q.lastXRefStreamPos ?? h, + filename: s, + }; + } + return incrementalUpdate({ + originalData: o.bytes, + xrefInfo: S, + newRefs: m, + xref: Q, + hasXfa: !!D, + xfaDatasetsRef: b, + hasXfaDatasetsEntry: F, + needAppearances: w, + acroFormRef: C, + acroForm: c, + xfaData: y, + useXrefStream: isDict(Q.topDict, "XRef"), + }).finally(() => { + Q.resetNewTemporaryRef(); + }); + }, + ); + l.on("GetOperatorList", function (e, t) { + const a = e.pageIndex; + i.getPage(a).then(function (i) { + const s = new WorkerTask(`GetOperatorList: page ${a}`); + startWorkerTask(s); + const r = n >= pA.INFOS ? Date.now() : 0; + i.getOperatorList({ + handler: l, + sink: t, + task: s, + intent: e.intent, + cacheKey: e.cacheKey, + annotationStorage: e.annotationStorage, + }).then( + function (e) { + finishWorkerTask(s); + r && + info( + `page=${a + 1} - getOperatorList: time=${Date.now() - r}ms, len=${e.length}`, + ); + t.close(); + }, + function (e) { + finishWorkerTask(s); + s.terminated || t.error(e); + }, + ); + }); + }); + l.on("GetTextContent", function (e, t) { + const { + pageIndex: a, + includeMarkedContent: s, + disableNormalization: r, + } = e; + i.getPage(a).then(function (e) { + const i = new WorkerTask("GetTextContent: page " + a); + startWorkerTask(i); + const g = n >= pA.INFOS ? Date.now() : 0; + e.extractTextContent({ + handler: l, + task: i, + sink: t, + includeMarkedContent: s, + disableNormalization: r, + }).then( + function () { + finishWorkerTask(i); + g && + info( + `page=${a + 1} - getTextContent: time=` + + (Date.now() - g) + + "ms", + ); + t.close(); + }, + function (e) { + finishWorkerTask(i); + i.terminated || t.error(e); + }, + ); + }); + }); + l.on("GetStructTree", function (e) { + return i.getPage(e.pageIndex).then(function (e) { + return i.ensure(e, "getStructTree"); + }); + }); + l.on("FontFallback", function (e) { + return i.fontFallback(e.id, l); + }); + l.on("Cleanup", function (e) { + return i.cleanup(!0); + }); + l.on("Terminate", function (e) { + a = !0; + const t = []; + if (i) { + i.terminate(new AbortException("Worker was terminated.")); + const e = i.cleanup(); + t.push(e); + i = null; + } else clearGlobalCaches(); + s && s(new AbortException("Worker was terminated.")); + for (const e of r) { + t.push(e.finished); + e.terminate(); + } + return Promise.all(t).then(function () { + l.destroy(); + l = null; + }); + }); + l.on("Ready", function (t) { + !(function setupDoc(e) { + function onSuccess(e) { + ensureNotTerminated(); + l.send("GetDoc", { pdfInfo: e }); + } + function onFailure(e) { + ensureNotTerminated(); + if (e instanceof PasswordException) { + const t = new WorkerTask(`PasswordException: response ${e.code}`); + startWorkerTask(t); + l.sendWithPromise("PasswordRequest", e) + .then(function ({ password: e }) { + finishWorkerTask(t); + i.updatePassword(e); + pdfManagerReady(); + }) + .catch(function () { + finishWorkerTask(t); + l.send("DocException", e); + }); + } else + e instanceof InvalidPDFException || + e instanceof MissingPDFException || + e instanceof UnexpectedResponseException || + e instanceof UnknownErrorException + ? l.send("DocException", e) + : l.send( + "DocException", + new UnknownErrorException(e.message, e.toString()), + ); + } + function pdfManagerReady() { + ensureNotTerminated(); + loadDocument(!1).then(onSuccess, function (e) { + ensureNotTerminated(); + e instanceof XRefParseException + ? i.requestLoadedStream().then(function () { + ensureNotTerminated(); + loadDocument(!0).then(onSuccess, onFailure); + }) + : onFailure(e); + }); + } + ensureNotTerminated(); + getPdfManager(e) + .then(function (e) { + if (a) { + e.terminate(new AbortException("Worker was terminated.")); + throw new Error("Worker was terminated"); + } + i = e; + i.requestLoadedStream(!0).then((e) => { + l.send("DataLoaded", { length: e.bytes.byteLength }); + }); + }) + .then(pdfManagerReady, onFailure); + })(e); + e = null; + }); + return h; + } + static initializeFromPort(e) { + const t = new MessageHandler("worker", "main", e); + WorkerMessageHandler.setup(t, e); + t.send("ready", null); + } +} +"undefined" == typeof window && + !t && + "undefined" != typeof self && + (function isMessagePort(e) { + return "function" == typeof e.postMessage && "onmessage" in e; + })(self) && + WorkerMessageHandler.initializeFromPort(self); +var dg = __webpack_exports__.WorkerMessageHandler; +export { dg as WorkerMessageHandler };