{"version":3,"file":"pdf.worker.mjs","mappings":"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OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CACvE,CAAC,EACF,CAAC,CACF;AAED,MAAM,gBAAgB,GAAG,CACvB,IAAI,UAAU,CAAC,CACb,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CACvE,CAAC,EACF,CAAC,CACF;AAED,MAAM,WAAW,SAAS,YAAY,CAAC;EACrC,CAAC,OAAO,GAAG,IAAI;EAEf,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE;IAC5B,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;IAEpB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;MAC5B,MAAM,IAAI,WAAW,CAAC,mCAAmC,GAAG,KAAK,GAAG,EAAE,CAAC;IACzE;IACA,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,EAAE;MACzB,MAAM,IAAI,WAAW,CACnB,+CAA+C,GAAG,KAAK,GAAG,EAC5D,CAAC;IACH;IACA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE;MACjC,MAAM,IAAI,WAAW,CAAC,+BAA+B,GAAG,KAAK,GAAG,EAAE,CAAC;IACrE;IACA,IAAI,GAAG,GAAG,IAAI,EAAE;MACd,MAAM,IAAI,WAAW,CAAC,kCAAkC,GAAG,KAAK,GAAG,EAAE,CAAC;IACxE;IAEA,IAAI,CAAC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAAC,OAAO,GAAG,CAAC;EAClB;EAEA,MAAM,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE;MACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B;IACA,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE;MACzB,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;EACjC;EAEA,MAAM,aAAa,GAAG;IACpB,MAAM;MAAE,YAAY;MAAE;IAAW,CAAC,GAChC,MAAM,IAAI,CAAC,oCAAoC,CAAC,SAAS,CAAC;IAC5D,IAAI,YAAY,EAAE;MAChB,OAAO,YAAY;IACrB;IAOA,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK;IACrB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB,UAAU,EACV,CAAC,EACD,UAAU,CAAC,MAAM,EACjB,IAAI,CAAC,MAAM,CAAC,IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,IAAI;EACb;EAEA,IAAI,OAAO,GAAG;IACZ,OAAO,IAAI,CAAC,CAAC,OAAO;EACtB;EAEA,OAAO,CAAC,IAAI,EAAE;IACZ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;IACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO;IAE1B,IAAI,CAAC;IACL,OAAO,QAAQ,GAAG,IAAI,EAAE;MACtB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAC9B,MAAM,IAAI,WAAW,CAAC,8BAA8B,CAAC;MACvD;MACA,OAAO,IAAI,CAAC,IAAI,QAAQ;MACxB,QAAQ,IAAI,CAAC;IACf;IACA,CAAC,GAAG,OAAO,GAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAE;IAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI;IAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI;IAEhC,OAAO,CAAC;EACV;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO;IAE1B,IAAI,CAAC;IACL,OAAO,QAAQ,GAAG,MAAM,EAAE;MACxB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAG9B;MACF;MACA,OAAO,IAAI,CAAC,IAAI,QAAQ;MACxB,QAAQ,IAAI,CAAC;IACf;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM;IAC7B,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,EAAE;MACrC,MAAM,IAAI,WAAW,CAAC,8BAA8B,CAAC;IACvD;IACA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO;IACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,OAAO;IAClC,OAAO,OAAO;EAChB;EAEA,oBAAoB,CAAC,OAAO,EAAE;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM;IAGxB,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,CAAC;IACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;MACtB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE;QACvB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;MACrB;IACF;IAGA,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM;IACxB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;IAClC,KACE,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAC/B,GAAG,IAAI,MAAM,EACb,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAC7B;MACA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;UAExB,IAAI,KAAK,GAAG,CAAC;UACb,IAAI,CAAC,GAAG,IAAI;UACZ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YACxB,KAAK,GAAI,KAAK,IAAI,CAAC,GAAK,CAAC,GAAG,CAAE;YAC9B,CAAC,KAAK,CAAC;UACT;UAGA,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;YACnC,KAAK,CAAC,CAAC,CAAC,GAAI,GAAG,IAAI,EAAE,GAAI,GAAG;UAC9B;UACA,EAAE,IAAI;QACR;MACF;IACF;IAEA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;EACxB;EAEA,CAAC,iBAAiB,CAAC,GAAG,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC;IACT,IAAI,CAAC,GAAG,GAAG,IAAI;EACjB;EAEA,SAAS,GAAG;IACV,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;IAEvB,IAAI;MACF,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,OAAO,EAAE,EAAE;MACX,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC;MACnC;IACF;IACA,IAAI,GAAG,GAAG,CAAC,EAAE;MACX,IAAI,CAAC,GAAG,GAAG,IAAI;IACjB;IACA,GAAG,KAAK,CAAC;IAET,IAAI,GAAG,KAAK,CAAC,EAAE;MAEb,IAAI,CAAC;MAEL,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAC9B,IAAI,CAAC,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;QAC3D;MACF;MACA,IAAI,QAAQ,GAAG,CAAC;MAChB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAC9B,IAAI,CAAC,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;QAC3D;MACF;MACA,QAAQ,IAAI,CAAC,IAAI,CAAC;MAClB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAC9B,IAAI,CAAC,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;QAC3D;MACF;MACA,IAAI,KAAK,GAAG,CAAC;MACb,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QAC9B,IAAI,CAAC,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;QAC3D;MACF;MACA,KAAK,IAAI,CAAC,IAAI,CAAC;MACf,IAAI,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QAErE,MAAM,IAAI,WAAW,CAAC,+CAA+C,CAAC;MACxE;MAEA,IAAI,CAAC,OAAO,GAAG,CAAC;MAChB,IAAI,CAAC,QAAQ,GAAG,CAAC;MAEjB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;QACpC,GAAG,GAAG,YAAY,GAAG,QAAQ;MAC/B,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;MAC/B,IAAI,CAAC,YAAY,GAAG,GAAG;MAEvB,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;UACzB,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;MACF,CAAC,MAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE;UAC3B,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;MACF;MACA;IACF;IAEA,IAAI,YAAY;IAChB,IAAI,aAAa;IACjB,IAAI,GAAG,KAAK,CAAC,EAAE;MAEb,YAAY,GAAG,eAAe;MAC9B,aAAa,GAAG,gBAAgB;IAClC,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE;MAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;MACzC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;MACxC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;MAG3C,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC;MAEhE,IAAI,CAAC;MACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,EAAE,CAAC,EAAE;QACpC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;MACzD;MACA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC;MAGpE,GAAG,GAAG,CAAC;MACP,CAAC,GAAG,CAAC;MACL,MAAM,KAAK,GAAG,WAAW,GAAG,YAAY;MACxC,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;MACzC,IAAI,UAAU,EAAE,UAAU,EAAE,IAAI;MAChC,OAAO,CAAC,GAAG,KAAK,EAAE;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACzC,IAAI,IAAI,KAAK,EAAE,EAAE;UACf,UAAU,GAAG,CAAC;UACd,UAAU,GAAG,CAAC;UACd,IAAI,GAAG,GAAG;QACZ,CAAC,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;UACtB,UAAU,GAAG,CAAC;UACd,UAAU,GAAG,CAAC;UACd,IAAI,GAAG,GAAG,GAAG,CAAC;QAChB,CAAC,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;UACtB,UAAU,GAAG,CAAC;UACd,UAAU,GAAG,EAAE;UACf,IAAI,GAAG,GAAG,GAAG,CAAC;QAChB,CAAC,MAAM;UACL,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;UAC7B;QACF;QAEA,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;QACxD,OAAO,YAAY,EAAE,GAAG,CAAC,EAAE;UACzB,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;QACzB;MACF;MAEA,YAAY,GAAG,IAAI,CAAC,oBAAoB,CACtC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CACrC,CAAC;MACD,aAAa,GAAG,IAAI,CAAC,oBAAoB,CACvC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CACzC,CAAC;IACH,CAAC,MAAM;MACL,MAAM,IAAI,WAAW,CAAC,oCAAoC,CAAC;IAC7D;IAEA,MAAM,GAAG,IAAI,CAAC,MAAM;IACpB,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;IACtC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY;IAC3B,OAAO,IAAI,EAAE;MACX,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;MACtC,IAAI,KAAK,GAAG,GAAG,EAAE;QACf,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE;UACpB,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;UACnC,KAAK,GAAG,MAAM,CAAC,MAAM;QACvB;QACA,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK;QACrB;MACF;MACA,IAAI,KAAK,KAAK,GAAG,EAAE;QACjB,IAAI,CAAC,YAAY,GAAG,GAAG;QACvB;MACF;MACA,KAAK,IAAI,GAAG;MACZ,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;MAC3B,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE;MACvB,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;MAC7B;MACA,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK;MAC9B,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;MACnC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;MACzB,KAAK,GAAG,KAAK,IAAI,EAAE;MACnB,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;MAC7B;MACA,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,KAAK;MACrC,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE;QACtB,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;QACrC,KAAK,GAAG,MAAM,CAAC,MAAM;MACvB;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;MAClC;IACF;EACF;AACF;;;ACvb8C;AACI;AACX;AACkB;AACd;AAM3C,MAAM,WAAW,SAAS,YAAY,CAAC;EACrC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;IACvC,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,CAAC,MAAM,GAAG,MAAM;IACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IACvB,IAAI,CAAC,WAAW,GAAG,WAAW;IAC9B,IAAI,CAAC,MAAM,GAAG,MAAM;EACtB;EAEA,IAAI,KAAK,GAAG;IAEV,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACtE;EAEA,YAAY,CAAC,SAAS,EAAE,CAGxB;EAEA,IAAI,cAAc,GAAG;IACnB,OAAO,IAAI;EACb;EAEA,IAAI,aAAa,GAAG;IAClB,OAAO,IAAI;EACb;EAIA,OAAO,eAAe,CAAC,KAAK,EAAE;IAC5B,IACE,KAAK,CAAC,MAAM,IAAI,CAAC,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IACjB,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EACjB;MACA,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;MAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrC;IACA,OAAO,KAAK;EACd;EAEA,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE;IAChD,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,KAAK,GAAG,WAAW,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAExD,IAAI,OAAO,GAAG,IAAI;IAClB,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE;MAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;MACrD,IAAI,aAAa,YAAY,UAAU,EAAE;QACvC,OAAO,GAAG,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;MACjE;IACF;IACA,IAAI,CAAC,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CACpD,KAAK,EACL,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EACvB,OACF,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;IACtC,IAAI,CAAC,GAAG,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC,MAAM;EACpB;EAEA,IAAI,6BAA6B,GAAG;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;EAC5B;AACF;;;ACpGA,eAAe,QAAQ,CAAC,SAAS,GAAC,CAAC,CAAC,EAAC;EAAC,IAAI,SAAS;EAAC,IAAI,MAAM,GAAC,SAAS;EAAC,IAAI,kBAAkB,GAAC,IAAI;EAAC,IAAI,qBAAqB,GAAC,KAAK;EAAC,IAAI,UAAU,GAAC,EAAE;EAAC,IAAI,WAAW,GAAC,gBAAgB;EAAC,IAAI,KAAK,GAAC,CAAC,MAAM,EAAC,OAAO,KAAG;IAAC,MAAM,OAAO;EAAA,CAAC;EAAC,IAAI,WAAW,GAAC,MAAM,CAAC,IAAI,CAAC,GAAG;EAAC,IAAI,eAAe,GAAC,EAAE;EAAkI,IAAI,SAAS,EAAC,UAAU;EAAC,IAAG,kBAAkB,IAAE,qBAAqB,EAAC;IAAC,IAAG;MAAC,eAAe,GAAC,IAAI,GAAG,CAAC,GAAG,EAAC,WAAW,CAAC,CAAC,IAAI;IAAA,CAAC,OAAK,CAAC;IAAE,SAAS,GAAC,MAAM,GAAG,IAAE;MAAC,IAAI,QAAQ,GAAC,MAAM,KAAK,CAAC,GAAG,EAAC;QAAC,WAAW,EAAC;MAAa,CAAC,CAAC;MAAC,IAAG,QAAQ,CAAC,EAAE,EAAC;QAAC,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;MAAA;MAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAC,KAAK,GAAC,QAAQ,CAAC,GAAG,CAAC;IAAA,CAAC;EAAC,CAAC,MAAI,CAAC;EAAC,IAAI,GAAG,GAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;EAAC,IAAI,GAAG,GAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;EAAC,IAAI,UAAU;EAAC,IAAI,KAAK,GAAC,KAAK;EAAC,IAAI,UAAU;EAAC,MAAM,YAAY;EAAE,MAAM,cAAc,SAAS,YAAY;EAAE,IAAI,mBAAmB,EAAC,kBAAkB;EAAC,IAAI,kBAAkB,GAAC,KAAK;EAAC,SAAS,iBAAiB,GAAE;IAAC,IAAI,CAAC,GAAC,UAAU,CAAC,MAAM;IAAC,KAAK,GAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IAAC,MAAM,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IAAC,MAAM,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IAAC,OAAO,GAAC,IAAI,WAAW,CAAC,CAAC,CAAC;IAAC,MAAM,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IAAC,OAAO,GAAC,IAAI,WAAW,CAAC,CAAC,CAAC;IAAC,OAAO,GAAC,IAAI,YAAY,CAAC,CAAC,CAAC;IAAC,OAAO,GAAC,IAAI,YAAY,CAAC,CAAC,CAAC;IAAC,MAAM,GAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAAC,OAAO,GAAC,IAAI,cAAc,CAAC,CAAC,CAAC;EAAA;EAAC,SAAS,MAAM,GAAE;IAAC,IAAG,MAAM,CAAC,QAAQ,CAAC,EAAC;MAAC,IAAG,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAE,UAAU,EAAC,MAAM,CAAC,QAAQ,CAAC,GAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;MAAC,OAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAC;QAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MAAA;IAAC;IAAC,oBAAoB,CAAC,SAAS,CAAC;EAAA;EAAC,SAAS,WAAW,GAAE;IAAC,kBAAkB,GAAC,IAAI;IAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;EAAA;EAAC,SAAS,OAAO,GAAE;IAAC,IAAG,MAAM,CAAC,SAAS,CAAC,EAAC;MAAC,IAAG,OAAO,MAAM,CAAC,SAAS,CAAC,IAAE,UAAU,EAAC,MAAM,CAAC,SAAS,CAAC,GAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;MAAC,OAAM,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAC;QAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MAAA;IAAC;IAAC,oBAAoB,CAAC,UAAU,CAAC;EAAA;EAAC,SAAS,KAAK,CAAC,IAAI,EAAC;IAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAAC,IAAI,GAAC,WAAW,IAAI,GAAG;IAAC,GAAG,CAAC,IAAI,CAAC;IAAC,KAAK,GAAC,IAAI;IAAC,IAAI,IAAE,0CAA0C;IAAC,IAAI,CAAC,GAAC,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;IAAC,kBAAkB,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC;EAAA;EAAC,IAAI,cAAc;EAA0pC,SAAS,cAAc,GAAE;IAAC,IAAI,OAAO,GAAC;MAAC,CAAC,EAAC;IAAW,CAAC;IAAC,OAAO,OAAO;EAAA;EAAC,eAAe,UAAU,GAAE;IAAC,SAAS,eAAe,CAAC,QAAQ,EAAC,MAAM,EAAC;MAAC,WAAW,GAAC,QAAQ,CAAC,OAAO;MAAC,iBAAiB,CAAC,WAAW,CAAC;MAAC,iBAAiB,CAAC,CAAC;MAAC,OAAO,WAAW;IAAA;IAAwF,IAAI,IAAI,GAAC,cAAc,CAAC,CAAC;IAA+B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,KAAG;MAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAC,CAAC,IAAI,EAAC,GAAG,KAAG;QAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAC,GAAG,CAAC,CAAC;MAAA,CAAC,CAAC;IAAA,CAAC,CAAC;EAAkK;EAAC,MAAM,UAAU;IAAC,IAAI,GAAC,YAAY;IAAC,WAAW,CAAC,MAAM,EAAC;MAAC,IAAI,CAAC,OAAO,GAAC,gCAAgC,MAAM,GAAG;MAAC,IAAI,CAAC,MAAM,GAAC,MAAM;IAAA;EAAC;EAAC,IAAI,MAAM;EAAC,IAAI,MAAM;EAAC,IAAI,MAAM;EAAC,IAAI,KAAK;EAAC,IAAI,OAAO;EAAC,IAAI,OAAO;EAAC,IAAI,OAAO;EAAC,IAAI,OAAO;EAAC,IAAI,OAAO;EAAC,IAAI,MAAM;EAAC,IAAI,oBAAoB,GAAC,SAAS,IAAE;IAAC,OAAM,SAAS,CAAC,MAAM,GAAC,CAAC,EAAC;MAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAAA;EAAC,CAAC;EAAC,IAAI,UAAU,GAAC,EAAE;EAAC,IAAI,YAAY,GAAC,EAAE,IAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;EAAC,IAAI,SAAS,GAAC,EAAE;EAAC,IAAI,WAAW,GAAC,EAAE,IAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;EAAC,IAAI,aAAa,GAAC,IAAI;EAAC,IAAI,UAAU,GAAC,MAAI,KAAK,CAAC,EAAE,CAAC;EAAC,IAAI,uBAAuB,GAAC,CAAC;EAAC,IAAI,oCAAoC,GAAC,MAAI;IAAC,aAAa,GAAC,KAAK;IAAC,uBAAuB,GAAC,CAAC;EAAA,CAAC;EAAC,IAAI,MAAM,GAAC,CAAC,CAAC;EAAC,IAAI,eAAe,GAAC,CAAC,IAAE;IAAC,IAAG,CAAC,YAAY,UAAU,IAAE,CAAC,IAAE,QAAQ,EAAC;MAAC,OAAO,UAAU;IAAA;IAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;EAAA,CAAC;EAAC,IAAI,gBAAgB,GAAC,MAAI,aAAa,IAAE,uBAAuB,GAAC,CAAC;EAAC,IAAI,UAAU,GAAC,IAAI,IAAE;IAAC,UAAU,GAAC,IAAI;IAAC,IAAG,CAAC,gBAAgB,CAAC,CAAC,EAAC;MAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;MAAC,KAAK,GAAC,IAAI;IAAA;IAAC,KAAK,CAAC,IAAI,EAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;EAAA,CAAC;EAAC,IAAI,MAAM,GAAC,CAAC,MAAM,EAAC,QAAQ,KAAG;IAAC,UAAU,GAAC,MAAM;IAAC,UAAU,CAAC,MAAM,CAAC;EAAA,CAAC;EAAC,IAAI,KAAK,GAAC,MAAM;EAAC,IAAI,SAAS,GAAC,MAAI;IAAC,IAAG,CAAC,gBAAgB,CAAC,CAAC,EAAC;MAAC,IAAG;QAAC,KAAK,CAAC,UAAU,CAAC;MAAA,CAAC,QAAM,CAAC,EAAC;QAAC,eAAe,CAAC,CAAC,CAAC;MAAA;IAAC;EAAC,CAAC;EAAC,IAAI,gBAAgB,GAAC,IAAI,IAAE;IAAC,IAAG,KAAK,EAAC;MAAC;IAAM;IAAC,IAAG;MAAC,OAAO,IAAI,CAAC,CAAC;IAAA,CAAC,QAAM,CAAC,EAAC;MAAC,eAAe,CAAC,CAAC,CAAC;IAAA,CAAC,SAAO;MAAC,SAAS,CAAC,CAAC;IAAA;EAAC,CAAC;EAAC,IAAI,mBAAmB,GAAC,MAAI,WAAW,CAAC,GAAG,CAAC,CAAC;EAAC,IAAI,cAAc,GAAC,CAAC,KAAK,EAAC,UAAU,KAAG;IAAC,IAAG,MAAM,CAAC,KAAK,CAAC,EAAC;MAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;MAAC,OAAO,MAAM,CAAC,KAAK,CAAC;IAAA;IAAC,IAAG,CAAC,UAAU,EAAC,OAAO,CAAC;IAAC,IAAI,EAAE,GAAC,UAAU,CAAC,MAAI;MAAC,OAAO,MAAM,CAAC,KAAK,CAAC;MAAC,gBAAgB,CAAC,MAAI,oBAAoB,CAAC,KAAK,EAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC,EAAC,UAAU,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,GAAC;MAAC,EAAE;MAAC;IAAU,CAAC;IAAC,OAAO,CAAC;EAAA,CAAC;EAAC,SAAS,cAAc,CAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;EAAA;EAAC,SAAS,cAAc,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,GAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,EAAC,CAAC,EAAE,EAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;IAAA;EAAC;EAAC,SAAS,cAAc,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,GAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,EAAC,CAAC,EAAE,EAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;IAAA;EAAC;EAAC,IAAI,UAAU,GAAC,MAAI,UAAU;EAAC,IAAI,WAAW,GAAC,CAAC,IAAI,EAAC,SAAS,KAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAC,SAAS,CAAC,GAAC,SAAS;EAAC,IAAI,UAAU,GAAC,IAAI,IAAE;IAAC,IAAI,WAAW,GAAC,UAAU,CAAC,MAAM,CAAC,UAAU;IAAC,IAAI,KAAK,GAAC,CAAC,IAAI,GAAC,WAAW,GAAC,KAAK,IAAE,KAAK,GAAC,CAAC;IAAC,IAAG;MAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;MAAC,iBAAiB,CAAC,CAAC;MAAC,OAAO,CAAC;IAAA,CAAC,QAAM,CAAC,EAAC,CAAC;EAAC,CAAC;EAAC,IAAI,uBAAuB,GAAC,aAAa,IAAE;IAAC,IAAI,OAAO,GAAC,MAAM,CAAC,MAAM;IAAC,aAAa,MAAI,CAAC;IAAC,IAAI,WAAW,GAAC,UAAU,CAAC,CAAC;IAAC,IAAG,aAAa,GAAC,WAAW,EAAC;MAAC,OAAO,KAAK;IAAA;IAAC,KAAI,IAAI,OAAO,GAAC,CAAC,EAAC,OAAO,IAAE,CAAC,EAAC,OAAO,IAAE,CAAC,EAAC;MAAC,IAAI,iBAAiB,GAAC,OAAO,IAAE,CAAC,GAAC,EAAE,GAAC,OAAO,CAAC;MAAC,iBAAiB,GAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAC,aAAa,GAAC,SAAS,CAAC;MAAC,IAAI,OAAO,GAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAC,iBAAiB,CAAC,EAAC,KAAK,CAAC,CAAC;MAAC,IAAI,WAAW,GAAC,UAAU,CAAC,OAAO,CAAC;MAAC,IAAG,WAAW,EAAC;QAAC,OAAO,IAAI;MAAA;IAAC;IAAC,OAAO,KAAK;EAAA,CAAC;EAAC,IAAI,GAAG,GAAC,CAAC,CAAC;EAAC,IAAI,iBAAiB,GAAC,MAAI,WAAW,IAAE,gBAAgB;EAAC,IAAI,aAAa,GAAC,MAAI;IAAC,IAAG,CAAC,aAAa,CAAC,OAAO,EAAC;MAAC,IAAI,IAAI,GAAC,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,IAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,GAAC,QAAQ;MAAC,IAAI,GAAG,GAAC;QAAC,IAAI,EAAC,UAAU;QAAC,OAAO,EAAC,UAAU;QAAC,IAAI,EAAC,GAAG;QAAC,GAAG,EAAC,GAAG;QAAC,IAAI,EAAC,gBAAgB;QAAC,IAAI,EAAC,IAAI;QAAC,CAAC,EAAC,iBAAiB,CAAC;MAAC,CAAC;MAAC,KAAI,IAAI,CAAC,IAAI,GAAG,EAAC;QAAC,IAAG,GAAG,CAAC,CAAC,CAAC,KAAG,SAAS,EAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,CAAC;MAAA;MAAC,IAAI,OAAO,GAAC,EAAE;MAAC,KAAI,IAAI,CAAC,IAAI,GAAG,EAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;MAAA;MAAC,aAAa,CAAC,OAAO,GAAC,OAAO;IAAA;IAAC,OAAO,aAAa,CAAC,OAAO;EAAA,CAAC;EAAC,IAAI,iBAAiB,GAAC,CAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,eAAe,KAAG;IAAC,IAAG,EAAE,eAAe,GAAC,CAAC,CAAC,EAAC,OAAO,CAAC;IAAC,IAAI,QAAQ,GAAC,MAAM;IAAC,IAAI,MAAM,GAAC,MAAM,GAAC,eAAe,GAAC,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,CAAC,MAAM,EAAC,EAAE,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;MAAC,IAAG,CAAC,IAAE,GAAG,EAAC;QAAC,IAAG,MAAM,IAAE,MAAM,EAAC;QAAM,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC;MAAA,CAAC,MAAK,IAAG,CAAC,IAAE,IAAI,EAAC;QAAC,IAAG,MAAM,GAAC,CAAC,IAAE,MAAM,EAAC;QAAM,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,CAAC;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,EAAE;MAAA,CAAC,MAAK,IAAG,CAAC,IAAE,KAAK,EAAC;QAAC,IAAG,MAAM,GAAC,CAAC,IAAE,MAAM,EAAC;QAAM,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,EAAE;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,CAAC,GAAC,EAAE;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,EAAE;MAAA,CAAC,MAAI;QAAC,IAAG,MAAM,GAAC,CAAC,IAAE,MAAM,EAAC;QAAM,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,EAAE;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,EAAE,GAAC,EAAE;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,CAAC,GAAC,EAAE;QAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,EAAE;QAAC,CAAC,EAAE;MAAA;IAAC;IAAC,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC;IAAC,OAAO,MAAM,GAAC,QAAQ;EAAA,CAAC;EAAC,IAAI,YAAY,GAAC,CAAC,GAAG,EAAC,MAAM,EAAC,eAAe,KAAG,iBAAiB,CAAC,GAAG,EAAC,MAAM,EAAC,MAAM,EAAC,eAAe,CAAC;EAAC,IAAI,YAAY,GAAC,CAAC,SAAS,EAAC,WAAW,KAAG;IAAC,IAAI,OAAO,GAAC,CAAC;IAAC,IAAI,IAAI,GAAC,CAAC;IAAC,KAAI,IAAI,MAAM,IAAI,aAAa,CAAC,CAAC,EAAC;MAAC,IAAI,GAAG,GAAC,WAAW,GAAC,OAAO;MAAC,OAAO,CAAC,SAAS,GAAC,IAAI,IAAE,CAAC,CAAC,GAAC,GAAG;MAAC,OAAO,IAAE,YAAY,CAAC,MAAM,EAAC,GAAG,EAAC,QAAQ,CAAC,GAAC,CAAC;MAAC,IAAI,IAAE,CAAC;IAAA;IAAC,OAAO,CAAC;EAAA,CAAC;EAAC,IAAI,eAAe,GAAC,GAAG,IAAE;IAAC,IAAI,GAAG,GAAC,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,CAAC,MAAM,EAAC,EAAE,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;MAAC,IAAG,CAAC,IAAE,GAAG,EAAC;QAAC,GAAG,EAAE;MAAA,CAAC,MAAK,IAAG,CAAC,IAAE,IAAI,EAAC;QAAC,GAAG,IAAE,CAAC;MAAA,CAAC,MAAK,IAAG,CAAC,IAAE,KAAK,IAAE,CAAC,IAAE,KAAK,EAAC;QAAC,GAAG,IAAE,CAAC;QAAC,EAAE,CAAC;MAAA,CAAC,MAAI;QAAC,GAAG,IAAE,CAAC;MAAA;IAAC;IAAC,OAAO,GAAG;EAAA,CAAC;EAAC,IAAI,kBAAkB,GAAC,CAAC,cAAc,EAAC,iBAAiB,KAAG;IAAC,IAAI,OAAO,GAAC,aAAa,CAAC,CAAC;IAAC,OAAO,CAAC,cAAc,IAAE,CAAC,CAAC,GAAC,OAAO,CAAC,MAAM;IAAC,IAAI,OAAO,GAAC,CAAC;IAAC,KAAI,IAAI,MAAM,IAAI,OAAO,EAAC;MAAC,OAAO,IAAE,eAAe,CAAC,MAAM,CAAC,GAAC,CAAC;IAAA;IAAC,OAAO,CAAC,iBAAiB,IAAE,CAAC,CAAC,GAAC,OAAO;IAAC,OAAO,CAAC;EAAA,CAAC;EAAC,IAAI,SAAS,GAAC,gBAAgB;EAAC,IAAI,SAAS,GAAC,CAAC,gBAAgB;EAAC,IAAI,kBAAkB,GAAC,GAAG,IAAE,GAAG,GAAC,SAAS,IAAE,GAAG,GAAC,SAAS,GAAC,GAAG,GAAC,MAAM,CAAC,GAAG,CAAC;EAAC,SAAS,QAAQ,CAAC,EAAE,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC;IAAC,MAAM,GAAC,kBAAkB,CAAC,MAAM,CAAC;IAAC,OAAO,EAAE;EAAA;EAAC,IAAI,gBAAgB,GAAC,CAAC,IAAI,EAAC,EAAE,EAAC,EAAE,CAAC;EAAC,IAAI,WAAW,GAAC,UAAU,CAAC,WAAW,IAAE,IAAI,WAAW,CAAD,CAAC;EAAC,IAAI,aAAa,GAAC,CAAC,WAAW,EAAC,GAAG,EAAC,cAAc,EAAC,SAAS,KAAG;IAAC,IAAI,MAAM,GAAC,GAAG,GAAC,cAAc;IAAC,IAAG,SAAS,EAAC,OAAO,MAAM;IAAC,OAAM,WAAW,CAAC,GAAG,CAAC,IAAE,EAAE,GAAG,IAAE,MAAM,CAAC,EAAC,EAAE,GAAG;IAAC,OAAO,GAAG;EAAA,CAAC;EAAC,IAAI,iBAAiB,GAAC,CAAC,WAAW,EAAC,GAAG,GAAC,CAAC,EAAC,cAAc,EAAC,SAAS,KAAG;IAAC,IAAI,MAAM,GAAC,aAAa,CAAC,WAAW,EAAC,GAAG,EAAC,cAAc,EAAC,SAAS,CAAC;IAAC,IAAG,MAAM,GAAC,GAAG,GAAC,EAAE,IAAE,WAAW,CAAC,MAAM,IAAE,WAAW,EAAC;MAAC,OAAO,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAC,MAAM,CAAC,CAAC;IAAA;IAAC,IAAI,GAAG,GAAC,EAAE;IAAC,OAAM,GAAG,GAAC,MAAM,EAAC;MAAC,IAAI,EAAE,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC;MAAC,IAAG,EAAE,EAAE,GAAC,GAAG,CAAC,EAAC;QAAC,GAAG,IAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAAC;MAAQ;MAAC,IAAI,EAAE,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC,GAAC,EAAE;MAAC,IAAG,CAAC,EAAE,GAAC,GAAG,KAAG,GAAG,EAAC;QAAC,GAAG,IAAE,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,GAAC,EAAE,KAAG,CAAC,GAAC,EAAE,CAAC;QAAC;MAAQ;MAAC,IAAI,EAAE,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC,GAAC,EAAE;MAAC,IAAG,CAAC,EAAE,GAAC,GAAG,KAAG,GAAG,EAAC;QAAC,EAAE,GAAC,CAAC,EAAE,GAAC,EAAE,KAAG,EAAE,GAAC,EAAE,IAAE,CAAC,GAAC,EAAE;MAAA,CAAC,MAAI;QAAC,EAAE,GAAC,CAAC,EAAE,GAAC,CAAC,KAAG,EAAE,GAAC,EAAE,IAAE,EAAE,GAAC,EAAE,IAAE,CAAC,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC,GAAC,EAAE;MAAA;MAAC,IAAG,EAAE,GAAC,KAAK,EAAC;QAAC,GAAG,IAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;MAAA,CAAC,MAAI;QAAC,IAAI,EAAE,GAAC,EAAE,GAAC,KAAK;QAAC,GAAG,IAAE,MAAM,CAAC,YAAY,CAAC,KAAK,GAAC,EAAE,IAAE,EAAE,EAAC,KAAK,GAAC,EAAE,GAAC,IAAI,CAAC;MAAA;IAAC;IAAC,OAAO,GAAG;EAAA,CAAC;EAAC,IAAI,SAAS,GAAC,CAAC,MAAM,EAAC,IAAI,KAAG;IAAC,IAAI,MAAM,GAAC,gBAAgB,CAAC,MAAM,CAAC;IAAC,IAAG,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,EAAE,EAAC;MAAC,CAAC,MAAM,KAAG,CAAC,GAAC,GAAG,GAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;MAAC,MAAM,CAAC,MAAM,GAAC,CAAC;IAAA,CAAC,MAAI;MAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAAA;EAAC,CAAC;EAAC,IAAI,YAAY,GAAC,CAAC,GAAG,EAAC,cAAc,EAAC,SAAS,KAAG,GAAG,GAAC,iBAAiB,CAAC,MAAM,EAAC,GAAG,EAAC,cAAc,EAAC,SAAS,CAAC,GAAC,EAAE;EAAC,IAAI,SAAS,GAAC,CAAC,EAAE,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,KAAG;IAAC,IAAI,GAAG,GAAC,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,MAAM,EAAC,CAAC,EAAE,EAAC;MAAC,IAAI,GAAG,GAAC,OAAO,CAAC,GAAG,IAAE,CAAC,CAAC;MAAC,IAAI,GAAG,GAAC,OAAO,CAAC,GAAG,GAAC,CAAC,IAAE,CAAC,CAAC;MAAC,GAAG,IAAE,CAAC;MAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,EAAE,EAAC;QAAC,SAAS,CAAC,EAAE,EAAC,MAAM,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC;MAAA;MAAC,GAAG,IAAE,GAAG;IAAA;IAAC,OAAO,CAAC,IAAI,IAAE,CAAC,CAAC,GAAC,GAAG;IAAC,OAAO,CAAC;EAAA,CAAC;EAAC,SAAS,aAAa,CAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,GAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,EAAC,CAAC,EAAE,EAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,GAAG;IAAA;EAAC;EAAC,SAAS,cAAc,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,GAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,EAAC,CAAC,EAAE,EAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;IAAA;EAAC;EAAC,SAAS,eAAe,CAAC,WAAW,EAAC;IAAC,MAAM,OAAO,GAAC,YAAY,CAAC,WAAW,CAAC;IAAC,CAAC,MAAM,CAAC,IAAI,IAAE,OAAO,CAAC,IAAI,EAAE,aAAa,OAAO,EAAE,CAAC;EAAA;EAAC,SAAS,YAAY,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,SAAS,KAAG,CAAC;IAAC,MAAM,SAAS,GAAC,MAAM,CAAC,SAAS,GAAC,IAAI,iBAAiB,CAAC,SAAS,GAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,MAAM,KAAK,GAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAC,SAAS,GAAC,SAAS,CAAC;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,EAAC,CAAC,EAAE,EAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,GAAG;IAAA;EAAC;EAAC,SAAS,kBAAkB,CAAC,WAAW,EAAC;IAAC,MAAM,OAAO,GAAC,YAAY,CAAC,WAAW,CAAC;IAAC,IAAG,CAAC,MAAM,CAAC,aAAa,EAAC;MAAC,MAAM,CAAC,aAAa,GAAC,OAAO;IAAA,CAAC,MAAI;MAAC,MAAM,CAAC,aAAa,IAAE,IAAI,GAAC,OAAO;IAAA;EAAC;EAAC,IAAI,kBAAkB,GAAC,CAAC,KAAK,EAAC,MAAM,KAAG;IAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,CAAC;EAAA,CAAC;EAAE,IAAG,MAAM,CAAC,eAAe,CAAC,EAAC,aAAa,GAAC,MAAM,CAAC,eAAe,CAAC;EAAC,IAAG,MAAM,CAAC,OAAO,CAAC,EAAC,GAAG,GAAC,MAAM,CAAC,OAAO,CAAC;EAAC,IAAG,MAAM,CAAC,UAAU,CAAC,EAAC,GAAG,GAAC,MAAM,CAAC,UAAU,CAAC;EAAC,IAAG,MAAM,CAAC,YAAY,CAAC,EAAC,UAAU,GAAC,MAAM,CAAC,YAAY,CAAC;EAAC,IAAG,MAAM,CAAC,WAAW,CAAC,EAAC,UAAU,GAAC,MAAM,CAAC,WAAW,CAAC;EAAC,IAAG,MAAM,CAAC,aAAa,CAAC,EAAC,WAAW,GAAC,MAAM,CAAC,aAAa,CAAC;EAAC,IAAG,MAAM,CAAC,SAAS,CAAC,EAAC;IAAC,IAAG,OAAO,MAAM,CAAC,SAAS,CAAC,IAAE,UAAU,EAAC,MAAM,CAAC,SAAS,CAAC,GAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAAC,OAAM,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC;MAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAA;EAAC;EAAE,MAAM,CAAC,oBAAoB,CAAC,GAAC,kBAAkB;EAAC,IAAI,OAAO,EAAC,KAAK,EAAC,WAAW,EAAC,oBAAoB,EAAC,MAAM,EAAC,yBAAyB,EAAC,UAAU;EAAC,SAAS,iBAAiB,CAAC,WAAW,EAAC;IAAC,OAAO,GAAC,MAAM,CAAC,SAAS,CAAC,GAAC,WAAW,CAAC,GAAG,CAAC;IAAC,KAAK,GAAC,MAAM,CAAC,OAAO,CAAC,GAAC,WAAW,CAAC,GAAG,CAAC;IAAC,WAAW,GAAC,MAAM,CAAC,aAAa,CAAC,GAAC,WAAW,CAAC,GAAG,CAAC;IAAC,oBAAoB,GAAC,WAAW,CAAC,GAAG,CAAC;IAAC,MAAM,GAAC,UAAU,GAAC,WAAW,CAAC,GAAG,CAAC;IAAC,yBAAyB,GAAC,WAAW,CAAC,2BAA2B,CAAC;EAAA;EAAC,IAAI,WAAW,GAAC;IAAC,CAAC,EAAC,UAAU;IAAC,CAAC,EAAC,oCAAoC;IAAC,CAAC,EAAC,cAAc;IAAC,CAAC,EAAC,cAAc;IAAC,CAAC,EAAC,cAAc;IAAC,CAAC,EAAC,cAAc;IAAC,CAAC,EAAC,uBAAuB;IAAC,CAAC,EAAC,YAAY;IAAC,CAAC,EAAC,kBAAkB;IAAC,CAAC,EAAC,QAAQ;IAAC,CAAC,EAAC,SAAS;IAAC,CAAC,EAAC,aAAa;IAAC,CAAC,EAAC,cAAc;IAAC,CAAC,EAAC,eAAe;IAAC,CAAC,EAAC,UAAU;IAAC,CAAC,EAAC,YAAY;IAAC,CAAC,EAAC;EAAkB,CAAC;EAAC,SAAS,GAAG,GAAE;IAAC,MAAM,CAAC,CAAC;IAAC,SAAS,KAAK,GAAE;MAAC,MAAM,CAAC,WAAW,CAAC,GAAC,IAAI;MAAC,IAAG,KAAK,EAAC;MAAO,WAAW,CAAC,CAAC;MAAC,mBAAmB,GAAG,MAAM,CAAC;MAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC;MAAC,OAAO,CAAC,CAAC;IAAA;IAAC,IAAG,MAAM,CAAC,WAAW,CAAC,EAAC;MAAC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;MAAC,UAAU,CAAC,MAAI;QAAC,UAAU,CAAC,MAAI,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QAAC,KAAK,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC;IAAA,CAAC,MAAI;MAAC,KAAK,CAAC,CAAC;IAAA;EAAC;EAAC,IAAI,WAAW;EAAC,WAAW,GAAC,MAAO,UAAU,CAAC,CAAE;EAAC,GAAG,CAAC,CAAC;EAAC,IAAG,kBAAkB,EAAC;IAAC,SAAS,GAAC,MAAM;EAAA,CAAC,MAAI;IAAC,SAAS,GAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,KAAG;MAAC,mBAAmB,GAAC,OAAO;MAAC,kBAAkB,GAAC,MAAM;IAAA,CAAC,CAAC;EAAA;EAC1ic,OAAO,SAAS;AAAA;AAAC,+CAAe,QAAQ,E;;ACaiB;AACC;AACtB;AACO;AAE5C,MAAM,QAAQ,SAAS,aAAa,CAAC;EACnC,WAAW,CAAC,GAAG,EAAE;IACf,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC;EACxB;AACF;AAEA,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,SAAS,GAAG,eAAe;EAE3B,eAAe,GAAG,6BAA6B;EAE/C,WAAW,QAAQ,GAAG;IACpB,OAAO,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,QAAQ,CAAuB,IAAI,CAAC,CAAC;EAC3E;EAEA,MAAM,MAAM,CACV,KAAK,EACL;IACE,aAAa,GAAG,CAAC;IACjB,iBAAiB,GAAG,KAAK;IACzB,WAAW,GAAG,KAAK;IACnB,WAAW,GAAG;EAChB,CAAC,GAAG,CAAC,CAAC,EACN;IACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAE9C,IAAI,CAAC,MAAM,EAAE;MACX,MAAM,IAAI,QAAQ,CAAC,+BAA+B,CAAC;IACrD;IACA,IAAI,GAAG;IAEP,IAAI;MACF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM;MACzB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;MAC1B,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;MACrC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAC5B,GAAG,EACH,IAAI,EACJ,aAAa,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,EACrC,CAAC,CAAC,iBAAiB,EACnB,CAAC,CAAC,WAAW,EACb,WACF,CAAC;MACD,IAAI,GAAG,EAAE;QACP,MAAM;UAAE;QAAc,CAAC,GAAG,MAAM;QAChC,IAAI,aAAa,EAAE;UACjB,OAAO,MAAM,CAAC,aAAa;UAC3B,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC;QACnC;QACA,MAAM,IAAI,QAAQ,CAAC,eAAe,CAAC;MACrC;MACA,MAAM;QAAE;MAAU,CAAC,GAAG,MAAM;MAC5B,MAAM,CAAC,SAAS,GAAG,IAAI;MAEvB,OAAO,SAAS;IAClB,CAAC,SAAS;MACR,IAAI,GAAG,EAAE;QACP,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;MACnB;IACF;EACF;EAEA,OAAO,oBAAoB,CAAC,MAAM,EAAE;IAUlC,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,OAAO,IAAI,CAAC,EAAE;MACnB,MAAM,OAAO,GAAG,OAAO;MACvB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;MAC1B,MAAM,IAAI,GAAI,OAAO,IAAI,CAAC,GAAI,OAAO;MAErC,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO;UACL,KAAK,EAAE,IAAI,GAAG,KAAK;UACnB,MAAM,EAAE,IAAI,GAAG,KAAK;UAEpB,gBAAgB,EAAE,CAAC;UACnB,eAAe,EAAE;QACnB,CAAC;MACH;IACF;IACA,MAAM,IAAI,QAAQ,CAAC,oCAAoC,CAAC;EAC1D;AACF;;;ACtGkD;AACd;AACO;AAM3C,MAAM,SAAS,SAAS,YAAY,CAAC;EACnC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE;IAC/B,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,CAAC,MAAM,GAAG,MAAM;IACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;IACvB,IAAI,CAAC,WAAW,GAAG,WAAW;EAChC;EAEA,IAAI,KAAK,GAAG;IAEV,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACtE;EAEA,YAAY,CAAC,SAAS,EAAE,CAGxB;EAEA,IAAI,cAAc,GAAG;IACnB,OAAO,IAAI;EACb;EAEA,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;IAChD,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,KAAK,KAAK,IAAI,CAAC,KAAK;IACpB,IAAI,CAAC,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC;IACnE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;IACtC,IAAI,CAAC,GAAG,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC,MAAM;EACpB;EAEA,IAAI,6BAA6B,GAAG;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;EAC5B;EAEA,IAAI,aAAa,GAAG;IAClB,OAAO,IAAI;EACb;AACF;;;AClDkD;AAElD,MAAM,SAAS,SAAS,YAAY,CAAC;EACnC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;IACzC,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;IACpB,IAAI,CAAC,UAAU,GAAG,CAAC;IACnB,IAAI,CAAC,UAAU,GAAG,CAAC;IAEnB,MAAM,oBAAoB,GAAG,IAAI;IACjC,MAAM,QAAQ,GAAG;MACf,WAAW;MACX,UAAU,EAAE,CAAC;MACb,QAAQ,EAAE,GAAG;MACb,gBAAgB,EAAE,IAAI,UAAU,CAAC,oBAAoB,CAAC;MACtD,iBAAiB,EAAE,IAAI,WAAW,CAAC,oBAAoB,CAAC;MACxD,mBAAmB,EAAE,IAAI,WAAW,CAAC,oBAAoB,CAAC;MAC1D,eAAe,EAAE,IAAI,UAAU,CAAC,oBAAoB,CAAC;MACrD,qBAAqB,EAAE;IACzB,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAC5B,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;MAChC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC;IACnC;IACA,IAAI,CAAC,QAAQ,GAAG,QAAQ;EAC1B;EAEA,QAAQ,CAAC,CAAC,EAAE;IACV,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU;IAChC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU;IAChC,OAAO,UAAU,GAAG,CAAC,EAAE;MACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;MAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QACZ,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,OAAO,IAAI;MACb;MACA,UAAU,GAAI,UAAU,IAAI,CAAC,GAAI,CAAC;MAClC,UAAU,IAAI,CAAC;IACjB;IACA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,CAAC;IACjC,IAAI,CAAC,UAAU,GAAG,UAAU;IAC5B,OAAQ,UAAU,KAAK,UAAU,GAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAE;EACrD;EAEA,SAAS,GAAG;IACV,MAAM,SAAS,GAAG,GAAG;MACnB,gBAAgB,GAAG,SAAS;IAC9B,IAAI,oBAAoB,GAAG,SAAS,GAAG,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC9B,IAAI,CAAC,QAAQ,EAAE;MACb;IACF;IAEA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW;IACxC,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ;IAChC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB;IAClD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB;IACpD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB;IACxD,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU;IACpC,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ;IAChC,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe;IAChD,IAAI,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB;IAE1D,IAAI,aAAa,GAAG,CAAC;IACrB,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY;IAC3C,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC;IAExE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;MAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;MACtC,MAAM,OAAO,GAAG,qBAAqB,GAAG,CAAC;MACzC,IAAI,IAAI,GAAG,GAAG,EAAE;QACd,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;QACzB,qBAAqB,GAAG,CAAC;MAC3B,CAAC,MAAM,IAAI,IAAI,IAAI,GAAG,EAAE;QACtB,IAAI,IAAI,GAAG,QAAQ,EAAE;UACnB,qBAAqB,GAAG,iBAAiB,CAAC,IAAI,CAAC;UAC/C,KAAK,CAAC,GAAG,qBAAqB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACzD,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;YACxC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;UAC5B;QACF,CAAC,MAAM;UACL,eAAe,CAAC,qBAAqB,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;QAC/D;MACF,CAAC,MAAM,IAAI,IAAI,KAAK,GAAG,EAAE;QACvB,UAAU,GAAG,CAAC;QACd,QAAQ,GAAG,GAAG;QACd,qBAAqB,GAAG,CAAC;QACzB;MACF,CAAC,MAAM;QACL,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,OAAO,IAAI,CAAC,QAAQ;QACpB;MACF;MAEA,IAAI,OAAO,EAAE;QACX,mBAAmB,CAAC,QAAQ,CAAC,GAAG,QAAQ;QACxC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7D,gBAAgB,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;QAC/C,QAAQ,EAAE;QACV,UAAU,GACP,QAAQ,GAAG,WAAW,GAAK,QAAQ,GAAG,WAAW,GAAG,CAAE,GACnD,UAAU,GACV,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,kBAAkB,GAAG,CAAC,EACzD,EACF,CAAC,GAAG,CAAC;MACb;MACA,QAAQ,GAAG,IAAI;MAEf,aAAa,IAAI,qBAAqB;MACtC,IAAI,oBAAoB,GAAG,aAAa,EAAE;QACxC,GAAG;UACD,oBAAoB,IAAI,gBAAgB;QAC1C,CAAC,QAAQ,oBAAoB,GAAG,aAAa;QAC7C,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC;MACtE;MACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,CAAC,mBAAmB,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;MACpD;IACF;IACA,QAAQ,CAAC,QAAQ,GAAG,QAAQ;IAC5B,QAAQ,CAAC,UAAU,GAAG,UAAU;IAChC,QAAQ,CAAC,QAAQ,GAAG,QAAQ;IAC5B,QAAQ,CAAC,qBAAqB,GAAG,qBAAqB;IAEtD,IAAI,CAAC,YAAY,GAAG,mBAAmB;EACzC;AACF;;;ACnIkD;AACX;AACS;AAEhD,MAAM,eAAe,SAAS,YAAY,CAAC;EACzC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE;IACpC,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;MAC7B,OAAO,GAAG;IACZ;IACA,MAAM,SAAS,GAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAE;IAEjE,IAAI,SAAS,IAAI,CAAC,EAAE;MAClB,OAAO,GAAG;IACZ;IACA,IAAI,SAAS,KAAK,CAAC,KAAK,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC,EAAE;MACzD,MAAM,IAAI,WAAW,CAAC,0BAA0B,SAAS,EAAE,CAAC;IAC9D;IAEA,IAAI,CAAC,SAAS,GAAG,SAAS,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY;IAEzE,IAAI,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;IAEpB,MAAM,MAAM,GAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAE;IACxD,MAAM,IAAI,GAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAE;IACrE,MAAM,OAAO,GAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE;IAE3D,IAAI,CAAC,QAAQ,GAAI,MAAM,GAAG,IAAI,GAAG,CAAC,IAAK,CAAC;IACxC,IAAI,CAAC,QAAQ,GAAI,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,IAAK,CAAC;IAElD,OAAO,IAAI;EACb;EAEA,aAAa,GAAG;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAE9B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC;IAEzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM;IAC3B,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ;IACF;IAEA,IAAI,KAAK,GAAG,CAAC;MACX,MAAM,GAAG,CAAC;IACZ,IAAI,MAAM,GAAG,CAAC;MACZ,OAAO,GAAG,CAAC;IACb,IAAI,GAAG,GAAG,YAAY;IACtB,IAAI,CAAC;IAEL,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;MAG9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;QAC7B,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK;QAC3B,CAAC,IAAI,CAAC,IAAI,CAAC;QACX,CAAC,IAAI,CAAC,IAAI,CAAC;QACX,CAAC,IAAI,CAAC,IAAI,CAAC;QACX,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;MACnB;IACF,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,EAAE;MACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;MAC7B;MACA,OAAO,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAChD,GAAG,EAAE;MACP;IACF,CAAC,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;MACtB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC;MAChC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;MAC7B;MACA,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,GAAG,GACP,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,KACzB,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IACvB,CAAC,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,IAC1C,MAAM,CAAC,GAAG,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,GAAI,GAAG,IAAI,CAAC,GAAI,IAAI;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;MAC5B;IACF,CAAC,MAAM;MACL,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;MAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;MAC/B,IAAI,CAAC,GAAG,CAAC;QACP,CAAC,GAAG,YAAY;MAClB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;MAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE;QAC5B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE;UAClC,IAAI,MAAM,GAAG,IAAI,EAAE;YACjB,KAAK,GAAI,KAAK,IAAI,CAAC,GAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAK;YAC7C,MAAM,IAAI,CAAC;UACb;UACA,SAAS,CAAC,EAAE,CAAC,GACV,SAAS,CAAC,EAAE,CAAC,IAAI,KAAK,IAAK,MAAM,GAAG,IAAK,CAAC,GAAI,OAAO;UACxD,MAAM,IAAI,IAAI;UACd,MAAM,GAAI,MAAM,IAAI,IAAI,GAAI,SAAS,CAAC,EAAE,CAAC;UACzC,OAAO,IAAI,IAAI;UACf,IAAI,OAAO,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAI,MAAM,IAAK,OAAO,GAAG,CAAE,GAAI,IAAI;YAC9C,OAAO,IAAI,CAAC;UACd;QACF;MACF;MACA,IAAI,OAAO,GAAG,CAAC,EAAE;QACf,MAAM,CAAC,CAAC,EAAE,CAAC,GACT,CAAC,MAAM,IAAK,CAAC,GAAG,OAAQ,KAAK,KAAK,GAAI,CAAC,CAAC,IAAK,CAAC,GAAG,OAAQ,IAAI,CAAE,CAAC;MACpE;IACF;IACA,IAAI,CAAC,YAAY,IAAI,QAAQ;EAC/B;EAEA,YAAY,GAAG;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM;IAC3B,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ;IACF;IAEA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC;IAEzD,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,EAAE,YAAY,CAAC;IACpE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;MACxB,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC;IACpC;IAEA,IAAI,CAAC;MACH,CAAC,GAAG,YAAY;MAChB,EAAE;MACF,CAAC;IACH,QAAQ,SAAS;MACf,KAAK,CAAC;QACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC3B;QACA;MACF,KAAK,CAAC;QACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC3B;QACA,OAAO,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UACxB,MAAM,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAI,IAAI;UACvD,CAAC,EAAE;QACL;QACA;MACF,KAAK,CAAC;QACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAI,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAI,IAAI;QACjD;QACA;MACF,KAAK,CAAC;QACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;QAC/C;QACA,OAAO,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UACxB,MAAM,CAAC,CAAC,CAAC,GACN,CAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAI,IAAI;UACnE,CAAC,EAAE;QACL;QACA;MACF,KAAK,CAAC;QAGJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UAC7B,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;UACf,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;UACf,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB;QACA,OAAO,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE;UACxB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;UACf,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;UACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC;UACjC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM;UAE5B,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI;UACjB,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,GAAG,CAAC,EAAE;UACV;UACA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE;UACf,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,GAAG,CAAC,EAAE;UACV;UACA,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM;UACnB,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,GAAG,CAAC,EAAE;UACV;UAEA,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;UACf,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;UACxB,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;UACtB,CAAC,MAAM;YACL,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC;UAC1B;QACF;QACA;MACF;QACE,MAAM,IAAI,WAAW,CAAC,0BAA0B,SAAS,EAAE,CAAC;IAChE;IACA,IAAI,CAAC,YAAY,IAAI,QAAQ;EAC/B;AACF;;;ACxNkD;AAElD,MAAM,eAAe,SAAS,YAAY,CAAC;EACzC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE;IAC5B,KAAK,CAAC,WAAW,CAAC;IAElB,IAAI,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;EACtB;EAEA,SAAS,GAAG;IAKV,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MACvE,IAAI,CAAC,GAAG,GAAG,IAAI;MACf;IACF;IAEA,IAAI,MAAM;IACV,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY;IACpC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,GAAG,EAAE;MAEX,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;MAChD,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;MACxC,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;QAChC,YAAY,IAAI,CAAC;MACnB;IACF,CAAC,MAAM;MACL,CAAC,GAAG,GAAG,GAAG,CAAC;MACX,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;MAChD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC;MAC5D,YAAY,IAAI,CAAC;IACnB;IACA,IAAI,CAAC,YAAY,GAAG,YAAY;EAClC;AACF;;;ACnC2B;AACgD;AAKlD;AACwB;AACI;AACE;AACL;AACC;AACH;AACA;AACF;AACF;AACA;AACY;AACC;AAazD,MAAM,mBAAmB,GAAG,IAAI;AAEhC,SAAS,sBAAsB,CAAC,KAAK,EAAE;EACrC,MAAM,MAAM,GAAG,EAAE;IACf,EAAE,GAAG,KAAK,CAAC,MAAM;EACnB,IAAI,CAAC,GAAG,CAAC;EACT,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACjB,MAAM,CAAC,IAAI,CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EAC7C;EAEA,IAAI,CAAC,GAAG,EAAE,EAAE;IACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACvB;EAKA,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3D;AAEA,MAAM,MAAM,CAAC;EACX,WAAW,CAAC;IAAE,KAAK;IAAE,IAAI;IAAE,YAAY,GAAG,KAAK;IAAE,YAAY,GAAG;EAAM,CAAC,EAAE;IACvE,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,YAAY,GAAG,YAAY;IAChC,IAAI,CAAC,YAAY,GAAG,YAAY;IAEhC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACrC,IAAI,CAAC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAAC,MAAM,CAAC,CAAC;EACf;EAEA,MAAM,GAAG;IACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACjC;EAEA,KAAK,GAAG;IACN,IAAI,IAAI,CAAC,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;MACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;MACrB,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB,CAAC,MAAM;MACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;MACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC;EACF;EAEA,QAAQ,GAAG;IACT,IAAI;MACF,IAAI,CAAC,KAAK,CAAC,CAAC;MACZ,OAAO,IAAI;IACb,CAAC,CAAC,OAAO,CAAC,EAAE;MACV,IAAI,CAAC,YAAY,oBAAoB,EAAE;QACrC,MAAM,CAAC;MACT;MAGA,OAAO,KAAK;IACd;EACF;EAOA,MAAM,CAAC,eAAe,GAAG,IAAI,EAAE;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;IACtB,IAAI,CAAC,KAAK,CAAC,CAAC;IAEZ,IAAI,IAAI,YAAY,GAAG,EAAE;MACvB,QAAQ,IAAI,CAAC,GAAG;QACd,KAAK,IAAI;UACP,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QAC9C,KAAK,GAAG;UACN,MAAM,KAAK,GAAG,EAAE;UAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;UAC1C;UACA,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,YAAY,EAAE;cACrB,OAAO,KAAK;YACd;YACA,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,CAAC;UAC3D;UACA,IAAI,CAAC,KAAK,CAAC,CAAC;UACZ,OAAO,KAAK;QACd,KAAK,IAAI;UACP,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;UAChC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YACnD,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;cAChC,IAAI,CAAC,iDAAiD,CAAC;cACvD,IAAI,CAAC,KAAK,CAAC,CAAC;cACZ;YACF;YAEA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;YAC1B,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;cACrB;YACF;YACA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;UAC7C;UACA,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,YAAY,EAAE;cACrB,OAAO,IAAI;YACb;YACA,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,CAAC;UAChE;UAIA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,YAAY,GACpB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,GACtC,IAAI;UACV;UACA,IAAI,CAAC,KAAK,CAAC,CAAC;UACZ,OAAO,IAAI;QACb;UACE,OAAO,IAAI;MACf;IACF;IAEA,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;MAE1B,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;QACxD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,GAAG;MACZ;MACA,OAAO,IAAI;IACb;IAEA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,IAAI,eAAe,EAAE;QACnB,OAAO,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC;MAC5C;MACA,OAAO,IAAI;IACb;IAGA,OAAO,IAAI;EACb;EAMA,0BAA0B,CAAC,MAAM,EAAE;IACjC,MAAM,CAAC,GAAG,IAAI;MACZ,CAAC,GAAG,IAAI;MACR,KAAK,GAAG,IAAI;MACZ,EAAE,GAAG,GAAG;MACR,EAAE,GAAG,GAAG;MACR,GAAG,GAAG,GAAG;IACX,MAAM;QAAE;MAAc,CAAC,GAAG,IAAI,CAAC,KAAK;MAClC,QAAQ,GAAG,MAAM,CAAC,GAAG;MACrB,CAAC,GAAG,EAAE;IACR,IAAI,KAAK,GAAG,CAAC;MACX,EAAE;MACF,UAAU;IACZ,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACrC,IAAI,KAAK,KAAK,CAAC,EAAE;QACf,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;MAC1B,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE;QACtB,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;MAC1B,CAAC,MAAM;QAIL,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;UAC1C,UAAU,GAAG,MAAM,CAAC,GAAG;UAEvB,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;UAE1C,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM;UAChC,IAAI,EAAE,KAAK,CAAC,EAAE;YACZ;UACF;UACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,KAAK,GAAG,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;cAW/C;YACF;YACA,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;cAGvD,KAAK,GAAG,CAAC;cACT;YACF;UACF;UAEA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf;UACF;UACA,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CACF,kEACF,CAAC;YACD;UACF;UAOA,MAAM,QAAQ,GAAG,IAAI,KAAK,CACxB,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACnC,aACF,CAAC;UAED,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;UAClC,IAAI,OAAO,GAAG,CAAC;UAEf,OAAO,IAAI,EAAE;YACX,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjC,IAAI,OAAO,KAAK,GAAG,EAAE;cACnB,KAAK,GAAG,CAAC;cACT;YACF;YACA,IAAI,OAAO,YAAY,GAAG,EAAE;cAC1B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;cAC/C,IAAI,CAAC,YAAY,EAAE;gBAGjB,KAAK,GAAG,CAAC;gBACT;cACF,CAAC,MAAM,IACL,YAAY,CAAC,YAAY,GACrB,OAAO,IAAI,YAAY,CAAC,OAAO,GAC/B,OAAO,KAAK,YAAY,CAAC,OAAO,EACpC;gBACA;cACF;cACA,OAAO,GAAG,CAAC;cACX;YACF;YACA,OAAO,EAAE;UACX;UAEA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf;UACF;QACF,CAAC,MAAM;UACL,KAAK,GAAG,CAAC;QACX;MACF;IACF;IAEA,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;MACb,IAAI,CACF,8BAA8B,GAC5B,iEACJ,CAAC;MACD,IAAI,UAAU,EAAE;QACd,IAAI,CAAC,0DAA0D,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;MACzC;IACF;IAEA,IAAI,SAAS,GAAG,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;IACvB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAItB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;MACrB,SAAS,EAAE;IACb;IACA,OAAO,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,QAAQ;EAC1C;EAMA,4BAA4B,CAAC,MAAM,EAAE;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC3B,IAAI,QAAQ,GAAG,KAAK;MAClB,CAAC;MACD,YAAY;IACd,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACpC,IAAI,CAAC,KAAK,IAAI,EAAE;QAEd;MACF;MACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,IAAI;UAEP;QAEF,KAAK,IAAI;UAEP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;UACf;QAEF,KAAK,IAAI;UACP,QAAQ,GAAG,IAAI;UACf;QAEF,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QAET,KAAK,IAAI;UAEP,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;UACjC,IAAI,YAAY,GAAG,CAAC,EAAE;YAGpB,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;UAC/B,CAAC,MAAM;YAEL,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB;UACA;MACJ;MACA,IAAI,QAAQ,EAAE;QACZ;MACF;IACF;IACA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ;IACpC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;MACZ,IAAI,CACF,iCAAiC,GAC/B,mDACJ,CAAC;MACD,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;MACpB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IAChD;IACA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAC/B,OAAO,MAAM;EACf;EAMA,gCAAgC,CAAC,MAAM,EAAE;IACvC,MAAM,KAAK,GAAG,IAAI;MAChB,EAAE,GAAG,IAAI;IACX,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC3B,IAAI,EAAE;IACN,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACrC,IAAI,EAAE,KAAK,KAAK,EAAE;QAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;QAE3B,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAGtB,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE;UACvB,MAAM,CAAC,IAAI,CAAC,CAAC;UACb,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxB;QACA,IAAI,EAAE,KAAK,EAAE,EAAE;UACb,MAAM,CAAC,IAAI,CAAC,CAAC;UACb;QACF;QAGA,IAAI,MAAM,CAAC,GAAG,GAAG,QAAQ,EAAE;UACzB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;UACnC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAe,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAe,IAAI,EAAE;YAClE;UACF;QACF;MACF;IACF;IACA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ;IACpC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;MACb,IAAI,CACF,qCAAqC,GACnC,mDACJ,CAAC;MACD,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;MACpB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IAChD;IACA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAC/B,OAAO,MAAM;EACf;EAMA,iCAAiC,CAAC,MAAM,EAAE;IACxC,MAAM,EAAE,GAAG,IAAI;IACf,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC3B,IAAI,EAAE;IACN,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACrC,IAAI,EAAE,KAAK,EAAE,EAAE;QACb;MACF;IACF;IACA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ;IACpC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;MACb,IAAI,CACF,sCAAsC,GACpC,mDACJ,CAAC;MACD,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;MACpB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IAChD;IACA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAC/B,OAAO,MAAM;EACf;EAKA,kBAAkB,CAAC,MAAM,EAAE;IACzB,MAAM,CAAC,GAAG,IAAI;MACZ,CAAC,GAAG,IAAI;IACV,IAAI,KAAK,GAAG,CAAC;MACX,EAAE;IACJ,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACrC,IAAI,KAAK,KAAK,CAAC,EAAE;QACf,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;MAC1B,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE;QACtB,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;MAC1B,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE;QACtB;MACF;IACF;EACF;EAMA,eAAe,CAAC,eAAe,EAAE;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;IAI3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACnC,IAAI,UAAU;IACd,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;MACnD,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;QAChC,MAAM,IAAI,WAAW,CAAC,sCAAsC,CAAC;MAC/D;MACA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;MAC1B,IAAI,CAAC,KAAK,CAAC,CAAC;MACZ,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;QACrB;MACF;MACA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IAC7C;IACA,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,CAAC,EAAE;MACpC,UAAU,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,mBAAmB;IACrD;IAGA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,UAAU;IACd,IAAI,MAAM,YAAY,IAAI,EAAE;MAC1B,UAAU,GAAG,MAAM,CAAC,IAAI;IAC1B,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MAChC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;MAC9C,IAAI,UAAU,YAAY,IAAI,EAAE;QAC9B,UAAU,GAAG,UAAU,CAAC,IAAI;MAC9B;IACF;IAGA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC3B,IAAI,MAAM;IACV,QAAQ,UAAU;MAChB,KAAK,KAAK;MACV,KAAK,WAAW;QACd,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;QAClD;MACF,KAAK,KAAK;MACV,KAAK,eAAe;QAClB,MAAM,GAAG,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC;QACtD;MACF,KAAK,KAAK;MACV,KAAK,gBAAgB;QACnB,MAAM,GAAG,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC;QACvD;MACF;QACE,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IACpD;IAIA,IAAI,QAAQ;IACZ,IAAI,MAAM,GAAG,mBAAmB,IAAI,UAAU,GAAG,CAAC,EAAE;MAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG;MAEnC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,mBAAmB;MAEtC,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;MAEvE,MAAM,CAAC,GAAG,GAAG,gBAAgB;MAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;MAC5C,IAAI,UAAU,KAAK,SAAS,EAAE;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,CAAC;QAEZ,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,UAAU;MACnB;IACF;IAEA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;MACzB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B;IACA,IAAI,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC9D,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;MACpD,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;IACjE;IAEA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;IACrE,WAAW,CAAC,IAAI,GAAG,IAAI;IACvB,IAAI,QAAQ,KAAK,SAAS,EAAE;MAC1B,WAAW,CAAC,QAAQ,GAAG,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE;MACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,WAAW;IACzC;IAEA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,CAAC;IAEZ,OAAO,WAAW;EACpB;EAQA,CAAC,UAAU,CAAC,GAAG,EAAE;IACf,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG;EACpD;EAUA,CAAC,cAAc,CAAC,MAAM,EAAE;IACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MAC1B,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAChC;IAEA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;MACtB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QACxC,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd;EAEA,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IAC1B,MAAM;MAAE;IAAO,CAAC,GAAG,IAAI,CAAC,KAAK;IAC7B,MAAM,CAAC,GAAG,GAAG,QAAQ;IAErB,MAAM,iBAAiB,GAAG,IAAI;IAC9B,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM;IAE1C,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM;IAOtC,MAAM,iBAAiB,GAAG,CACxB,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EACpD,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAC9C,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAC/C;IACD,MAAM,YAAY,GAAG,eAAe,GAAG,SAAS;IAEhD,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE;MAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;MACrD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,eAAe;MAErD,IAAI,UAAU,IAAI,CAAC,EAAE;QACnB;MACF;MACA,IAAI,GAAG,GAAG,CAAC;MACX,OAAO,GAAG,GAAG,UAAU,EAAE;QACvB,IAAI,CAAC,GAAG,CAAC;QACT,OAAO,CAAC,GAAG,SAAS,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE;UAC/D,CAAC,EAAE;QACL;QACA,IAAI,CAAC,IAAI,SAAS,EAAE;UAElB,IAAI,KAAK,GAAG,KAAK;UACjB,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM;YAC3B,IAAI,CAAC,GAAG,CAAC;YACT,OAAO,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;cACxD,CAAC,EAAE;YACL;YACA,IAAI,CAAC,IAAI,YAAY,EAAE;cAErB,KAAK,GAAG,IAAI;cACZ;YACF;YACA,IAAI,CAAC,IAAI,OAAO,EAAE;cAIhB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;cACvC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;gBAC1B,IAAI,CACF,UAAU,aAAa,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS,GAC3D,kCACJ,CAAC;gBACD,KAAK,GAAG,IAAI;cACd;cACA;YACF;UACF;UAEA,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,GAAG,IAAI,GAAG;YACjB,OAAO,MAAM,CAAC,GAAG,GAAG,QAAQ;UAC9B;QACF;QACA,GAAG,EAAE;MACP;MACA,MAAM,CAAC,GAAG,IAAI,UAAU;IAC1B;IACA,OAAO,CAAC,CAAC;EACX;EAEA,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;IACxB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;IAGzB,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;IAG/B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;MAC7B,IAAI,CAAC,eAAe,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;MAC9D,MAAM,GAAG,CAAC;IACZ;IAGA,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,MAAM;IAC9B,KAAK,CAAC,QAAQ,CAAC,CAAC;IAGhB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;MACpD,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC,MAAM;MAEL,MAAM,GAAG,IAAI,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;MACzC,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC;MACrD;MAEA,KAAK,CAAC,QAAQ,CAAC,CAAC;MAChB,IAAI,CAAC,KAAK,CAAC,CAAC;MACZ,IAAI,CAAC,KAAK,CAAC,CAAC;IACd;IACA,IAAI,CAAC,KAAK,CAAC,CAAC;IAEZ,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;IAGtC,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;MACpD,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IACvD;IACA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;IAC3D,MAAM,CAAC,IAAI,GAAG,IAAI;IAClB,OAAO,MAAM;EACf;EASA,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE;IACnD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;IACpC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC;IAE1C,IAAI,MAAM,YAAY,IAAI,EAAE;MAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACzB,IAAI,CAAC,8DAA8D,CAAC;MACtE;MACA,OAAO,IAAI,CAAC,UAAU,CACpB,MAAM,EACN,MAAM,CAAC,IAAI,EACX,MAAM,EACN,MAAM,EACN,eACF,CAAC;IACH;IAEA,IAAI,WAAW,GAAG,MAAM;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,MAAM,WAAW,GAAG,MAAM;MAC1B,MAAM,WAAW,GAAG,MAAM;MAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QACpD,MAAM,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;UAC7B,MAAM,IAAI,WAAW,CAAC,oBAAoB,MAAM,GAAG,CAAC;QACtD;QAEA,MAAM,GAAG,IAAI;QACb,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE;UAClD,MAAM,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3C;QACA,MAAM,GAAG,IAAI,CAAC,UAAU,CACtB,MAAM,EACN,MAAM,CAAC,IAAI,EACX,WAAW,EACX,MAAM,EACN,eACF,CAAC;QAED,WAAW,GAAG,IAAI;MACpB;IACF;IACA,OAAO,MAAM;EACf;EAUA,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE;IAIpE,IAAI,WAAW,KAAK,CAAC,EAAE;MACrB,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;MAC/B,OAAO,IAAI,UAAU,CAAC,CAAC;IACzB;IAEA,IAAI;MACF,QAAQ,IAAI;QACV,KAAK,IAAI;QACT,KAAK,aAAa;UAChB,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,eAAe,CACxB,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,WAAW,EACX,MACF,CAAC;UACH;UACA,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7C,KAAK,KAAK;QACV,KAAK,WAAW;UACd,IAAI,WAAW,GAAG,CAAC;UACnB,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;cAC7B,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;YACzC;YACA,OAAO,IAAI,eAAe,CACxB,IAAI,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAC/C,WAAW,EACX,MACF,CAAC;UACH;UACA,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC;QACxD,KAAK,KAAK;QACV,KAAK,WAAW;UACd,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;QACpD,KAAK,KAAK;QACV,KAAK,WAAW;UACd,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;QAC3C,KAAK,KAAK;QACV,KAAK,eAAe;UAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/C,KAAK,KAAK;QACV,KAAK,gBAAgB;UACnB,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC;QAChD,KAAK,KAAK;QACV,KAAK,gBAAgB;UACnB,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;QACxD,KAAK,IAAI;QACT,KAAK,iBAAiB;UACpB,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC;QACjD,KAAK,aAAa;UAChB,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC;QACrD,KAAK,cAAc;UACjB,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;QAC9C,KAAK,OAAO;UAAE;YACZ,IAAI,CAAC,eAAe,EAAE;cACpB,IAAI,CAAC,+CAA+C,CAAC;cACrD,OAAO,MAAM;YACf;YACA,MAAM,KAAK,GAAG,MAAM,YAAY,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;YAEhE,MAAM,SAAS,GACb,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YACtD,OAAO,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;UACrE;MACF;MACA,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC;MAC1C,OAAO,MAAM;IACf,CAAC,CAAC,OAAO,EAAE,EAAE;MACX,IAAI,EAAE,YAAY,oBAAoB,EAAE;QACtC,MAAM,EAAE;MACV;MACA,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC;MAC/B,OAAO,IAAI,UAAU,CAAC,CAAC;IACzB;EACF;AACF;AAKA,MAAM,YAAY,GAAG,CACnB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,E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,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACrE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EACzE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACzE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EACrE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAC1E,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACxE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAA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M;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,OAAO,GAAG,MAAM;EAClB,CAAC,CAAC,OAAO,GAAG,MAAM;EAClB,CAAC,CAAC,OAAO,GAAG,MAAM;EAClB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,MAAM,GAAG,MAAM;EACjB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,CAAC,CAAC,SAAS,GAAG,MAAM;EACpB,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AC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,EAAE,GAAG,MAAM;EACb,CAAC,CAAC,EAAE,GAAG,MAAM;EACb,CAAC,CAAC,EAAE,GAAG,MAAM;EACb,CAAC,CAAC,EAAE,GAAG,MAAM;EACb,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,GAAG,GAAG,MAAM;EACd,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CAAC,CAAC,IAAI,GAAG,MAAM;EACf,CA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,MAAM,EAAE,MAAM,CAAC,EAChC,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChC,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChE,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChC,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CACE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CACzC,EACD,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAClD,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChE,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACtD,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAClC,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACtD,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACpC,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAA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EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;EACb,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;EACb,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;EACf,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;EACd,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;AAChB,CAAC,CAAC;AAKF,MAAM,oCAAoC,GAAG,qBAAqB,CAChE,UAAU,CAAC,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;AACd,CACF,CAAC;AAKD,MAAM,iCAAiC,GAAG,qBAAqB,CAAC,UAAU,CAAC,EAAE;EAC3E,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;EACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;EACT,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;EACV,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;EACV,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;EACV,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;EACX,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;EACZ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AG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,GAAG,GAAG;IACV,CAAC,CAAC,EAAE,GAAG,GAAG;IACV,CAAC,CAAC,EAAE,GAAG,GAAG;IACV,CAAC,CAAC,EAAE,GAAG,GAAG;IACV,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,GAAG,GAAG,GAAG;IACX,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,IAAI;IACb,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GAAG;IACZ,CAAC,CAAC,IAAI,GAAG,GA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C,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAClD,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpE,CAAC,GAAG,EAAE,CAAC,CA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AE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA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OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,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,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC3E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAA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M,EAAE,OAAO,EAAE,MAAM,EAC7E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC3E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC3E,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAC1E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,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OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EACrE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,E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EAAE,OAAO,EAAE,MAAM,EACrE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAC1E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAC3E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EACzE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5E,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,O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OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAC7E,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAC5E,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAC3E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAClD;AACD,MAAM,uBAAuB,GAAG;EAAE,UAAU,EAAE,GAAG;EAAE,OAAO,EAAE;AAAI,CAAC;;;ACpUjE,MAAM,wBAAwB,GAAG,CAC/B,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CACxB;AAGD,MAAM,yBAAyB,GAAG,CAChC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC3E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3E,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3D;AAGD,MAAM,8BAA8B,GAAG,CACrC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CACxB;AAGD,MAAM,+BAA+B,GAAG,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC3E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3E,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3D;AAGD,MAAM,0BAA0B,GAAG,CACjC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CACxB;AAGD,MAAM,2BAA2B,GAAG,CAClC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC3E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3E,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC3D;AAGD,MAAM,2BAA2B,GAAG,CAClC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CACxB;AAGD,MAAM,4BAA4B,GAAG,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACzE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC3E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAC5E,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI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E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC5E,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACvE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CA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E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACzE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,E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AAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAC5E,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE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EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EACvE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,CACR;AACD,MAAM,uBAAuB,GAAG;EAAE,UAAU,EAAE,GAAG;EAAE,OAAO,EAAE;AAAI,CAAC;;;ACtQjE,MAAM,kBAAkB,GAAG,CACzB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAC3E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACtE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC5E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC7E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC5E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,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AE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAC3E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAA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AE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACrE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACxE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAC7E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EACvE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC7E,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EACtE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE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,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAC3E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EACxE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACzE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACpE;AACD,MAAM,qBAAqB,GAAG;EAAE,UAAU,EAAE,OAAO;EAAE,OAAO,EAAE;AAAE,CAAC;;;AChRnC;AACe;AAUb;AAUI;AAUJ;AAUF;AAC0B;AACH;AAErD,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,EAAE;EACvD,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,wBAAwB,CAAC,GAAG;IACrD,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,uBAAuB;IAChC,UAAU,EAAE,2BAA2B;IACvC,WAAW,EAAE,4BAA4B;IACzC,OAAO,EAAE,uBAAuB;EAClC,CAAC;EACD,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,GAAG;IAC/C,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,wBAAwB;IACpC,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,oBAAoB;EAC/B,CAAC;EACD,CAAC,CAAC,cAAc,CAAC,GACf,CAAC,CAAC,kBAAkB,CAAC,GACrB,CAAC,CAAC,uBAAuB,CAAC,GACxB;IACE,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,sBAAsB;IAC/B,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,sBAAsB;EACjC,CAAC;EACL,CAAC,CAAC,kBAAkB,CAAC,GACnB,CAAC,CAAC,sBAAsB,CAAC,GACzB,CAAC,CAAC,2BAA2B,CAAC,GAC5B;IACE,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,0BAA0B;IACnC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,+BAA+B;IAC5C,OAAO,EAAE,0BAA0B;EACrC,CAAC;EACL,CAAC,CAAC,OAAO,GACP,CAAC,CAAC,KAAK,GACP,CAAC,CAAC,eAAe,CAAC,GAChB;IACE,IAAI,EAAE,wBAAwB;IAC9B,UAAU,EAAE,2BAA2B;IACvC,WAAW,EAAE,4BAA4B;EAC3C,CAAC;EACL,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG;IACpC,IAAI,EAAE,qBAAqB;IAC3B,UAAU,EAAE,wBAAwB;IACpC,WAAW,EAAE,yBAAyB;EACxC,CAAC;EACD,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG;IACxC,IAAI,EAAE,uBAAuB;IAC7B,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,2BAA2B;EAC1C,CAAC;EACD,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,GAAG;IAChD,IAAI,EAAE,2BAA2B;IACjC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,+BAA+B;EAC9C,CAAC;EACD,CAAC,CAAC,iBAAiB,CAAC,GAAG;IACrB,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,qBAAqB;IAC9B,UAAU,EAAE,2BAA2B;IACvC,WAAW,EAAE,4BAA4B;IACzC,OAAO,EAAE,qBAAqB;EAChC,CAAC;EACD,CAAC,CAAC,cAAc,CAAC,GAAG;IAClB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,wBAAwB;IACpC,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,kBAAkB;EAC7B,CAAC;EACD,CAAC,CAAC,gBAAgB,CAAC,GAAG;IACpB,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,oBAAoB;EAC/B,CAAC;EACD,CAAC,CAAC,oBAAoB,CAAC,GAAG;IACxB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,wBAAwB;IACjC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,+BAA+B;IAC5C,OAAO,EAAE,wBAAwB;EACnC,CAAC;EACD,CAAC,CAAC,iBAAiB,CAAC,GAAG;IACrB,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,qBAAqB;IAC9B,UAAU,EAAE,2BAA2B;IACvC,WAAW,EAAE,4BAA4B;IACzC,OAAO,EAAE,qBAAqB;EAChC,CAAC;EACD,CAAC,CAAC,cAAc,CAAC,GAAG;IAClB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,wBAAwB;IACpC,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,kBAAkB;EAC7B,CAAC;EACD,CAAC,CAAC,gBAAgB,CAAC,GAAG;IACpB,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,oBAAoB;EAC/B,CAAC;EACD,CAAC,CAAC,oBAAoB,CAAC,GAAG;IACxB,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,wBAAwB;IACjC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,+BAA+B;IAC5C,OAAO,EAAE,wBAAwB;EACnC,CAAC;EACD,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG;IACrC,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,uBAAuB;IAChC,UAAU,EAAE,2BAA2B;IACvC,WAAW,EAAE,4BAA4B;IACzC,OAAO,EAAE,uBAAuB;EAClC,CAAC;EACD,CAAC,CAAC,gBAAgB,CAAC,GAAG;IACpB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,wBAAwB;IACpC,WAAW,EAAE,yBAAyB;IACtC,OAAO,EAAE,oBAAoB;EAC/B,CAAC;EACD,CAAC,CAAC,kBAAkB,CAAC,GAAG;IACtB,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,sBAAsB;IAC/B,UAAU,EAAE,0BAA0B;IACtC,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,sBAAsB;EACjC,CAAC;EACD,CAAC,CAAC,sBAAsB,CAAC,GAAG;IAC1B,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,0BAA0B;IACnC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,+BAA+B;IAC5C,OAAO,EAAE,0BAA0B;EACrC,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,cAAc,CAAC,IAAI,EAAE;EAC5B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC;EACxC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC;EAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B;AAEA,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;EACjC,IAAI,CAAC,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,MAAM;IAAE,UAAU;IAAE,WAAW;IAAE;EAAQ,CAAC,GAAG,IAAI;EACjD,MAAM,kBAAkB,GAAG,CAAC,OAAO,GAC/B,UAAU,GACV,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;EAE5C,IAAI,WAAW,GAAG,CAAC,CAAC;EACpB,IAAI,YAAY;EAahB,MAAM,SAAS,GAAG,EAAE;EACpB,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,WAAW,CAC5C,GAAG,CACF,CAAC,WAAW,EAAE,KAAK,KAAK,CACtB,WAAW,EACX,KAAK,CAET,CAAC,CACA,IAAI,CACH,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KACrB,QAAQ,GAAG,QACf,CAAC,EAAE;IACH,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;MAClB;IACF;IAEA,IAAI,OAAO,KAAK,WAAW,GAAG,CAAC,EAAE;MAC/B,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;MACjD,WAAW,IAAI,CAAC;IAClB,CAAC,MAAM;MACL,WAAW,GAAG,OAAO;MACrB,YAAY,GAAG,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;MAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;IACvC;EACF;EAEA,OAAO,SAAS;AAClB;AAEA,SAAS,cAAc,CAAC,IAAI,EAAE;EAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC;EACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;EAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACpC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAClC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;EAC7C,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;EAC5C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;EAC7C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;EACrB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EAChC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC9D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;EACjC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC;EACtC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;EACjC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;EACtC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;EACnC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;EAErC,OAAO,IAAI;AACb;;;ACtRA,MAAM,KAAK,GAAG;EAEZ,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EAGT,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EAGR,GAAG,EAAE,CAAC;EACN,GAAG,EAAE,CAAC;EACN,GAAG,EAAE,CAAC;EACN,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EAGP,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EAGN,GAAG,EAAE,EAAE;EACP,EAAE,EAAE,EAAE;EACN,GAAG,EAAE,EAAE;EACP,QAAQ,EAAE,EAAE;EAGZ,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,EAAE;EACT,KAAK,EAAE,EAAE;EACT,QAAQ,EAAE,EAAE;EAGZ,GAAG,EAAE,EAAE;EAGP,IAAI,EAAE,EAAE;EACR,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,EAAE,EAAE,EAAE;EACN,GAAG,EAAE,EAAE;EAGP,IAAI,EAAE,EAAE;EAGR,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EAGP,GAAG,EAAE,EAAE;EACP,IAAI,EAAE,EAAE;EACR,GAAG,EAAE,EAAE;EACP,IAAI,EAAE,EAAE;EACR,KAAK,EAAE,EAAE;EACT,IAAI,EAAE,EAAE;EAGR,EAAE,EAAE,EAAE;EACN,MAAM,EAAE,EAAE;EAGV,GAAG,EAAE,EAAE;EAGP,GAAG,EAAE,EAAE;EACP,GAAG,EAAE;AACP,CAAC;AAED,MAAM,KAAK,CAAC;EACV,WAAW,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE;IAC5B,IAAI,CAAC,EAAE,GAAG,EAAE;IACZ,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;AACF;AAEA,MAAM,WAAK,CAAC;EAIV,OAAO,CAAC,UAAU,GAAG,IAAI;EAEzB,OAAO,CAAC,kBAAkB,GAAG,IAAI;EAEjC,OAAO,CAAC,cAAc,GAAG;IACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACtC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;MAC9C,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB;MACF;MACA,MAAM,UAAU,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM;MACzD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;MACrD,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK;MACxB,IAAI,UAAU,EAAE;QACd,kBAAkB,CAAC,IAAI,CAAC,GAAG,KAAK;MAClC;IACF;IACA,IAAI,CAAC,CAAC,UAAU,GAAG,UAAU;IAC7B,IAAI,CAAC,CAAC,kBAAkB,GAAG,kBAAkB;EAC/C;EAEA,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,WAAK,CAAC,CAAC,UAAU,EAAE;MACtB,WAAK,CAAC,CAAC,cAAc,CAAC,CAAC;IACzB;IACA,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;IAEtB,IAAI,CAAC,cAAc,GAAG,0CAA0C;IAChE,IAAI,CAAC,kBAAkB,GAAG,SAAS;EACrC;EAGA,YAAY,GAAG;IACb,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAE5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IACpE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;EACxC;EAEA,UAAU,GAAG;IACX,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE;MACV,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC;IACA,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC5B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC;IACA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;IACxC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;EACxC;EAEA,YAAY,GAAG;IACb,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE;MACV,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC;IACA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS;IAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,WAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE;MACV,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC;IACA,OAAO,KAAK;EACd;EAGA,IAAI,GAAG;IACL,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;MAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;MAC3C,QAAQ,EAAE;QAER,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;UACP;QAEF,KAAK,IAAI;UACP,IAAI,CAAC,YAAY,CAAC,CAAC;UACnB;QAEF,KAAK,IAAI;UACP,OAAO,WAAK,CAAC,CAAC,UAAU,CAAC,MAAM;QACjC,KAAK,IAAI;UACP,OAAO,WAAK,CAAC,CAAC,UAAU,CAAC,MAAM;QAEjC,KAAK,IAAI;QACT,KAAK,IAAI;UACP,IAAI,CAAC,GAAG,EAAE;UACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1B,KAAK,IAAI;UACP,IAAI,CAAC,GAAG,EAAE;UACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1B;UACE,IAAI,EAAE,IAAI,IAAI,IAAY,EAAE,IAAI,IAAI,EAAU;YAC5C,IAAI,CAAC,GAAG,EAAE;YACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;UAC1B;UACA,IAAI,EAAE,IAAI,IAAI,IAAY,EAAE,IAAI,IAAI,EAAU;YAC5C,IAAI,CAAC,GAAG,EAAE;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;UAC5B;UACA,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;MACrC;IACF;IACA,OAAO,WAAK,CAAC,CAAC,UAAU,CAAC,GAAG;EAC9B;AACF;;;AC/MyD;AACf;AAI1C,MAAM,aAAa,GAAG;EACpB,OAAO,EAAE,CAAC;EACV,OAAO,EAAE,CAAC;EACV,OAAO,EAAE;AACX,CAAC;AAID,MAAM,OAAO,GAAG;EAEd,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,CAAC;EACX,EAAE,EAAE,CAAC;EACL,MAAM,EAAE,CAAC;EAET,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,CAAC;EACR,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,OAAO,EAAE;AACX,CAAC;AAID,MAAM,MAAM,CAAC;EACX,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;AACF;AAKA,MAAM,SAAS,SAAS,MAAM,CAAC;EAC7B,WAAW,CAAC,IAAI,EAAE;IAChB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAEtB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;AACF;AAEA,MAAM,OAAO,SAAS,MAAM,CAAC;EAC3B,WAAW,CAAC,YAAY,EAAE;IACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAEpB,IAAI,CAAC,YAAY,GAAG,YAAY;EAClC;AACF;AAEA,MAAM,QAAQ,SAAS,MAAM,CAAC;EAE5B,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;AACF;AAGA,MAAM,UAAU,SAAS,MAAM,CAAC;EAE9B,WAAW,CAAC,EAAE,EAAE;IACd,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,EAAE;EACd;AACF;AAOA,MAAM,IAAI,SAAS,MAAM,CAAC;EAExB,WAAW,CAAC,IAAI,EAAE;IAChB,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACjB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;AACF;AAOA,MAAM,QAAQ,SAAS,MAAM,CAAC;EAK5B,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE;IAC3B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,SAAS,GAAG,SAAS;EAC5B;AACF;AAQA,MAAM,SAAS,SAAS,MAAM,CAAC;EAE7B,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAClB,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO;EACxC;AACF;AAMA,MAAM,WAAW,SAAS,MAAM,CAAC;EAE/B,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,SAAS,GACZ,OAAO,KAAK,KAAK,SAAS,GACtB,aAAa,CAAC,OAAO,GACrB,aAAa,CAAC,OAAO;EAC7B;AACF;AAKA,MAAM,WAAW,SAAS,MAAM,CAAC;EAM/B,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE;IAC1D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,EAAE;IACZ,IAAI,CAAC,OAAO,GAAG,OAAO;IACtB,IAAI,CAAC,SAAS,GAAG,SAAS;EAC5B;AACF;AAYA,MAAM,YAAY,SAAS,MAAM,CAAC;EAOhC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE;IAChE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,GAAG,EAAE;IACZ,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,MAAM,GAAG,MAAM;IACpB,IAAI,CAAC,SAAS,GAAG,SAAS;EAC5B;AACF;AASA,MAAM,aAAa,SAAS,MAAM,CAAC;EAOjC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE;IACpE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,SAAS,GAAG,SAAS;IAC1B,IAAI,CAAC,SAAS,GAAG,SAAS;EAC5B;AACF;AAEA,MAAM,UAAM,CAAC;EACX,WAAW,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,MAAM,GAAG,IAAI;EACpB;EAEA,OAAO,kBAAkB,CAAC,EAAE,EAAE;IAC5B,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;EAC1C;EAGA,QAAQ,GAAG;IACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EACjC;EAGA,OAAO,CAAC,EAAE,EAAE;IACV,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;MACzB,MAAM,IAAI,WAAW,CACnB,0CAA0C,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,GACrE,CAAC;IACH;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;IACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,GAAG;EACZ;EAeA,KAAK,GAAG;IACN,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MAChC,IAAI,CAAC,8DAA8D,CAAC;IACtE;IACA,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC;EAC7B;EAEA,WAAW,GAAG;IACZ,MAAM,YAAY,GAAG,EAAE;IAEvB,OAAO,IAAI,EAAE;MACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;MACvB,QAAQ,GAAG,CAAC,EAAE;QACZ,KAAK,KAAK,CAAC,MAAM;UACf,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;UAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC;UACf;QAEF,KAAK,KAAK,CAAC,MAAM;UAAE;YAEjB,IAAI,CAAC,QAAQ,CAAC,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAE1B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;cAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC;cACf,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE;cAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC;cACf,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;cACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;cAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;cAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACvD,CAAC,MAAM;cACL,MAAM,IAAI,WAAW,CACnB,kFACF,CAAC;YACH;YACA;UACF;QAEA,KAAK,KAAK,CAAC,MAAM;QACjB,KAAK,KAAK,CAAC,GAAG;UAEZ,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;QAElC,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,KAAK,CAAC,MAAM;UAEf,MAAM,IAAI,WAAW,CACnB,oCAAoC,GAAG,CAAC,KAAK,aAC/C,CAAC;QAEH;UACE,IAAI,UAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACrC,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACf;UACF;UACA,MAAM,IAAI,WAAW,CACnB,4CAA4C,GAAG,CAAC,EAAE,GACpD,CAAC;MACL;IACF;EACF;AACF;AASA,SAAS,uBAAuB,CAAC,MAAM,EAAE;EACvC,OAAO,IAAI,UAAM,CAAC,IAAI,WAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9C;AAUA,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE;EACzB,IAAI,CAAC,KAAK,CAAC,EAAE;IACX,OAAO,IAAI;EACb;EACA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;IACrB,OAAO,KAAK;EACd;EACA,QAAQ,CAAC,CAAC,IAAI;IACZ,KAAK,OAAO,CAAC,GAAG;MACd,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;IAC5B,KAAK,OAAO,CAAC,KAAK;MAChB,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;IAC5B,KAAK,OAAO,CAAC,KAAK;MAChB,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;IAC3D,KAAK,OAAO,CAAC,MAAM;MACjB,OACE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IACb,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAC7B,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;IAEnC,KAAK,OAAO,CAAC,OAAO;MAClB,OACE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAC3B,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAC3B,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;IAEzC;MACE,OAAO,KAAK;EAChB;AACF;AAOA,SAAS,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;EAClC,QAAQ,EAAE;IACR,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,GAAG,CAAC;IACd,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,GAAG,CAAC;IACd,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,GAAG,CAAC;IACd,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B,KAAK,KAAK,CAAC,IAAI;MACb,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACxC,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChD,KAAK,KAAK,CAAC,GAAG;MAAE;QACd,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAChB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;MAC3C;IACA,KAAK,KAAK,CAAC,IAAI;MAAE;QAEf,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,GAAG,CAAC,EAAE;UACX,GAAG,IAAI,GAAG;QACZ;QACA,OAAO,GAAG;MACZ;IACA,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,KAAK,CAAC;IAChB,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,KAAK,CAAC;IAChB,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,GAAG,CAAC;IACd,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,IAAI,CAAC;IACf,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,GAAG,CAAC;IACd,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,CAAC,IAAI,CAAC;IACf,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,GAAI,CAAC,GAAG,CAAC,GAAI,CAAC;IACtD,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACpD,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,KAAK,CAAC,GAAI,CAAC,GAAG,CAAC,GAAI,CAAC;IACvD,KAAK,KAAK,CAAC,QAAQ;MACjB,OAAO,CAAC,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,GAAI,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC,GAAI,CAAC;IAC9C,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB;MACE,OAAO,SAAS;EACpB;AACF;AAMA,SAAS,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE;EAC9B,QAAQ,EAAE;IACR,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC,CAAC;IACX,KAAK,KAAK,CAAC,OAAO;MAChB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrB,KAAK,KAAK,CAAC,KAAK;MACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB,KAAK,KAAK,CAAC,KAAK;MACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB,KAAK,KAAK,CAAC,QAAQ;MACjB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB,KAAK,KAAK,CAAC,IAAI;MAAE;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;MAC3C;IACA,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,GAAG,CAAG,CAAC,GAAG,GAAG,GAAI,IAAI,CAAC,EAAE,GAAI,GAAG,CAAC;IAC9C,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,GAAG,CAAG,CAAC,GAAG,GAAG,GAAI,IAAI,CAAC,EAAE,GAAI,GAAG,CAAC;IAC9C,KAAK,KAAK,CAAC,EAAE;MAAE;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;MAC3C;IACA,KAAK,KAAK,CAAC,GAAG;MAAE;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;MAC3C;IACA,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,CAAC;IACV,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC;MACE,OAAO,SAAS;EACpB;AACF;AAIA,MAAM,cAAc,GAAG,GAAG;AAK1B,SAAS,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE;EACxC,OAAO,EAAE,KAAK,KAAK,CAAC,GAAG,GAAG,WAAW,GAAG,aAAa,CAAC,OAAO;AAC/D;AAGA,SAAS,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;EACnD,QAAQ,EAAE;IAER,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,EAAE;MACX,OAAO,aAAa,CAAC,OAAO;IAG9B,KAAK,KAAK,CAAC,GAAG;IACd,KAAK,KAAK,CAAC,EAAE;IACb,KAAK,KAAK,CAAC,GAAG;MACZ,OAAO,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,aAAa,CAAC,OAAO,GAClE,SAAS,GACT,aAAa,CAAC,OAAO;IAE3B;MACE,OAAO,aAAa,CAAC,OAAO;EAChC;AACF;AAoBA,MAAM,aAAa,CAAC;EAClB,OAAO,CAAC,SAAS,GAAG,IAAI;EAExB,OAAO,CAAC,QAAQ,GAAG,IAAI;EAEvB,OAAO,CAAC,eAAe,GAAG,IAAI;EAE9B,OAAO,CAAC,iBAAiB,GAAG,IAAI;EAEhC,OAAO,CAAC,IAAI,GAAG;IAEb,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CACxB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,CACf,CAAC;IAEF,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,CACvB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,CACV,CAAC;IAGF,IAAI,CAAC,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAC9B,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,CACf,CAAC;IAGF,IAAI,CAAC,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAChC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACpB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACpB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACpB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACpB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EACpB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CACrB,CAAC;EACJ;EAQA,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE;IAC3B,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE;MAC7B,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB;IACA,IAAI,CAAC,OAAO,GAAG,KAAK;IACpB,IAAI,SAAS,GAAG,cAAc,EAAE;MAC9B,OAAO,IAAI;IACb;IACA,MAAM,KAAK,GAAG,EAAE;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;MAClC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B;IACA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACpC,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,OAAO,IAAI;IACb;IACA,aAAa,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAChC,OAAO,KAAK;EACd;EAIA,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,IAAI;MACpB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;QACrE;MACF;MACA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;MAC5B,IAAI,IAAI,GAAG,CAAC,EAAE;QACZ;MACF;MACA,QAAQ,IAAI,CAAC,IAAI;QACf,KAAK,OAAO,CAAC,KAAK;UAChB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;UACnB;QACF,KAAK,OAAO,CAAC,MAAM;UACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;UACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;UAClB;QACF,KAAK,OAAO,CAAC,OAAO;UAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;UAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;UAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;UACrB;MACJ;IACF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;MAC5B,KAAK,CAAC,MAAM,CAAC;IACf;IACA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE;MACpC,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,WAAW,GAAG,KAAK;MAC1B;IACF;EACF;EAEA,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;EACnD;EAgBA,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC5C,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;MACzD,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB;MACF;MACA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC;MAC/B,QAAQ,KAAK,CAAC,IAAI;QAChB,KAAK,OAAO,CAAC,MAAM;UACjB,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;UACxC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;YACjC,IAAI,CAAC,OAAO,GAAG,IAAI;UACrB;UACA;QAEF,KAAK,OAAO,CAAC,QAAQ;UACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;UAC7B;QAEF,KAAK,OAAO,CAAC,EAAE;UAAE;YAGf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;cACpB,IAAI,CAAC,OAAO,GAAG,IAAI;cACnB;YACF;YACA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,EAAE;cAChB;YACF;YACA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;cAGjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;kBACzB,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxD;cACF;YACF,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;cAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;gBAI/B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;kBACf,KAAK,CAAC,MAAM,GAAG,CAAC;kBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACtB;gBACA;cACF;cAIA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;cAC/B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,EAAE,SAAS,CAAC;cACrD,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;cACF;cACA,MAAM,UAAU,GAAG,KAAK;cACxB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC;cACtD,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB;cACF;cACA,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;gBAQ1C,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;gBAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;kBAC3C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB;gBACA,OAAO,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;kBAC3C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvB;cACF;cACA,KAAK,CAAC,MAAM,GAAG,CAAC;cAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;cAClE;cACA;YACF,CAAC,MAAM;cAEL,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;YACA;UACF;QAEA,KAAK,OAAO,CAAC,MAAM;UAAE;YAInB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;cACpB,IAAI,CAAC,OAAO,GAAG,IAAI;cACnB;YACF;YACA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAE9B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,EAAE;cAChB;YACF;YAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE;cAChB;YACF;YAEA,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;cAIzC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;cAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;gBAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;cACtB;cACA,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;gBAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;cACtB;YACF;YACA,KAAK,CAAC,MAAM,GAAG,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;cACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE;YACA;UACF;MACF;IACF;EACF;EAEA,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE;IACjB,IAAI,aAAa,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;MACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB;MACF;MACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;MACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;MAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;MAC/C;IACF;IAEA,IAAI,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;MACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB;MACF;MACA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAC5C;IACF;IAEA,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,IAAI;QACb,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;UACjC,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;QACA;MAEF,KAAK,KAAK,CAAC,KAAK;QACd,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;UACjC,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;QACA;MAEF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;UACpB,IAAI,CAAC,OAAO,GAAG,IAAI;UACnB;QACF;QACA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;UACjC,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;QACA;MAEF,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;UACF;UACA,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACrB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACrB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UAChB;QACF;MAEA,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;UACpB,IAAI,CAAC,OAAO,GAAG,IAAI;UACnB;QACF;QACA,KAAK,CAAC,GAAG,CAAC,CAAC;QACX;MAEF,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;UACF;UACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;YAChC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAEb,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;cACpC,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB,CAAC,MAAM;cACL,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;cAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI;cACrB;YACF;UACF,CAAC,MAAM;YAEL,IAAI,CAAC,OAAO,GAAG,IAAI;UACrB;UACA;QACF;MAEA,KAAK,KAAK,CAAC,KAAK;QAAE;UAChB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;UACF;UACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;YAChC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;cAC9B,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB,CAAC,MAAM;cAEL,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B;UACF,CAAC,MAAM;YAEL,IAAI,CAAC,OAAO,GAAG,IAAI;UACrB;UACA;QACF;MAEA,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;UACF;UACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;UACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;YAChE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAEb,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;cACpC,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB,CAAC,MAAM;cAGL,MAAM,CAAC,GAAG,CAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC;cAC3C,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;cAC7D;YACF;UACF,CAAC,MAAM;YAEL,IAAI,CAAC,OAAO,GAAG,IAAI;UACrB;UACA;QACF;MAEA;QACE,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB;IACJ;EACF;EAeA,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAE7B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MACjE,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;MACzD,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;MAC3B;IACF;IAGA,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;MAC9B,QAAQ,EAAE;QACR,KAAK,KAAK,CAAC,GAAG;UACZ,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;QAC3B,KAAK,KAAK,CAAC,GAAG;UAGZ,OAAO,IAAI,WAAW,CACpB,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,GAAG,KAAK,GAAG,CACtD,CAAC;QAIH,KAAK,KAAK,CAAC,GAAG;QACd,KAAK,KAAK,CAAC,EAAE;UACX,OAAO,KAAK;QACd,KAAK,KAAK,CAAC,GAAG;QACd,KAAK,KAAK,CAAC,GAAG;UACZ,OAAO,KAAK;QACd,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,KAAK,CAAC,EAAE;UACX,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC;QAC9B,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,KAAK,CAAC,EAAE;UACX,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC;MACjC;IACF;IAGA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MAChC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK;MACrB,QAAQ,EAAE;QACR,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,KAAK;UACd;UACA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;UAC3C;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UAGZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;UACpE;UACA;QACF,KAAK,KAAK,CAAC,IAAI;UACb,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;UAChE;UACA,IAAI,CAAC,KAAK,GAAG,EAAE;YACb,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;UAC5C;UACA,IAAI,CAAC,KAAK,IAAI,EAAE;YAGd,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YACpD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;UAC9C;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YAEX,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;UACpD;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YAEX,OAAO,IAAI,CAAC,WAAW,CACrB,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3C,MACF,CAAC;UACH;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YAEX,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;UACpD;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;UAC3B;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,OAAO,MAAM;UACf;UACA,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,OAAO,KAAK;UACd;UACA;QACF,KAAK,KAAK,CAAC,EAAE;UACX,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,OAAO,MAAM;UACf;UACA,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,OAAO,KAAK;UACd;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UAGZ,IACE,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IAC9B,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IACvB,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EACvB;YACA,OAAO,KAAK;UACd;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UAGZ,IACE,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IAC9B,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IACvB,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IACnC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EACvB;YACA,OAAO,KAAK;UACd;UACA;MACJ;IACF;IAEA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MACjC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK;MACtB,QAAQ,EAAE;QACR,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,KAAK;UACd;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;UAC1C;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,KAAK;UACd;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM;UACf;UACA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;UAC1C;UACA;QACF,KAAK,KAAK,CAAC,GAAG;UACZ,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,OAAO,KAAK;UACd;UACA,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,OAAO,MAAM;UACf;UACA;QACF,KAAK,KAAK,CAAC,EAAE;UACX,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,OAAO,KAAK;UACd;UACA,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,OAAO,MAAM;UACf;UACA;MACJ;IACF;IAEA,OAAO,IAAI,YAAY,CACrB,EAAE,EACF,KAAK,EACL,MAAM,EACN,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CACxD,CAAC;EACH;EAYA,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE;IAEtB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MAClC,MAAM,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;MAC5C,IAAI,CAAC,KAAK,SAAS,EAAE;QACnB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;MAC3B;IACF;IAGA,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE;MACvD,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;MAChE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,IAAI,YAAY,CACrB,OAAO,EACP,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,aAAa,CAAC,OAChB,CAAC;MACH;IACF;IAGA,IACE,EAAE,KAAK,KAAK,CAAC,GAAG,IAChB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IAC/B,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EACxB;MACA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IACnE;IAEA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MAElC,IACG,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IAC5C,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,GAAI,EAC9C;QACA,OAAO,OAAO,CAAC,OAAO;MACxB;MAEA,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;MACpD;MAEA,IAAI,aAAa,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE;QAC/D,OAAO,OAAO;MAChB;IACF;IAEA,OAAO,IAAI,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;EAC7E;EAYA,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;IAElC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MAC/B,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS;IACtC;IAEA,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;MAChC,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;MACnE,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,EAAE;QACpD,OAAO,IAAI;MACb;MACA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;MACzC;IACF;IAeA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE;MAChC,MAAM;QAAE,EAAE,EAAE,GAAG;QAAE,KAAK,EAAE,EAAE;QAAE,MAAM,EAAE;MAAG,CAAC,GAAG,IAAI;MAC/C,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,EAAE;QAExC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;UACvD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5C;QACA,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;UACvD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5C;MACF,CAAC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,EAAE;QAE/C,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;UACvD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5C;QACA,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;UACvD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5C;MACF;IACF;IAEA,OAAO,IAAI,aAAa,CACtB,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,GAClC,IAAI,CAAC,SAAS,GACd,aAAa,CAAC,OACpB,CAAC;EACH;AACF;;;AC7xCkB;AACqC;AACpB;AAInC,MAAM,EAAE,GAAG;EACT,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,CAAC;EACR,KAAK,EAAE,CAAC;EACR,EAAE,EAAE,CAAC;EACL,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EACN,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,KAAK,EAAE,CAAC;EACR,KAAK,EAAE,EAAE;EACT,KAAK,EAAE,EAAE;EACT,KAAK,EAAE,EAAE;EACT,IAAI,EAAE,EAAE;EACR,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,EAAE,EAAE,EAAE;EACN,KAAK,EAAE,EAAE;EACT,GAAG,EAAE,EAAE;EACP,KAAK,EAAE,EAAE;EAET,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,IAAI,EAAE,EAAE;EACR,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE;EACN,GAAG,EAAE,EAAE;EACP,EAAE,EAAE,EAAE;EACN,GAAG,EAAE,EAAE;EACP,IAAI,EAAE,EAAE;EACR,GAAG,EAAE,EAAE;EACP,GAAG,EAAE,EAAE;EACP,OAAO,EAAE,EAAE;EACX,QAAQ,EAAE;AACZ,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG;AACjC,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;AAEjC,MAAM,YAAY,CAAC;EAEjB,OAAO,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC;EAEpC,OAAO,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC;EAElC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE;IACzB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;IAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;IAC7B,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,EAAE,GAAG,EAAE;IACZ,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,QAAQ,GAAG,CAAC;EACnB;EAEA,YAAY,CAAC,IAAI,EAAE;IACjB,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;MACrC,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QACjC,OAAO,IAAI;MACb;MACA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QAChC,OAAO,KAAK;MACd;MACA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;MAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;MAC5B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;MAC9B,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;EACpC;EAEA,gBAAgB,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,OAAO,CAAC,GAAG;QACd,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;QAChC,OAAO,IAAI;MAEb,KAAK,OAAO,CAAC,KAAK;QAAE;UAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;UACpB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;UAC9D,OAAO,IAAI;QACb;MAEA,KAAK,OAAO,CAAC,KAAK;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;MAEjC,KAAK,OAAO,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;MAElC,KAAK,OAAO,CAAC,OAAO;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;MAEnC;QACE,OAAO,KAAK;IAChB;EACF;EAEA,aAAa,CAAC,IAAI,EAAE;IAClB,MAAM;MAAE,EAAE;MAAE,OAAO;MAAE;IAAU,CAAC,GAAG,IAAI;IAGvC,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MACpB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACnC;IAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;MAC/B,OAAO,KAAK;IACd;IAEA,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,QAAQ;QACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;UACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACxB,CAAC,MAAM,IAAI,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;UAC9C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACxB,CAAC,MAAM;UACL,OAAO,KAAK;QACd;QACA;MACF;QACE,OAAO,KAAK;IAChB;IACA,OAAO,IAAI;EACb;EAEA,cAAc,CAAC,IAAI,EAAE;IACnB,MAAM;MAAE,EAAE;MAAE,KAAK;MAAE;IAAO,CAAC,GAAG,IAAI;IAGlC,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;MACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK;MACd;MACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;MACnC,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;MAC9B,OAAO,KAAK;IACd;IACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;MAC7B,OAAO,KAAK;IACd;IAEA,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;QACpB;MACF;QACE,OAAO,KAAK;IAChB;IACA,OAAO,IAAI;EACb;EAEA,eAAe,CAAC,IAAI,EAAE;IACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;IAElC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;IAEpC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM;IACjC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM;IACnC,OAAO,IAAI;EACb;EAEA,OAAO,CAAC,OAAO,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;IAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;MAC1C,OAAO,IAAI;IACb;IAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;MAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAClC,OAAO,IAAI;MACb;MACA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;MAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACjC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACrC;IAEA,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;EAClC;EAEA,OAAO,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;IACnD,IAAI,EAAE,GAAG,CAAC;MACR,EAAE,GAAG,CAAC;IACR,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG;IAErB,OAAO,EAAE,GAAG,CAAC,EAAE;MACb,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QAClB,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;UAC7C;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;UACtB;QACF,KAAK,EAAE,CAAC,KAAK;UAAE;YACb,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;YAC1D;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;cACrB,EAAE,GAAG,GAAG;YACV;YACA;UACF;QACA,KAAK,EAAE,CAAC,IAAI;UACV,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;UACX;QACF,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACvC;QACF,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;UAC9B;QACF,KAAK,EAAE,CAAC,IAAI;UACV,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACxC;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACzC;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;UAC/C;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACzC;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;UAC3C;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACpC;QACF,KAAK,EAAE,CAAC,IAAI;UACV,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACxC;QACF,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAI,WAAW,CAAC;UAC7D;QACF,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAI,WAAW,CAAC;UAC7D;QACF,KAAK,EAAE,CAAC,EAAE;UACR,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACvC;QACF,KAAK,EAAE,CAAC,KAAK;UACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;UACzC;QACF,KAAK,EAAE,CAAC,GAAG;UACT,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;UAC7C;QACF,KAAK,EAAE,CAAC,KAAK;UAAE;YACb,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;YAC3B,IAAI,GAAG,GAAG,CAAC,EAAE;cACX,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;YAC1B,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE;cAClB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;YAC3B,CAAC,MAAM;cACL,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;YACnB;YACA;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;YAClB;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;YAClB;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;YAClB;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAC/C;UACF;QACA,KAAK,EAAE,CAAC,IAAI;UAAE;YACZ,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAC3D;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAC/C;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3C;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3C;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACzC;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1C;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACzC;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1C;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;YACzB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACvC;UACF;QACA,KAAK,EAAE,CAAC,EAAE;UAAE;YACV,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;YACzB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YACrC;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;YACzB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACvC;UACF;QACA,KAAK,EAAE,CAAC,IAAI;UAAE;YACZ,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW;YACtD,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;YACzC;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C;UACF;QACA,KAAK,EAAE,CAAC,GAAG;UAAE;YACX,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C;UACF;QACA,KAAK,EAAE,CAAC,OAAO;UACb,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;UACjC;QACF,KAAK,EAAE,CAAC,QAAQ;UACd,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;UAC/B;MACJ;IACF;EACF;AACF;AAMA,MAAM,uBAAuB,CAAC;EAE5B,OAAO,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;EAErC,OAAO,CAAC,EAAE,GAAG,CAAC;EAEd,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;IACd,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;MACjC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC7B;EACF;EAEA,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK;IACzB,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACb;MACF,KAAK,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACb;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,OAAO;QAChB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD;MACF,KAAK,KAAK,CAAC,KAAK;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD;MACF,KAAK,KAAK,CAAC,KAAK;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3D;MACF,KAAK,KAAK,CAAC,QAAQ;QACjB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD;MACF,KAAK,KAAK,CAAC,IAAI;QACb,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAI,WAChC,CAAC;QACD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAI,WAChC,CAAC;QACD;MACF,KAAK,KAAK,CAAC,EAAE;QACX,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ;MACF,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;UAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;UAC3D;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;UACxB;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;UACxB;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;UACxB;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;UAC3D;QACF;MACA,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;UACvE;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;UAC3D;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;UACzB;QACF;MACA,KAAK,KAAK,CAAC,IAAI;QAAE;UAEf,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW;UAC7D,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;UAC/C;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;UACvD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;UACvD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;UACrD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;UACtD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;UACrD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;UACtD;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;UAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;UACnD;QACF;MACA,KAAK,KAAK,CAAC,EAAE;QAAE;UACb,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;UAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;UACjD;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;UAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;UACnD;QACF;MACA,KAAK,KAAK,CAAC,QAAQ;QAAE;UACnB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;UACjC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;UACjC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG;UACpD;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;UACtD;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QAAE;UACd,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;UACtD;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B;MACF,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;UAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UACb,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UACb;QACF;MACA,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,CAAC,EAAE,EAAE;QACV;MACF,KAAK,KAAK,CAAC,IAAI;QAAE;UACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UACvC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;UACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;UAC7B;UACA;QACF;MACA,KAAK,KAAK,CAAC,KAAK;QAAE;UAChB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UACvC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;UACnC;QACF;MACA,KAAK,KAAK,CAAC,IAAI;QAAE;UAEf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACpB,MAAM,GAAG,GAAG,CAAE,CAAC,GAAG,CAAC,GAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,GAAG,KAAK,CAAC,EAAE;cACb,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;cACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;cACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;cAC1C;YACF;UACF;UACA;QACF;IACF;EACF;EAEA,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE;IAC9B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;MAChC,QAAQ,KAAK,CAAC,IAAI;QAChB,KAAK,OAAO,CAAC,MAAM;UACjB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;UACvB;QACF,KAAK,OAAO,CAAC,QAAQ;UACnB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;UACtB;QACF,KAAK,OAAO,CAAC,EAAE;UACb,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;UAC1C;UACA;QACF,KAAK,OAAO,CAAC,MAAM;UACjB,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;UAC1C,CAAC,MAAM;YACL,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;UAC/C;UACA;MACJ;IACF;EACF;EAQA,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;IAC9B,MAAM;MAAE;IAAa,CAAC,GAAG,OAAO,CAAC,IAAI;IACrC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;MAC3C,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;MACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;MAChC;MACA,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;MAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI;MAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;MACrE;IACF,CAAC;EACH;AACF;AAUA,SAAS,yBAAyB,CAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,gBAAgB,GAAG,KAAK,EACxB;EACA,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC;EAC/C,MAAM,EAAE,GACN,CAAC,gBAAgB,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;EACvE,IAAI,EAAE,EAAE;IACN,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;MAC3C,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;IAC5D,CAAC;EACH;EAEA,OAAO,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;AAC9D;;;ACzxBkB;AACiB;AAGnC,MAAM,gBAAE,GAAG;EACT,EAAE,EAAE,IAAI;EACR,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,IAAI;EACT,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,SAAS,EAAE,IAAI;EACf,SAAS,EAAE,IAAI;EACf,SAAS,EAAE,IAAI;EACf,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,IAAI;EACf,eAAe,EAAE,IAAI;EACrB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,SAAS,EAAE,IAAI;EACf,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,QAAQ,EAAE,IAAI;EACd,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,iBAAiB,EAAE,IAAI;EACvB,SAAS,EAAE;AACb,CAAC;AAGD,MAAM,SAAS,GAAG,IAAI;AAEtB,MAAM,GAAG,GAAG,IAAI;AAGhB,MAAM,OAAO,GAAG;EACd,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,IAAI;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE;AACR,CAAC;AAGD,MAAM,WAAW,GAAG,IAAI;AAExB,MAAM,UAAU,GAAG,IAAI;AAGvB,SAAS,cAAc,CAAC,CAAC,EAAE;EACzB,MAAM,GAAG,GAAG,EAAE;EACd,GAAG;IACD,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI;IACnB,CAAC,MAAM,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,IAAI,IAAI;IACd;IACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAChB,CAAC,QAAQ,CAAC,KAAK,CAAC;EAChB,OAAO,GAAG;AACZ;AAEA,SAAS,iBAAiB,CAAC,CAAC,EAAE;EAC5B,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E;AAEA,SAAS,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE;EACzB,OAAO,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;AACtD;AAEA,SAAS,GAAG,CAAC,KAAK,EAAE;EAClB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;EACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACd;IACF;IACA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;MACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;EACF;EACA,OAAO,GAAG;AACZ;AAGA,MAAM,YAAY,GAAG,CAEnB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EACpC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAEpC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAC7C,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EACpC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAExC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAC1C;AAID,MAAM,iBAAiB,GAAG;EACxB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAID,MAAM,cAAc,CAAC;EACnB,OAAO,CAAC,WAAW,GAAG,KAAK;EAE3B,OAAO,CAAC,cAAc,GAAG,IAAI;EAE7B,OAAO,CAAC,SAAS,GAAG,IAAI;EAExB,OAAO,CAAC,QAAQ,GAAG,CAAC;EAEpB,OAAO,CAAC,QAAQ,GAAG,CAAC;EAEpB,OAAO,CAAC,iBAAiB,GAAG,IAAI;EAEhC,OAAO,CAAC,aAAa,GAAG,IAAI;EAE5B,OAAO,CAAC,eAAe,GAAG,IAAI;EAE9B,OAAO,CAAC,aAAa,GAAG,IAAI;EAE5B,OAAO,CAAC,aAAa,GAAG,IAAI;EAE5B,OAAO,CAAC,gBAAgB,GAAG,IAAI;EAG/B,OAAO,CAAC,OAAO,GAAG,IAAI;EAEtB,OAAO,CAAC,MAAM,GAAG,IAAI;EAErB,OAAO,CAAC,IAAI,GAAG;IAEb,IAAI,CAAC,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,CAC7B,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,EACrB,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,EACrB,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,EACrB,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,EACrB,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,EACrB,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAE,CAAC,MAAM,CAAC,CACtB,CAAC;IAEF,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC5C,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC;IACA,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG;IAC9B,IAAI,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;IAE9B,IAAI,CAAC,CAAC,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAO,MAAM,EAAE,OAAO,CAAC,KAAK,CACtE,SAAS,EACT,GAAG,GAAG,CAAC,MAAM,CAAC,EACd,GAAG,GAAG,CAAC,OAAO,CAAC,CAChB,CAAC;IAEF,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,UAAU,CAClC,OAAO,CACL,OAAO,CAAC,MAAM,EACd,GAAG,CACD,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CACtC,GAAG,iBAAiB,CAAC,GAAG,CAAC,EACzB,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAC3B,WAAW,EACX,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CACzB,CACH,CACF,CACF,CAAC;IAED,IAAI,CAAC,CAAC,eAAe,GAAG,IAAI,UAAU,CACpC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;IAGD,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,UAAU,CAClC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAC7C,CAAC;IAED,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,UAAU,CAClC,OAAO,CACL,OAAO,CAAC,MAAM,EACd,GAAG,CAAC,CACF,CACE,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAC1B,WAAW,EACX,GAAG,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CACvC,EACD,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAChD,CACH,CACF,CAAC;IAGD,IAAI,CAAC,CAAC,gBAAgB,GAAG,IAAI,UAAU,CAAC,CACtC,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;IACrC,IAAI,CAAC,CAAC,WAAW,GAAG,IAAI;EAC1B;EAEA,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE;IACzB,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE;MAChC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB;IACA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;IAC9B,IAAI,CAAC,MAAM,GAAG,KAAK;IACnB,IAAI,CAAC,KAAK,GAAG,EAAE;IAGf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI;IAE3B,IAAI,CAAC,WAAW,GAAG,EAAE;IACrB,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC;EAChC;EAIA,WAAW,GAAG;IACZ,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;EACpD;EAEA,aAAa,CAAC,GAAG,EAAE;IACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;EAC5B;EAEA,YAAY,CAAC,CAAC,EAAE;IACd,GAAG;MACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;MAChB,CAAC,MAAM,CAAC;MACR,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,CAAC,IAAI,IAAI;MACX;MACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC,QAAQ,CAAC,KAAK,CAAC;EAClB;EAKA,YAAY,CAAC,CAAC,EAAE;IACd,SAAS;MACP,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;MAClB,CAAC,KAAK,CAAC;MACP,IAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAE,EAAE;QACnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB;MACF;MACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3B;EACF;EAEA,aAAa,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;IAC7B,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAwB,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C;EACF;EAEA,aAAa,CAAC,GAAG,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;EACxB;EAEA,aAAa,CAAC,GAAG,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;EACxB;EAEA,aAAa,CAAC,GAAG,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;EACxB;EAQA,YAAY,CAAC,IAAI,EAAE;IACjB,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;MAC1C,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,EAAE,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE;UAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC;QACA,OAAO,IAAI;MACb;MACA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QAChC,OAAO,KAAK;MACd;MACA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;MAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,KAAK;QAAE,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG;MAAE,CAAC,CAAC;MACxE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;MACzB,OAAO,IAAI;IACb;IACA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;EACpC;EAEA,gBAAgB,CAAC,IAAI,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,OAAO,CAAC,GAAG;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,OAAO,IAAI;MAEb,KAAK,OAAO,CAAC,KAAK;QAAE;UAClB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;UAClB,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;YAC1B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;UACf;UACA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;UACrB,OAAO,IAAI;QACb;MAEA,KAAK,OAAO,CAAC,KAAK;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;MAErC,KAAK,OAAO,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;MAEtC,KAAK,OAAO,CAAC,OAAO;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;MAEvC;QACE,OAAO,KAAK;IAChB;EACF;EAEA,kBAAkB,CAAC,IAAI,EAAE;IAGvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI;MACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACpC,OAAO,KAAK;MACd;MACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;MACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;MACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;MACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,CAAC;MACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,OAAO,CAAC;MACjC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;MAC5C,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,IAAI,CAAC;MAC9B,IAAI,CAAC,YAAY,CACf,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CACjE,CAAC;MACD,OAAO,IAAI;IACb,CAAC,SAAS;MACR,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3B;EACF;EAEA,iBAAiB,CAAC,IAAI,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MAClD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACtC;IAGA,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MACzB,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;QAC5C,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;UAC7C,OAAO,KAAK;QACd;QACA,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC3C,OAAO,IAAI;MACb;MACA,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;QAG5C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;UACpC,OAAO,KAAK;QACd;QACA,IAAI,CAAC,IAAI,CACP,gBAAE,CAAC,eAAe,EAClB,gBAAE,CAAC,SAAS,EACZ,IAAI,EACJ,gBAAE,CAAC,OAAO,EACV,gBAAE,CAAC,iBACL,CAAC;QACD,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MACpC,OAAO,KAAK;IACd;IACA,QAAQ,IAAI,CAAC,EAAE;MACb,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,QAAQ,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;QACvB;MACF,KAAK,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,QAAQ,CAAC;QACtB;MACF,KAAK,KAAK,CAAC,KAAK;QAGd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,CAAC;QACnC;MACF,KAAK,KAAK,CAAC,QAAQ;QACjB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;QACvB;MACF,KAAK,KAAK,CAAC,GAAG;QAEZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,eAAe,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QACnD;MACF,KAAK,KAAK,CAAC,GAAG;QAEZ;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;QAChD;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClD;MACF;QACE,OAAO,KAAK;IAChB;IACA,OAAO,IAAI;EACb;EAEA,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE;IAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI;MACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC7B,OAAO,KAAK;MACd;MACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;MACrB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,MAAM,CAAC;MAC/B,OAAO,IAAI;IACb,CAAC,SAAS;MACR,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACzB;EACF;EAEA,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE;IAGlC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI;MACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC7B,OAAO,KAAK;MACd;MACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,CAAC;MACnC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,MAAM,CAAC;MAC/B,OAAO,IAAI;IACb,CAAC,SAAS;MACR,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACzB;EACF;EAEA,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAClE,OAAO,KAAK;IACd;IACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;MAC9B,OAAO,KAAK;IACd;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,eAAe,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;IACzB,IAAI,KAAK,GAAG,CAAC,EAAE;MACb,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;MACxB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;IACvB,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;MACpB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;MACzB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;IACzB;IACA,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,iBAAiB,CAAC;IAC/B,OAAO,IAAI;EACb;EAEA,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;IAE7B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE;MACrD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;MACxB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,OAAO,IAAI;IACb;IAEA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI;MACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;MAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;QAEhC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,OAAO,CAAC;MACnC,CAAC,MAAM;QACL,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI;UACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC7B,OAAO,KAAK;UACd;UACA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;UAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;UAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;UAC1B,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,CAAC;UACnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;UAC1B,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,OAAO,CAAC;UAEjC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;UACrB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;UAC1B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;UACrB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,MAAM,CAAC;QACjC,CAAC,SAAS;UACR,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5B;MACF;MACA,OAAO,IAAI;IACb,CAAC,SAAS;MACR,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5B;EACF;EAEA,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI;MACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC7B,OAAO,KAAK;MACd;MAEA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;MAClB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;MAClD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;MAC5C,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;MAErB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;MAC1B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,EAAE,EAAE,GAAG,CAAC;MAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;MAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,IAAI,CAAC;MAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;MAC1B,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,GAAG,CAAC;MACjB,OAAO,IAAI;IACb,CAAC,SAAS;MACR,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5B;EACF;EAEA,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IACrC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE;MAC3C,OAAO,KAAK;IACd;IACA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE;MAC1C,OAAO,KAAK;IACd;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,CAAC;QACpB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF;QACE,OAAO,KAAK;IAChB;IACA,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,iBAAiB,CAAC;IAC/B,OAAO,IAAI;EACb;EAEA,yBAAyB,CAAC,IAAI,EAAE;IAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;MAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;IACzC;IACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;MAC5B,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,eAAe,CAAC;IACnC,OAAO,IAAI;EACb;EAEA,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAG5C,IACE,KAAK,KAAK,MAAM,IAChB,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,IAC1B,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAC5B,CAAC,KAAK,CAAC,MAAM,EACb;MACA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;MAC9B,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;UAC7B,OAAO,KAAK;QACd;QACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACzB,CAAC,SAAS;QACR,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACzB;IACF,CAAC,MAAM;MACL,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QAC9B,OAAO,KAAK;MACd;MACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC7B,OAAO,KAAK;MACd;IACF;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,QAAQ,EAAE;MACR,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;QAChD;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,EAAE;QACX,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,EAAE,gBAAE,CAAC,iBAAiB,CAAC;QAC1C;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF,KAAK,KAAK,CAAC,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;QACrB;MACF;QACE,OAAO,KAAK;IAChB;IACA,OAAO,IAAI;EACb;EAEA,kBAAkB,CAAC,IAAI,EAAE;IACvB,MAAM;MAAE,EAAE;MAAE,KAAK;MAAE;IAAO,CAAC,GAAG,IAAI;IAClC,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;MACzB,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC;IACjD;IAEA,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC;IAChD;IAEA,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE;MACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC;IACjD;IAEA,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MACpB,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;IAC5C;IAEA,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE;MACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC;IAC7C;IAEA,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;MAC3D,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC;IACpD;IAEA,OAAO,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC;EAC3D;EAMA,qBAAqB,CAAC,IAAI,EAAE;IAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE;MAEhC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;MAC1D,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;UACnC,OAAO,KAAK;QACd;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;UAClC,OAAO,KAAK;QACd;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QACvB,OAAO,IAAI;MACb;MAEA,IACE,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,KACvC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,EACxE;QACA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;UAC5C,OAAO,KAAK;QACd;QACA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;UAC3C,OAAO,KAAK;QACd;QACA,QAAQ,IAAI,CAAC,EAAE;UACb,KAAK,KAAK,CAAC,GAAG;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;YAC3B;UACF,KAAK,KAAK,CAAC,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,CAAC;YAC1B;UACF,KAAK,KAAK,CAAC,GAAG;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;YAC3B;QACJ;QACA,OAAO,IAAI;MACb;IACF;IAEA,IACE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAC3B,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,IACrB,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,EACxC;MACA,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7C,OAAO,KAAK;MACd;MACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;MAC5B,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,EAAE;MAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,eAAe,CAAC;IACrC,CAAC,MAAM;MAEL,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,MAAM,CAAC;IAC5B;IACA,OAAO,IAAI;EACb;EAGA,mBAAmB,CAAC,IAAI,EAAE;IACxB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC1C,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,EAAE,EAAE,GAAG,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACjC,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAE,CAAC,GAAG,CAAC;IACvB,OAAO,IAAI;EACb;EAUA,OAAO,CAAC,OAAO,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;MAC3C,OAAO,IAAI;IACb;IAGA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;MACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;MAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MAClC,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;MACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAClC,OAAO,IAAI;MACb;MACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,CAAC;MACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,OAAO,EAAE,gBAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;IACjD;IACA,IAAI,CAAC,IAAI,CAAC,gBAAE,CAAC,GAAG,CAAC;IAIjB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG;IAGrC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACvC,MAAM,WAAW,GAAG,EAAE;IACtB,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,IAAI,UAAU,CACrC,OAAO,CACL,OAAO,CAAC,IAAI,EACZ,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAC,CAAC,iBAAiB,CAAC,CACtD,CACF,CAAC;IAGD,MAAM,UAAU,GACd,OAAO,GAAG,CAAC,GACP,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GACxC,GAAG,CAAC,EAAE,CAAC;IACb,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IACnD,MAAM,gBAAgB,GAAG,IAAI,UAAU,CACrC,OAAO,CACL,OAAO,CAAC,IAAI,EACZ,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAChE,CACF,CAAC;IAGD,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,gBAAgB;IACrD,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,aAAa;IACnD,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,eAAe;IACvD,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,aAAa;IACnD,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,aAAa;IACnD,MAAM,QAAQ,GACZ,YAAY,CAAC,MAAM,GACnB,gBAAgB,CAAC,MAAM,GACvB,aAAa,CAAC,MAAM,GACpB,eAAe,CAAC,MAAM,GACtB,aAAa,CAAC,MAAM,GACpB,aAAa,CAAC,MAAM,GACpB,gBAAgB,CAAC,MAAM;IACzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC;IACvC,IAAI,GAAG,GAAG,CAAC;IACX,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;IAC7B,GAAG,IAAI,YAAY,CAAC,MAAM;IAC1B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACjC,GAAG,IAAI,gBAAgB,CAAC,MAAM;IAC9B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAC9B,GAAG,IAAI,aAAa,CAAC,MAAM;IAC3B,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC;IAChC,GAAG,IAAI,eAAe,CAAC,MAAM;IAC7B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAC9B,GAAG,IAAI,aAAa,CAAC,MAAM;IAC3B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAC9B,GAAG,IAAI,aAAa,CAAC,MAAM;IAC3B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACjC,OAAO,MAAM;EACf;AACF;AAYA,SAAS,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;EACtD,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAC9C,uBAAuB,CAAC,MAAM,CAChC,CAAC;AACH;AASA,SAAS,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;EACxC,MAAM;IAAE,EAAE;IAAE;EAAI,CAAC,GAAG,OAAO;EAC3B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;EAGrD,IAAI,QAAQ;EACZ,QAAQ,IAAI;IACV,KAAK,CAAC;MACJ,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;MAC/B,CAAC;MACD;IACF,KAAK,CAAC;MACJ,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;MACnC,CAAC;MACD;IACF,KAAK,CAAC;MACJ,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;MACnC,CAAC;MACD;IACF,KAAK,CAAC;MACJ,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;MACnC,CAAC;MACD;IACF;MACE,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;UAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACnC;MACF,CAAC;EACL;EAKA,QAAQ,GAAG;IACT,KAAK,CAAC;MACJ,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;QAC3C,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;MAC5B,CAAC;IACH,KAAK,CAAC;MACJ,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;QAC3C,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;MAC5B,CAAC;IACH,KAAK,CAAC;MACJ,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;QAC3C,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;MAC5B,CAAC;IACH,KAAK,CAAC;MACJ,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;QAC3C,EAAE,CACA,GAAG,CAAC,SAAS,CAAC,EACd,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAClB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAClB,GAAG,CAAC,SAAS,GAAG,CAAC,CACnB,CAAC;QACD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;MAC5B,CAAC;IACH;MAAS;QAEP,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;QACnC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK;UAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;UAC/B;UACA,EAAE,CAAC,GAAG,KAAK,CAAC;UACZ,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAC5B,CAAC;MACH;EACF;AACF;AAiBA,SAAS,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;EAC1D,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;EAC5D,IAAI,CAAC,KAAK,EAAE;IACV,OAAO,IAAI;EACb;EACA,IAAI;IACF,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CACvC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7B,iBACF,CAAC;IACD,OAAO,YAAY,CACjB,QAAQ,CAAC,OAAO,EAChB,MAAM,CAAC,MAAM,IAAI,CAAC,EAClB,KAAK,CAAC,MAAM,IAAI,CAClB,CAAC;EACH,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;;;AC7jCuE;AACjB;AAEtD,MAAM,cAAc,CAAC;EACnB,WAAW,CAAC,OAAO,EAAE;IAOnB,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI;IAE3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;MACnB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;MAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;IAC5B;IACA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC;EACtC;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,SAAS,EAAE;MAClB,WAAW,CAAC,qCAAqC,CAAC;IACpD;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC,IAAI,GAAG,EAAE;MACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC3B;IACA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;EACzC;EAEA,QAAQ,CAAC,GAAG,EAAE;IACZ,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;EAC1C;EAEA,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnB,WAAW,CAAC,+BAA+B,CAAC;EAC9C;AACF;AAEA,MAAM,eAAe,SAAS,cAAc,CAAC;EAC3C,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE;IAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;IACpE;IACA,IAAI,GAAG,EAAE;MACP,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC7B;MACF;MACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;MAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;MAC/B;IACF;IAEA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;MAC5B;IACF;IACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;EAChC;AACF;AAEA,MAAM,oBAAoB,SAAS,cAAc,CAAC;EAChD,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE;MACpC,MAAM,IAAI,KAAK,CACb,mEACF,CAAC;IACH;IACA,IAAI,GAAG,EAAE;MACP,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC7B;MACF;MACA,IAAI,IAAI,KAAK,IAAI,EAAE;QAEjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;MACjC;MACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;MAC/B;IACF;IAEA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;MAC5B;IACF;IACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;EAChC;AACF;AAEA,MAAM,kBAAkB,SAAS,cAAc,CAAC;EAC9C,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC;MAAE,QAAQ,EAAE;IAAK,CAAC,CAAC;EAC3B;EAEA,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1B,IAAI,CAAC,GAAG,EAAE;MACR,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC7B;IACF;IACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC;AACF;AAEA,MAAM,gBAAgB,SAAS,cAAc,CAAC;EAC5C,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE;IAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;IACrE;IACA,IAAI,GAAG,EAAE;MACP,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC7B;MACF;MACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;MAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;MAC/B;IACF;IAEA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;MAC5B;IACF;IACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;EAChC;AACF;AAEA,MAAM,uBAAuB,SAAS,cAAc,CAAC;EACnD,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC;MAAE,QAAQ,EAAE;IAAK,CAAC,CAAC;EAC3B;EAEA,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1B,IAAI,CAAC,GAAG,EAAE;MACR,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;IAC3E;IACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC7B;IACF;IACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC;AACF;AAEA,MAAM,kBAAkB,SAAS,cAAc,CAAC;EAC9C,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC;MAAE,QAAQ,EAAE;IAAK,CAAC,CAAC;EAC3B;EAEA,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1B,IAAI,CAAC,GAAG,EAAE;MACR,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC7B;IACF;IACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC;AACF;AAEA,MAAM,qBAAqB,SAAS,cAAc,CAAC;EACjD,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC;MAAE,QAAQ,EAAE;IAAK,CAAC,CAAC;EAC3B;EAEA,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1B,IAAI,CAAC,GAAG,EAAE;MACR,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;IACzE;IACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC7B;IACF;IACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC;EAEA,KAAK,GAAG;IACN,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC1B;AACF;AAEA,MAAM,gBAAgB,CAAC;EACrB,OAAO,mBAAmB,GAAG,CAAC;EAE9B,OAAO,mBAAmB,GAAG,EAAE;EAE/B,OAAO,aAAa,GAAG,GAAG;EAE1B,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,CAAC;EAE/B,WAAW,GAAG;IAOZ,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC;IAClC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC;EACtC;EAEA,IAAI,CAAC,QAAQ,GAAG;IACd,IAAI,QAAQ,GAAG,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;MACxC,QAAQ,IAAI,SAAS,CAAC,QAAQ;IAChC;IACA,OAAO,QAAQ;EACjB;EAEA,IAAI,CAAC,iBAAiB,GAAG;IACvB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,gBAAgB,CAAC,mBAAmB,EAAE;MAChE,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAAC,CAAC,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE;MACnD,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEA,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;IAClE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;IAE3B,IAAI,YAAY,CAAC,IAAI,GAAG,gBAAgB,CAAC,mBAAmB,EAAE;MAC5D,OAAO,KAAK;IACd;IACA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,iBAAiB,EAAE;MACzD,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEA,eAAe,CAAC,GAAG,EAAE;IACnB,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;EAChC;EAEA,eAAe,CAAC,GAAG,EAAE;IACnB,OAAO,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;EACvC;EAKA,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE;MACd;IACF;IACA,IAAI,SAAS,CAAC,QAAQ,EAAE;MACtB;IACF;IACA,SAAS,CAAC,QAAQ,GAAG,QAAQ;EAC/B;EAEA,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE;IACtB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5C,IAAI,CAAC,YAAY,EAAE;MACjB,OAAO,IAAI;IACb;IACA,IAAI,YAAY,CAAC,IAAI,GAAG,gBAAgB,CAAC,mBAAmB,EAAE;MAC5D,OAAO,IAAI;IACb;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE;MACd,OAAO,IAAI;IACb;IAEA,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;IAE3B,OAAO,SAAS;EAClB;EAEA,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE;IACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAI,KAAK,CACb,wEACF,CAAC;IACH;IACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAC7B;IACF;IACA,IAAI,IAAI,CAAC,CAAC,iBAAiB,EAAE;MAC3B,IAAI,CAAC,iDAAiD,CAAC;MACvD;IACF;IACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC;EAEA,KAAK,CAAC,QAAQ,GAAG,KAAK,EAAE;IACtB,IAAI,CAAC,QAAQ,EAAE;MACb,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;MAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB;IACA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC1B;AACF;;;AClS4C;AACwB;AACtB;AAC2B;AACG;AAC5B;AACM;AACF;AAEpD,MAAM,YAAY,GAAG;EACnB,OAAO,EAAE,CAAC;EACV,yBAAyB,EAAE,CAAC;EAC5B,SAAS,EAAE,CAAC;EACZ,qBAAqB,EAAE;AACzB,CAAC;AAED,MAAM,kBAAkB,CAAC;EACvB,OAAO,CAAC,OAAO,GAAG,IAAI;EAEtB,OAAO,UAAU,CAAC;IAAE;EAAQ,CAAC,EAAE;IAC7B,IAAI,CAAC,CAAC,OAAO,GAAG,OAAO;EACzB;EAEA,WAAW,CAAC;IAAE;EAAK,CAAC,EAAE;IACpB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;EAEA,IAAI,OAAO,GAAG;IACZ,OAAO,kBAAkB,CAAC,CAAC,OAAO;EACpC;EAEA,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,KAAK,EAAE;IAC7B,IAAI,KAAK,EAAE,QAAQ;IAGnB,IAAI,EAAE,YAAY,GAAG,EAAE;MACrB,KAAK,GAAG,EAAE;IACZ,CAAC,MAAM,IAAI,EAAE,YAAY,IAAI,EAAE;MAC7B,KAAK,GAAG,EAAE,CAAC,KAAK;IAClB,CAAC,MAAM,IAAI,EAAE,YAAY,UAAU,EAAE;MACnC,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK;IACxB;IACA,IAAI,KAAK,EAAE;MACT,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC;MACzD,IAAI,QAAQ,EAAE;QACZ,OAAO,QAAQ;MACjB;IACF;IAEA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;MACxB,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CACb,6DACF,CAAC;MACH;MACA,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IAChD,CAAC,MAAM;MACL,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IAC3C;IAGA,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAc,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;IAClE;IACA,OAAO,QAAQ;EACjB;EAKA,IAAI,mBAAmB,GAAG;IACxB,OAAO,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,kBAAkB,CAAC,CAAC,CAAC;EACtE;AACF;AAEA,SAAS,aAAa,CAAC,GAAG,EAAE;EAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IACvB,OAAO,IAAI;EACb;EACA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;IAE7B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACzB;EACA,OAAO,GAAG;AACZ;AAEA,MAAM,WAAW,CAAC;EAChB,OAAO,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;IACnD,IAAI,MAAM,GAAG,UAAU;IACvB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;MACpB,MAAM,IAAI,CAAC;IACb;IAEA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;IAC/B,IAAI,QAAQ,GAAG,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC;IAEf,MAAM,SAAS,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,OAAO,QAAQ,GAAG,GAAG,EAAE;QACrB,OAAO,KAAK,CAAC;QACb,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7B,QAAQ,IAAI,CAAC;MACf;MACA,QAAQ,IAAI,GAAG;MACf,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,IAAI,SAAS;MAC5C,OAAO,IAAI,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC;IAChC;IACA,OAAO,KAAK;EACd;EAEA,OAAO,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE;IACxB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;IAExC,QAAQ,OAAO;MACb,KAAK,YAAY,CAAC,OAAO;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC;MACjD,KAAK,YAAY,CAAC,yBAAyB;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC;MAClD,KAAK,YAAY,CAAC,SAAS;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;MAC7C,KAAK,YAAY,CAAC,qBAAqB;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC;IACtD;IACA,MAAM,IAAI,WAAW,CAAC,0BAA0B,OAAO,EAAE,CAAC;EAC5D;EAEA,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE;IAChC,MAAM;MAAE;IAAK,CAAC,GAAG,OAAO;IAExB,MAAM,OAAO,GAAG,EAAE;IAClB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;MACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD;IACA,OAAO,UAAU,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;MACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QAChD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC;MAClD;IACF,CAAC;EACH;EAEA,OAAO,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;IAEzC,SAAS,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;MAC9C,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5D;IAEA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;MACrB,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC;IAC7C;IAEA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;IAEnC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACpC,IAAI,KAAK,KAAK,CAAC,EAAE;MAGf,IAAI,CAAC,6CAA6C,GAAG,KAAK,CAAC;IAC7D;IAEA,IAAI,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE;MACX,MAAM,GAAG,EAAE;MACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MAC7B;IACF;IAEA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK;IAE9D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;IAG9D,OAAO,SAAS,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;MAKnE,MAAM,YAAY,GAAG,CAAC,IAAI,SAAS;MACnC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;MACpD,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC;MAChD,IAAI,CAAC,EAAE,CAAC;MAER,IAAI,CAAC,GAAG,UAAU;QAChB,GAAG,GAAG,CAAC;MAET,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;QAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;QAIhE,IAAI,CAAC,GAAG,WAAW,CACjB,EAAE,EACF,SAAS,EACT,WAAW,EACX,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EACb,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAClB,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QACtB,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;QAG/B,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE;QACjB,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC;QACtB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;UACjC,IAAI,CAAC,GAAG,GAAG,EAAE;YACX,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YACd,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO;UAC1B,CAAC,MAAM;YACL,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YACd,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO;UAC1B;QACF;QAEA,CAAC,IAAI,MAAM;QACX,GAAG,KAAK,CAAC;MACX;MAEA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;QAE/B,IAAI,EAAE,GAAG,CAAC;QACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;UACjC,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC7C;QAIA,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAG5D,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MACtE;IACF,CAAC;EACH;EAEA,OAAO,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE;IAC1C,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAEvB,MAAM,IAAI,GAAG,EAAE;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;MAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B;IACA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;IAE1B,OAAO,SAAS,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;MACxE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;MAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;QAC/B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;MAC5C;IACF,CAAC;EACH;EAEA,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,EAAE;MACX,MAAM,IAAI,WAAW,CAAC,WAAW,CAAC;IACpC;IAEA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;IACnC,IAAI,SAAS,KAAK,CAAC,EAAE;MACnB,MAAM,IAAI,WAAW,CAAC,iCAAiC,CAAC;IAC1D;IACA,MAAM;MAAE;IAAK,CAAC,GAAG,OAAO;IAExB,MAAM,GAAG,GAAG,EAAE;IACd,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;MACtC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD;IAEA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;IAElC,OAAO,SAAS,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;MAEnE,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;MAEzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;MAC5B,IAAI,CAAC;MACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;UACjB;QACF;MACF;MAGA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;MAC9C,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;MAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MAI9B,MAAM,CAAC,CAAC,CAAC,GACP,IAAI,KAAK,IAAI,GACT,IAAI,GACJ,IAAI,GAAI,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,IAAK,IAAI,GAAG,IAAI,CAAC;MAGzD,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC;IACrC,CAAC;EACH;EAEA,OAAO,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;IAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,MAAM,EAAE;MACX,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC;IACrC;IAEA,IAAI,CAAC,KAAK,EAAE;MACV,MAAM,IAAI,WAAW,CAAC,WAAW,CAAC;IACpC;IAEA,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAE7B,IAAI;MACF,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QACjE,IAAI,MAAM,EAAE;UACV,OAAO,MAAM;QACf;MACF;IACF,CAAC,CAAC,MAAM,CAAC;IAET,IAAI,CAAC,mEAAmE,CAAC;IAEzE,OAAO,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;EACzD;AACF;AAEA,SAAS,aAAa,CAAC,CAAC,EAAE;EACxB,IAAI,MAAM;EACV,IAAI,CAAC,YAAY,IAAI,EAAE;IACrB,MAAM,GAAG,CAAC;EACZ,CAAC,MAAM,IAAI,CAAC,YAAY,UAAU,EAAE;IAClC,MAAM,GAAG,CAAC,CAAC,IAAI;EACjB,CAAC,MAAM;IACL,OAAO,KAAK;EACd;EACA,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;AACnC;;;AC9WkD;AACI;AAEtD,SAAS,eAAe,CAAC,IAAI,EAAE;EAC7B,MAAM,uBAAuB,GAAG,GAAG;EACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;EAEhD,OAAO;IACL,cAAc,EAAE,KAAK;IAErB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;MACnB,IAAI,CAAC,cAAc,GAAG,IAAI;MAC1B,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW,GAAG;MAChB,OAAO,IAAI,EAAE,WAAW,IAAI,uBAAuB;IACrD,CAAC;IAED,IAAI,KAAK,GAAG;MACV,OAAO,IAAI,EAAE,KAAK,IAAI,QAAQ;IAChC;EACF,CAAC;AACH;AAEA,SAAS,0BAA0B,CACjC,IAAI,EACJ,KAAK,EACL,cAAc,EACd,aAAa,EACb;EACA,MAAM,WAAW,GAAG,EAAE;EACtB,IAAI,EAAE,cAAc,GAAG,WAAW,EAAE;IAClC,IAAI,CAAC,4CAA4C,CAAC;IAClD;EACF;EACA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;EAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1C,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,YAAY,IAAI,CAAC,EAAE;IAC7C,IAAI,CAAC,+BAA+B,CAAC;IACrC;EACF;EACA,QAAQ,QAAQ,CAAC,IAAI;IACnB,KAAK,KAAK;IACV,KAAK,IAAI;IACT,KAAK,KAAK;MACR,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;MACjC;IACF;MACE,IAAI,CAAC,oBAAoB,QAAQ,CAAC,IAAI,2BAA2B,CAAC;MAClE;EACJ;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,MAAM,YAAY,GAAG,EAAE;MACvB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;MAEhC,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC;IACxE,CAAC,MAAM,IAAI,GAAG,YAAY,GAAG,EAAE;MAE7B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC;EACF;AACF;AAEA,SAAS,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE;EACnE,IAAI,eAAe;EACnB,IAAI,iBAAiB,YAAY,IAAI,EAAE;IACrC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9C,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC;EAC1D,CAAC,MAAM,IAAI,iBAAiB,YAAY,IAAI,EAAE;IAC5C,eAAe,GAAG,iBAAiB;EACrC,CAAC,MAAM;IACL,MAAM,IAAI,WAAW,CAAC,wCAAwC,CAAC;EACjE;EAEA,MAAM,mBAAmB,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI;EAC7D,IAAI,mBAAmB,KAAK,KAAK,EAAE;IACjC,OAAO;MACL,IAAI,EAAE,mBAAmB;MACzB,EAAE,EAAE,eAAe,CAAC;IACtB,CAAC;EACH,CAAC,MAAM,IAAI,mBAAmB,KAAK,MAAM,EAAE;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;MAC7B,MAAM,MAAM,GAAG,EAAE;MACjB,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC;MACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,OAAO;UACL,IAAI,EAAE,MAAM;UACZ,UAAU,EAAE;QACd,CAAC;MACH;IACF;IAEA,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;IACzD,IACE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,IACpC,qBAAqB,YAAY,IAAI,EACrC;MACA,MAAM,QAAQ,GAAG,EAAE;MACnB,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;QACxC,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE;UACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B;MACF,CAAC,MAAM;QAEL,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;MAC5C;MACA,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;MAElC,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI;QACzC,UAAU,EAAE;MACd,CAAC;IACH,CAAC,MAAM,IAAI,qBAAqB,YAAY,GAAG,EAAE;MAC/C,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,EAAE,EAAE,qBAAqB,CAAC,QAAQ,CAAC;MACrC,CAAC;IACH;EACF;EACA,OAAO,IAAI;AACb;;;AC/HyC;AAQzC,MAAM,SAAS,GAAG,CAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACnE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACrE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAClE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACrE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACnE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACrE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACrE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EACpE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACrE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EACpE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CACtE;AASD,MAAM,WAAW,GAAG,CAClB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACvE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACxE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACvE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EACvE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EACvE,IAAI,EAA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AC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAClC,IAAI,MAAM,CAA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AI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CACvB,CAAC;EAEF,MAAM,GAAG,IAAI,UAAU,CAAC,CACtB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CACvB,CAAC;EAEF,IAAI,GAAG,IAAI,WAAW,CAAC,CACrB,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EACtE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,E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AAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IA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","sources":["webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./src/core/primitives.js","webpack://pdf.js/./src/core/base_stream.js","webpack://pdf.js/./src/core/string_utils.js","webpack://pdf.js/./src/core/core_utils.js","webpack://pdf.js/./external/qcms/qcms_utils.js","webpack://pdf.js/./external/qcms/qcms.js","webpack://pdf.js/./src/shared/math_clamp.js","webpack://pdf.js/./src/core/colorspace.js","webpack://pdf.js/./src/core/icc_colorspace.js","webpack://pdf.js/./src/core/stream.js","webpack://pdf.js/./src/core/chunked_stream.js","webpack://pdf.js/./src/shared/image_utils.js","webpack://pdf.js/./src/core/image_resizer.js","webpack://pdf.js/./src/core/decode_stream.js","webpack://pdf.js/./src/core/colorspace_utils.js","webpack://pdf.js/./src/core/jpg.js","webpack://pdf.js/./src/core/jpeg_stream.js","webpack://pdf.js/./src/core/operator_list.js","webpack://pdf.js/./src/core/pattern.js","webpack://pdf.js/./src/core/binary_cmap.js","webpack://pdf.js/./src/core/ascii_85_stream.js","webpack://pdf.js/./src/core/ascii_hex_stream.js","webpack://pdf.js/./external/brotli/decode.js","webpack://pdf.js/./src/core/brotli_stream.js","webpack://pdf.js/./external/jbig2/jbig2.js","webpack://pdf.js/./src/core/wasm_image.js","webpack://pdf.js/./src/core/jbig2_ccittFax.js","webpack://pdf.js/./src/core/ccitt_stream.js","webpack://pdf.js/./src/core/flate_stream.js","webpack://pdf.js/./src/core/jbig2_stream.js","webpack://pdf.js/./external/openjpeg/openjpeg.js","webpack://pdf.js/./src/core/jpx.js","webpack://pdf.js/./src/core/jpx_stream.js","webpack://pdf.js/./src/core/lzw_stream.js","webpack://pdf.js/./src/core/predictor_stream.js","webpack://pdf.js/./src/core/run_length_stream.js","webpack://pdf.js/./src/core/parser.js","webpack://pdf.js/./src/core/cmap.js","webpack://pdf.js/./src/core/encodings.js","webpack://pdf.js/./src/core/glyphlist.js","webpack://pdf.js/./src/core/unicode.js","webpack://pdf.js/./src/core/fonts_utils.js","webpack://pdf.js/./src/core/charsets.js","webpack://pdf.js/./src/core/data_builder.js","webpack://pdf.js/./src/core/cff_parser.js","webpack://pdf.js/./src/core/standard_fonts.js","webpack://pdf.js/./src/core/glyf.js","webpack://pdf.js/./src/core/to_unicode_map.js","webpack://pdf.js/./src/core/cff_font.js","webpack://pdf.js/./src/shared/obj_bin_transform_utils.js","webpack://pdf.js/./src/core/obj_bin_transform_core.js","webpack://pdf.js/./src/core/font_renderer.js","webpack://pdf.js/./src/core/metrics.js","webpack://pdf.js/./src/core/opentype_file_builder.js","webpack://pdf.js/./src/core/type1_parser.js","webpack://pdf.js/./src/core/type1_font.js","webpack://pdf.js/./src/core/fonts.js","webpack://pdf.js/./src/core/calibri_factors.js","webpack://pdf.js/./src/core/helvetica_factors.js","webpack://pdf.js/./src/core/liberationsans_widths.js","webpack://pdf.js/./src/core/myriadpro_factors.js","webpack://pdf.js/./src/core/segoeui_factors.js","webpack://pdf.js/./src/core/xfa_fonts.js","webpack://pdf.js/./src/core/postscript/lexer.js","webpack://pdf.js/./src/core/postscript/ast.js","webpack://pdf.js/./src/core/postscript/js_evaluator.js","webpack://pdf.js/./src/core/postscript/wasm_compiler.js","webpack://pdf.js/./src/core/image_utils.js","webpack://pdf.js/./src/core/function.js","webpack://pdf.js/./src/core/evaluator_utils.js","webpack://pdf.js/./src/core/bidi.js","webpack://pdf.js/./src/core/font_substitutions.js","webpack://pdf.js/./src/shared/murmurhash3.js","webpack://pdf.js/./src/core/image.js","webpack://pdf.js/./src/core/evaluator.js","webpack://pdf.js/./src/core/default_appearance.js","webpack://pdf.js/./src/shared/scripting_utils.js","webpack://pdf.js/./src/core/name_number_tree.js","webpack://pdf.js/./src/core/cleanup_helper.js","webpack://pdf.js/./src/core/file_spec.js","webpack://pdf.js/./src/core/xml_parser.js","webpack://pdf.js/./src/core/metadata_parser.js","webpack://pdf.js/./src/core/sound.js","webpack://pdf.js/./src/core/struct_tree.js","webpack://pdf.js/./src/core/catalog.js","webpack://pdf.js/./src/core/editor/pdf_images.js","webpack://pdf.js/./src/core/object_loader.js","webpack://pdf.js/./src/core/xfa/symbol_utils.js","webpack://pdf.js/./src/core/xfa/namespaces.js","webpack://pdf.js/./src/core/xfa/utils.js","webpack://pdf.js/./src/core/xfa/fonts.js","webpack://pdf.js/./src/core/xfa/text.js","webpack://pdf.js/./src/core/xfa/som.js","webpack://pdf.js/./src/core/xfa/xfa_object.js","webpack://pdf.js/./src/core/xfa/html_utils.js","webpack://pdf.js/./src/core/xfa/layout.js","webpack://pdf.js/./src/core/xfa/template.js","webpack://pdf.js/./src/core/xfa/bind.js","webpack://pdf.js/./src/core/xfa/data.js","webpack://pdf.js/./src/core/xfa/config.js","webpack://pdf.js/./src/core/xfa/connection_set.js","webpack://pdf.js/./src/core/xfa/datasets.js","webpack://pdf.js/./src/core/xfa/locale_set.js","webpack://pdf.js/./src/core/xfa/signature.js","webpack://pdf.js/./src/core/xfa/stylesheet.js","webpack://pdf.js/./src/core/xfa/xdp.js","webpack://pdf.js/./src/core/xfa/xhtml.js","webpack://pdf.js/./src/core/xfa/setup.js","webpack://pdf.js/./src/core/xfa/unknown.js","webpack://pdf.js/./src/core/xfa/builder.js","webpack://pdf.js/./src/core/xfa/parser.js","webpack://pdf.js/./src/core/xfa/factory.js","webpack://pdf.js/./src/core/annotation.js","webpack://pdf.js/./src/core/calculate_md5.js","webpack://pdf.js/./src/core/dataset_reader.js","webpack://pdf.js/./src/core/intersector.js","webpack://pdf.js/./src/core/calculate_sha_other.js","webpack://pdf.js/./src/core/calculate_sha256.js","webpack://pdf.js/./src/core/decrypt_stream.js","webpack://pdf.js/./src/core/sasl_prep.js","webpack://pdf.js/./src/core/crypto.js","webpack://pdf.js/./src/core/xref.js","webpack://pdf.js/./src/core/document.js","webpack://pdf.js/./src/core/pdf_manager.js","webpack://pdf.js/./src/shared/message_handler.js","webpack://pdf.js/./src/core/writer.js","webpack://pdf.js/./src/core/editor/pdf_editor.js","webpack://pdf.js/./src/shared/base_pdf_stream.js","webpack://pdf.js/./src/core/worker_stream.js","webpack://pdf.js/./src/core/worker.js","webpack://pdf.js/./src/pdf.worker.js"],"sourcesContent":["/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n  typeof process === \"object\" &&\n  process + \"\" === \"[object process]\" &&\n  !process.versions.nw &&\n  !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst BBOX_INIT = [Infinity, Infinity, -Infinity, -Infinity];\nconst F32_BBOX_INIT = new Float32Array(BBOX_INIT);\n\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n *  - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n *    `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n *  - SAVE is used, on the worker-thread, when saving modified annotations.\n *  - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n *    annotations are rendered onto the canvas (i.e. by being included in the\n *    operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n *    and their `annotationMode`-option.\n *  - IS_EDITING is used when editing is active in the viewer.\n *  - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n *    `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  IS_EDITING: 0x80,\n  OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3,\n};\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15,\n  POPUP: 16,\n  SIGNATURE: 101,\n  COMMENT: 102,\n};\n\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  INK_COLOR_AND_OPACITY: 24,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_THICKNESS: 32,\n  HIGHLIGHT_FREE: 33,\n  HIGHLIGHT_SHOW_ALL: 34,\n  DRAW_STEP: 41,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst MeshFigureType = {\n  TRIANGLES: 1,\n  LATTICE: 2,\n  PATCH: 3,\n};\n\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26,\n  RICHMEDIA: 27,\n};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\n};\n\n// Rendition action operations from Table 214, Section 12.6.4.13 of the PDF\n// specification (ISO 32000-1).\nconst AnnotationRenditionOperation = {\n  PLAY_OR_RESUME: 0,\n  STOP: 1,\n  PAUSE: 2,\n  RESUME: 3,\n  PLAY: 4,\n};\n\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n  // Intentionally start from 1 so it is easy to spot bad operators that will be\n  // 0's.\n  // PLEASE NOTE: We purposely keep any removed operators commented out, since\n  //              re-numbering the list would risk breaking third-party users.\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  // beginAnnotations: 78,\n  // endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  // paintJpegXObject: 82,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91,\n  setStrokeTransparent: 92,\n  setFillTransparent: 93,\n  rawFillPath: 94,\n};\n\n// In order to have a switch statement that is fast (i.e. which use a jump\n// table), we need to have the OPS in a contiguous range.\nconst DrawOPS = {\n  moveTo: 0,\n  lineTo: 1,\n  curveTo: 2,\n  quadraticCurveTo: 3,\n  closePath: 4,\n};\n\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\n\nfunction getVerbosityLevel() {\n  return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    // eslint-disable-next-line no-console\n    console.info(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    // eslint-disable-next-line no-console\n    console.warn(`Warning: ${msg}`);\n  }\n}\n\n/**\n * @param {string} msg\n * @returns {never}\n */\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  if (options && typeof url === \"string\") {\n    // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n    if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n      const dots = url.match(/\\./g);\n      // Avoid accidentally matching a *relative* URL pointing to a file named\n      // e.g. \"www.pdf\" or similar.\n      if (dots?.length >= 2) {\n        url = `http://${url}`;\n      }\n    }\n\n    // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n    // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n    if (options.tryConvertEncoding) {\n      try {\n        url = stringToUTF8String(url);\n      } catch {}\n    }\n  }\n\n  const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\n\n/**\n * Remove, or replace, the hash property of the URL.\n *\n * @param {URL|string} url - The absolute, or relative, URL.\n * @param {string} hash - The hash property (use an empty string to remove it).\n * @param {boolean} [allowRel] - Allow relative URLs.\n * @returns {string} The resulting URL string.\n */\nfunction updateUrlHash(url, hash, allowRel = false) {\n  const res = URL.parse(url);\n  if (res) {\n    res.hash = hash;\n    return res.href;\n  }\n  // Support well-formed relative URLs, necessary for `web/app.js` in GENERIC\n  // builds, by optionally falling back to string parsing.\n  if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n    return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n  }\n  return \"\";\n}\n\n// Extract the final component from a path string.\nfunction stripPath(str) {\n  return str.substring(str.lastIndexOf(\"/\") + 1);\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      prop in obj,\n      `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n    );\n  }\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false,\n  });\n  return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n  // eslint-disable-next-line no-shadow\n  function BaseException(message, name) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseException\n    ) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n\n  return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\n\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\n\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\n\nclass ResponseException extends BaseException {\n  constructor(msg, status, missing) {\n    super(msg, \"ResponseException\");\n    this.status = status;\n    this.missing = missing;\n  }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\n\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\n\nclass FeatureTest {\n  static get isLittleEndian() {\n    const buffer8 = new Uint8Array(4);\n    buffer8[0] = 1;\n    const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n\n    return shadow(this, \"isLittleEndian\", view32[0] === 1);\n  }\n\n  static get isOffscreenCanvasSupported() {\n    return shadow(\n      this,\n      \"isOffscreenCanvasSupported\",\n      typeof OffscreenCanvas !== \"undefined\"\n    );\n  }\n\n  static get isImageDecoderSupported() {\n    return shadow(\n      this,\n      \"isImageDecoderSupported\",\n      typeof ImageDecoder !== \"undefined\"\n    );\n  }\n\n  static get isFloat16ArraySupported() {\n    return shadow(\n      this,\n      \"isFloat16ArraySupported\",\n      typeof Float16Array !== \"undefined\"\n    );\n  }\n\n  static get isSanitizerSupported() {\n    return shadow(\n      this,\n      \"isSanitizerSupported\",\n      typeof Sanitizer !== \"undefined\"\n    );\n  }\n\n  static get platform() {\n    const { platform, userAgent } = navigator;\n\n    return shadow(this, \"platform\", {\n      isAndroid: userAgent.includes(\"Android\"),\n      isLinux: platform.includes(\"Linux\"),\n      isMac: platform.includes(\"Mac\"),\n      isWindows: platform.includes(\"Win\"),\n      isFirefox:\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        userAgent.includes(\"Firefox\"),\n    });\n  }\n\n  static get isCanvasFilterSupported() {\n    let ctx;\n    if (this.isOffscreenCanvasSupported) {\n      ctx = new OffscreenCanvas(1, 1).getContext(\"2d\");\n    } else if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"WORKER_THREAD\")) &&\n      typeof document !== \"undefined\"\n    ) {\n      ctx = document.createElement(\"canvas\").getContext(\"2d\");\n    }\n    // Spec-compliant Canvas2D defaults `ctx.filter` to \"none\". On\n    // browsers without filter support (Safari) the property is absent\n    // until you assign to it, after which it behaves like an ordinary\n    // JS property and stores whatever string you set without applying\n    // it. Probing the default lets us detect the difference reliably.\n    return shadow(this, \"isCanvasFilterSupported\", ctx?.filter !== undefined);\n  }\n\n  static get isAlphaColorInputSupported() {\n    if (\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"WORKER_THREAD\")) ||\n      typeof document === \"undefined\"\n    ) {\n      return shadow(this, \"isAlphaColorInputSupported\", false);\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"color\";\n    input.setAttribute(\"alpha\", \"\");\n    input.value = \"#ff000080\";\n    // If alpha is supported the color picker retains the alpha channel, so\n    // the value won't be a plain opaque color (7-char #rrggbb).\n    return shadow(\n      this,\n      \"isAlphaColorInputSupported\",\n      input.value !== \"#ff0000\"\n    );\n  }\n\n  static get isBackdropFilterSupported() {\n    return shadow(\n      this,\n      \"isBackdropFilterSupported\",\n      typeof CSS !== \"undefined\" && CSS.supports(\"backdrop-filter\", \"blur(1px)\")\n    );\n  }\n}\n\nclass Util {\n  static get hexNums() {\n    return shadow(\n      this,\n      \"hexNums\",\n      Array.from(Array(256).keys(), n => n.toString(16).padStart(2, \"0\"))\n    );\n  }\n\n  static makeHexColor(r, g, b) {\n    return `#${this.hexNums[r]}${this.hexNums[g]}${this.hexNums[b]}`;\n  }\n\n  // Concatenates two transformation matrices together and returns the result.\n  static transform(m1, m2) {\n    return [\n      m1[0] * m2[0] + m1[2] * m2[1],\n      m1[1] * m2[0] + m1[3] * m2[1],\n      m1[0] * m2[2] + m1[2] * m2[3],\n      m1[1] * m2[2] + m1[3] * m2[3],\n      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n      m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n    ];\n  }\n\n  // Multiplies m (an array-based transform) by md (a DOMMatrix transform).\n  static multiplyByDOMMatrix(m, md) {\n    return [\n      m[0] * md.a + m[2] * md.b,\n      m[1] * md.a + m[3] * md.b,\n      m[0] * md.c + m[2] * md.d,\n      m[1] * md.c + m[3] * md.d,\n      m[0] * md.e + m[2] * md.f + m[4],\n      m[1] * md.e + m[3] * md.f + m[5],\n    ];\n  }\n\n  // For 2d affine transforms\n  static applyTransform(p, m, pos = 0) {\n    const p0 = p[pos];\n    const p1 = p[pos + 1];\n    p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n    p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n  }\n\n  static applyTransformToBezier(p, transform, pos = 0) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    for (let i = 0; i < 6; i += 2) {\n      const pI = p[pos + i];\n      const pI1 = p[pos + i + 1];\n      p[pos + i] = pI * m0 + pI1 * m2 + m4;\n      p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n    }\n  }\n\n  static applyInverseTransform(p, m) {\n    const p0 = p[0];\n    const p1 = p[1];\n    const d = m[0] * m[3] - m[1] * m[2];\n    p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n  }\n\n  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\n  static axialAlignedBoundingBox(rect, transform, output) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    const r0 = rect[0];\n    const r1 = rect[1];\n    const r2 = rect[2];\n    const r3 = rect[3];\n\n    let a0 = m0 * r0 + m4;\n    let a2 = a0;\n    let a1 = m0 * r2 + m4;\n    let a3 = a1;\n    let b0 = m3 * r1 + m5;\n    let b2 = b0;\n    let b1 = m3 * r3 + m5;\n    let b3 = b1;\n\n    if (m1 !== 0 || m2 !== 0) {\n      // Non-scaling matrix: shouldn't be frequent.\n      const m1r0 = m1 * r0;\n      const m1r2 = m1 * r2;\n      const m2r1 = m2 * r1;\n      const m2r3 = m2 * r3;\n      a0 += m2r1;\n      a3 += m2r1;\n      a1 += m2r3;\n      a2 += m2r3;\n      b0 += m1r0;\n      b3 += m1r0;\n      b1 += m1r2;\n      b2 += m1r2;\n    }\n\n    output[0] = Math.min(output[0], a0, a1, a2, a3);\n    output[1] = Math.min(output[1], b0, b1, b2, b3);\n    output[2] = Math.max(output[2], a0, a1, a2, a3);\n    output[3] = Math.max(output[3], b0, b1, b2, b3);\n  }\n\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [\n      m[3] / d,\n      -m[1] / d,\n      -m[2] / d,\n      m[0] / d,\n      (m[2] * m[5] - m[4] * m[3]) / d,\n      (m[4] * m[1] - m[5] * m[0]) / d,\n    ];\n  }\n\n  // This calculation uses Singular Value Decomposition.\n  // The SVD can be represented with formula A = USV. We are interested in the\n  // matrix S here because it represents the scale values.\n  static singularValueDecompose2dScale(matrix, output) {\n    const m0 = matrix[0];\n    const m1 = matrix[1];\n    const m2 = matrix[2];\n    const m3 = matrix[3];\n    // Multiply matrix m with its transpose.\n    const a = m0 ** 2 + m1 ** 2;\n    const b = m0 * m2 + m1 * m3;\n    const c = m2 ** 2 + m3 ** 2;\n\n    // Solve the second degree polynomial to get roots.\n    const first = (a + c) / 2;\n    const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n    output[0] = Math.sqrt(first + second || 1);\n    output[1] = Math.sqrt(first - second || 1);\n  }\n\n  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n  // For coordinate systems whose origin lies in the bottom-left, this\n  // means normalization to (BL,TR) ordering. For systems with origin in the\n  // top-left, this means (TL,BR) ordering.\n  static normalizeRect(rect) {\n    const r = rect.slice(0); // clone rect\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n\n  // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n  // intersection of rect1 and rect2. If no intersection, returns 'null'\n  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(\n      Math.min(rect1[0], rect1[2]),\n      Math.min(rect2[0], rect2[2])\n    );\n    const xHigh = Math.min(\n      Math.max(rect1[0], rect1[2]),\n      Math.max(rect2[0], rect2[2])\n    );\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(\n      Math.min(rect1[1], rect1[3]),\n      Math.min(rect2[1], rect2[3])\n    );\n    const yHigh = Math.min(\n      Math.max(rect1[1], rect1[3]),\n      Math.max(rect2[1], rect2[3])\n    );\n    if (yLow > yHigh) {\n      return null;\n    }\n\n    return [xLow, yLow, xHigh, yHigh];\n  }\n\n  static pointBoundingBox(x, y, minMax) {\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static rectBoundingBox(x0, y0, x1, y1, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x1);\n    minMax[1] = Math.min(minMax[1], y0, y1);\n    minMax[2] = Math.max(minMax[2], x0, x1);\n    minMax[3] = Math.max(minMax[3], y0, y1);\n  }\n\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(\n          x0,\n          x1,\n          x2,\n          x3,\n          y0,\n          y1,\n          y2,\n          y3,\n          -c / b,\n          minMax\n        );\n      }\n      return;\n    }\n\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b + sqrtDelta) / a2,\n      minMax\n    );\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b - sqrtDelta) / a2,\n      minMax\n    );\n  }\n\n  // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x3);\n    minMax[1] = Math.min(minMax[1], y0, y3);\n    minMax[2] = Math.max(minMax[2], x0, x3);\n    minMax[3] = Math.max(minMax[3], y0, y3);\n\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-x0 + 3 * (x1 - x2) + x3),\n      6 * (x0 - 2 * x1 + x2),\n      3 * (x1 - x0),\n      minMax\n    );\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-y0 + 3 * (y1 - y2) + y3),\n      6 * (y0 - 2 * y1 + y2),\n      3 * (y1 - y0),\n      minMax\n    );\n  }\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    // In order to generate the following regex:\n    //  - create a PDF containing all the chars in the range 0000-FFFF with\n    //    a NFKC which is different of the char.\n    //  - copy and paste all those chars and get the ones where NFKC is\n    //    required.\n    // It appears that most the chars here contain some ligatures.\n    NormalizeRegex =\n      /([\\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;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n    p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n  );\n}\n\nfunction getUuid() {\n  if (\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n    typeof crypto.randomUUID === \"function\"\n  ) {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  crypto.getRandomValues(buf);\n  return bytesToString(buf);\n}\n\nfunction _isValidExplicitDest(validRef, validName, dest) {\n  if (!Array.isArray(dest) || dest.length < 2) {\n    return false;\n  }\n  const [page, zoom, ...args] = dest;\n  if (!validRef(page) && !Number.isInteger(page)) {\n    return false;\n  }\n  if (!validName(zoom)) {\n    return false;\n  }\n  const argsLen = args.length;\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (argsLen < 2 || argsLen > 3) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return argsLen === 0;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (argsLen > 1) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (argsLen !== 4) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (const arg of args) {\n    if (typeof arg === \"number\" || (allowNull && arg === null)) {\n      continue;\n    }\n    return false;\n  }\n  return true;\n}\n\n// Helpers for simple `Map.prototype.getOrInsertComputed()` invocations,\n// to avoid duplicate function creation.\nconst makeArr = () => [];\nconst makeMap = () => new Map();\nconst makeObj = () => Object.create(null);\nconst makeSet = () => new Set();\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/Blob/bytes#browser_compatibility\nif (\n  typeof PDFJSDev !== \"undefined\" &&\n  !PDFJSDev.test(\"SKIP_BABEL\") &&\n  typeof Blob.prototype.bytes !== \"function\"\n) {\n  Blob.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/Response/bytes#browser_compatibility\nif (\n  typeof PDFJSDev !== \"undefined\" &&\n  !PDFJSDev.test(\"SKIP_BABEL\") &&\n  typeof Response.prototype.bytes !== \"function\"\n) {\n  Response.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\n\n// TODO: Remove this once `Iterator.prototype.join` is generally available.\nif (typeof Iterator.prototype.join !== \"function\") {\n  // eslint-disable-next-line no-extend-native\n  Iterator.prototype.join = function (separator) {\n    return [...this].join(separator);\n  };\n}\n\nexport {\n  _isValidExplicitDest,\n  AbortException,\n  AnnotationActionEventType,\n  AnnotationBorderStyleType,\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMode,\n  AnnotationPrefix,\n  AnnotationRenditionOperation,\n  AnnotationReplyType,\n  AnnotationType,\n  assert,\n  BaseException,\n  BASELINE_FACTOR,\n  BBOX_INIT,\n  bytesToString,\n  createValidAbsoluteUrl,\n  DocumentActionEventType,\n  DrawOPS,\n  F32_BBOX_INIT,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  getUuid,\n  getVerbosityLevel,\n  ImageKind,\n  info,\n  InvalidPDFException,\n  isArrayEqual,\n  isNodeJS,\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  makeArr,\n  makeMap,\n  makeObj,\n  makeSet,\n  MeshFigureType,\n  normalizeUnicode,\n  OPS,\n  PageActionEventType,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  RenderingIntentFlag,\n  ResponseException,\n  setVerbosityLevel,\n  shadow,\n  stringToBytes,\n  stringToUTF8String,\n  stripPath,\n  SVG_NS,\n  TextRenderingMode,\n  UnknownErrorException,\n  unreachable,\n  updateUrlHash,\n  utf8StringToString,\n  Util,\n  VerbosityLevel,\n  warn,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, makeArr, shadow, unreachable } from \"../shared/util.js\";\n\nconst CIRCULAR_REF = Symbol(\"CIRCULAR_REF\");\nconst EOF = Symbol(\"EOF\");\n\nlet CmdCache = Object.create(null);\nlet NameCache = Object.create(null);\nlet RefCache = Object.create(null);\n\nfunction clearPrimitiveCaches() {\n  CmdCache = Object.create(null);\n  NameCache = Object.create(null);\n  RefCache = Object.create(null);\n}\n\nclass Name {\n  constructor(name) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      typeof name !== \"string\"\n    ) {\n      unreachable('Name: The \"name\" must be a string.');\n    }\n    this.name = name;\n  }\n\n  static get(name) {\n    // eslint-disable-next-line no-restricted-syntax\n    return (NameCache[name] ||= new Name(name));\n  }\n}\n\nclass Cmd {\n  constructor(cmd) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      typeof cmd !== \"string\"\n    ) {\n      unreachable('Cmd: The \"cmd\" must be a string.');\n    }\n    this.cmd = cmd;\n  }\n\n  static get(cmd) {\n    // eslint-disable-next-line no-restricted-syntax\n    return (CmdCache[cmd] ||= new Cmd(cmd));\n  }\n}\n\nconst nonSerializable = function nonSerializableClosure() {\n  return nonSerializable; // Creating closure on some variable.\n};\n\nclass Dict {\n  __nonSerializable__ = nonSerializable; // Disable cloning of the Dict.\n\n  #map = new Map();\n\n  objId = null;\n\n  suppressEncryption = false;\n\n  xref;\n\n  constructor(xref = null) {\n    this.xref = xref;\n  }\n\n  assignXref(newXref) {\n    this.xref = newXref;\n  }\n\n  get size() {\n    return this.#map.size;\n  }\n\n  #getValue(isAsync, key1, key2, key3) {\n    let value = this.#map.get(key1);\n    if (value === undefined && key2 !== undefined) {\n      if (\n        (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n        key2.length < key1.length\n      ) {\n        unreachable(\"Dict.#getValue: Expected keys to be ordered by length.\");\n      }\n      value = this.#map.get(key2);\n      if (value === undefined && key3 !== undefined) {\n        if (\n          (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n          key3.length < key2.length\n        ) {\n          unreachable(\"Dict.#getValue: Expected keys to be ordered by length.\");\n        }\n        value = this.#map.get(key3);\n      }\n    }\n    if (value instanceof Ref && this.xref) {\n      return isAsync\n        ? this.xref.fetchAsync(value, this.suppressEncryption)\n        : this.xref.fetch(value, this.suppressEncryption);\n    }\n    return value;\n  }\n\n  // Automatically dereferences Ref objects.\n  get(key1, key2, key3) {\n    return this.#getValue(/* isAsync = */ false, key1, key2, key3);\n  }\n\n  // Same as get(), but returns a promise and uses fetchIfRefAsync().\n  async getAsync(key1, key2, key3) {\n    return this.#getValue(/* isAsync = */ true, key1, key2, key3);\n  }\n\n  // Same as get(), but dereferences all elements if the result is an Array.\n  getArray(key1, key2, key3) {\n    let value = this.#getValue(/* isAsync = */ false, key1, key2, key3);\n\n    if (Array.isArray(value)) {\n      value = value.slice(); // Ensure that we don't modify the Dict data.\n      for (let i = 0, ii = value.length; i < ii; i++) {\n        if (value[i] instanceof Ref && this.xref) {\n          value[i] = this.xref.fetch(value[i], this.suppressEncryption);\n        }\n      }\n    }\n    return value;\n  }\n\n  // No dereferencing.\n  getRaw(key) {\n    return this.#map.get(key);\n  }\n\n  getKeys() {\n    return this.#map.keys();\n  }\n\n  // No dereferencing.\n  getRawValues() {\n    return this.#map.values();\n  }\n\n  getRawEntries() {\n    return this.#map.entries();\n  }\n\n  set(key, value) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      if (typeof key !== \"string\") {\n        unreachable('Dict.set: The \"key\" must be a string.');\n      } else if (value === undefined) {\n        unreachable('Dict.set: The \"value\" cannot be undefined.');\n      }\n    }\n    this.#map.set(key, value);\n  }\n\n  setIfNotExists(key, value) {\n    if (!this.has(key)) {\n      this.set(key, value);\n    }\n  }\n\n  setIfNumber(key, value) {\n    if (typeof value === \"number\") {\n      this.set(key, value);\n    }\n  }\n\n  setIfArray(key, value) {\n    if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n      this.set(key, value);\n    }\n  }\n\n  setIfDefined(key, value) {\n    if (value !== undefined && value !== null) {\n      this.set(key, value);\n    }\n  }\n\n  setIfName(key, value) {\n    if (typeof value === \"string\") {\n      this.set(key, Name.get(value));\n    } else if (value instanceof Name) {\n      this.set(key, value);\n    }\n  }\n\n  setIfDict(key, value) {\n    if (value instanceof Dict) {\n      this.set(key, value);\n    }\n  }\n\n  has(key) {\n    return this.#map.has(key);\n  }\n\n  *[Symbol.iterator]() {\n    for (const [key, value] of this.#map) {\n      yield [\n        key,\n        value instanceof Ref && this.xref\n          ? this.xref.fetch(value, this.suppressEncryption)\n          : value,\n      ];\n    }\n  }\n\n  static get empty() {\n    const emptyDict = new Dict(null);\n\n    emptyDict.set = (key, value) => {\n      unreachable(\"Should not call `set` on the empty dictionary.\");\n    };\n    return shadow(this, \"empty\", emptyDict);\n  }\n\n  static merge({ xref, dictArray, mergeSubDicts = false }) {\n    const mergedDict = new Dict(xref),\n      properties = new Map();\n\n    for (const dict of dictArray) {\n      if (!(dict instanceof Dict)) {\n        continue;\n      }\n      for (const [key, value] of dict.getRawEntries()) {\n        const property = properties.getOrInsertComputed(key, makeArr);\n\n        if (property.length && !(mergeSubDicts && value instanceof Dict)) {\n          // Ignore additional entries, if either:\n          //  - This is a \"shallow\" merge, where only the first element matters.\n          //  - The value is *not* a `Dict`, since other types cannot be merged.\n          continue;\n        }\n        property.push(value);\n      }\n    }\n    for (const [name, values] of properties) {\n      if (values.length === 1 || !(values[0] instanceof Dict)) {\n        mergedDict.set(name, values[0]);\n        continue;\n      }\n      const subDict = new Dict(xref);\n\n      for (const dict of values) {\n        for (const [key, value] of dict.getRawEntries()) {\n          subDict.setIfNotExists(key, value);\n        }\n      }\n      if (subDict.size > 0) {\n        mergedDict.set(name, subDict);\n      }\n    }\n    properties.clear();\n\n    return mergedDict.size > 0 ? mergedDict : Dict.empty;\n  }\n\n  clone() {\n    const dict = new Dict(this.xref);\n    for (const [key, value] of this.#map) {\n      dict.set(key, value);\n    }\n    return dict;\n  }\n\n  delete(key) {\n    this.#map.delete(key);\n  }\n}\n\nclass Ref {\n  #str;\n\n  constructor(str, num, gen) {\n    this.#str = str;\n    this.num = num;\n    this.gen = gen;\n  }\n\n  toString() {\n    // This function is hot, so we make the string as compact as possible.\n    // |this.gen| is almost always zero, so we treat that case specially.\n    return this.#str;\n  }\n\n  static fromString(str) {\n    const ref = RefCache[str];\n    if (ref) {\n      return ref;\n    }\n    const m = /^(\\d+)R(\\d*)$/.exec(str);\n    if (!m || m[1] === \"0\") {\n      return null;\n    }\n    const num = parseInt(m[1], 10),\n      gen = !m[2] ? 0 : parseInt(m[2], 10);\n    // eslint-disable-next-line no-restricted-syntax\n    return (RefCache[str] = new Ref(str, num, gen));\n  }\n\n  static get(num, gen) {\n    const str = gen === 0 ? `${num}R` : `${num}R${gen}`;\n    // eslint-disable-next-line no-restricted-syntax\n    return (RefCache[str] ||= new Ref(str, num, gen));\n  }\n}\n\n// The reference is identified by number and generation.\n// This structure stores only one instance of the reference.\nclass RefSet {\n  constructor(parent = null) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      parent &&\n      !(parent instanceof RefSet)\n    ) {\n      unreachable('RefSet: Invalid \"parent\" value.');\n    }\n    this._set = new Set(parent?._set);\n  }\n\n  has(ref) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      !(ref instanceof Ref) &&\n      typeof ref !== \"string\"\n    ) {\n      unreachable('RefSet: Invalid \"ref\" value in has.');\n    }\n    return this._set.has(ref.toString());\n  }\n\n  put(ref) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      !(ref instanceof Ref) &&\n      typeof ref !== \"string\"\n    ) {\n      unreachable('RefSet: Invalid \"ref\" value in put.');\n    }\n    this._set.add(ref.toString());\n  }\n\n  remove(ref) {\n    this._set.delete(ref.toString());\n  }\n\n  [Symbol.iterator]() {\n    return this._set.values();\n  }\n\n  clear() {\n    this._set.clear();\n  }\n}\n\nclass RefSetCache {\n  _map = new Map();\n\n  get size() {\n    return this._map.size;\n  }\n\n  get(ref) {\n    return this._map.get(ref.toString());\n  }\n\n  has(ref) {\n    return this._map.has(ref.toString());\n  }\n\n  put(ref, obj) {\n    this._map.set(ref.toString(), obj);\n  }\n\n  putAlias(ref, aliasRef) {\n    this._map.set(ref.toString(), this.get(aliasRef));\n  }\n\n  getOrPutComputed(ref, callback) {\n    const map = this._map,\n      refStr = ref.toString();\n\n    if (!map.has(refStr)) {\n      map.set(refStr, callback(ref));\n    }\n    return map.get(refStr);\n  }\n\n  [Symbol.iterator]() {\n    return this._map.values();\n  }\n\n  clear() {\n    this._map.clear();\n  }\n\n  *values() {\n    yield* this._map.values();\n  }\n\n  *items() {\n    for (const [ref, value] of this._map) {\n      yield [Ref.fromString(ref), value];\n    }\n  }\n\n  *keys() {\n    for (const ref of this._map.keys()) {\n      yield Ref.fromString(ref);\n    }\n  }\n}\n\nfunction isName(v, name) {\n  return v instanceof Name && (name === undefined || v.name === name);\n}\n\nfunction isCmd(v, cmd) {\n  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\n}\n\nfunction isDict(v, type) {\n  return (\n    v instanceof Dict && (type === undefined || isName(v.get(\"Type\"), type))\n  );\n}\n\nfunction isRefsEqual(v1, v2) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      v1 instanceof Ref && v2 instanceof Ref,\n      \"isRefsEqual: Both parameters should be `Ref`s.\"\n    );\n  }\n  return v1.num === v2.num && v1.gen === v2.gen;\n}\n\nexport {\n  CIRCULAR_REF,\n  clearPrimitiveCaches,\n  Cmd,\n  Dict,\n  EOF,\n  isCmd,\n  isDict,\n  isName,\n  isRefsEqual,\n  Name,\n  Ref,\n  RefSet,\n  RefSetCache,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bytesToString, shadow, unreachable } from \"../shared/util.js\";\n\nclass BaseStream {\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseStream\n    ) {\n      unreachable(\"Cannot initialize BaseStream.\");\n    }\n  }\n\n  /**\n   * @returns {number}\n   */\n  // eslint-disable-next-line getter-return\n  get length() {\n    unreachable(\"Abstract getter `length` accessed\");\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  // eslint-disable-next-line getter-return\n  get isEmpty() {\n    unreachable(\"Abstract getter `isEmpty` accessed\");\n  }\n\n  get isDataLoaded() {\n    return shadow(this, \"isDataLoaded\", true);\n  }\n\n  getByte() {\n    unreachable(\"Abstract method `getByte` called\");\n  }\n\n  /**\n   * @param {number | undefined} [length]\n   * @returns {Uint8Array}\n   */\n  getBytes(length) {\n    unreachable(\"Abstract method `getBytes` called\");\n  }\n\n  /**\n   * NOTE: This method can only be used to get image-data that is guaranteed\n   *       to be fully loaded, since otherwise intermittent errors may occur;\n   *       note the `ObjectLoader` class.\n   */\n  async getImageData(length, decoderOptions) {\n    return this.getBytes(length, decoderOptions);\n  }\n\n  async asyncGetBytes() {\n    unreachable(\"Abstract method `asyncGetBytes` called\");\n  }\n\n  get isAsync() {\n    return false;\n  }\n\n  get isAsyncDecoder() {\n    return false;\n  }\n\n  get isImageStream() {\n    return false;\n  }\n\n  get canAsyncDecodeImageFromBuffer() {\n    return false;\n  }\n\n  async getTransferableImage() {\n    return null;\n  }\n\n  peekByte() {\n    const peekedByte = this.getByte();\n    if (peekedByte !== -1) {\n      this.pos--;\n    }\n    return peekedByte;\n  }\n\n  peekBytes(length) {\n    const bytes = this.getBytes(length);\n    this.pos -= bytes.length;\n    return bytes;\n  }\n\n  getUint16() {\n    const b0 = this.getByte();\n    const b1 = this.getByte();\n    if (b0 === -1 || b1 === -1) {\n      return -1;\n    }\n    return (b0 << 8) + b1;\n  }\n\n  getInt32() {\n    const b0 = this.getByte();\n    const b1 = this.getByte();\n    const b2 = this.getByte();\n    const b3 = this.getByte();\n    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n  }\n\n  getByteRange(begin, end) {\n    unreachable(\"Abstract method `getByteRange` called\");\n  }\n\n  getString(length) {\n    return bytesToString(this.getBytes(length));\n  }\n\n  skip(n) {\n    this.pos += n || 1;\n  }\n\n  reset() {\n    unreachable(\"Abstract method `reset` called\");\n  }\n\n  moveStart() {\n    unreachable(\"Abstract method `moveStart` called\");\n  }\n\n  makeSubStream(start, length, dict = null) {\n    unreachable(\"Abstract method `makeSubStream` called\");\n  }\n\n  clone() {\n    unreachable(\"Abstract method `clone` called\");\n  }\n\n  /**\n   * @returns {Array | null}\n   */\n  getBaseStreams() {\n    return null;\n  }\n\n  getOriginalStream() {\n    return this.stream?.getOriginalStream() || this;\n  }\n}\n\nexport { BaseStream };\n","/* Copyright 2019 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes, Util, warn } from \"../shared/util.js\";\n\nfunction isAscii(str) {\n  return (\n    typeof str === \"string\" &&\n    // eslint-disable-next-line no-control-regex\n    (!str || /^[\\x00-\\x7F]*$/.test(str))\n  );\n}\n\n// If the string is null or undefined then it is returned as is.\nfunction stringToAsciiOrUTF16BE(str) {\n  if (str === null || str === undefined) {\n    return str;\n  }\n  return isAscii(str) ? str : stringToUTF16String(str, /* bigEndian = */ true);\n}\n\nfunction stringToUTF16HexString(str) {\n  const buf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    buf.push(Util.hexNums[(char >> 8) & 0xff], Util.hexNums[char & 0xff]);\n  }\n  return buf.join(\"\");\n}\n\nfunction stringToUTF16String(str, bigEndian = false) {\n  const buf = [];\n  if (bigEndian) {\n    buf.push(\"\\xFE\\xFF\");\n  }\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    buf.push(\n      String.fromCharCode((char >> 8) & 0xff),\n      String.fromCharCode(char & 0xff)\n    );\n  }\n  return buf.join(\"\");\n}\n\nconst PDFStringTranslateTable = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n  0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n  0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n  0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n  0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str, keepEscapeSequence = false) {\n  // See section 7.9.2.2 Text String Type.\n  // The string can contain some language codes bracketed with 0x1b,\n  // so we must remove them.\n  if (str[0] >= \"\\xEF\") {\n    let encoding;\n    if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n      encoding = \"utf-16be\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n      encoding = \"utf-16le\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n      encoding = \"utf-8\";\n    }\n\n    if (encoding) {\n      try {\n        const decoder = new TextDecoder(encoding, { fatal: true });\n        const buffer = stringToBytes(str);\n        const decoded = decoder.decode(buffer);\n        if (keepEscapeSequence || !decoded.includes(\"\\x1b\")) {\n          return decoded;\n        }\n        // eslint-disable-next-line no-control-regex\n        return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n      } catch (ex) {\n        warn(`stringToPDFString: \"${ex}\".`);\n      }\n    }\n  }\n  // ISO Latin 1\n  const strBuf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const charCode = str.charCodeAt(i);\n    if (!keepEscapeSequence && charCode === 0x1b) {\n      // eslint-disable-next-line no-empty\n      while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n      continue;\n    }\n    const code = PDFStringTranslateTable[charCode];\n    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n  }\n  return strBuf.join(\"\");\n}\n\nexport {\n  isAscii,\n  stringToAsciiOrUTF16BE,\n  stringToPDFString,\n  stringToUTF16HexString,\n  stringToUTF16String,\n};\n","/* Copyright 2019 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationEditorPrefix,\n  assert,\n  BaseException,\n  makeArr,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { Dict, isName, isRefsEqual, Name, Ref, RefSet } from \"./primitives.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\n\nconst PDF_VERSION_REGEXP = /^[1-9]\\.\\d$/;\nconst MAX_INT_32 = 2 ** 31 - 1;\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\n\nconst RESOURCES_KEYS_OPERATOR_LIST = [\n  \"ColorSpace\",\n  \"ExtGState\",\n  \"Font\",\n  \"Pattern\",\n  \"Properties\",\n  \"Shading\",\n  \"XObject\",\n];\n\nconst RESOURCES_KEYS_TEXT_CONTENT = [\n  \"ExtGState\",\n  \"Font\",\n  \"Properties\",\n  \"XObject\",\n];\n\nfunction getLookupTableFactory(initializer) {\n  let lookup;\n  return function () {\n    if (initializer) {\n      lookup = Object.create(null);\n      initializer(lookup);\n      initializer = null;\n    }\n    return lookup;\n  };\n}\n\nclass MissingDataException extends BaseException {\n  constructor(begin, end) {\n    super(`Missing data [${begin}, ${end})`, \"MissingDataException\");\n    this.begin = begin;\n    this.end = end;\n  }\n}\n\nclass ParserEOFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"ParserEOFException\");\n  }\n}\n\nclass XRefEntryException extends BaseException {\n  constructor(msg) {\n    super(msg, \"XRefEntryException\");\n  }\n}\n\nclass XRefParseException extends BaseException {\n  constructor(msg) {\n    super(msg, \"XRefParseException\");\n  }\n}\n\n/**\n * Combines multiple ArrayBuffers into a single Uint8Array.\n * @param {Array<ArrayBuffer>} arr - An array of ArrayBuffers.\n * @returns {Uint8Array}\n */\nfunction arrayBuffersToBytes(arr) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    for (const item of arr) {\n      assert(\n        item instanceof ArrayBuffer,\n        \"arrayBuffersToBytes - expected an ArrayBuffer.\"\n      );\n    }\n  }\n  const length = arr.length;\n  if (length === 0) {\n    return new Uint8Array(0);\n  }\n  if (length === 1) {\n    return new Uint8Array(arr[0]);\n  }\n  let dataLength = 0;\n  for (let i = 0; i < length; i++) {\n    dataLength += arr[i].byteLength;\n  }\n  const data = new Uint8Array(dataLength);\n  let pos = 0;\n  for (let i = 0; i < length; i++) {\n    const item = new Uint8Array(arr[i]);\n    data.set(item, pos);\n    pos += item.byteLength;\n  }\n  return data;\n}\n\nasync function fetchBinaryData(url) {\n  const response = await fetch(url);\n  if (!response.ok) {\n    throw new Error(\n      `Failed to fetch file \"${url}\" with \"${response.statusText}\".`\n    );\n  }\n  return response.bytes();\n}\n\n/**\n * Get the value of an inheritable property.\n *\n * If the PDF specification explicitly lists a property in a dictionary as\n * inheritable, then the value of the property may be present in the dictionary\n * itself or in one or more parents of the dictionary.\n *\n * If the key is not found in the tree, `undefined` is returned. Otherwise,\n * the value for the key is returned or, if `stopWhenFound` is `false`, a list\n * of values is returned.\n *\n * @param {Dict} dict - Dictionary from where to start the traversal.\n * @param {string} key - The key of the property to find the value for.\n * @param {boolean} getArray - Whether or not the value should be fetched as an\n *   array. The default value is `false`.\n * @param {boolean} stopWhenFound - Whether or not to stop the traversal when\n *   the key is found. If set to `false`, we always walk up the entire parent\n *   chain, for example to be able to find `\\Resources` placed on multiple\n *   levels of the tree. The default value is `true`.\n */\nfunction getInheritableProperty({\n  dict,\n  key,\n  getArray = false,\n  stopWhenFound = true,\n}) {\n  let values;\n  const visited = new RefSet();\n\n  while (dict instanceof Dict && !(dict.objId && visited.has(dict.objId))) {\n    if (dict.objId) {\n      visited.put(dict.objId);\n    }\n    const value = getArray ? dict.getArray(key) : dict.get(key);\n    if (value !== undefined) {\n      if (stopWhenFound) {\n        return value;\n      }\n      (values ||= []).push(value);\n    }\n    dict = dict.get(\"Parent\");\n  }\n  return values;\n}\n\n/**\n * Get the parent dictionary to update when a property is set.\n *\n * @param {Dict} dict - Dictionary from where to start the traversal.\n * @param {Ref} ref - The reference to the dictionary.\n * @param {XRef} xref - The `XRef` instance.\n */\nfunction getParentToUpdate(dict, ref, xref) {\n  const visited = new RefSet();\n  const firstDict = dict;\n  const result = { dict: null, ref: null };\n\n  while (dict instanceof Dict && !visited.has(ref)) {\n    visited.put(ref);\n    if (dict.has(\"T\")) {\n      break;\n    }\n    ref = dict.getRaw(\"Parent\");\n    if (!(ref instanceof Ref)) {\n      return result;\n    }\n    dict = xref.fetch(ref);\n  }\n  if (dict instanceof Dict && dict !== firstDict) {\n    result.dict = dict;\n    result.ref = ref;\n  }\n  return result;\n}\n\nfunction deepCompare(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (a instanceof Ref && b instanceof Ref) {\n    return isRefsEqual(a, b);\n  }\n  if (a instanceof Name && b instanceof Name) {\n    return a.name === b.name;\n  }\n\n  if (a instanceof Dict && b instanceof Dict) {\n    if (a.size !== b.size) {\n      return false;\n    }\n    for (const [key, value1] of a.getRawEntries()) {\n      const value2 = b.getRaw(key);\n      if (value2 === undefined || !deepCompare(value1, value2)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0, ii = a.length; i < ii; i++) {\n      if (!deepCompare(a[i], b[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  return false;\n}\n\n// prettier-ignore\nconst ROMAN_NUMBER_MAP = [\n  \"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\n  \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\n  \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"\n];\n\n/**\n * Converts positive integers to (upper case) Roman numerals.\n * @param {number} number - The number that should be converted.\n * @param {boolean} lowerCase - Indicates if the result should be converted\n *   to lower case letters. The default value is `false`.\n * @returns {string} The resulting Roman number.\n */\nfunction toRomanNumerals(number, lowerCase = false) {\n  assert(\n    Number.isInteger(number) && number > 0,\n    \"The number should be a positive integer.\"\n  );\n\n  const roman =\n    \"M\".repeat((number / 1000) | 0) +\n    ROMAN_NUMBER_MAP[((number % 1000) / 100) | 0] +\n    ROMAN_NUMBER_MAP[10 + (((number % 100) / 10) | 0)] +\n    ROMAN_NUMBER_MAP[20 + (number % 10)];\n  return lowerCase ? roman.toLowerCase() : roman;\n}\n\n// Checks if ch is one of the following characters: SPACE, TAB, CR or LF.\nfunction isWhiteSpace(ch) {\n  return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n}\n\n/**\n * Checks if something is an Array containing only boolean values,\n * and (optionally) checks its length.\n * @param {any} arr\n * @param {number | null} len\n * @returns {boolean}\n */\nfunction isBooleanArray(arr, len) {\n  return (\n    Array.isArray(arr) &&\n    (len === null || arr.length === len) &&\n    arr.every(x => typeof x === \"boolean\")\n  );\n}\n\n/**\n * Checks if something is an Array containing only numbers,\n * and (optionally) checks its length.\n * @param {any} arr\n * @param {number | null} len\n * @returns {boolean}\n */\nfunction isNumberArray(arr, len) {\n  if (Array.isArray(arr)) {\n    return (\n      (len === null || arr.length === len) &&\n      arr.every(x => typeof x === \"number\")\n    );\n  }\n\n  // This check allows us to have typed arrays but not the\n  // BigInt64Array/BigUint64Array types (their elements aren't \"number\").\n  return (\n    ArrayBuffer.isView(arr) &&\n    !(arr instanceof BigInt64Array || arr instanceof BigUint64Array) &&\n    (len === null || arr.length === len)\n  );\n}\n\n// Returns the matrix, or the fallback value if it's invalid.\nfunction lookupMatrix(arr, fallback) {\n  return isNumberArray(arr, 6) ? arr : fallback;\n}\n\n// Returns the rectangle, or the fallback value if it's invalid.\nfunction lookupRect(arr, fallback) {\n  return isNumberArray(arr, 4) ? arr : fallback;\n}\n\n// Returns the normalized rectangle, or the fallback value if it's invalid.\nfunction lookupNormalRect(arr, fallback) {\n  return isNumberArray(arr, 4) ? Util.normalizeRect(arr) : fallback;\n}\n\n/**\n * AcroForm field names use an array like notation to refer to\n * repeated XFA elements e.g. foo.bar[nnn].\n * see: XFA Spec Chapter 3 - Repeated Elements\n *\n * @param {string} path - XFA path name.\n * @returns {Array} - Array of Objects with the name and pos of\n * each part of the path.\n */\nfunction parseXFAPath(path) {\n  const positionPattern = /(.+)\\[(\\d+)\\]$/;\n  return path.split(\".\").map(component => {\n    const m = component.match(positionPattern);\n    if (m) {\n      return { name: m[1], pos: parseInt(m[2], 10) };\n    }\n    return { name: component, pos: 0 };\n  });\n}\n\nfunction escapePDFName(str) {\n  const buffer = [];\n  let start = 0;\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.charCodeAt(i);\n    // Whitespace or delimiters aren't regular chars, so escape them.\n    if (\n      char < 0x21 ||\n      char > 0x7e ||\n      char === 0x23 /* # */ ||\n      char === 0x28 /* ( */ ||\n      char === 0x29 /* ) */ ||\n      char === 0x3c /* < */ ||\n      char === 0x3e /* > */ ||\n      char === 0x5b /* [ */ ||\n      char === 0x5d /* ] */ ||\n      char === 0x7b /* { */ ||\n      char === 0x7d /* } */ ||\n      char === 0x2f /* / */ ||\n      char === 0x25 /* % */\n    ) {\n      if (start < i) {\n        buffer.push(str.substring(start, i));\n      }\n      buffer.push(`#${char.toString(16).padStart(2, \"0\")}`);\n      start = i + 1;\n    }\n  }\n\n  if (buffer.length === 0) {\n    return str;\n  }\n\n  if (start < str.length) {\n    buffer.push(str.substring(start));\n  }\n\n  return buffer.join(\"\");\n}\n\n// Replace \"(\", \")\", \"\\n\", \"\\r\" and \"\\\" by \"\\(\", \"\\)\", \"\\\\n\", \"\\\\r\" and \"\\\\\"\n// in order to write it in a PDF file.\nfunction escapeString(str) {\n  return str.replaceAll(/([()\\\\\\n\\r])/g, match => {\n    if (match === \"\\n\") {\n      return \"\\\\n\";\n    } else if (match === \"\\r\") {\n      return \"\\\\r\";\n    }\n    return `\\\\${match}`;\n  });\n}\n\nfunction _collectJS(entry, xref, list, parents) {\n  if (!entry) {\n    return;\n  }\n\n  let parent = null;\n  if (entry instanceof Ref) {\n    if (parents.has(entry)) {\n      // If we've already found entry then we've a cycle.\n      return;\n    }\n    parent = entry;\n    parents.put(parent);\n    entry = xref.fetch(entry);\n  }\n  if (Array.isArray(entry)) {\n    for (const element of entry) {\n      _collectJS(element, xref, list, parents);\n    }\n  } else if (entry instanceof Dict) {\n    if (isName(entry.get(\"S\"), \"JavaScript\")) {\n      const js = entry.get(\"JS\");\n      let code;\n      if (js instanceof BaseStream) {\n        code = js.getString();\n      } else if (typeof js === \"string\") {\n        code = js;\n      }\n      code &&= stringToPDFString(\n        code,\n        /* keepEscapeSequence = */ true\n      ).replaceAll(\"\\x00\", \"\");\n      if (code) {\n        list.push(code.trim());\n      }\n    }\n    _collectJS(entry.getRaw(\"Next\"), xref, list, parents);\n  }\n\n  if (parent) {\n    parents.remove(parent);\n  }\n}\n\nfunction collectActions(xref, dict, eventType) {\n  const actions = Object.create(null);\n  const additionalActionsDicts = getInheritableProperty({\n    dict,\n    key: \"AA\",\n    stopWhenFound: false,\n  });\n  if (additionalActionsDicts) {\n    // additionalActionsDicts contains dicts from ancestors\n    // as they're found in the tree from bottom to top.\n    // So the dicts are visited in reverse order to guarantee\n    // that actions from elder ancestors will be overwritten\n    // by ones from younger ancestors.\n    for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {\n      const additionalActions = additionalActionsDicts[i];\n      if (!(additionalActions instanceof Dict)) {\n        continue;\n      }\n      for (const [key, rawActionDict] of additionalActions.getRawEntries()) {\n        const action = eventType[key];\n        if (!action) {\n          continue;\n        }\n        const parents = new RefSet();\n        const list = [];\n        _collectJS(rawActionDict, xref, list, parents);\n        if (list.length > 0) {\n          actions[action] = list;\n        }\n      }\n    }\n  }\n  // Collect the Action if any (we may have one on pushbutton).\n  if (dict.has(\"A\")) {\n    const actionDict = dict.get(\"A\");\n    const parents = new RefSet();\n    const list = [];\n    _collectJS(actionDict, xref, list, parents);\n    if (list.length > 0) {\n      actions.Action = list;\n    }\n  }\n  return Object.keys(actions).length ? actions : null;\n}\n\nconst XMLEntities = {\n  /* < */ 0x3c: \"&lt;\",\n  /* > */ 0x3e: \"&gt;\",\n  /* & */ 0x26: \"&amp;\",\n  /* \" */ 0x22: \"&quot;\",\n  /* ' */ 0x27: \"&apos;\",\n};\n\nfunction* codePointIter(str) {\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.codePointAt(i);\n    if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {\n      // char is represented by two u16\n      i++;\n    }\n    yield char;\n  }\n}\n\nfunction encodeToXmlString(str) {\n  const buffer = [];\n  let start = 0;\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const char = str.codePointAt(i);\n    if (0x20 <= char && char <= 0x7e) {\n      // ascii\n      const entity = XMLEntities[char];\n      if (entity) {\n        if (start < i) {\n          buffer.push(str.substring(start, i));\n        }\n        buffer.push(entity);\n        start = i + 1;\n      }\n    } else {\n      if (start < i) {\n        buffer.push(str.substring(start, i));\n      }\n      buffer.push(`&#x${char.toString(16).toUpperCase()};`);\n      if (char > 0xffff) {\n        // char is represented by two u16\n        i++;\n      }\n      start = i + 1;\n    }\n  }\n\n  if (buffer.length === 0) {\n    return str;\n  }\n  if (start < str.length) {\n    buffer.push(str.substring(start));\n  }\n  return buffer.join(\"\");\n}\n\nfunction validateFontName(fontFamily, mustWarn = false) {\n  // See https://developer.mozilla.org/en-US/docs/Web/CSS/string.\n  const m = /^(\"|').*(\"|')$/.exec(fontFamily);\n  if (m && m[1] === m[2]) {\n    const re = new RegExp(`[^\\\\\\\\]${m[1]}`);\n    if (re.test(fontFamily.slice(1, -1))) {\n      if (mustWarn) {\n        warn(`FontFamily contains unescaped ${m[1]}: ${fontFamily}.`);\n      }\n      return false;\n    }\n  } else {\n    // See https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident.\n    for (const ident of fontFamily.split(/[ \\t]+/)) {\n      if (/^(?:\\d|-[\\d-])/.test(ident) || !/^[\\w\\\\-]+$/.test(ident)) {\n        if (mustWarn) {\n          warn(`FontFamily contains invalid <custom-ident>: ${fontFamily}.`);\n        }\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nfunction validateCSSFont(cssFontInfo) {\n  // See https://developer.mozilla.org/en-US/docs/Web/CSS/font-style.\n  const DEFAULT_CSS_FONT_OBLIQUE = \"14\";\n  // See https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight.\n  const DEFAULT_CSS_FONT_WEIGHT = \"400\";\n  const CSS_FONT_WEIGHT_VALUES = new Set([\n    \"100\",\n    \"200\",\n    \"300\",\n    \"400\",\n    \"500\",\n    \"600\",\n    \"700\",\n    \"800\",\n    \"900\",\n    \"1000\",\n    \"normal\",\n    \"bold\",\n    \"bolder\",\n    \"lighter\",\n  ]);\n\n  const { fontFamily, fontWeight, italicAngle } = cssFontInfo;\n\n  if (!validateFontName(fontFamily, true)) {\n    return false;\n  }\n\n  const weight = fontWeight ? fontWeight.toString() : \"\";\n  cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight)\n    ? weight\n    : DEFAULT_CSS_FONT_WEIGHT;\n\n  const angle = parseFloat(italicAngle);\n  cssFontInfo.italicAngle =\n    isNaN(angle) || angle < -90 || angle > 90\n      ? DEFAULT_CSS_FONT_OBLIQUE\n      : italicAngle.toString();\n\n  return true;\n}\n\nfunction recoverJsURL(str) {\n  // Attempt to recover valid URLs from `JS` entries with certain\n  // white-listed formats:\n  //  - window.open('http://example.com')\n  //  - app.launchURL('http://example.com', true)\n  //  - xfa.host.gotoURL('http://example.com')\n  const URL_OPEN_METHODS = [\"app.launchURL\", \"window.open\", \"xfa.host.gotoURL\"];\n  const regex = new RegExp(\n    \"^\\\\s*(\" +\n      URL_OPEN_METHODS.join(\"|\").replaceAll(\".\", \"\\\\.\") +\n      \")\\\\((?:'|\\\")([^'\\\"]*)(?:'|\\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))\",\n    \"i\"\n  );\n\n  const jsUrl = regex.exec(str);\n  if (jsUrl?.[2]) {\n    return {\n      url: jsUrl[2],\n      newWindow: jsUrl[1] === \"app.launchURL\" && jsUrl[3] === \"true\",\n    };\n  }\n\n  return null;\n}\n\nfunction numberToString(value) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      typeof value === \"number\",\n      `numberToString - the value (${value}) should be a number.`\n    );\n  }\n\n  if (Number.isInteger(value)) {\n    return value.toString();\n  }\n\n  const roundedValue = Math.round(value * 100);\n  if (roundedValue % 100 === 0) {\n    return (roundedValue / 100).toString();\n  }\n\n  if (roundedValue % 10 === 0) {\n    return value.toFixed(1);\n  }\n\n  return value.toFixed(2);\n}\n\nfunction getNewAnnotationsMap(annotationStorage) {\n  if (!annotationStorage) {\n    return null;\n  }\n  const newAnnotationsByPage = new Map();\n  // The concept of page in a XFA is very different, so\n  // editing is just not implemented.\n  for (const [key, value] of annotationStorage) {\n    if (!key.startsWith(AnnotationEditorPrefix)) {\n      continue;\n    }\n    newAnnotationsByPage\n      .getOrInsertComputed(value.pageIndex, makeArr)\n      .push(value);\n  }\n  return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null;\n}\n\nfunction getModificationDate(date = new Date()) {\n  if (!(date instanceof Date)) {\n    date = new Date(date);\n  }\n  const buffer = [\n    date.getUTCFullYear().toString(),\n    (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n    date.getUTCDate().toString().padStart(2, \"0\"),\n    date.getUTCHours().toString().padStart(2, \"0\"),\n    date.getUTCMinutes().toString().padStart(2, \"0\"),\n    date.getUTCSeconds().toString().padStart(2, \"0\"),\n  ];\n\n  return buffer.join(\"\");\n}\n\nfunction getRotationMatrix(rotation, width, height) {\n  switch (rotation) {\n    case 90:\n      return [0, 1, -1, 0, width, 0];\n    case 180:\n      return [-1, 0, 0, -1, width, height];\n    case 270:\n      return [0, -1, 1, 0, 0, height];\n    default:\n      throw new Error(\"Invalid rotation\");\n  }\n}\n\n/**\n * Get the number of bytes to use to represent the given positive integer.\n * If n is zero, the function returns 0 which means that we don't need to waste\n * a byte to represent it.\n * @param {number} x - a positive integer.\n * @returns {number}\n */\nfunction getSizeInBytes(x) {\n  // n bits are required for numbers up to 2^n - 1.\n  // So for a number x, we need ceil(log2(1 + x)) bits.\n  return Math.ceil(Math.ceil(Math.log2(1 + x)) / 8);\n}\n\nexport {\n  arrayBuffersToBytes,\n  codePointIter,\n  collectActions,\n  deepCompare,\n  encodeToXmlString,\n  escapePDFName,\n  escapeString,\n  fetchBinaryData,\n  getInheritableProperty,\n  getLookupTableFactory,\n  getModificationDate,\n  getNewAnnotationsMap,\n  getParentToUpdate,\n  getRotationMatrix,\n  getSizeInBytes,\n  IDENTITY_MATRIX,\n  isBooleanArray,\n  isNumberArray,\n  isWhiteSpace,\n  lookupMatrix,\n  lookupNormalRect,\n  lookupRect,\n  MAX_INT_32,\n  MissingDataException,\n  numberToString,\n  ParserEOFException,\n  parseXFAPath,\n  PDF_VERSION_REGEXP,\n  recoverJsURL,\n  RESOURCES_KEYS_OPERATOR_LIST,\n  RESOURCES_KEYS_TEXT_CONTENT,\n  toRomanNumerals,\n  validateCSSFont,\n  validateFontName,\n  XRefEntryException,\n  XRefParseException,\n};\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Alpha lives in the high byte of a pixel on a little-endian host and in the\n// low byte on a big-endian one.\nconst ALPHA_MASK =\n  new Uint8Array(new Uint32Array([1]).buffer)[0] === 1 ? 0xff000000 : 0x000000ff;\nconst RGB_MASK = ~ALPHA_MASK;\n\nclass QCMS {\n  static #memoryArray = null;\n\n  static _memory = null;\n\n  // Where the next `qcms_convert_array` result should land.\n  static _destBuffer = null;\n\n  static _destOffset = 0;\n\n  // Set when the destination is RGBA and its alpha channel already holds\n  // something worth keeping, which is the case whenever the image has an\n  // /SMask: `fillOpacity` has run by then. The Wasm side does not know about\n  // that, so it always fills alpha in, and the bytes are merged here instead of\n  // copied wholesale.\n  static _keepAlpha = false;\n\n  static get _memoryArray() {\n    const array = this.#memoryArray;\n    if (array?.byteLength) {\n      return array;\n    }\n    return (this.#memoryArray = new Uint8Array(this._memory.buffer));\n  }\n}\n\nfunction copy_result(ptr, len) {\n  // This function is called from the wasm module (it's an external\n  // \"C\" function). Its goal is to copy the result from the wasm memory\n  // to the destination buffer without any intermediate copies. The wasm side\n  // has already laid the result out the way the caller asked for it, so this is\n  // one bulk copy unless the destination's alpha has to survive.\n  const { _destBuffer, _destOffset, _keepAlpha, _memoryArray } = QCMS;\n  if (!_keepAlpha) {\n    _destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);\n    return;\n  }\n  const count = len >> 2;\n  const destStart = _destBuffer.byteOffset + _destOffset;\n  if (((destStart | ptr) & 3) === 0) {\n    // Both sides are pixel-aligned, so RGB can be merged a whole pixel at a\n    // time. `len` is a multiple of 4 here: the wasm side wrote RGBA.\n    const dest32 = new Uint32Array(_destBuffer.buffer, destStart, count);\n    const src32 = new Uint32Array(QCMS._memory.buffer, ptr, count);\n    for (let i = 0; i < count; i++) {\n      dest32[i] = (dest32[i] & ALPHA_MASK) | (src32[i] & RGB_MASK);\n    }\n    return;\n  }\n  for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 4, j += 4) {\n    _destBuffer[j] = _memoryArray[i];\n    _destBuffer[j + 1] = _memoryArray[i + 1];\n    _destBuffer[j + 2] = _memoryArray[i + 2];\n  }\n}\n\nexport { copy_result, QCMS };\n","/* THIS FILE IS GENERATED - DO NOT EDIT */\nimport { copy_result } from './qcms_utils.js';\n\n\n/**\n * @enum {0 | 1 | 2 | 3 | 4 | 5}\n */\nexport const DataType = Object.freeze({\n    RGB8: 0, \"0\": \"RGB8\",\n    RGBA8: 1, \"1\": \"RGBA8\",\n    BGRA8: 2, \"2\": \"BGRA8\",\n    Gray8: 3, \"3\": \"Gray8\",\n    GrayA8: 4, \"4\": \"GrayA8\",\n    CMYK: 5, \"5\": \"CMYK\",\n});\n\n/**\n * @enum {0 | 1 | 2 | 3}\n */\nexport const Intent = Object.freeze({\n    Perceptual: 0, \"0\": \"Perceptual\",\n    RelativeColorimetric: 1, \"1\": \"RelativeColorimetric\",\n    Saturation: 2, \"2\": \"Saturation\",\n    AbsoluteColorimetric: 3, \"3\": \"AbsoluteColorimetric\",\n});\n\n/**\n * Converts `src` and hands the result to `copy_result`, laid out as RGB, or as\n * RGBA with an opaque alpha when `add_alpha` is set.\n *\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {number} transformer\n * @param {Uint8Array} src\n * @param {boolean} add_alpha\n */\nexport function qcms_convert_array(transformer, src, add_alpha) {\n    const ptr0 = passArray8ToWasm0(src, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    wasm.qcms_convert_array(transformer, ptr0, len0, add_alpha);\n}\n\n/**\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {number} transformer\n * @param {number} src1\n * @param {number} src2\n * @param {number} src3\n * @param {number} src4\n * @returns {number}\n */\nexport function qcms_convert_four(transformer, src1, src2, src3, src4) {\n    const ret = wasm.qcms_convert_four(transformer, src1, src2, src3, src4);\n    return ret >>> 0;\n}\n\n/**\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {number} transformer\n * @param {number} src\n * @returns {number}\n */\nexport function qcms_convert_one(transformer, src) {\n    const ret = wasm.qcms_convert_one(transformer, src);\n    return ret >>> 0;\n}\n\n/**\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {number} transformer\n * @param {number} src1\n * @param {number} src2\n * @param {number} src3\n * @returns {number}\n */\nexport function qcms_convert_three(transformer, src1, src2, src3) {\n    const ret = wasm.qcms_convert_three(transformer, src1, src2, src3);\n    return ret >>> 0;\n}\n\n/**\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {number} transformer\n */\nexport function qcms_drop_transformer(transformer) {\n    wasm.qcms_drop_transformer(transformer);\n}\n\n/**\n * # Safety\n *\n * This function is called directly from JavaScript.\n * @param {Uint8Array} mem\n * @param {DataType} in_type\n * @param {Intent} intent\n * @returns {number}\n */\nexport function qcms_transformer_from_memory(mem, in_type, intent) {\n    const ptr0 = passArray8ToWasm0(mem, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ret = wasm.qcms_transformer_from_memory(ptr0, len0, in_type, intent);\n    return ret >>> 0;\n}\nfunction __wbg_get_imports() {\n    const import0 = {\n        __proto__: null,\n        __wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) {\n            throw new Error(getStringFromWasm0(arg0, arg1));\n        },\n        __wbg_copy_result_0d15f3bf9d9012ae: function(arg0, arg1) {\n            copy_result(arg0 >>> 0, arg1 >>> 0);\n        },\n        __wbindgen_init_externref_table: function() {\n            const table = wasm.__wbindgen_externrefs;\n            const offset = table.grow(4);\n            table.set(0, undefined);\n            table.set(offset + 0, undefined);\n            table.set(offset + 1, null);\n            table.set(offset + 2, true);\n            table.set(offset + 3, false);\n        },\n    };\n    return {\n        __proto__: null,\n        \"./qcms_bg.js\": import0,\n    };\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n    if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n        cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n    const ptr = malloc(arg.length * 1, 1) >>> 0;\n    getUint8ArrayMemory0().set(arg, ptr / 1);\n    WASM_VECTOR_LEN = arg.length;\n    return ptr;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n    numBytesDecoded += len;\n    if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n        cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n        cachedTextDecoder.decode();\n        numBytesDecoded = len;\n    }\n    return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n    wasmInstance = instance;\n    wasm = instance.exports;\n    wasmModule = module;\n    cachedUint8ArrayMemory0 = null;\n    wasm.__wbindgen_start();\n    return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n            } catch (e) {\n                const validResponse = module.ok && expectedResponseType(module.type);\n\n                if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else { throw e; }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n    } else {\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n        } else {\n            return instance;\n        }\n    }\n\n    function expectedResponseType(type) {\n        switch (type) {\n            case 'basic': case 'cors': case 'default': return true;\n        }\n        return false;\n    }\n}\n\nfunction initSync(module) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module !== undefined) {\n        if (Object.getPrototypeOf(module) === Object.prototype) {\n            ({module} = module)\n        } else {\n            console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n        }\n    }\n\n    const imports = __wbg_get_imports();\n    if (!(module instanceof WebAssembly.Module)) {\n        module = new WebAssembly.Module(module);\n    }\n    const instance = new WebAssembly.Instance(module, imports);\n    return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module_or_path !== undefined) {\n        if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n            ({module_or_path} = module_or_path)\n        } else {\n            console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n        }\n    }\n\n\n    const imports = __wbg_get_imports();\n\n    if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n        module_or_path = fetch(module_or_path);\n    }\n\n    const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n    return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TODO: Replace all occurrences of this function, and remove the file, once\n//       https://github.com/tc39/proposal-math-clamp/ is generally available.\nfunction MathClamp(v, min, max) {\n  // eslint-disable-next-line prefer-math-clamp/prefer-math-clamp\n  return Math.min(Math.max(v, min), max);\n}\n\nexport { MathClamp };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  FeatureTest,\n  FormatError,\n  info,\n  shadow,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\n/**\n * Resizes an RGB image with 3 components.\n * @param {TypedArray} src - The source buffer.\n * @param {TypedArray} dest - The destination buffer.\n * @param {number} w1 - Original width.\n * @param {number} h1 - Original height.\n * @param {number} w2 - New width.\n * @param {number} h2 - New height.\n * @param {number} alpha01 - Size reserved for the alpha channel.\n */\nfunction resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {\n  const COMPONENTS = 3;\n  alpha01 = alpha01 !== 1 ? 0 : alpha01;\n  const xRatio = w1 / w2;\n  const yRatio = h1 / h2;\n  let newIndex = 0,\n    oldIndex;\n  const xScaled = new Uint16Array(w2);\n  const w1Scanline = w1 * COMPONENTS;\n\n  for (let i = 0; i < w2; i++) {\n    xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\n  }\n  for (let i = 0; i < h2; i++) {\n    const py = Math.floor(i * yRatio) * w1Scanline;\n    for (let j = 0; j < w2; j++) {\n      oldIndex = py + xScaled[j];\n      dest[newIndex++] = src[oldIndex++];\n      dest[newIndex++] = src[oldIndex++];\n      dest[newIndex++] = src[oldIndex++];\n      newIndex += alpha01;\n    }\n  }\n}\n\nfunction resizeRgbaImage(src, dest, w1, h1, w2, h2, alpha01) {\n  const xRatio = w1 / w2;\n  const yRatio = h1 / h2;\n  let newIndex = 0;\n  const xScaled = new Uint16Array(w2);\n\n  if (alpha01 === 1) {\n    for (let i = 0; i < w2; i++) {\n      xScaled[i] = Math.floor(i * xRatio);\n    }\n    const src32 = new Uint32Array(src.buffer);\n    const dest32 = new Uint32Array(dest.buffer);\n    const rgbMask = FeatureTest.isLittleEndian ? 0x00ffffff : 0xffffff00;\n    for (let i = 0; i < h2; i++) {\n      const buf = src32.subarray(Math.floor(i * yRatio) * w1);\n      for (let j = 0; j < w2; j++) {\n        dest32[newIndex++] |= buf[xScaled[j]] & rgbMask;\n      }\n    }\n  } else {\n    const COMPONENTS = 4;\n    const w1Scanline = w1 * COMPONENTS;\n    for (let i = 0; i < w2; i++) {\n      xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\n    }\n    for (let i = 0; i < h2; i++) {\n      const buf = src.subarray(Math.floor(i * yRatio) * w1Scanline);\n      for (let j = 0; j < w2; j++) {\n        const oldIndex = xScaled[j];\n        dest[newIndex++] = buf[oldIndex];\n        dest[newIndex++] = buf[oldIndex + 1];\n        dest[newIndex++] = buf[oldIndex + 2];\n      }\n    }\n  }\n}\n\nfunction copyRgbaImage(src, dest, alpha01) {\n  if (alpha01 === 1) {\n    const src32 = new Uint32Array(src.buffer);\n    const dest32 = new Uint32Array(dest.buffer);\n    const rgbMask = FeatureTest.isLittleEndian ? 0x00ffffff : 0xffffff00;\n    for (let i = 0, ii = src32.length; i < ii; i++) {\n      dest32[i] |= src32[i] & rgbMask;\n    }\n  } else {\n    let j = 0;\n    for (let i = 0, ii = src.length; i < ii; i += 4) {\n      dest[j++] = src[i];\n      dest[j++] = src[i + 1];\n      dest[j++] = src[i + 2];\n    }\n  }\n}\n\nfunction isDefaultDecodeHelper(decode, expectedLen) {\n  if (!Array.isArray(decode)) {\n    return true;\n  }\n  const decodeLen = decode.length;\n\n  if (decodeLen < expectedLen) {\n    warn(\"Decode map length is too short.\");\n    return true;\n  }\n  if (decodeLen > expectedLen) {\n    info(\"Truncating too long decode map.\");\n    decode.length = expectedLen;\n  }\n  return false;\n}\n\nclass ColorSpace {\n  static #rgbBuf = new Uint8ClampedArray(3);\n\n  constructor(name, numComps) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === ColorSpace\n    ) {\n      unreachable(\"Cannot initialize ColorSpace.\");\n    }\n    this.name = name;\n    this.numComps = numComps;\n  }\n\n  /**\n   * Converts the color value to the RGB color. The color components are\n   * located in the src array starting from the srcOffset. Returns the array\n   * of the rgb components, each value ranging from [0,255].\n   */\n  getRgb(src, srcOffset, output = new Uint8ClampedArray(3)) {\n    this.getRgbItem(src, srcOffset, output, 0);\n    return output;\n  }\n\n  getRgbHex(src, srcOffset) {\n    const buffer = this.getRgb(src, srcOffset, ColorSpace.#rgbBuf);\n    return Util.makeHexColor(buffer[0], buffer[1], buffer[2]);\n  }\n\n  /**\n   * Converts the color value to the RGB color, similar to the getRgb method.\n   * The result placed into the dest array starting from the destOffset.\n   */\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    unreachable(\"Should not call ColorSpace.getRgbItem\");\n  }\n\n  /**\n   * Converts the specified number of the color values to the RGB colors.\n   * The colors are located in the src array starting from the srcOffset.\n   * The result is placed into the dest array starting from the destOffset.\n   * The src array items shall be in [0,2^bits) range, the dest array items\n   * will be in [0,255] range. alpha01 indicates how many alpha components\n   * there are in the dest array; it will be either 0 (RGB array) or 1 (RGBA\n   * array).\n   */\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    unreachable(\"Should not call ColorSpace.getRgbBuffer\");\n  }\n\n  /**\n   * Converts `count` unscaled colors to RGB, starting at `destOffset`.\n   * Components use the native color-space ranges expected by `getRgbItem`,\n   * and each output has a `3 + alpha01` byte stride.\n   * Subclasses may override this to batch expensive conversions.\n   */\n  getRgbItems(src, count, dest, destOffset, alpha01) {\n    const { numComps } = this;\n\n    for (let i = 0, srcOffset = 0; i < count; i++, srcOffset += numComps) {\n      this.getRgbItem(src, srcOffset, dest, destOffset);\n      destOffset += 3 + alpha01;\n    }\n  }\n\n  /**\n   * Determines the number of bytes required to store the result of the\n   * conversion done by the getRgbBuffer method. As in getRgbBuffer,\n   * |alpha01| is either 0 (RGB output) or 1 (RGBA output).\n   */\n  getOutputLength(inputLength, alpha01) {\n    unreachable(\"Should not call ColorSpace.getOutputLength\");\n  }\n\n  /**\n   * Returns true if source data will be equal the result/output data.\n   */\n  isPassthrough(bits) {\n    return false;\n  }\n\n  /**\n   * Refer to the static `ColorSpace.isDefaultDecode` method below.\n   */\n  isDefaultDecode(decode, bpc) {\n    return ColorSpace.isDefaultDecode(decode, this.numComps);\n  }\n\n  /**\n   * Fills in the RGB colors in the destination buffer.  alpha01 indicates\n   * how many alpha components there are in the dest array; it will be either\n   * 0 (RGB array) or 1 (RGBA array).\n   */\n  fillRgb(\n    dest,\n    originalWidth,\n    originalHeight,\n    width,\n    height,\n    actualHeight,\n    bpc,\n    comps,\n    alpha01\n  ) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'ColorSpace.fillRgb: Unsupported \"dest\" type.'\n      );\n    }\n    const count = originalWidth * originalHeight;\n    let rgbBuf = null;\n    const numComponentColors = 1 << bpc;\n    const needsResizing = originalHeight !== height || originalWidth !== width;\n\n    if (this.isPassthrough(bpc)) {\n      rgbBuf = comps;\n    } else if (\n      this.numComps === 1 &&\n      count > numComponentColors &&\n      this.name !== \"DeviceGray\" &&\n      this.name !== \"DeviceRGB\"\n    ) {\n      // Optimization: create a color map when there is just one component and\n      // we are converting more colors than the size of the color map. We\n      // don't build the map if the colorspace is gray or rgb since those\n      // methods are faster than building a map. This mainly offers big speed\n      // ups for indexed and alternate colorspaces.\n      //\n      // TODO it may be worth while to cache the color map. While running\n      // testing I never hit a cache so I will leave that out for now (perhaps\n      // we are reparsing colorspaces too much?).\n      const allColors =\n        bpc <= 8\n          ? new Uint8Array(numComponentColors)\n          : new Uint16Array(numComponentColors);\n      for (let i = 0; i < numComponentColors; i++) {\n        allColors[i] = i;\n      }\n      const colorMap = new Uint8ClampedArray(numComponentColors * 3);\n      this.getRgbBuffer(\n        allColors,\n        0,\n        numComponentColors,\n        colorMap,\n        0,\n        bpc,\n        /* alpha01 = */ 0\n      );\n\n      if (!needsResizing) {\n        // Fill in the RGB values directly into |dest|.\n        let destPos = 0;\n        for (let i = 0; i < count; ++i) {\n          const key = comps[i] * 3;\n          dest[destPos++] = colorMap[key];\n          dest[destPos++] = colorMap[key + 1];\n          dest[destPos++] = colorMap[key + 2];\n          destPos += alpha01;\n        }\n      } else {\n        rgbBuf = new Uint8Array(count * 3);\n        let rgbPos = 0;\n        for (let i = 0; i < count; ++i) {\n          const key = comps[i] * 3;\n          rgbBuf[rgbPos++] = colorMap[key];\n          rgbBuf[rgbPos++] = colorMap[key + 1];\n          rgbBuf[rgbPos++] = colorMap[key + 2];\n        }\n      }\n    } else if (!needsResizing) {\n      // Fill in the RGB values directly into |dest|.\n      this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);\n    } else {\n      rgbBuf = new Uint8ClampedArray(count * 3);\n      this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, /* alpha01 = */ 0);\n    }\n\n    if (rgbBuf) {\n      if (needsResizing) {\n        resizeRgbImage(\n          rgbBuf,\n          dest,\n          originalWidth,\n          originalHeight,\n          width,\n          height,\n          alpha01\n        );\n      } else {\n        let destPos = 0,\n          rgbPos = 0;\n        for (let i = 0, ii = width * actualHeight; i < ii; i++) {\n          dest[destPos++] = rgbBuf[rgbPos++];\n          dest[destPos++] = rgbBuf[rgbPos++];\n          dest[destPos++] = rgbBuf[rgbPos++];\n          destPos += alpha01;\n        }\n      }\n    }\n  }\n\n  /**\n   * True if the colorspace has components in the default range of [0, 1].\n   * This should be true for all colorspaces except for lab color spaces\n   * which are [0,100], [-128, 127], [-128, 127].\n   */\n  get usesZeroToOneRange() {\n    return shadow(this, \"usesZeroToOneRange\", true);\n  }\n\n  /**\n   * Checks if a decode map matches the default decode map for a color space.\n   * This handles the general decode maps where there are two values per\n   * component, e.g. [0, 1, 0, 1, 0, 1] for a RGB color.\n   * This does not handle Lab, Indexed, or Pattern decode maps since they are\n   * slightly different.\n   * @param {Array} decode - Decode map (usually from an image).\n   * @param {number} numComps - Number of components the color space has.\n   */\n  static isDefaultDecode(decode, numComps) {\n    if (isDefaultDecodeHelper(decode, numComps * 2)) {\n      return true;\n    }\n    for (let i = 0, ii = decode.length; i < ii; i += 2) {\n      if (decode[i] !== 0 || decode[i + 1] !== 1) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\n/**\n * Alternate color space handles both Separation and DeviceN color spaces.  A\n * Separation color space is actually just a DeviceN with one color component.\n * Both color spaces use a tinting function to convert colors to a base color\n * space.\n *\n * The default color is `new Float32Array(new Array(numComps).fill(1))`.\n */\nclass AlternateCS extends ColorSpace {\n  constructor(numComps, base, tintFn) {\n    super(\"Alternate\", numComps);\n    this.base = base;\n    this.tintFn = tintFn;\n    this.tmpBuf = new Float32Array(base.numComps);\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'AlternateCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    const tmpBuf = this.tmpBuf;\n    this.tintFn(src, srcOffset, tmpBuf, 0);\n    this.base.getRgbItem(tmpBuf, 0, dest, destOffset);\n  }\n\n  getRgbItems(src, count, dest, destOffset, alpha01) {\n    const { base, numComps, tintFn } = this;\n    const baseNumComps = base.numComps;\n    // Tint first so the base color space can convert the batch at once.\n    const tinted = new Float32Array(count * baseNumComps);\n\n    for (let i = 0, srcOffset = 0, tintedOffset = 0; i < count; i++) {\n      tintFn(src, srcOffset, tinted, tintedOffset);\n      srcOffset += numComps;\n      tintedOffset += baseNumComps;\n    }\n    base.getRgbItems(tinted, count, dest, destOffset, alpha01);\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'AlternateCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const tintFn = this.tintFn;\n    const base = this.base;\n    const scale = 1 / ((1 << bits) - 1);\n    const baseNumComps = base.numComps;\n    const usesZeroToOneRange = base.usesZeroToOneRange;\n    const isPassthrough =\n      (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;\n    let pos = isPassthrough ? destOffset : 0;\n    const baseBuf = isPassthrough\n      ? dest\n      : new Uint8ClampedArray(baseNumComps * count);\n    const numComps = this.numComps;\n\n    const scaled = new Float32Array(numComps);\n    const tinted = new Float32Array(baseNumComps);\n    let i, j;\n\n    for (i = 0; i < count; i++) {\n      for (j = 0; j < numComps; j++) {\n        scaled[j] = src[srcOffset++] * scale;\n      }\n      tintFn(scaled, 0, tinted, 0);\n      if (usesZeroToOneRange) {\n        for (j = 0; j < baseNumComps; j++) {\n          baseBuf[pos++] = tinted[j] * 255;\n        }\n      } else {\n        base.getRgbItem(tinted, 0, baseBuf, pos);\n        pos += baseNumComps;\n      }\n    }\n\n    if (!isPassthrough) {\n      base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return this.base.getOutputLength(\n      (inputLength * this.base.numComps) / this.numComps,\n      alpha01\n    );\n  }\n}\n\nclass PatternCS extends ColorSpace {\n  constructor(baseCS) {\n    super(\"Pattern\", null);\n    this.base = baseCS;\n  }\n\n  isDefaultDecode(decode, bpc) {\n    unreachable(\"Should not call PatternCS.isDefaultDecode\");\n  }\n}\n\n/**\n * The default color is `new Uint8Array([0])`.\n */\nclass IndexedCS extends ColorSpace {\n  #rgbLookup;\n\n  constructor(base, highVal, lookup) {\n    super(\"Indexed\", 1);\n    this.highVal = highVal;\n\n    const count = highVal + 1;\n    const length = base.numComps * count;\n    const palette = new Uint8Array(length);\n\n    if (lookup instanceof BaseStream) {\n      palette.set(lookup.getBytes(length));\n    } else if (typeof lookup === \"string\") {\n      for (let i = 0; i < length; ++i) {\n        palette[i] = lookup.charCodeAt(i);\n      }\n    } else {\n      throw new FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`);\n    }\n\n    this.#rgbLookup = new Uint8ClampedArray(count * 3);\n    base.getRgbBuffer(\n      palette,\n      0,\n      count,\n      this.#rgbLookup,\n      0,\n      /* bits = */ 8,\n      /* alpha01 = */ 0\n    );\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'IndexedCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    const rgbLookup = this.#rgbLookup;\n    const pos = MathClamp(Math.round(src[srcOffset]), 0, this.highVal) * 3;\n\n    dest[destOffset] = rgbLookup[pos];\n    dest[destOffset + 1] = rgbLookup[pos + 1];\n    dest[destOffset + 2] = rgbLookup[pos + 2];\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'IndexedCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const { highVal } = this;\n    const rgbLookup = this.#rgbLookup;\n\n    for (let i = 0; i < count; ++i) {\n      const pos = MathClamp(Math.round(src[srcOffset++]), 0, highVal) * 3;\n\n      dest[destOffset++] = rgbLookup[pos];\n      dest[destOffset++] = rgbLookup[pos + 1];\n      dest[destOffset++] = rgbLookup[pos + 2];\n      destOffset += alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01);\n  }\n\n  isDefaultDecode(decode, bpc) {\n    if (isDefaultDecodeHelper(decode, 2)) {\n      return true;\n    }\n    if (!Number.isInteger(bpc) || bpc < 1) {\n      warn(\"Bits per component is not correct\");\n      return true;\n    }\n    return decode[0] === 0 && decode[1] === (1 << bpc) - 1;\n  }\n}\n\n/**\n * The default color is `new Float32Array([0])`.\n */\nclass DeviceGrayCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceGray\", 1);\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceGrayCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    const c = src[srcOffset] * 255;\n    dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceGrayCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const scale = 255 / ((1 << bits) - 1);\n    let j = srcOffset,\n      q = destOffset;\n    for (let i = 0; i < count; ++i) {\n      const c = scale * src[j++];\n      dest[q++] = c;\n      dest[q++] = c;\n      dest[q++] = c;\n      q += alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01);\n  }\n}\n\n/**\n * The default color is `new Float32Array([0, 0, 0])`.\n */\nclass DeviceRgbCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceRGB\", 3);\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceRgbCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    dest[destOffset] = src[srcOffset] * 255;\n    dest[destOffset + 1] = src[srcOffset + 1] * 255;\n    dest[destOffset + 2] = src[srcOffset + 2] * 255;\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceRgbCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    if (bits === 8 && alpha01 === 0) {\n      dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);\n      return;\n    }\n    const scale = 255 / ((1 << bits) - 1);\n    let j = srcOffset,\n      q = destOffset;\n    for (let i = 0; i < count; ++i) {\n      dest[q++] = scale * src[j++];\n      dest[q++] = scale * src[j++];\n      dest[q++] = scale * src[j++];\n      q += alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return ((inputLength * (3 + alpha01)) / 3) | 0;\n  }\n\n  isPassthrough(bits) {\n    return bits === 8;\n  }\n}\n\n/**\n * The default color is `new Float32Array([0, 0, 0, 1])`.\n */\nclass DeviceRgbaCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceRGBA\", 4);\n  }\n\n  getOutputLength(inputLength, _alpha01) {\n    return inputLength * 4;\n  }\n\n  isPassthrough(bits) {\n    return bits === 8;\n  }\n\n  fillRgb(\n    dest,\n    originalWidth,\n    originalHeight,\n    width,\n    height,\n    actualHeight,\n    bpc,\n    comps,\n    alpha01\n  ) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceRgbaCS.fillRgb: Unsupported \"dest\" type.'\n      );\n    }\n    if (originalHeight !== height || originalWidth !== width) {\n      resizeRgbaImage(\n        comps,\n        dest,\n        originalWidth,\n        originalHeight,\n        width,\n        height,\n        alpha01\n      );\n    } else {\n      copyRgbaImage(comps, dest, alpha01);\n    }\n  }\n}\n\n/**\n * The default color is `new Float32Array([0, 0, 0, 1])`.\n */\nclass DeviceCmykCS extends ColorSpace {\n  constructor() {\n    super(\"DeviceCMYK\", 4);\n  }\n\n  // The coefficients below was found using numerical analysis: the method of\n  // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors,\n  // where color_value is the tabular value from the table of sampled RGB colors\n  // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding\n  // CMYK color conversion using the estimation below:\n  //   f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255\n  #toRgb(src, srcOffset, srcScale, dest, destOffset) {\n    const c = src[srcOffset] * srcScale;\n    const m = src[srcOffset + 1] * srcScale;\n    const y = src[srcOffset + 2] * srcScale;\n    const k = src[srcOffset + 3] * srcScale;\n\n    dest[destOffset] =\n      255 +\n      c *\n        (-4.387332384609988 * c +\n          54.48615194189176 * m +\n          18.82290502165302 * y +\n          212.25662451639585 * k +\n          -285.2331026137004) +\n      m *\n        (1.7149763477362134 * m -\n          5.6096736904047315 * y +\n          -17.873870861415444 * k -\n          5.497006427196366) +\n      y *\n        (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) +\n      k * (-21.86122147463605 * k - 189.48180835922747);\n\n    dest[destOffset + 1] =\n      255 +\n      c *\n        (8.841041422036149 * c +\n          60.118027045597366 * m +\n          6.871425592049007 * y +\n          31.159100130055922 * k +\n          -79.2970844816548) +\n      m *\n        (-15.310361306967817 * m +\n          17.575251261109482 * y +\n          131.35250912493976 * k -\n          190.9453302588951) +\n      y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) +\n      k * (-20.737325471181034 * k - 187.80453709719578);\n\n    dest[destOffset + 2] =\n      255 +\n      c *\n        (0.8842522430003296 * c +\n          8.078677503112928 * m +\n          30.89978309703729 * y -\n          0.23883238689178934 * k +\n          -14.183576799673286) +\n      m *\n        (10.49593273432072 * m +\n          63.02378494754052 * y +\n          50.606957656360734 * k -\n          112.23884253719248) +\n      y *\n        (0.03296041114873217 * y +\n          115.60384449646641 * k +\n          -193.58209356861505) +\n      k * (-22.33816807309886 * k - 180.12613974708367);\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceCmykCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    this.#toRgb(src, srcOffset, 1, dest, destOffset);\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'DeviceCmykCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const scale = 1 / ((1 << bits) - 1);\n    for (let i = 0; i < count; i++) {\n      this.#toRgb(src, srcOffset, scale, dest, destOffset);\n      srcOffset += 4;\n      destOffset += 3 + alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return ((inputLength / 4) * (3 + alpha01)) | 0;\n  }\n}\n\n/**\n * CalGrayCS: Based on \"PDF Reference, Sixth Ed\", p.245\n *\n * The default color is `new Float32Array([0])`.\n */\nclass CalGrayCS extends ColorSpace {\n  constructor(whitePoint, blackPoint, gamma) {\n    super(\"CalGray\", 1);\n\n    if (!whitePoint) {\n      throw new FormatError(\n        \"WhitePoint missing - required for color space CalGray\"\n      );\n    }\n    // Translate arguments to spec variables.\n    [this.XW, this.YW, this.ZW] = whitePoint;\n    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];\n    this.G = gamma || 1;\n\n    // Validate variables as per spec.\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new FormatError(\n        `Invalid WhitePoint components for ${this.name}, no fallback available`\n      );\n    }\n\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      info(`Invalid BlackPoint for ${this.name}, falling back to default.`);\n      this.XB = this.YB = this.ZB = 0;\n    }\n\n    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {\n      warn(\n        `${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` +\n          `ZB: ${this.ZB}, only default values are supported.`\n      );\n    }\n\n    if (this.G < 1) {\n      info(\n        `Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`\n      );\n      this.G = 1;\n    }\n  }\n\n  #toRgb(src, srcOffset, dest, destOffset, scale) {\n    // A represents a gray component of a calibrated gray space.\n    // A <---> AG in the spec\n    const A = src[srcOffset] * scale;\n    const AG = A ** this.G;\n\n    // Computes L as per spec. ( = this.YW * AG )\n    // Except if other than default BlackPoint values are used.\n    const L = this.YW * AG;\n    // http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.\n    // Convert values to rgb range [0, 255].\n    const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0);\n    dest[destOffset] = val;\n    dest[destOffset + 1] = val;\n    dest[destOffset + 2] = val;\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'CalGrayCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    this.#toRgb(src, srcOffset, dest, destOffset, 1);\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'CalGrayCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const scale = 1 / ((1 << bits) - 1);\n\n    for (let i = 0; i < count; ++i) {\n      this.#toRgb(src, srcOffset, dest, destOffset, scale);\n      srcOffset += 1;\n      destOffset += 3 + alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return inputLength * (3 + alpha01);\n  }\n}\n\n/**\n * CalRGBCS: Based on \"PDF Reference, Sixth Ed\", p.247\n *\n * The default color is `new Float32Array([0, 0, 0])`.\n */\nclass CalRGBCS extends ColorSpace {\n  // See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these\n  // matrices.\n  // prettier-ignore\n  static #BRADFORD_SCALE_MATRIX = new Float32Array([\n    0.8951, 0.2664, -0.1614,\n    -0.7502, 1.7135, 0.0367,\n    0.0389, -0.0685, 1.0296]);\n\n  // prettier-ignore\n  static #BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([\n    0.9869929, -0.1470543, 0.1599627,\n    0.4323053, 0.5183603, 0.0492912,\n    -0.0085287, 0.0400428, 0.9684867]);\n\n  // See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html.\n  // prettier-ignore\n  static #SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([\n    3.2404542, -1.5371385, -0.4985314,\n    -0.9692660, 1.8760108, 0.0415560,\n    0.0556434, -0.2040259, 1.0572252]);\n\n  static #FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);\n\n  static #tempNormalizeMatrix = new Float32Array(3);\n\n  static #tempConvertMatrix1 = new Float32Array(3);\n\n  static #tempConvertMatrix2 = new Float32Array(3);\n\n  static #DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;\n\n  constructor(whitePoint, blackPoint, gamma, matrix) {\n    super(\"CalRGB\", 3);\n\n    if (!whitePoint) {\n      throw new FormatError(\n        \"WhitePoint missing - required for color space CalRGB\"\n      );\n    }\n    // Translate arguments to spec variables.\n    const [XW, YW, ZW] = (this.whitePoint = whitePoint);\n    const [XB, YB, ZB] = (this.blackPoint = blackPoint || new Float32Array(3));\n\n    [this.GR, this.GG, this.GB] = gamma || new Float32Array([1, 1, 1]);\n    [\n      this.MXA,\n      this.MYA,\n      this.MZA,\n      this.MXB,\n      this.MYB,\n      this.MZB,\n      this.MXC,\n      this.MYC,\n      this.MZC,\n    ] = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n\n    // Validate variables as per spec.\n    if (XW < 0 || ZW < 0 || YW !== 1) {\n      throw new FormatError(\n        `Invalid WhitePoint components for ${this.name}, no fallback available`\n      );\n    }\n\n    if (XB < 0 || YB < 0 || ZB < 0) {\n      info(\n        `Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` +\n          \"falling back to default.\"\n      );\n      this.blackPoint = new Float32Array(3);\n    }\n\n    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {\n      info(\n        `Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` +\n          `${this.name}, falling back to default.`\n      );\n      this.GR = this.GG = this.GB = 1;\n    }\n  }\n\n  #matrixProduct(a, b, result) {\n    result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n    result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];\n    result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];\n  }\n\n  #toFlat(sourceWhitePoint, LMS, result) {\n    result[0] = (LMS[0] * 1) / sourceWhitePoint[0];\n    result[1] = (LMS[1] * 1) / sourceWhitePoint[1];\n    result[2] = (LMS[2] * 1) / sourceWhitePoint[2];\n  }\n\n  #toD65(sourceWhitePoint, LMS, result) {\n    const D65X = 0.95047;\n    const D65Y = 1;\n    const D65Z = 1.08883;\n\n    result[0] = (LMS[0] * D65X) / sourceWhitePoint[0];\n    result[1] = (LMS[1] * D65Y) / sourceWhitePoint[1];\n    result[2] = (LMS[2] * D65Z) / sourceWhitePoint[2];\n  }\n\n  #sRGBTransferFunction(color) {\n    // See http://en.wikipedia.org/wiki/SRGB.\n    if (color <= 0.0031308) {\n      return MathClamp(12.92 * color, 0, 1);\n    }\n    // Optimization:\n    // If color is close enough to 1, skip calling the following transform\n    // since calling Math.pow is expensive. If color is larger than\n    // the threshold, the final result is larger than 254.5 since\n    // ((1 + 0.055) * 0.99554525 ** (1 / 2.4) - 0.055) * 255 ===\n    // 254.50000003134699\n    if (color >= 0.99554525) {\n      return 1;\n    }\n    return MathClamp((1 + 0.055) * color ** (1 / 2.4) - 0.055, 0, 1);\n  }\n\n  #decodeL(L) {\n    if (L < 0) {\n      return -this.#decodeL(-L);\n    }\n    if (L > 8.0) {\n      return ((L + 16) / 116) ** 3;\n    }\n    return L * CalRGBCS.#DECODE_L_CONSTANT;\n  }\n\n  #compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {\n    // In case the blackPoint is already the default blackPoint then there is\n    // no need to do compensation.\n    if (\n      sourceBlackPoint[0] === 0 &&\n      sourceBlackPoint[1] === 0 &&\n      sourceBlackPoint[2] === 0\n    ) {\n      result[0] = XYZ_Flat[0];\n      result[1] = XYZ_Flat[1];\n      result[2] = XYZ_Flat[2];\n      return;\n    }\n\n    // For the blackPoint calculation details, please see\n    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/\n    // AdobeBPC.pdf.\n    // The destination blackPoint is the default blackPoint [0, 0, 0].\n    const zeroDecodeL = this.#decodeL(0);\n\n    const X_DST = zeroDecodeL;\n    const X_SRC = this.#decodeL(sourceBlackPoint[0]);\n\n    const Y_DST = zeroDecodeL;\n    const Y_SRC = this.#decodeL(sourceBlackPoint[1]);\n\n    const Z_DST = zeroDecodeL;\n    const Z_SRC = this.#decodeL(sourceBlackPoint[2]);\n\n    const X_Scale = (1 - X_DST) / (1 - X_SRC);\n    const X_Offset = 1 - X_Scale;\n\n    const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);\n    const Y_Offset = 1 - Y_Scale;\n\n    const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);\n    const Z_Offset = 1 - Z_Scale;\n\n    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;\n    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;\n    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;\n  }\n\n  #normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {\n    // In case the whitePoint is already flat then there is no need to do\n    // normalization.\n    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {\n      result[0] = XYZ_In[0];\n      result[1] = XYZ_In[1];\n      result[2] = XYZ_In[2];\n      return;\n    }\n\n    const LMS = result;\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n\n    const LMS_Flat = CalRGBCS.#tempNormalizeMatrix;\n    this.#toFlat(sourceWhitePoint, LMS, LMS_Flat);\n\n    this.#matrixProduct(\n      CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX,\n      LMS_Flat,\n      result\n    );\n  }\n\n  #normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {\n    const LMS = result;\n    this.#matrixProduct(CalRGBCS.#BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\n\n    const LMS_D65 = CalRGBCS.#tempNormalizeMatrix;\n    this.#toD65(sourceWhitePoint, LMS, LMS_D65);\n\n    this.#matrixProduct(\n      CalRGBCS.#BRADFORD_SCALE_INVERSE_MATRIX,\n      LMS_D65,\n      result\n    );\n  }\n\n  #toRgb(src, srcOffset, dest, destOffset, scale) {\n    // A, B and C represent a red, green and blue components of a calibrated\n    // rgb space.\n    const A = MathClamp(src[srcOffset] * scale, 0, 1);\n    const B = MathClamp(src[srcOffset + 1] * scale, 0, 1);\n    const C = MathClamp(src[srcOffset + 2] * scale, 0, 1);\n\n    // A <---> AGR in the spec\n    // B <---> BGG in the spec\n    // C <---> CGB in the spec\n    const AGR = A === 1 ? 1 : A ** this.GR;\n    const BGG = B === 1 ? 1 : B ** this.GG;\n    const CGB = C === 1 ? 1 : C ** this.GB;\n\n    // Computes intermediate variables L, M, N as per spec.\n    // To decode X, Y, Z values map L, M, N directly to them.\n    const X = this.MXA * AGR + this.MXB * BGG + this.MXC * CGB;\n    const Y = this.MYA * AGR + this.MYB * BGG + this.MYC * CGB;\n    const Z = this.MZA * AGR + this.MZB * BGG + this.MZC * CGB;\n\n    // The following calculations are based on this document:\n    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/\n    // AdobeBPC.pdf.\n    const XYZ = CalRGBCS.#tempConvertMatrix1;\n    XYZ[0] = X;\n    XYZ[1] = Y;\n    XYZ[2] = Z;\n    const XYZ_Flat = CalRGBCS.#tempConvertMatrix2;\n\n    this.#normalizeWhitePointToFlat(this.whitePoint, XYZ, XYZ_Flat);\n\n    const XYZ_Black = CalRGBCS.#tempConvertMatrix1;\n    this.#compensateBlackPoint(this.blackPoint, XYZ_Flat, XYZ_Black);\n\n    const XYZ_D65 = CalRGBCS.#tempConvertMatrix2;\n    this.#normalizeWhitePointToD65(\n      CalRGBCS.#FLAT_WHITEPOINT_MATRIX,\n      XYZ_Black,\n      XYZ_D65\n    );\n\n    const SRGB = CalRGBCS.#tempConvertMatrix1;\n    this.#matrixProduct(CalRGBCS.#SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);\n\n    // Convert the values to rgb range [0, 255].\n    dest[destOffset] = this.#sRGBTransferFunction(SRGB[0]) * 255;\n    dest[destOffset + 1] = this.#sRGBTransferFunction(SRGB[1]) * 255;\n    dest[destOffset + 2] = this.#sRGBTransferFunction(SRGB[2]) * 255;\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'CalRGBCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    this.#toRgb(src, srcOffset, dest, destOffset, 1);\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'CalRGBCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const scale = 1 / ((1 << bits) - 1);\n\n    for (let i = 0; i < count; ++i) {\n      this.#toRgb(src, srcOffset, dest, destOffset, scale);\n      srcOffset += 3;\n      destOffset += 3 + alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return ((inputLength * (3 + alpha01)) / 3) | 0;\n  }\n}\n\n/**\n * LabCS: Based on \"PDF Reference, Sixth Ed\", p.250\n *\n * The default color is `new Float32Array([0, 0, 0])`.\n */\nclass LabCS extends ColorSpace {\n  constructor(whitePoint, blackPoint, range) {\n    super(\"Lab\", 3);\n\n    if (!whitePoint) {\n      throw new FormatError(\n        \"WhitePoint missing - required for color space Lab\"\n      );\n    }\n    // Translate args to spec variables\n    [this.XW, this.YW, this.ZW] = whitePoint;\n    [this.amin, this.amax, this.bmin, this.bmax] = range || [\n      -100, 100, -100, 100,\n    ];\n\n    // These are here just for completeness - the spec doesn't offer any\n    // formulas that use BlackPoint in Lab\n    [this.XB, this.YB, this.ZB] = blackPoint || [0, 0, 0];\n\n    // Validate vars as per spec\n    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {\n      throw new FormatError(\n        \"Invalid WhitePoint components, no fallback available\"\n      );\n    }\n\n    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {\n      info(\"Invalid BlackPoint, falling back to default\");\n      this.XB = this.YB = this.ZB = 0;\n    }\n\n    if (this.amin > this.amax || this.bmin > this.bmax) {\n      info(\"Invalid Range, falling back to defaults\");\n      this.amin = -100;\n      this.amax = 100;\n      this.bmin = -100;\n      this.bmax = 100;\n    }\n  }\n\n  // Function g(x) from spec\n  #fn_g(x) {\n    return x >= 6 / 29 ? x ** 3 : (108 / 841) * (x - 4 / 29);\n  }\n\n  #decode(value, high1, low2, high2) {\n    return low2 + (value * (high2 - low2)) / high1;\n  }\n\n  // If decoding is needed maxVal should be 2^bits per component - 1.\n  #toRgb(src, srcOffset, maxVal, dest, destOffset) {\n    // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax]\n    // not the usual [0, 1]. If a command like setFillColor is used the src\n    // values will already be within the correct range. However, if we are\n    // converting an image we have to map the values to the correct range given\n    // above.\n    // Ls,as,bs <---> L*,a*,b* in the spec\n    let Ls = src[srcOffset];\n    let as = src[srcOffset + 1];\n    let bs = src[srcOffset + 2];\n    if (maxVal !== false) {\n      Ls = this.#decode(Ls, maxVal, 0, 100);\n      as = this.#decode(as, maxVal, this.amin, this.amax);\n      bs = this.#decode(bs, maxVal, this.bmin, this.bmax);\n    }\n\n    // Adjust limits of 'as' and 'bs'\n    if (as > this.amax) {\n      as = this.amax;\n    } else if (as < this.amin) {\n      as = this.amin;\n    }\n    if (bs > this.bmax) {\n      bs = this.bmax;\n    } else if (bs < this.bmin) {\n      bs = this.bmin;\n    }\n\n    // Computes intermediate variables X,Y,Z as per spec\n    const M = (Ls + 16) / 116;\n    const L = M + as / 500;\n    const N = M - bs / 200;\n\n    const X = this.XW * this.#fn_g(L);\n    const Y = this.YW * this.#fn_g(M);\n    const Z = this.ZW * this.#fn_g(N);\n\n    let r, g, b;\n    // Using different conversions for D50 and D65 white points,\n    // per http://www.color.org/srgb.pdf\n    if (this.ZW < 1) {\n      // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249)\n      r = X * 3.1339 + Y * -1.617 + Z * -0.4906;\n      g = X * -0.9785 + Y * 1.916 + Z * 0.0333;\n      b = X * 0.072 + Y * -0.229 + Z * 1.4057;\n    } else {\n      // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888)\n      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;\n      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;\n      b = X * 0.0557 + Y * -0.204 + Z * 1.057;\n    }\n    // Convert the color values to the [0,255] range (clamping is automatic).\n    dest[destOffset] = Math.sqrt(r) * 255;\n    dest[destOffset + 1] = Math.sqrt(g) * 255;\n    dest[destOffset + 2] = Math.sqrt(b) * 255;\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'LabCS.getRgbItem: Unsupported \"dest\" type.'\n      );\n    }\n    this.#toRgb(src, srcOffset, false, dest, destOffset);\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        dest instanceof Uint8ClampedArray,\n        'LabCS.getRgbBuffer: Unsupported \"dest\" type.'\n      );\n    }\n    const maxVal = (1 << bits) - 1;\n    for (let i = 0; i < count; i++) {\n      this.#toRgb(src, srcOffset, maxVal, dest, destOffset);\n      srcOffset += 3;\n      destOffset += 3 + alpha01;\n    }\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return ((inputLength * (3 + alpha01)) / 3) | 0;\n  }\n\n  isDefaultDecode(decode, bpc) {\n    // XXX: Decoding is handled with the lab conversion because of the strange\n    // ranges that are used.\n    return true;\n  }\n\n  get usesZeroToOneRange() {\n    return shadow(this, \"usesZeroToOneRange\", false);\n  }\n}\n\nexport {\n  AlternateCS,\n  CalGrayCS,\n  CalRGBCS,\n  ColorSpace,\n  DeviceCmykCS,\n  DeviceGrayCS,\n  DeviceRgbaCS,\n  DeviceRgbCS,\n  IndexedCS,\n  LabCS,\n  PatternCS,\n};\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  DataType,\n  initSync,\n  Intent,\n  qcms_convert_array,\n  qcms_convert_four,\n  qcms_convert_one,\n  qcms_convert_three,\n  qcms_drop_transformer,\n  qcms_transformer_from_memory,\n} from \"../../external/qcms/qcms.js\";\nimport { shadow, Util, warn } from \"../shared/util.js\";\nimport { ColorSpace } from \"./colorspace.js\";\nimport { QCMS } from \"../../external/qcms/qcms_utils.js\";\n\nfunction fetchSync(url) {\n  // Parsing and using color spaces is still synchronous,\n  // so we must load the wasm module synchronously.\n  // TODO: Make the color space stuff asynchronous and use fetch.\n  const xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url, false);\n  xhr.responseType = \"arraybuffer\";\n  xhr.send(null);\n  return xhr.response;\n}\n\nclass IccColorSpace extends ColorSpace {\n  #transformer;\n\n  #convertPixel;\n\n  static #useWasm = true;\n\n  static #wasmUrl = null;\n\n  static #finalizer = null;\n\n  constructor(iccProfile, name, numComps) {\n    if (!IccColorSpace.isUsable) {\n      throw new Error(\"No ICC color space support\");\n    }\n\n    super(name, numComps);\n\n    let inType;\n    switch (numComps) {\n      case 1:\n        inType = DataType.Gray8;\n        this.#convertPixel = (src, srcOffset) =>\n          qcms_convert_one(this.#transformer, src[srcOffset] * 255);\n        break;\n      case 3:\n        inType = DataType.RGB8;\n        this.#convertPixel = (src, srcOffset) =>\n          qcms_convert_three(\n            this.#transformer,\n            src[srcOffset] * 255,\n            src[srcOffset + 1] * 255,\n            src[srcOffset + 2] * 255\n          );\n        break;\n      case 4:\n        inType = DataType.CMYK;\n        this.#convertPixel = (src, srcOffset) =>\n          qcms_convert_four(\n            this.#transformer,\n            src[srcOffset] * 255,\n            src[srcOffset + 1] * 255,\n            src[srcOffset + 2] * 255,\n            src[srcOffset + 3] * 255\n          );\n        break;\n      default:\n        throw new Error(`Unsupported number of components: ${numComps}`);\n    }\n    this.#transformer = qcms_transformer_from_memory(\n      iccProfile,\n      inType,\n      Intent.Perceptual\n    );\n    if (!this.#transformer) {\n      throw new Error(\"Failed to create ICC color space\");\n    }\n    IccColorSpace.#finalizer ||= new FinalizationRegistry(transformer => {\n      qcms_drop_transformer(transformer);\n    });\n    IccColorSpace.#finalizer.register(this, this.#transformer);\n  }\n\n  getRgbHex(src, srcOffset) {\n    const color = this.#convertPixel(src, srcOffset);\n    return Util.makeHexColor(color >> 16, (color >> 8) & 0xff, color & 0xff);\n  }\n\n  getRgbItem(src, srcOffset, dest, destOffset) {\n    const color = this.#convertPixel(src, srcOffset);\n    dest[destOffset] = color >> 16;\n    dest[destOffset + 1] = (color >> 8) & 0xff;\n    dest[destOffset + 2] = color & 0xff;\n  }\n\n  getRgbItems(src, count, dest, destOffset, alpha01) {\n    const { numComps } = this;\n    const length = count * numComps;\n    const scaled = new Uint8Array(length);\n    // Uint8Array matches the truncation and wrapping of the scalar Wasm calls.\n    for (let i = 0; i < length; i++) {\n      scaled[i] = src[i] * 255;\n    }\n    QCMS._destBuffer = dest;\n    QCMS._destOffset = destOffset;\n    // `scaled` is freshly allocated, so unlike in getRgbBuffer it can never\n    // alias `dest`: an RGBA destination always has an alpha channel to keep.\n    QCMS._keepAlpha = alpha01 === 1;\n    qcms_convert_array(this.#transformer, scaled, alpha01 === 1);\n    QCMS._destBuffer = null;\n  }\n\n  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\n    src = src.subarray(srcOffset, srcOffset + count * this.numComps);\n    if (bits !== 8) {\n      const scale = 255 / ((1 << bits) - 1);\n      for (let i = 0, ii = src.length; i < ii; i++) {\n        src[i] *= scale;\n      }\n    }\n    QCMS._destBuffer = dest;\n    QCMS._destOffset = destOffset;\n    // The wasm side always fills alpha in, so say when the destination's own\n    // alpha must survive: an /SMask has been decoded into it by now.\n    QCMS._keepAlpha = alpha01 === 1 && dest.buffer !== src.buffer;\n    qcms_convert_array(this.#transformer, src, alpha01 === 1);\n    QCMS._destBuffer = null;\n  }\n\n  getOutputLength(inputLength, alpha01) {\n    return ((inputLength / this.numComps) * (3 + alpha01)) | 0;\n  }\n\n  static setOptions({ useWasm, useWorkerFetch, wasmUrl }) {\n    if (!useWorkerFetch) {\n      this.#useWasm = false;\n      return;\n    }\n    this.#useWasm = useWasm;\n    this.#wasmUrl = wasmUrl;\n  }\n\n  static get isUsable() {\n    let isUsable = false;\n    if (this.#useWasm) {\n      if (this.#wasmUrl) {\n        try {\n          this._module = initSync({\n            module: fetchSync(`${this.#wasmUrl}qcms_bg.wasm`),\n          });\n          isUsable = !!this._module;\n          QCMS._memory = this._module.memory;\n        } catch (e) {\n          warn(`ICCBased color space: \"${e}\".`);\n        }\n      } else {\n        warn(\"No ICC color space support due to missing `wasmUrl` API option\");\n      }\n    }\n\n    return shadow(this, \"isUsable\", isUsable);\n  }\n}\n\nclass CmykICCBasedCS extends IccColorSpace {\n  static #iccUrl;\n\n  constructor() {\n    const iccProfile = new Uint8Array(\n      fetchSync(`${CmykICCBasedCS.#iccUrl}CGATS001Compat-v2-micro.icc`)\n    );\n    super(iccProfile, \"DeviceCMYK\", 4);\n  }\n\n  static setOptions({ iccUrl }) {\n    this.#iccUrl = iccUrl;\n  }\n\n  static get isUsable() {\n    let isUsable = false;\n    if (IccColorSpace.isUsable) {\n      if (this.#iccUrl) {\n        isUsable = true;\n      } else {\n        warn(\"No CMYK ICC profile support due to missing `iccUrl` API option\");\n      }\n    }\n\n    return shadow(this, \"isUsable\", isUsable);\n  }\n}\n\nexport { CmykICCBasedCS, IccColorSpace };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseStream } from \"./base_stream.js\";\nimport { stringToBytes } from \"../shared/util.js\";\n\nclass Stream extends BaseStream {\n  constructor(arrayBuffer, start, length, dict) {\n    super();\n\n    this.bytes =\n      arrayBuffer instanceof Uint8Array\n        ? arrayBuffer\n        : new Uint8Array(arrayBuffer);\n    this.start = start || 0;\n    this.pos = this.start;\n    this.end = start + length || this.bytes.length;\n    this.dict = dict;\n  }\n\n  get length() {\n    return this.end - this.start;\n  }\n\n  get isEmpty() {\n    return this.length === 0;\n  }\n\n  getByte() {\n    if (this.pos >= this.end) {\n      return -1;\n    }\n    return this.bytes[this.pos++];\n  }\n\n  getBytes(length) {\n    const pos = this.pos;\n    const endPos = !length ? this.end : Math.min(pos + length, this.end);\n\n    this.pos = endPos;\n    return this.bytes.subarray(pos, endPos);\n  }\n\n  getByteRange(begin, end) {\n    if (begin < 0) {\n      begin = 0;\n    }\n    if (end > this.end) {\n      end = this.end;\n    }\n    return this.bytes.subarray(begin, end);\n  }\n\n  reset() {\n    this.pos = this.start;\n  }\n\n  moveStart() {\n    this.start = this.pos;\n  }\n\n  makeSubStream(start, length, dict = null) {\n    return new Stream(this.bytes.buffer, start, length, dict);\n  }\n\n  clone() {\n    return new Stream(\n      this.bytes.buffer,\n      this.start,\n      this.length,\n      this.dict?.clone()\n    );\n  }\n}\n\nclass StringStream extends Stream {\n  constructor(str, dict = null) {\n    super(stringToBytes(str), NaN, NaN, dict);\n  }\n}\n\nclass NullStream extends Stream {\n  constructor() {\n    super(new Uint8Array(0));\n  }\n}\n\nexport { NullStream, Stream, StringStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { arrayBuffersToBytes, MissingDataException } from \"./core_utils.js\";\nimport { assert } from \"../shared/util.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\nimport { Stream } from \"./stream.js\";\n\nclass ChunkedStream extends Stream {\n  progressiveDataLength = 0;\n\n  _lastSuccessfulEnsureByteChunk = -1; // Single-entry cache\n\n  _loadedChunks = new Set();\n\n  constructor(length, chunkSize, manager) {\n    super(\n      /* arrayBuffer = */ new Uint8Array(length),\n      /* start = */ 0,\n      /* length = */ length,\n      /* dict = */ null\n    );\n\n    this.chunkSize = chunkSize;\n    this.numChunks = Math.ceil(length / chunkSize);\n    this.manager = manager;\n  }\n\n  // If a particular stream does not implement one or more of these methods,\n  // an error should be thrown.\n  getMissingChunks() {\n    const chunks = [];\n    for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {\n      if (!this._loadedChunks.has(chunk)) {\n        chunks.push(chunk);\n      }\n    }\n    return chunks;\n  }\n\n  get numChunksLoaded() {\n    return this._loadedChunks.size;\n  }\n\n  get isDataLoaded() {\n    return this.numChunksLoaded === this.numChunks;\n  }\n\n  onReceiveData(begin, chunk) {\n    const chunkSize = this.chunkSize;\n    if (begin % chunkSize !== 0) {\n      throw new Error(`Bad begin offset: ${begin}`);\n    }\n\n    // Using `this.length` is inaccurate here since `this.start` can be moved\n    // (see the `moveStart` method).\n    const end = begin + chunk.byteLength;\n    if (end % chunkSize !== 0 && end !== this.bytes.length) {\n      throw new Error(`Bad end offset: ${end}`);\n    }\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        chunk instanceof ArrayBuffer,\n        \"onReceiveData - expected an ArrayBuffer.\"\n      );\n    }\n    this.bytes.set(new Uint8Array(chunk), begin);\n    const beginChunk = Math.floor(begin / chunkSize);\n    const endChunk = Math.floor((end - 1) / chunkSize) + 1;\n\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      // Since a value can only occur *once* in a `Set`, there's no need to\n      // manually check `Set.prototype.has()` before adding the value here.\n      this._loadedChunks.add(curChunk);\n    }\n  }\n\n  onReceiveProgressiveData(data) {\n    let position = this.progressiveDataLength;\n    const beginChunk = Math.floor(position / this.chunkSize);\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        data instanceof ArrayBuffer,\n        \"onReceiveProgressiveData - expected an ArrayBuffer.\"\n      );\n    }\n    this.bytes.set(new Uint8Array(data), position);\n    position += data.byteLength;\n    this.progressiveDataLength = position;\n    const endChunk =\n      position >= this.end\n        ? this.numChunks\n        : Math.floor(position / this.chunkSize);\n\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      // Since a value can only occur *once* in a `Set`, there's no need to\n      // manually check `Set.prototype.has()` before adding the value here.\n      this._loadedChunks.add(curChunk);\n    }\n  }\n\n  ensureByte(pos) {\n    if (pos < this.progressiveDataLength) {\n      return;\n    }\n\n    const chunk = Math.floor(pos / this.chunkSize);\n    if (chunk > this.numChunks) {\n      return;\n    }\n    if (chunk === this._lastSuccessfulEnsureByteChunk) {\n      return;\n    }\n\n    if (!this._loadedChunks.has(chunk)) {\n      throw new MissingDataException(pos, pos + 1);\n    }\n    this._lastSuccessfulEnsureByteChunk = chunk;\n  }\n\n  ensureRange(begin, end) {\n    if (begin >= end) {\n      return;\n    }\n    if (end <= this.progressiveDataLength) {\n      return;\n    }\n\n    const beginChunk = Math.floor(begin / this.chunkSize);\n    if (beginChunk > this.numChunks) {\n      return;\n    }\n    const endChunk = Math.min(\n      Math.floor((end - 1) / this.chunkSize) + 1,\n      this.numChunks\n    );\n    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n      if (!this._loadedChunks.has(chunk)) {\n        throw new MissingDataException(begin, end);\n      }\n    }\n  }\n\n  nextEmptyChunk(beginChunk) {\n    const numChunks = this.numChunks;\n    for (let i = 0; i < numChunks; ++i) {\n      const chunk = (beginChunk + i) % numChunks; // Wrap around to beginning.\n      if (!this._loadedChunks.has(chunk)) {\n        return chunk;\n      }\n    }\n    return null;\n  }\n\n  hasChunk(chunk) {\n    return this._loadedChunks.has(chunk);\n  }\n\n  getByte() {\n    const pos = this.pos;\n    if (pos >= this.end) {\n      return -1;\n    }\n    if (pos >= this.progressiveDataLength) {\n      this.ensureByte(pos);\n    }\n    return this.bytes[this.pos++];\n  }\n\n  getBytes(length) {\n    const pos = this.pos;\n    const endPos = !length ? this.end : Math.min(pos + length, this.end);\n\n    if (endPos > this.progressiveDataLength) {\n      this.ensureRange(pos, endPos);\n    }\n    this.pos = endPos;\n    return this.bytes.subarray(pos, endPos);\n  }\n\n  getByteRange(begin, end) {\n    if (begin < 0) {\n      begin = 0;\n    }\n    if (end > this.end) {\n      end = this.end;\n    }\n    if (end > this.progressiveDataLength) {\n      this.ensureRange(begin, end);\n    }\n    return this.bytes.subarray(begin, end);\n  }\n\n  makeSubStream(start, length, dict = null) {\n    if (length) {\n      if (start + length > this.progressiveDataLength) {\n        this.ensureRange(start, start + length);\n      }\n    } else if (start >= this.progressiveDataLength) {\n      // When the `length` is undefined you do *not*, under any circumstances,\n      // want to fallback on calling `this.ensureRange(start, this.end)` since\n      // that would force the *entire* PDF file to be loaded, thus completely\n      // breaking the whole purpose of using streaming and/or range requests.\n      //\n      // However, not doing any checking here could very easily lead to wasted\n      // time/resources during e.g. parsing, since `MissingDataException`s will\n      // require data to be re-parsed, which we attempt to minimize by at least\n      // checking that the *beginning* of the data is available here.\n      this.ensureByte(start);\n    }\n\n    function ChunkedStreamSubstream() {}\n    ChunkedStreamSubstream.prototype = Object.create(this);\n    ChunkedStreamSubstream.prototype.getMissingChunks = function () {\n      const chunkSize = this.chunkSize;\n      const beginChunk = Math.floor(this.start / chunkSize);\n      const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;\n      const missingChunks = [];\n      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n        if (!this._loadedChunks.has(chunk)) {\n          missingChunks.push(chunk);\n        }\n      }\n      return missingChunks;\n    };\n    Object.defineProperty(ChunkedStreamSubstream.prototype, \"isDataLoaded\", {\n      get() {\n        if (this.numChunksLoaded === this.numChunks) {\n          return true;\n        }\n        return this.getMissingChunks().length === 0;\n      },\n      configurable: true,\n    });\n\n    const subStream = new ChunkedStreamSubstream();\n    subStream.pos = subStream.start = start;\n    subStream.end = start + length || this.end;\n    subStream.dict = dict;\n    return subStream;\n  }\n\n  getBaseStreams() {\n    return [this];\n  }\n}\n\nclass ChunkedStreamManager {\n  #aborted = false;\n\n  currRequestId = 0;\n\n  _chunksNeededByRequest = new Map();\n\n  #loadedStreamCapability = Promise.withResolvers();\n\n  _promisesByRequest = new Map();\n\n  _requestsByChunk = new Map();\n\n  constructor(pdfStream, args) {\n    this.length = args.length;\n    this.chunkSize = args.rangeChunkSize;\n    this.stream = new ChunkedStream(this.length, this.chunkSize, this);\n    this.pdfStream = pdfStream;\n    this.disableAutoFetch = args.disableAutoFetch;\n    this.msgHandler = args.msgHandler;\n  }\n\n  async sendRequest(begin, end) {\n    const rangeReader = this.pdfStream.getRangeReader(begin, end);\n    let chunks = [];\n\n    while (true) {\n      const { value, done } = await rangeReader.read();\n\n      if (this.#aborted) {\n        chunks = null;\n        return; // Ignoring any data after abort.\n      }\n      if (done) {\n        break;\n      }\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n        assert(\n          value instanceof ArrayBuffer,\n          \"sendRequest - expected an ArrayBuffer.\"\n        );\n      }\n      chunks.push(value);\n    }\n\n    if (chunks.length === 0 && this.disableAutoFetch) {\n      // The range request wasn't dispatched, see the \"GetRangeReader\" handler\n      // in the `src/display/api.js` file.\n      return;\n    }\n    const data = arrayBuffersToBytes(chunks);\n    chunks = null;\n    this.onReceiveData({ chunk: data.buffer, begin });\n  }\n\n  /**\n   * Get all the chunks that are not yet loaded and group them into\n   * contiguous ranges to load in as few requests as possible.\n   */\n  requestAllChunks(noFetch = false) {\n    if (!noFetch) {\n      const missingChunks = this.stream.getMissingChunks();\n      this._requestChunks(missingChunks);\n    }\n    return this.#loadedStreamCapability.promise;\n  }\n\n  _requestChunks(chunks) {\n    const requestId = this.currRequestId++;\n\n    const chunksNeeded = new Set();\n    this._chunksNeededByRequest.set(requestId, chunksNeeded);\n    for (const chunk of chunks) {\n      if (!this.stream.hasChunk(chunk)) {\n        chunksNeeded.add(chunk);\n      }\n    }\n\n    if (chunksNeeded.size === 0) {\n      return Promise.resolve();\n    }\n\n    const capability = Promise.withResolvers();\n    this._promisesByRequest.set(requestId, capability);\n\n    const chunksToRequest = [];\n    for (const chunk of chunksNeeded) {\n      const requestIds = this._requestsByChunk.getOrInsertComputed(\n        chunk,\n        () => {\n          chunksToRequest.push(chunk);\n          return [];\n        }\n      );\n      requestIds.push(requestId);\n    }\n\n    if (chunksToRequest.length > 0) {\n      const groupedChunksToRequest = this.groupChunks(chunksToRequest);\n      for (const groupedChunk of groupedChunksToRequest) {\n        const begin = groupedChunk.beginChunk * this.chunkSize;\n        const end = Math.min(\n          groupedChunk.endChunk * this.chunkSize,\n          this.length\n        );\n        this.sendRequest(begin, end).catch(capability.reject);\n      }\n    }\n\n    return capability.promise.catch(reason => {\n      if (this.#aborted) {\n        return; // Ignoring any pending requests after abort.\n      }\n      throw reason;\n    });\n  }\n\n  getStream() {\n    return this.stream;\n  }\n\n  /**\n   * Loads any chunks in the requested range that are not yet loaded.\n   */\n  requestRange(begin, end) {\n    end = Math.min(end, this.length);\n\n    const beginChunk = this.getBeginChunk(begin);\n    const endChunk = this.getEndChunk(end);\n\n    const chunks = [];\n    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n      chunks.push(chunk);\n    }\n    return this._requestChunks(chunks);\n  }\n\n  requestRanges(ranges = []) {\n    const chunksToRequest = [];\n    for (const range of ranges) {\n      const beginChunk = this.getBeginChunk(range.begin);\n      const endChunk = this.getEndChunk(range.end);\n      for (let chunk = beginChunk; chunk < endChunk; ++chunk) {\n        if (!chunksToRequest.includes(chunk)) {\n          chunksToRequest.push(chunk);\n        }\n      }\n    }\n\n    chunksToRequest.sort((a, b) => a - b);\n    return this._requestChunks(chunksToRequest);\n  }\n\n  /**\n   * Groups a sorted array of chunks into as few contiguous larger\n   * chunks as possible.\n   */\n  groupChunks(chunks) {\n    const groupedChunks = [];\n    let beginChunk = -1;\n    let prevChunk = -1;\n\n    for (let i = 0, ii = chunks.length; i < ii; ++i) {\n      const chunk = chunks[i];\n      if (beginChunk < 0) {\n        beginChunk = chunk;\n      }\n\n      if (prevChunk >= 0 && prevChunk + 1 !== chunk) {\n        groupedChunks.push({ beginChunk, endChunk: prevChunk + 1 });\n        beginChunk = chunk;\n      }\n      if (i + 1 === chunks.length) {\n        groupedChunks.push({ beginChunk, endChunk: chunk + 1 });\n      }\n\n      prevChunk = chunk;\n    }\n    return groupedChunks;\n  }\n\n  onReceiveData(args) {\n    const { chunkSize, length, stream } = this;\n\n    const chunk = args.chunk;\n    const isProgressive = args.begin === undefined;\n    const begin = isProgressive ? stream.progressiveDataLength : args.begin;\n    const end = begin + chunk.byteLength;\n\n    const beginChunk = Math.floor(begin / chunkSize);\n    const endChunk =\n      end < length ? Math.floor(end / chunkSize) : Math.ceil(end / chunkSize);\n\n    if (isProgressive) {\n      stream.onReceiveProgressiveData(chunk);\n    } else {\n      stream.onReceiveData(begin, chunk);\n    }\n\n    if (stream.isDataLoaded) {\n      this.#loadedStreamCapability.resolve(stream);\n    }\n\n    const loadedRequests = [];\n    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\n      // The server might return more chunks than requested.\n      const requestIds = this._requestsByChunk.get(curChunk);\n      if (!requestIds) {\n        continue;\n      }\n      this._requestsByChunk.delete(curChunk);\n\n      for (const requestId of requestIds) {\n        const chunksNeeded = this._chunksNeededByRequest.get(requestId);\n        if (chunksNeeded.has(curChunk)) {\n          chunksNeeded.delete(curChunk);\n        }\n\n        if (chunksNeeded.size > 0) {\n          continue;\n        }\n        loadedRequests.push(requestId);\n      }\n    }\n\n    // If there are no pending requests, automatically fetch the next\n    // unfetched chunk of the PDF file.\n    if (!this.disableAutoFetch && this._requestsByChunk.size === 0) {\n      let nextEmptyChunk;\n      if (stream.numChunksLoaded === 1) {\n        // This is a special optimization so that after fetching the first\n        // chunk, rather than fetching the second chunk, we fetch the last\n        // chunk.\n        const lastChunk = stream.numChunks - 1;\n        if (!stream.hasChunk(lastChunk)) {\n          nextEmptyChunk = lastChunk;\n        }\n      } else {\n        nextEmptyChunk = stream.nextEmptyChunk(endChunk);\n      }\n      if (Number.isInteger(nextEmptyChunk)) {\n        this._requestChunks([nextEmptyChunk]);\n      }\n    }\n\n    for (const requestId of loadedRequests) {\n      const capability = this._promisesByRequest.get(requestId);\n      this._promisesByRequest.delete(requestId);\n      capability.resolve();\n    }\n\n    this.msgHandler.send(\"DocProgress\", {\n      loaded: MathClamp(\n        stream.numChunksLoaded * chunkSize,\n        stream.progressiveDataLength,\n        length\n      ),\n      total: length,\n    });\n  }\n\n  getBeginChunk(begin) {\n    return Math.floor(begin / this.chunkSize);\n  }\n\n  getEndChunk(end) {\n    return Math.floor((end - 1) / this.chunkSize) + 1;\n  }\n\n  abort(reason) {\n    this.#aborted = true;\n    this.pdfStream?.cancelAllRequests(reason);\n\n    for (const capability of this._promisesByRequest.values()) {\n      capability.reject(reason);\n    }\n    this.#loadedStreamCapability.reject(reason);\n  }\n}\n\nexport { ChunkedStream, ChunkedStreamManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind } from \"./util.js\";\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n\n  return null;\n}\n\nfunction convertBlackAndWhiteToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  width,\n  height,\n  nonBlackColor = 0xffffffff,\n  inverseDecode = false,\n}) {\n  const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n  const [zeroMapping, oneMapping] = inverseDecode\n    ? [nonBlackColor, black]\n    : [black, nonBlackColor];\n  const widthInSource = width >> 3;\n  const widthRemainder = width & 7;\n  const xorMask = zeroMapping ^ oneMapping;\n  const srcLength = src.length;\n  dest = new Uint32Array(dest.buffer);\n  let destPos = 0;\n\n  for (let i = 0; i < height; ++i) {\n    for (\n      const max = srcPos + widthInSource;\n      srcPos < max;\n      ++srcPos, destPos += 8\n    ) {\n      const elem = src[srcPos];\n      dest[destPos] = zeroMapping ^ (-((elem >> 7) & 1) & xorMask);\n      dest[destPos + 1] = zeroMapping ^ (-((elem >> 6) & 1) & xorMask);\n      dest[destPos + 2] = zeroMapping ^ (-((elem >> 5) & 1) & xorMask);\n      dest[destPos + 3] = zeroMapping ^ (-((elem >> 4) & 1) & xorMask);\n      dest[destPos + 4] = zeroMapping ^ (-((elem >> 3) & 1) & xorMask);\n      dest[destPos + 5] = zeroMapping ^ (-((elem >> 2) & 1) & xorMask);\n      dest[destPos + 6] = zeroMapping ^ (-((elem >> 1) & 1) & xorMask);\n      dest[destPos + 7] = zeroMapping ^ (-(elem & 1) & xorMask);\n    }\n    if (widthRemainder === 0) {\n      continue;\n    }\n    const elem = srcPos < srcLength ? src[srcPos++] : 255;\n    for (let j = 0; j < widthRemainder; ++j, ++destPos) {\n      dest[destPos] = zeroMapping ^ (-((elem >> (7 - j)) & 1) & xorMask);\n    }\n  }\n\n  return { srcPos, destPos };\n}\n\nfunction convertRGBToRGBA({\n  src,\n  srcPos = 0,\n  dest,\n  destPos = 0,\n  width,\n  height,\n}) {\n  let i = 0;\n  const len = width * height * 3;\n  const len32 = len >> 2;\n  const src32 = new Uint32Array(src.buffer, srcPos, len32);\n  const alphaMask = FeatureTest.isLittleEndian ? 0xff000000 : 0xff;\n\n  if (FeatureTest.isLittleEndian) {\n    // It's a way faster to do the shuffle manually instead of working\n    // component by component with some Uint8 arrays.\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i], // R2B1G1R1\n        s2 = src32[i + 1], // G3R3B2G2\n        s3 = src32[i + 2]; // B4G4R4B3\n\n      dest[destPos] = s1 | alphaMask;\n      dest[destPos + 1] = (s1 >>> 24) | (s2 << 8) | alphaMask;\n      dest[destPos + 2] = (s2 >>> 16) | (s3 << 16) | alphaMask;\n      dest[destPos + 3] = (s3 >>> 8) | alphaMask;\n    }\n\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] =\n        src[j] | (src[j + 1] << 8) | (src[j + 2] << 16) | alphaMask;\n    }\n  } else {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i], // R1G1B1R2\n        s2 = src32[i + 1], // G2B2R3G3\n        s3 = src32[i + 2]; // B3R4G4B4\n\n      dest[destPos] = s1 | alphaMask;\n      dest[destPos + 1] = (s1 << 24) | (s2 >>> 8) | alphaMask;\n      dest[destPos + 2] = (s2 << 16) | (s3 >>> 16) | alphaMask;\n      dest[destPos + 3] = (s3 << 8) | alphaMask;\n    }\n\n    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] =\n        (src[j] << 24) | (src[j + 1] << 16) | (src[j + 2] << 8) | alphaMask;\n    }\n  }\n\n  return { srcPos: srcPos + len, destPos };\n}\n\nfunction grayToRGBA(src, dest) {\n  if (FeatureTest.isLittleEndian) {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = (src[i] * 0x10101) | 0xff000000;\n    }\n  } else {\n    for (let i = 0, ii = src.length; i < ii; i++) {\n      dest[i] = (src[i] * 0x1010100) | 0x000000ff;\n    }\n  }\n}\n\nexport {\n  convertBlackAndWhiteToRGBA,\n  convertRGBToRGBA,\n  convertToRGBA,\n  grayToRGBA,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind, shadow, warn } from \"../shared/util.js\";\nimport { convertToRGBA } from \"../shared/image_utils.js\";\nimport { MAX_INT_32 } from \"./core_utils.js\";\n\nconst MIN_IMAGE_DIM = 2048;\n\n// In Chrome, there aren't max dimensions but only a max area. So an image with\n// a very large dimensions is acceptable but it probably doesn't hurt to reduce\n// it when considering that it will finally rendered on a small canvas.\nconst MAX_IMAGE_DIM = 32768;\nconst MAX_ERROR = 128;\n\n// Large images are encoded in using the BMP format (it's a way faster than\n// encoding in PNG because there are no checksums to compute).\n// Unfortunately, createImageBitmap will create a task in the main thread in\n// order to build the bitmap, hence the main thread is blocked during the\n// decoding which can be a bit long (see bug 1817244).\n// When bug 1759728 is fixed we can remove the BMP workaround and at least it\n// should be a way faster to create the bitmap.\n\nclass ImageResizer {\n  static #goodSquareLength = MIN_IMAGE_DIM;\n\n  static #isImageDecoderSupported = FeatureTest.isImageDecoderSupported;\n\n  constructor(imgData, isMask) {\n    this._imgData = imgData;\n    this._isMask = isMask;\n  }\n\n  static get canUseImageDecoder() {\n    return shadow(\n      this,\n      \"canUseImageDecoder\",\n      this.#isImageDecoderSupported\n        ? ImageDecoder.isTypeSupported(\"image/bmp\")\n        : Promise.resolve(false)\n    );\n  }\n\n  static needsToBeResized(width, height) {\n    if (width <= this.#goodSquareLength && height <= this.#goodSquareLength) {\n      return false;\n    }\n\n    const { MAX_DIM } = this;\n    if (width > MAX_DIM || height > MAX_DIM) {\n      return true;\n    }\n\n    const area = width * height;\n    if (this._hasMaxArea) {\n      return area > this.MAX_AREA;\n    }\n\n    if (area < this.#goodSquareLength ** 2) {\n      return false;\n    }\n\n    // We try as much as possible to avoid to compute the max area.\n    if (this._areGoodDims(width, height)) {\n      this.#goodSquareLength = Math.max(\n        this.#goodSquareLength,\n        Math.floor(Math.sqrt(width * height))\n      );\n      return false;\n    }\n\n    // TODO: the computation can be a bit long because we potentially allocate\n    // some large canvas, so in the Firefox case this value (and MAX_DIM) can be\n    // inferred from prefs (MAX_AREA = gfx.max-alloc-size / 4, 4 is because of\n    // RGBA).\n    this.#goodSquareLength = this._guessMax(\n      this.#goodSquareLength,\n      MAX_DIM,\n      MAX_ERROR,\n      0\n    );\n    const maxArea = (this.MAX_AREA = this.#goodSquareLength ** 2);\n\n    return area > maxArea;\n  }\n\n  static getReducePowerForJPX(width, height, componentsCount) {\n    const area = width * height;\n    // The maximum memory we've in the wasm runtime is 2GB.\n    // Each component is 4 bytes and we can't allocate all the memory just for\n    // the buffers so we limit the size to 1GB / (componentsCount * 4).\n    // We could use more than 2GB by setting MAXIMUM_MEMORY but it would take\n    // too much time to decode a big image.\n    const maxJPXArea = 2 ** 30 / (componentsCount * 4);\n    if (!this.needsToBeResized(width, height)) {\n      if (area > maxJPXArea) {\n        // The image is too large, we need to rescale it.\n        return Math.ceil(Math.log2(area / maxJPXArea));\n      }\n      return 0;\n    }\n    const { MAX_DIM, MAX_AREA } = this;\n    const minFactor = Math.max(\n      width / MAX_DIM,\n      height / MAX_DIM,\n      Math.sqrt(area / Math.min(maxJPXArea, MAX_AREA))\n    );\n    return Math.ceil(Math.log2(minFactor));\n  }\n\n  static get MAX_DIM() {\n    return shadow(\n      this,\n      \"MAX_DIM\",\n      this._guessMax(MIN_IMAGE_DIM, MAX_IMAGE_DIM, 0, 1)\n    );\n  }\n\n  static get MAX_AREA() {\n    this._hasMaxArea = true;\n    return shadow(\n      this,\n      \"MAX_AREA\",\n      this._guessMax(this.#goodSquareLength, this.MAX_DIM, MAX_ERROR, 0) ** 2\n    );\n  }\n\n  static set MAX_AREA(area) {\n    if (area >= 0) {\n      this._hasMaxArea = true;\n      shadow(this, \"MAX_AREA\", area);\n    }\n  }\n\n  static setOptions({\n    canvasMaxAreaInBytes = -1,\n    isImageDecoderSupported = false,\n  }) {\n    if (!this._hasMaxArea) {\n      // Divide by 4 to have the value in pixels.\n      this.MAX_AREA = canvasMaxAreaInBytes >> 2;\n    }\n    this.#isImageDecoderSupported = isImageDecoderSupported;\n  }\n\n  static _areGoodDims(width, height) {\n    try {\n      // This code is working in either Firefox or Chrome.\n      // There is a faster solution using transferToImageBitmap which is faster\n      // in Firefox (when the dimensions are wrong the resulting bitmap has its\n      // dimensions equal to 1) but it doesn't find the correct values in\n      // Chrome.\n      const canvas = new OffscreenCanvas(width, height);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.fillRect(0, 0, 1, 1);\n      const opacity = ctx.getImageData(0, 0, 1, 1).data[3];\n      canvas.width = canvas.height = 1;\n      return opacity !== 0;\n    } catch {\n      return false;\n    }\n  }\n\n  static _guessMax(start, end, tolerance, defaultHeight) {\n    // We don't really need to have exact values.\n    // When we're here then we're in a corner case: we've a very large image.\n    // So we could potentially downscale an image which fits in the canvas,\n    // it's maybe a pity in term of perfs but we'll reduce the memory use.\n    // The tolerance is the acceptable error we can make on the limit we want.\n    // On Chrome, when the tolerance 0 then it can take ~5s to compute the max\n    // area... and having a tolerance of 128 divides the time by 2.\n    while (start + tolerance + 1 < end) {\n      const middle = Math.floor((start + end) / 2);\n      const height = defaultHeight || middle;\n      if (this._areGoodDims(middle, height)) {\n        start = middle;\n      } else {\n        end = middle;\n      }\n    }\n    return start;\n  }\n\n  static async createImage(imgData, isMask = false) {\n    return new ImageResizer(imgData, isMask)._createImage();\n  }\n\n  async _createImage() {\n    const { _imgData: imgData } = this;\n    const { width, height } = imgData;\n\n    if (width * height * 4 > MAX_INT_32) {\n      // The resulting RGBA image is too large.\n      // We just rescale the data.\n      const result = this.#rescaleImageData();\n      if (result) {\n        return result;\n      }\n    }\n\n    const data = this._encodeBMP();\n    let decoder, imagePromise;\n\n    if (await ImageResizer.canUseImageDecoder) {\n      decoder = new ImageDecoder({\n        data,\n        type: \"image/bmp\",\n        preferAnimation: false,\n        transfer: [data.buffer],\n      });\n      imagePromise = decoder\n        .decode()\n        .catch(reason => {\n          warn(`BMP image decoding failed: ${reason}`);\n          // It's a bit unfortunate to create the BMP twice but we shouldn't be\n          // here in the first place.\n          return createImageBitmap(\n            new Blob([this._encodeBMP().buffer], {\n              type: \"image/bmp\",\n            })\n          );\n        })\n        .finally(() => {\n          decoder.close();\n        });\n    } else {\n      imagePromise = createImageBitmap(\n        new Blob([data.buffer], {\n          type: \"image/bmp\",\n        })\n      );\n    }\n\n    const { MAX_AREA, MAX_DIM } = ImageResizer;\n    const minFactor = Math.max(\n      width / MAX_DIM,\n      height / MAX_DIM,\n      Math.sqrt((width * height) / MAX_AREA)\n    );\n\n    const firstFactor = Math.max(minFactor, 2);\n\n    // Add 1 to the ratio and round it with 1 digit.\n    // We add 1.25 in order to have a final image under the limits\n    // (and not just at the limits) to reduce memory use.\n    const factor = Math.round(10 * (minFactor + 1.25)) / 10 / firstFactor;\n\n    const N = Math.floor(Math.log2(factor));\n    const steps = new Array(N + 2).fill(2);\n    steps[0] = firstFactor;\n    steps.splice(-1, 1, factor / (1 << N));\n\n    let newWidth = width;\n    let newHeight = height;\n    const result = await imagePromise;\n    let bitmap = result.image || result;\n\n    for (const step of steps) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n\n      newWidth = Math.floor(newWidth / step);\n      newHeight = Math.floor(newHeight / step);\n\n      const canvas = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(\n        bitmap,\n        0,\n        0,\n        prevWidth,\n        prevHeight,\n        0,\n        0,\n        newWidth,\n        newHeight\n      );\n\n      // Release the resources associated with the bitmap.\n      bitmap.close();\n      bitmap = canvas.transferToImageBitmap();\n    }\n\n    imgData.data = null;\n    imgData.bitmap = bitmap;\n    imgData.width = newWidth;\n    imgData.height = newHeight;\n\n    return imgData;\n  }\n\n  #rescaleImageData() {\n    const { _imgData: imgData } = this;\n    const { data, width, height, kind } = imgData;\n    const rgbaSize = width * height * 4;\n    // K is such as width * height * 4 / 2 ** K <= 2 ** 31 - 1\n    const K = Math.ceil(Math.log2(rgbaSize / MAX_INT_32));\n    const newWidth = width >> K;\n    const newHeight = height >> K;\n    let rgbaData;\n    let maxHeight = height;\n\n    // We try to allocate the buffer with the maximum size but it can fail.\n    try {\n      rgbaData = new Uint8Array(rgbaSize);\n    } catch {\n      // n is such as 2 ** n - 1 > width * height * 4\n      let n = Math.floor(Math.log2(rgbaSize + 1));\n\n      while (true) {\n        try {\n          rgbaData = new Uint8Array(2 ** n - 1);\n          break;\n        } catch {\n          n -= 1;\n        }\n      }\n\n      maxHeight = Math.floor((2 ** n - 1) / (width * 4));\n      const newSize = width * maxHeight * 4;\n      if (newSize < rgbaData.length) {\n        rgbaData = new Uint8Array(newSize);\n      }\n    }\n\n    const src32 = new Uint32Array(rgbaData.buffer);\n    const dest32 = new Uint32Array(newWidth * newHeight);\n\n    let srcPos = 0;\n    let newIndex = 0;\n    const step = Math.ceil(height / maxHeight);\n    const remainder = height % maxHeight === 0 ? height : height % maxHeight;\n    for (let k = 0; k < step; k++) {\n      const h = k < step - 1 ? maxHeight : remainder;\n      ({ srcPos } = convertToRGBA({\n        kind,\n        src: data,\n        dest: src32,\n        width,\n        height: h,\n        inverseDecode: this._isMask,\n        srcPos,\n      }));\n\n      for (let i = 0, ii = h >> K; i < ii; i++) {\n        const buf = src32.subarray((i << K) * width);\n        for (let j = 0; j < newWidth; j++) {\n          dest32[newIndex++] = buf[j << K];\n        }\n      }\n    }\n\n    if (ImageResizer.needsToBeResized(newWidth, newHeight)) {\n      imgData.data = dest32;\n      imgData.width = newWidth;\n      imgData.height = newHeight;\n      imgData.kind = ImageKind.RGBA_32BPP;\n\n      return null;\n    }\n\n    const canvas = new OffscreenCanvas(newWidth, newHeight);\n    const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n    ctx.putImageData(\n      new ImageData(new Uint8ClampedArray(dest32.buffer), newWidth, newHeight),\n      0,\n      0\n    );\n    imgData.data = null;\n    imgData.bitmap = canvas.transferToImageBitmap();\n    imgData.width = newWidth;\n    imgData.height = newHeight;\n\n    return imgData;\n  }\n\n  _encodeBMP() {\n    const { width, height, kind } = this._imgData;\n    let data = this._imgData.data;\n    let bitPerPixel;\n    let colorTable = new Uint8Array(0);\n    let maskTable = colorTable;\n    let compression = 0;\n\n    // Each row of the image must be padded in order to have a final size which\n    // is a multiple of 4.\n\n    switch (kind) {\n      case ImageKind.GRAYSCALE_1BPP: {\n        bitPerPixel = 1;\n        colorTable = new Uint8Array(\n          this._isMask\n            ? [255, 255, 255, 255, 0, 0, 0, 0]\n            : [0, 0, 0, 0, 255, 255, 255, 255]\n        );\n        const rowLen = (width + 7) >> 3;\n        const rowSize = (rowLen + 3) & -4;\n        if (rowLen !== rowSize) {\n          const newData = new Uint8Array(rowSize * height);\n          let k = 0;\n          for (\n            let i = 0, ii = height * rowLen;\n            i < ii;\n            i += rowLen, k += rowSize\n          ) {\n            newData.set(data.subarray(i, i + rowLen), k);\n          }\n          data = newData;\n        }\n        break;\n      }\n      case ImageKind.RGB_24BPP: {\n        bitPerPixel = 24;\n        if (width & 3) {\n          const rowLen = 3 * width;\n          const rowSize = (rowLen + 3) & -4;\n          const extraLen = rowSize - rowLen;\n          const newData = new Uint8Array(rowSize * height);\n          let k = 0;\n          for (let i = 0, ii = height * rowLen; i < ii; i += rowLen) {\n            const row = data.subarray(i, i + rowLen);\n            for (let j = 0; j < rowLen; j += 3) {\n              newData[k++] = row[j + 2];\n              newData[k++] = row[j + 1];\n              newData[k++] = row[j];\n            }\n            k += extraLen;\n          }\n          data = newData;\n        } else {\n          for (let i = 0, ii = data.length; i < ii; i += 3) {\n            // Just swap R and B.\n            const tmp = data[i];\n            data[i] = data[i + 2];\n            data[i + 2] = tmp;\n          }\n        }\n        break;\n      }\n      case ImageKind.RGBA_32BPP:\n        bitPerPixel = 32;\n        compression = 3;\n        maskTable = new Uint8Array(\n          4 /* R mask */ +\n            4 /* G mask */ +\n            4 /* B mask */ +\n            4 /* A mask */ +\n            52 /* Windows color space stuff */\n        );\n        const view = new DataView(maskTable.buffer);\n        if (FeatureTest.isLittleEndian) {\n          view.setUint32(0, 0x000000ff, true);\n          view.setUint32(4, 0x0000ff00, true);\n          view.setUint32(8, 0x00ff0000, true);\n          view.setUint32(12, 0xff000000, true);\n        } else {\n          view.setUint32(0, 0xff000000, true);\n          view.setUint32(4, 0x00ff0000, true);\n          view.setUint32(8, 0x0000ff00, true);\n          view.setUint32(12, 0x000000ff, true);\n        }\n        break;\n      default:\n        throw new Error(\"invalid format\");\n    }\n\n    let i = 0;\n    const headerLength = 40 + maskTable.length;\n    const fileLength = 14 + headerLength + colorTable.length + data.length;\n    const bmpData = new Uint8Array(fileLength);\n    const view = new DataView(bmpData.buffer);\n\n    // Signature.\n    view.setUint16(i, 0x4d42, true);\n    i += 2;\n\n    // File size.\n    view.setUint32(i, fileLength, true);\n    i += 4;\n\n    // Reserved.\n    view.setUint32(i, 0, true);\n    i += 4;\n\n    // Data offset.\n    view.setUint32(i, 14 + headerLength + colorTable.length, true);\n    i += 4;\n\n    // Header size.\n    view.setUint32(i, headerLength, true);\n    i += 4;\n\n    // Width.\n    view.setInt32(i, width, true);\n    i += 4;\n\n    // Height.\n    // Negative height indicates that the image is stored from top to bottom.\n    view.setInt32(i, -height, true);\n    i += 4;\n\n    // Number of planes (must be 1).\n    view.setUint16(i, 1, true);\n    i += 2;\n\n    // Number of bit per pixel.\n    view.setUint16(i, bitPerPixel, true);\n    i += 2;\n\n    // Compression method.\n    view.setUint32(i, compression, true);\n    i += 4;\n\n    // The image size.\n    view.setUint32(i, 0, true);\n    i += 4;\n\n    // Horizontal resolution.\n    view.setInt32(i, 0, true);\n    i += 4;\n\n    // Vertical resolution.\n    view.setInt32(i, 0, true);\n    i += 4;\n\n    // Number of colors in the palette (0 to default).\n    view.setUint32(i, colorTable.length / 4, true);\n    i += 4;\n\n    // Number of important colors used (0 to default).\n    view.setUint32(i, 0, true);\n    i += 4;\n\n    bmpData.set(maskTable, i);\n    i += maskTable.length;\n\n    bmpData.set(colorTable, i);\n    i += colorTable.length;\n\n    bmpData.set(data, i);\n\n    return bmpData;\n  }\n}\n\nexport { ImageResizer };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseStream } from \"./base_stream.js\";\nimport { Stream } from \"./stream.js\";\nimport { unreachable } from \"../shared/util.js\";\n\n// Lots of DecodeStreams are created whose buffers are never used.  For these\n// we share a single empty buffer. This is (a) space-efficient and (b) avoids\n// having special cases that would be required if we used |null| for an empty\n// buffer.\nconst emptyBuffer = new Uint8Array(0);\n\n// Super class for the decoding streams.\nclass DecodeStream extends BaseStream {\n  buffer = emptyBuffer;\n\n  bufferLength = 0;\n\n  eof = false;\n\n  minBufferLength = 512;\n\n  pos = 0;\n\n  constructor(maybeMinBufferLength) {\n    super();\n    this._rawMinBufferLength = maybeMinBufferLength || 0;\n\n    if (maybeMinBufferLength) {\n      // Compute the first power of two that is as big as maybeMinBufferLength.\n      while (this.minBufferLength < maybeMinBufferLength) {\n        this.minBufferLength *= 2;\n      }\n    }\n  }\n\n  readBlock() {\n    unreachable(\"Abstract method `readBlock` called\");\n  }\n\n  get isEmpty() {\n    while (!this.eof && this.bufferLength === 0) {\n      this.readBlock();\n    }\n    return this.bufferLength === 0;\n  }\n\n  ensureBuffer(requested) {\n    const buffer = this.buffer;\n    if (requested <= buffer.byteLength) {\n      return buffer;\n    }\n    let size = this.minBufferLength;\n    while (size < requested) {\n      size *= 2;\n    }\n    const buffer2 = new Uint8Array(size);\n    buffer2.set(buffer);\n    return (this.buffer = buffer2);\n  }\n\n  getByte() {\n    const pos = this.pos;\n    while (this.bufferLength <= pos) {\n      if (this.eof) {\n        return -1;\n      }\n      this.readBlock();\n    }\n    return this.buffer[this.pos++];\n  }\n\n  getBytes(length, decoderOptions = null) {\n    const pos = this.pos;\n    let end;\n\n    if (length) {\n      this.ensureBuffer(pos + length);\n      end = pos + length;\n\n      while (!this.eof && this.bufferLength < end) {\n        this.readBlock(decoderOptions);\n      }\n      const bufEnd = this.bufferLength;\n      if (end > bufEnd) {\n        end = bufEnd;\n      }\n    } else {\n      while (!this.eof) {\n        this.readBlock(decoderOptions);\n      }\n      end = this.bufferLength;\n    }\n\n    this.pos = end;\n    return this.buffer.subarray(pos, end);\n  }\n\n  async getImageData(length, decoderOptions) {\n    if (!this.canAsyncDecodeImageFromBuffer) {\n      if (this.isAsyncDecoder) {\n        return this.decodeImage(null, length, decoderOptions);\n      }\n      return this.getBytes(length, decoderOptions);\n    }\n    const data = await this.stream.asyncGetBytes();\n    return this.decodeImage(data, length, decoderOptions);\n  }\n\n  async asyncGetBytesFromDecompressionStream(name) {\n    this.stream.reset();\n    const bytes = this.stream.isAsync\n      ? await this.stream.asyncGetBytes()\n      : this.stream.getBytes();\n\n    try {\n      const { readable, writable } = new DecompressionStream(name);\n      const writer = writable.getWriter();\n      await writer.ready;\n\n      // We can't await writer.write() because it'll block until the reader\n      // starts which happens few lines below.\n      writer\n        .write(bytes)\n        .then(async () => {\n          await writer.ready;\n          await writer.close();\n        })\n        .catch(() => {});\n\n      const chunks = [];\n      let totalLength = 0;\n\n      for await (const chunk of readable) {\n        chunks.push(chunk);\n        totalLength += chunk.byteLength;\n      }\n      const data = new Uint8Array(totalLength);\n      let offset = 0;\n      for (const chunk of chunks) {\n        data.set(chunk, offset);\n        offset += chunk.byteLength;\n      }\n      return { decompressed: data, compressed: bytes };\n    } catch {\n      return { decompressed: null, compressed: bytes };\n    }\n  }\n\n  reset() {\n    this.pos = 0;\n  }\n\n  makeSubStream(start, length, dict = null) {\n    if (length === undefined) {\n      while (!this.eof) {\n        this.readBlock();\n      }\n    } else {\n      const end = start + length;\n      while (this.bufferLength <= end && !this.eof) {\n        this.readBlock();\n      }\n    }\n    return new Stream(this.buffer, start, length, dict);\n  }\n\n  clone() {\n    // Make sure it has been fully read.\n    while (!this.eof) {\n      this.readBlock();\n    }\n    return new Stream(this.buffer, 0, this.bufferLength, this.dict?.clone());\n  }\n\n  getBaseStreams() {\n    return this.stream ? this.stream.getBaseStreams() : null;\n  }\n}\n\nclass StreamsSequenceStream extends DecodeStream {\n  constructor(streams, onError = null) {\n    streams = streams.filter(s => s instanceof BaseStream && !s.isImageStream);\n\n    let maybeLength = 0;\n    for (const stream of streams) {\n      maybeLength +=\n        stream instanceof DecodeStream\n          ? stream._rawMinBufferLength\n          : stream.length;\n    }\n    super(maybeLength);\n\n    this.streams = streams;\n    this._onError = onError;\n  }\n\n  readBlock() {\n    const streams = this.streams;\n    if (streams.length === 0) {\n      this.eof = true;\n      return;\n    }\n    const stream = streams.shift();\n    let chunk;\n    try {\n      chunk = stream.getBytes();\n    } catch (reason) {\n      if (this._onError) {\n        this._onError(reason, stream.dict?.objId);\n        return;\n      }\n      throw reason;\n    }\n    const bufferLength = this.bufferLength;\n    const newLength = bufferLength + chunk.length;\n    const buffer = this.ensureBuffer(newLength);\n    buffer.set(chunk, bufferLength);\n    this.bufferLength = newLength;\n  }\n\n  getBaseStreams() {\n    const baseStreamsBuf = [];\n    for (const stream of this.streams) {\n      const baseStreams = stream.getBaseStreams();\n      if (baseStreams) {\n        baseStreamsBuf.push(...baseStreams);\n      }\n    }\n    return baseStreamsBuf.length > 0 ? baseStreamsBuf : null;\n  }\n}\n\nexport { DecodeStream, StreamsSequenceStream };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AlternateCS,\n  CalGrayCS,\n  CalRGBCS,\n  DeviceCmykCS,\n  DeviceGrayCS,\n  DeviceRgbaCS,\n  DeviceRgbCS,\n  IndexedCS,\n  LabCS,\n  PatternCS,\n} from \"./colorspace.js\";\nimport { CmykICCBasedCS, IccColorSpace } from \"./icc_colorspace.js\";\nimport { Dict, Name, Ref } from \"./primitives.js\";\nimport { shadow, unreachable, warn } from \"../shared/util.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\nimport { MissingDataException } from \"./core_utils.js\";\n\nclass ColorSpaceUtils {\n  static parse({\n    cs,\n    xref,\n    resources = null,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache,\n    asyncIfNotCached = false,\n  }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      (!globalColorSpaceCache || !localColorSpaceCache)\n    ) {\n      unreachable(\n        'ColorSpaceUtils.parse - expected \"globalColorSpaceCache\"/\"localColorSpaceCache\" argument.'\n      );\n    }\n    const options = {\n      xref,\n      resources,\n      pdfFunctionFactory,\n      globalColorSpaceCache,\n      localColorSpaceCache,\n    };\n    let csName, csRef, parsedCS;\n\n    // Check if the ColorSpace is cached first, to avoid re-parsing it.\n    if (cs instanceof Ref) {\n      csRef = cs;\n\n      const cachedCS =\n        globalColorSpaceCache.getByRef(csRef) ||\n        localColorSpaceCache.getByRef(csRef);\n      if (cachedCS) {\n        return cachedCS;\n      }\n      cs = xref.fetch(cs);\n    }\n    if (cs instanceof Name) {\n      csName = cs.name;\n\n      const cachedCS = localColorSpaceCache.getByName(csName);\n      if (cachedCS) {\n        return cachedCS;\n      }\n    }\n\n    try {\n      parsedCS = this.#parse(cs, options);\n    } catch (ex) {\n      if (asyncIfNotCached && !(ex instanceof MissingDataException)) {\n        return Promise.reject(ex);\n      }\n      throw ex;\n    }\n\n    // Attempt to cache the parsed ColorSpace, by name and/or reference.\n    if (csName || csRef) {\n      localColorSpaceCache.set(csName, csRef, parsedCS);\n\n      if (csRef) {\n        globalColorSpaceCache.set(/* name = */ null, csRef, parsedCS);\n      }\n    }\n    return asyncIfNotCached ? Promise.resolve(parsedCS) : parsedCS;\n  }\n\n  /**\n   * NOTE: This method should *only* be invoked from `this.#parse`,\n   *       when parsing \"sub\" ColorSpaces.\n   */\n  static #subParse(cs, options) {\n    const { globalColorSpaceCache } = options;\n    let csRef;\n\n    // Check if the ColorSpace is cached first, to avoid re-parsing it.\n    if (cs instanceof Ref) {\n      csRef = cs;\n\n      const cachedCS = globalColorSpaceCache.getByRef(csRef);\n      if (cachedCS) {\n        return cachedCS;\n      }\n    }\n    const parsedCS = this.#parse(cs, options);\n\n    // Only cache the parsed ColorSpace globally, by reference.\n    if (csRef) {\n      globalColorSpaceCache.set(/* name = */ null, csRef, parsedCS);\n    }\n    return parsedCS;\n  }\n\n  static #parse(cs, options) {\n    const { xref, resources, pdfFunctionFactory, globalColorSpaceCache } =\n      options;\n\n    cs = xref.fetchIfRef(cs);\n    if (cs instanceof Name) {\n      switch (cs.name) {\n        case \"G\":\n        case \"DeviceGray\":\n          return this.gray;\n        case \"RGB\":\n        case \"DeviceRGB\":\n          return this.rgb;\n        case \"DeviceRGBA\":\n          return this.rgba;\n        case \"CMYK\":\n        case \"DeviceCMYK\":\n          return this.cmyk;\n        case \"Pattern\":\n          return new PatternCS(/* baseCS = */ null);\n        default:\n          if (resources instanceof Dict) {\n            const colorSpaces = resources.get(\"ColorSpace\");\n            if (colorSpaces instanceof Dict) {\n              const resourcesCS = colorSpaces.get(cs.name);\n              if (resourcesCS) {\n                if (resourcesCS instanceof Name) {\n                  return this.#parse(resourcesCS, options);\n                }\n                cs = resourcesCS;\n                break;\n              }\n            }\n          }\n          // Fallback to the default gray color space.\n          warn(`Unrecognized ColorSpace: ${cs.name}`);\n          return this.gray;\n      }\n    }\n    if (Array.isArray(cs)) {\n      const mode = xref.fetchIfRef(cs[0]).name;\n      let params, numComps, baseCS, whitePoint, blackPoint, gamma;\n\n      switch (mode) {\n        case \"G\":\n        case \"DeviceGray\":\n          return this.gray;\n        case \"RGB\":\n        case \"DeviceRGB\":\n          return this.rgb;\n        case \"CMYK\":\n        case \"DeviceCMYK\":\n          return this.cmyk;\n        case \"CalGray\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          gamma = params.get(\"Gamma\");\n          return new CalGrayCS(whitePoint, blackPoint, gamma);\n        case \"CalRGB\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          gamma = params.getArray(\"Gamma\");\n          const matrix = params.getArray(\"Matrix\");\n          return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);\n        case \"ICCBased\":\n          const isRef = cs[1] instanceof Ref;\n          if (isRef) {\n            const cachedCS = globalColorSpaceCache.getByRef(cs[1]);\n            if (cachedCS) {\n              return cachedCS;\n            }\n          }\n\n          const stream = xref.fetchIfRef(cs[1]);\n          const dict = stream.dict;\n          numComps = dict.get(\"N\");\n\n          if (IccColorSpace.isUsable) {\n            try {\n              const iccCS = new IccColorSpace(\n                stream.getBytes(),\n                \"ICCBased\",\n                numComps\n              );\n              if (isRef) {\n                globalColorSpaceCache.set(/* name = */ null, cs[1], iccCS);\n              }\n              return iccCS;\n            } catch (ex) {\n              if (ex instanceof MissingDataException) {\n                throw ex;\n              }\n              warn(`ICCBased color space (${cs[1]}): \"${ex}\".`);\n            }\n          }\n\n          const altRaw = dict.getRaw(\"Alternate\");\n          if (altRaw) {\n            const altCS = this.#subParse(altRaw, options);\n            // Ensure that the number of components are correct,\n            // and also (indirectly) that it is not a PatternCS.\n            if (altCS.numComps === numComps) {\n              return altCS;\n            }\n            warn(\"ICCBased color space: Ignoring incorrect /Alternate entry.\");\n          }\n          if (numComps === 1) {\n            return this.gray;\n          } else if (numComps === 3) {\n            return this.rgb;\n          } else if (numComps === 4) {\n            return this.cmyk;\n          }\n          break;\n        case \"Pattern\":\n          baseCS = cs[1] || null;\n          baseCS &&= this.#subParse(baseCS, options);\n          return new PatternCS(baseCS);\n        case \"I\":\n        case \"Indexed\":\n          baseCS = this.#subParse(cs[1], options);\n          const hiVal = MathClamp(xref.fetchIfRef(cs[2]), 0, 255);\n          const lookup = xref.fetchIfRef(cs[3]);\n          return new IndexedCS(baseCS, hiVal, lookup);\n        case \"Separation\":\n        case \"DeviceN\":\n          const name = xref.fetchIfRef(cs[1]);\n          numComps = Array.isArray(name) ? name.length : 1;\n          baseCS = this.#subParse(cs[2], options);\n          const tintFn = pdfFunctionFactory.create(cs[3]);\n          return new AlternateCS(numComps, baseCS, tintFn);\n        case \"Lab\":\n          params = xref.fetchIfRef(cs[1]);\n          whitePoint = params.getArray(\"WhitePoint\");\n          blackPoint = params.getArray(\"BlackPoint\");\n          const range = params.getArray(\"Range\");\n          return new LabCS(whitePoint, blackPoint, range);\n        default:\n          // Fallback to the default gray color space.\n          warn(`Unimplemented ColorSpace object: ${mode}`);\n          return this.gray;\n      }\n    }\n    // Fallback to the default gray color space.\n    warn(`Unrecognized ColorSpace object: ${cs}`);\n    return this.gray;\n  }\n\n  static get gray() {\n    return shadow(this, \"gray\", new DeviceGrayCS());\n  }\n\n  static get rgb() {\n    return shadow(this, \"rgb\", new DeviceRgbCS());\n  }\n\n  static get rgba() {\n    return shadow(this, \"rgba\", new DeviceRgbaCS());\n  }\n\n  static get cmyk() {\n    if (CmykICCBasedCS.isUsable) {\n      try {\n        return shadow(this, \"cmyk\", new CmykICCBasedCS());\n      } catch {\n        warn(\"CMYK fallback: DeviceCMYK\");\n      }\n    }\n    return shadow(this, \"cmyk\", new DeviceCmykCS());\n  }\n}\n\nexport { ColorSpaceUtils };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, warn } from \"../shared/util.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { DeviceCmykCS } from \"./colorspace.js\";\nimport { grayToRGBA } from \"../shared/image_utils.js\";\n\nclass JpegError extends BaseException {\n  constructor(msg) {\n    super(msg, \"JpegError\");\n  }\n}\n\nclass DNLMarkerError extends BaseException {\n  constructor(message, scanLines) {\n    super(message, \"DNLMarkerError\");\n    this.scanLines = scanLines;\n  }\n}\n\nclass EOIMarkerError extends BaseException {\n  constructor(msg) {\n    super(msg, \"EOIMarkerError\");\n  }\n}\n\n/**\n * This code was forked from https://github.com/notmasteryet/jpgjs.\n * The original version was created by GitHub user notmasteryet.\n *\n * - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n *   (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n * - The JFIF specification can be found in the JPEG File Interchange Format\n *   (www.w3.org/Graphics/JPEG/jfif3.pdf)\n * - The Adobe Application-Specific JPEG markers in the\n *   Supporting the DCT Filters in PostScript Level 2, Technical Note #5116\n *   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n */\n\n// prettier-ignore\nconst dctZigZag = new Uint8Array([\n   0,\n   1,  8,\n  16,  9,  2,\n   3, 10, 17, 24,\n  32, 25, 18, 11, 4,\n   5, 12, 19, 26, 33, 40,\n  48, 41, 34, 27, 20, 13,  6,\n   7, 14, 21, 28, 35, 42, 49, 56,\n  57, 50, 43, 36, 29, 22, 15,\n  23, 30, 37, 44, 51, 58,\n  59, 52, 45, 38, 31,\n  39, 46, 53, 60,\n  61, 54, 47,\n  55, 62,\n  63\n]);\n\nconst dctCos1 = 4017; // cos(pi/16)\nconst dctSin1 = 799; // sin(pi/16)\nconst dctCos3 = 3406; // cos(3*pi/16)\nconst dctSin3 = 2276; // sin(3*pi/16)\nconst dctCos6 = 1567; // cos(6*pi/16)\nconst dctSin6 = 3784; // sin(6*pi/16)\nconst dctSqrt2 = 5793; // sqrt(2)\nconst dctSqrt1d2 = 2896; // sqrt(2) / 2\n\nfunction buildHuffmanTable(codeLengths, values) {\n  let k = 0,\n    i,\n    j,\n    length = 16;\n  while (length > 0 && !codeLengths[length - 1]) {\n    length--;\n  }\n  const code = [{ children: [], index: 0 }];\n  let p = code[0],\n    q;\n  for (i = 0; i < length; i++) {\n    for (j = 0; j < codeLengths[i]; j++) {\n      p = code.pop();\n      p.children[p.index] = values[k];\n      while (p.index > 0) {\n        p = code.pop();\n      }\n      p.index++;\n      code.push(p);\n      while (code.length <= i) {\n        code.push((q = { children: [], index: 0 }));\n        p.children[p.index] = q.children;\n        p = q;\n      }\n      k++;\n    }\n    if (i + 1 < length) {\n      // p here points to last code\n      code.push((q = { children: [], index: 0 }));\n      p.children[p.index] = q.children;\n      p = q;\n    }\n  }\n  return code[0].children;\n}\n\nfunction getBlockBufferOffset(component, row, col) {\n  return 64 * ((component.blocksPerLine + 1) * row + col);\n}\n\nfunction decodeScan(\n  data,\n  view,\n  offset,\n  frame,\n  components,\n  resetInterval,\n  spectralStart,\n  spectralEnd,\n  successivePrev,\n  successive,\n  parseDNLMarker = false\n) {\n  const mcusPerLine = frame.mcusPerLine;\n  const progressive = frame.progressive;\n\n  const startOffset = offset;\n  let bitsData = 0,\n    bitsCount = 0;\n\n  function readBit() {\n    if (bitsCount > 0) {\n      bitsCount--;\n      return (bitsData >> bitsCount) & 1;\n    }\n    bitsData = data[offset++];\n    if (bitsData === 0xff) {\n      const nextByte = data[offset++];\n      if (nextByte) {\n        if (nextByte === /* DNL = */ 0xdc && parseDNLMarker) {\n          offset += 2; // Skip marker length.\n\n          const scanLines = view.getUint16(offset);\n          offset += 2;\n          if (scanLines > 0 && scanLines !== frame.scanLines) {\n            throw new DNLMarkerError(\n              \"Found DNL marker (0xFFDC) while parsing scan data\",\n              scanLines\n            );\n          }\n        } else if (nextByte === /* EOI = */ 0xd9) {\n          if (parseDNLMarker) {\n            // NOTE: only 8-bit JPEG images are supported in this decoder.\n            const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);\n            // Heuristic to attempt to handle corrupt JPEG images with too\n            // large `scanLines` parameter, by falling back to the currently\n            // parsed number of scanLines when it's at least (approximately)\n            // one \"half\" order of magnitude smaller than expected (fixes\n            // issue10880.pdf, issue10989.pdf, issue15492.pdf).\n            if (\n              maybeScanLines > 0 &&\n              Math.round(frame.scanLines / maybeScanLines) >= 5\n            ) {\n              throw new DNLMarkerError(\n                \"Found EOI marker (0xFFD9) while parsing scan data, \" +\n                  \"possibly caused by incorrect `scanLines` parameter\",\n                maybeScanLines\n              );\n            }\n          }\n          throw new EOIMarkerError(\n            \"Found EOI marker (0xFFD9) while parsing scan data\"\n          );\n        }\n        throw new JpegError(\n          `unexpected marker ${((bitsData << 8) | nextByte).toString(16)}`\n        );\n      }\n      // unstuff 0\n    }\n    bitsCount = 7;\n    return bitsData >>> 7;\n  }\n\n  function decodeHuffman(tree) {\n    let node = tree;\n    while (true) {\n      node = node[readBit()];\n      switch (typeof node) {\n        case \"number\":\n          return node;\n        case \"object\":\n          continue;\n      }\n      throw new JpegError(\"invalid huffman sequence\");\n    }\n  }\n\n  function receive(length) {\n    let n = 0;\n    while (length > 0) {\n      n = (n << 1) | readBit();\n      length--;\n    }\n    return n;\n  }\n\n  function receiveAndExtend(length) {\n    if (length === 1) {\n      return readBit() === 1 ? 1 : -1;\n    }\n    const n = receive(length);\n    if (n >= 1 << (length - 1)) {\n      return n;\n    }\n    return n + (-1 << length) + 1;\n  }\n\n  function decodeBaseline(component, blockOffset) {\n    const t = decodeHuffman(component.huffmanTableDC);\n    const diff = t === 0 ? 0 : receiveAndExtend(t);\n    component.blockData[blockOffset] = component.pred += diff;\n    let k = 1;\n    while (k < 64) {\n      const rs = decodeHuffman(component.huffmanTableAC);\n      const s = rs & 15,\n        r = rs >> 4;\n      if (s === 0) {\n        if (r < 15) {\n          break;\n        }\n        k += 16;\n        continue;\n      }\n      k += r;\n      const z = dctZigZag[k];\n      component.blockData[blockOffset + z] = receiveAndExtend(s);\n      k++;\n    }\n  }\n\n  function decodeDCFirst(component, blockOffset) {\n    const t = decodeHuffman(component.huffmanTableDC);\n    const diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\n    component.blockData[blockOffset] = component.pred += diff;\n  }\n\n  function decodeDCSuccessive(component, blockOffset) {\n    component.blockData[blockOffset] |= readBit() << successive;\n  }\n\n  let eobrun = 0;\n  function decodeACFirst(component, blockOffset) {\n    if (eobrun > 0) {\n      eobrun--;\n      return;\n    }\n    let k = spectralStart;\n    const e = spectralEnd;\n    while (k <= e) {\n      const rs = decodeHuffman(component.huffmanTableAC);\n      const s = rs & 15,\n        r = rs >> 4;\n      if (s === 0) {\n        if (r < 15) {\n          eobrun = receive(r) + (1 << r) - 1;\n          break;\n        }\n        k += 16;\n        continue;\n      }\n      k += r;\n      const z = dctZigZag[k];\n      component.blockData[blockOffset + z] =\n        receiveAndExtend(s) * (1 << successive);\n      k++;\n    }\n  }\n\n  let successiveACState = 0,\n    successiveACNextValue;\n  function decodeACSuccessive(component, blockOffset) {\n    let k = spectralStart;\n    const e = spectralEnd;\n    let r = 0;\n    let s;\n    let rs;\n    while (k <= e) {\n      const offsetZ = blockOffset + dctZigZag[k];\n      const sign = component.blockData[offsetZ] < 0 ? -1 : 1;\n      switch (successiveACState) {\n        case 0: // initial state\n          rs = decodeHuffman(component.huffmanTableAC);\n          s = rs & 15;\n          r = rs >> 4;\n          if (s === 0) {\n            if (r < 15) {\n              eobrun = receive(r) + (1 << r);\n              successiveACState = 4;\n            } else {\n              r = 16;\n              successiveACState = 1;\n            }\n          } else {\n            if (s !== 1) {\n              throw new JpegError(\"invalid ACn encoding\");\n            }\n            successiveACNextValue = receiveAndExtend(s);\n            successiveACState = r ? 2 : 3;\n          }\n          continue;\n        case 1: // skipping r zero items\n        case 2:\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          } else {\n            r--;\n            if (r === 0) {\n              successiveACState = successiveACState === 2 ? 3 : 0;\n            }\n          }\n          break;\n        case 3: // set value for a zero item\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          } else {\n            component.blockData[offsetZ] = successiveACNextValue << successive;\n            successiveACState = 0;\n          }\n          break;\n        case 4: // eob\n          if (component.blockData[offsetZ]) {\n            component.blockData[offsetZ] += sign * (readBit() << successive);\n          }\n          break;\n      }\n      k++;\n    }\n    if (successiveACState === 4) {\n      eobrun--;\n      if (eobrun === 0) {\n        successiveACState = 0;\n      }\n    }\n  }\n\n  let blockRow = 0;\n  function decodeMcu(component, decode, mcu, row, col) {\n    const mcuRow = (mcu / mcusPerLine) | 0;\n    const mcuCol = mcu % mcusPerLine;\n    blockRow = mcuRow * component.v + row;\n    const blockCol = mcuCol * component.h + col;\n    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n    decode(component, blockOffset);\n  }\n\n  function decodeBlock(component, decode, mcu) {\n    blockRow = (mcu / component.blocksPerLine) | 0;\n    const blockCol = mcu % component.blocksPerLine;\n    const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\n    decode(component, blockOffset);\n  }\n\n  const componentsLength = components.length;\n  let component, i, j, k, n;\n  let decodeFn;\n  if (progressive) {\n    if (spectralStart === 0) {\n      decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n    } else {\n      decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n    }\n  } else {\n    decodeFn = decodeBaseline;\n  }\n\n  let mcu = 0,\n    fileMarker;\n  const mcuExpected =\n    componentsLength === 1\n      ? components[0].blocksPerLine * components[0].blocksPerColumn\n      : mcusPerLine * frame.mcusPerColumn;\n\n  let h, v;\n  while (mcu <= mcuExpected) {\n    // reset interval stuff\n    const mcuToRead = resetInterval\n      ? Math.min(mcuExpected - mcu, resetInterval)\n      : mcuExpected;\n\n    // The `mcuToRead === 0` case should only occur when all of the expected\n    // MCU data has been already parsed, i.e. when `mcu === mcuExpected`, but\n    // some corrupt JPEG images contain more data than intended and we thus\n    // want to skip over any extra RSTx markers below (fixes issue11794.pdf).\n    if (mcuToRead > 0) {\n      for (i = 0; i < componentsLength; i++) {\n        components[i].pred = 0;\n      }\n      eobrun = 0;\n\n      if (componentsLength === 1) {\n        component = components[0];\n        for (n = 0; n < mcuToRead; n++) {\n          decodeBlock(component, decodeFn, mcu);\n          mcu++;\n        }\n      } else {\n        for (n = 0; n < mcuToRead; n++) {\n          for (i = 0; i < componentsLength; i++) {\n            component = components[i];\n            h = component.h;\n            v = component.v;\n            for (j = 0; j < v; j++) {\n              for (k = 0; k < h; k++) {\n                decodeMcu(component, decodeFn, mcu, j, k);\n              }\n            }\n          }\n          mcu++;\n        }\n      }\n    }\n\n    // find marker\n    bitsCount = 0;\n    fileMarker = findNextFileMarker(data, view, offset);\n    if (!fileMarker) {\n      break; // Reached the end of the image data without finding any marker.\n    }\n    if (fileMarker.invalid) {\n      // Some bad images seem to pad Scan blocks with e.g. zero bytes, skip\n      // past those to attempt to find a valid marker (fixes issue4090.pdf).\n      const partialMsg = mcuToRead > 0 ? \"unexpected\" : \"excessive\";\n      warn(\n        `decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`\n      );\n      offset = fileMarker.offset;\n    }\n    if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {\n      // RSTx\n      offset += 2;\n    } else {\n      break;\n    }\n  }\n\n  return offset - startOffset;\n}\n\n// A port of poppler's IDCT method which in turn is taken from:\n//   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n//   'Practical Fast 1-D DCT Algorithms with 11 Multiplications',\n//   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n//   988-991.\nfunction quantizeAndInverse(component, blockBufferOffset, p) {\n  const qt = component.quantizationTable,\n    blockData = component.blockData;\n  let v0, v1, v2, v3, v4, v5, v6, v7;\n  let p0, p1, p2, p3, p4, p5, p6, p7;\n  let t;\n\n  if (!qt) {\n    throw new JpegError(\"missing required Quantization Table.\");\n  }\n\n  // inverse DCT on rows\n  for (let row = 0; row < 64; row += 8) {\n    // gather block data\n    p0 = blockData[blockBufferOffset + row];\n    p1 = blockData[blockBufferOffset + row + 1];\n    p2 = blockData[blockBufferOffset + row + 2];\n    p3 = blockData[blockBufferOffset + row + 3];\n    p4 = blockData[blockBufferOffset + row + 4];\n    p5 = blockData[blockBufferOffset + row + 5];\n    p6 = blockData[blockBufferOffset + row + 6];\n    p7 = blockData[blockBufferOffset + row + 7];\n\n    // dequant p0\n    p0 *= qt[row];\n\n    // check for all-zero AC coefficients\n    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n      t = (dctSqrt2 * p0 + 512) >> 10;\n      p[row] = t;\n      p[row + 1] = t;\n      p[row + 2] = t;\n      p[row + 3] = t;\n      p[row + 4] = t;\n      p[row + 5] = t;\n      p[row + 6] = t;\n      p[row + 7] = t;\n      continue;\n    }\n    // dequant p1 ... p7\n    p1 *= qt[row + 1];\n    p2 *= qt[row + 2];\n    p3 *= qt[row + 3];\n    p4 *= qt[row + 4];\n    p5 *= qt[row + 5];\n    p6 *= qt[row + 6];\n    p7 *= qt[row + 7];\n\n    // stage 4\n    v0 = (dctSqrt2 * p0 + 128) >> 8;\n    v1 = (dctSqrt2 * p4 + 128) >> 8;\n    v2 = p2;\n    v3 = p6;\n    v4 = (dctSqrt1d2 * (p1 - p7) + 128) >> 8;\n    v7 = (dctSqrt1d2 * (p1 + p7) + 128) >> 8;\n    v5 = p3 << 4;\n    v6 = p5 << 4;\n\n    // stage 3\n    v0 = (v0 + v1 + 1) >> 1;\n    v1 = v0 - v1;\n    t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n    v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n    v3 = t;\n    v4 = (v4 + v6 + 1) >> 1;\n    v6 = v4 - v6;\n    v7 = (v7 + v5 + 1) >> 1;\n    v5 = v7 - v5;\n\n    // stage 2\n    v0 = (v0 + v3 + 1) >> 1;\n    v3 = v0 - v3;\n    v1 = (v1 + v2 + 1) >> 1;\n    v2 = v1 - v2;\n    t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n    v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n    v7 = t;\n    t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n    v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n    v6 = t;\n\n    // stage 1\n    p[row] = v0 + v7;\n    p[row + 7] = v0 - v7;\n    p[row + 1] = v1 + v6;\n    p[row + 6] = v1 - v6;\n    p[row + 2] = v2 + v5;\n    p[row + 5] = v2 - v5;\n    p[row + 3] = v3 + v4;\n    p[row + 4] = v3 - v4;\n  }\n\n  // inverse DCT on columns\n  for (let col = 0; col < 8; ++col) {\n    p0 = p[col];\n    p1 = p[col + 8];\n    p2 = p[col + 16];\n    p3 = p[col + 24];\n    p4 = p[col + 32];\n    p5 = p[col + 40];\n    p6 = p[col + 48];\n    p7 = p[col + 56];\n\n    // check for all-zero AC coefficients\n    if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\n      t = (dctSqrt2 * p0 + 8192) >> 14;\n      // Convert to 8-bit.\n      if (t < -2040) {\n        t = 0;\n      } else if (t >= 2024) {\n        t = 255;\n      } else {\n        t = (t + 2056) >> 4;\n      }\n      blockData[blockBufferOffset + col] = t;\n      blockData[blockBufferOffset + col + 8] = t;\n      blockData[blockBufferOffset + col + 16] = t;\n      blockData[blockBufferOffset + col + 24] = t;\n      blockData[blockBufferOffset + col + 32] = t;\n      blockData[blockBufferOffset + col + 40] = t;\n      blockData[blockBufferOffset + col + 48] = t;\n      blockData[blockBufferOffset + col + 56] = t;\n      continue;\n    }\n\n    // stage 4\n    v0 = (dctSqrt2 * p0 + 2048) >> 12;\n    v1 = (dctSqrt2 * p4 + 2048) >> 12;\n    v2 = p2;\n    v3 = p6;\n    v4 = (dctSqrt1d2 * (p1 - p7) + 2048) >> 12;\n    v7 = (dctSqrt1d2 * (p1 + p7) + 2048) >> 12;\n    v5 = p3;\n    v6 = p5;\n\n    // stage 3\n    // Shift v0 by 128.5 << 5 here, so we don't need to shift p0...p7 when\n    // converting to UInt8 range later.\n    v0 = ((v0 + v1 + 1) >> 1) + 4112;\n    v1 = v0 - v1;\n    t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n    v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n    v3 = t;\n    v4 = (v4 + v6 + 1) >> 1;\n    v6 = v4 - v6;\n    v7 = (v7 + v5 + 1) >> 1;\n    v5 = v7 - v5;\n\n    // stage 2\n    v0 = (v0 + v3 + 1) >> 1;\n    v3 = v0 - v3;\n    v1 = (v1 + v2 + 1) >> 1;\n    v2 = v1 - v2;\n    t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n    v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n    v7 = t;\n    t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n    v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n    v6 = t;\n\n    // stage 1\n    p0 = v0 + v7;\n    p7 = v0 - v7;\n    p1 = v1 + v6;\n    p6 = v1 - v6;\n    p2 = v2 + v5;\n    p5 = v2 - v5;\n    p3 = v3 + v4;\n    p4 = v3 - v4;\n\n    // Convert to 8-bit integers.\n    if (p0 < 16) {\n      p0 = 0;\n    } else if (p0 >= 4080) {\n      p0 = 255;\n    } else {\n      p0 >>= 4;\n    }\n    if (p1 < 16) {\n      p1 = 0;\n    } else if (p1 >= 4080) {\n      p1 = 255;\n    } else {\n      p1 >>= 4;\n    }\n    if (p2 < 16) {\n      p2 = 0;\n    } else if (p2 >= 4080) {\n      p2 = 255;\n    } else {\n      p2 >>= 4;\n    }\n    if (p3 < 16) {\n      p3 = 0;\n    } else if (p3 >= 4080) {\n      p3 = 255;\n    } else {\n      p3 >>= 4;\n    }\n    if (p4 < 16) {\n      p4 = 0;\n    } else if (p4 >= 4080) {\n      p4 = 255;\n    } else {\n      p4 >>= 4;\n    }\n    if (p5 < 16) {\n      p5 = 0;\n    } else if (p5 >= 4080) {\n      p5 = 255;\n    } else {\n      p5 >>= 4;\n    }\n    if (p6 < 16) {\n      p6 = 0;\n    } else if (p6 >= 4080) {\n      p6 = 255;\n    } else {\n      p6 >>= 4;\n    }\n    if (p7 < 16) {\n      p7 = 0;\n    } else if (p7 >= 4080) {\n      p7 = 255;\n    } else {\n      p7 >>= 4;\n    }\n\n    // store block data\n    blockData[blockBufferOffset + col] = p0;\n    blockData[blockBufferOffset + col + 8] = p1;\n    blockData[blockBufferOffset + col + 16] = p2;\n    blockData[blockBufferOffset + col + 24] = p3;\n    blockData[blockBufferOffset + col + 32] = p4;\n    blockData[blockBufferOffset + col + 40] = p5;\n    blockData[blockBufferOffset + col + 48] = p6;\n    blockData[blockBufferOffset + col + 56] = p7;\n  }\n}\n\nfunction buildComponentData(frame, component) {\n  const blocksPerLine = component.blocksPerLine;\n  const blocksPerColumn = component.blocksPerColumn;\n  const computationBuffer = new Int16Array(64);\n\n  for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n    for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n      const offset = getBlockBufferOffset(component, blockRow, blockCol);\n      quantizeAndInverse(component, offset, computationBuffer);\n    }\n  }\n  return component.blockData;\n}\n\nfunction findNextFileMarker(data, view, currentPos, startPos = currentPos) {\n  const maxPos = data.length - 1;\n  let newPos = startPos < currentPos ? startPos : currentPos;\n\n  if (currentPos >= maxPos) {\n    return null; // Don't attempt to read non-existent data and just return.\n  }\n  const currentMarker = view.getUint16(currentPos);\n  if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {\n    return {\n      invalid: null,\n      marker: currentMarker,\n      offset: currentPos,\n    };\n  }\n  let newMarker = view.getUint16(newPos);\n  while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {\n    if (++newPos >= maxPos) {\n      return null; // Don't attempt to read non-existent data and just return.\n    }\n    newMarker = view.getUint16(newPos);\n  }\n  return {\n    invalid: currentMarker.toString(16),\n    marker: newMarker,\n    offset: newPos,\n  };\n}\n\nfunction prepareComponents(frame) {\n  const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n  const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n  for (const component of frame.components) {\n    const blocksPerLine = Math.ceil(\n      (Math.ceil(frame.samplesPerLine / 8) * component.h) / frame.maxH\n    );\n    const blocksPerColumn = Math.ceil(\n      (Math.ceil(frame.scanLines / 8) * component.v) / frame.maxV\n    );\n    const blocksPerLineForMcu = mcusPerLine * component.h;\n    const blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n    const blocksBufferSize =\n      64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n    component.blockData = new Int16Array(blocksBufferSize);\n    component.blocksPerLine = blocksPerLine;\n    component.blocksPerColumn = blocksPerColumn;\n  }\n  frame.mcusPerLine = mcusPerLine;\n  frame.mcusPerColumn = mcusPerColumn;\n}\n\nfunction readDataBlock(data, view, offset) {\n  const length = view.getUint16(offset);\n  offset += 2;\n  let endOffset = offset + length - 2;\n\n  const fileMarker = findNextFileMarker(data, view, endOffset, offset);\n  if (fileMarker?.invalid) {\n    warn(\n      \"readDataBlock - incorrect length, current marker is: \" +\n        fileMarker.invalid\n    );\n    endOffset = fileMarker.offset;\n  }\n\n  const array = data.subarray(offset, endOffset);\n  return {\n    appData: array,\n    oldOffset: offset,\n    newOffset: offset + array.length,\n  };\n}\n\nfunction skipData(data, view, offset) {\n  const length = view.getUint16(offset);\n  offset += 2;\n  const endOffset = offset + length - 2;\n\n  const fileMarker = findNextFileMarker(data, view, endOffset, offset);\n  if (fileMarker?.invalid) {\n    return fileMarker.offset;\n  }\n  return endOffset;\n}\n\nclass JpegImage {\n  constructor({ decodeTransform = null, colorTransform = -1 } = {}) {\n    this._decodeTransform = decodeTransform;\n    this._colorTransform = colorTransform;\n  }\n\n  static canUseImageDecoder(data, colorTransform = -1) {\n    const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n    let exifOffsets = null;\n    let offset = 0;\n    let numComponents = null;\n    let fileMarker = view.getUint16(offset);\n    offset += 2;\n    if (fileMarker !== /* SOI (Start of Image) = */ 0xffd8) {\n      throw new JpegError(\"SOI not found\");\n    }\n    fileMarker = view.getUint16(offset);\n    offset += 2;\n\n    markerLoop: while (fileMarker !== /* EOI (End of Image) = */ 0xffd9) {\n      switch (fileMarker) {\n        case 0xffe1: // APP1 - Exif\n          // TODO: Remove this once https://github.com/w3c/webcodecs/issues/870\n          //       is fixed.\n          const { appData, oldOffset, newOffset } = readDataBlock(\n            data,\n            view,\n            offset\n          );\n          offset = newOffset;\n\n          // 'Exif\\x00\\x00'\n          if (\n            appData[0] === 0x45 &&\n            appData[1] === 0x78 &&\n            appData[2] === 0x69 &&\n            appData[3] === 0x66 &&\n            appData[4] === 0 &&\n            appData[5] === 0\n          ) {\n            if (exifOffsets) {\n              throw new JpegError(\"Duplicate EXIF-blocks found.\");\n            }\n            // Don't do the EXIF-block replacement here, see `JpegStream`,\n            // since that can modify the original PDF document.\n            exifOffsets = { exifStart: oldOffset + 6, exifEnd: newOffset };\n          }\n          fileMarker = view.getUint16(offset);\n          offset += 2;\n          continue;\n        case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n        case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n        case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n          // Skip marker length.\n          // Skip precision.\n          // Skip scanLines.\n          // Skip samplesPerLine.\n          numComponents = data[offset + (2 + 1 + 2 + 2)];\n          break markerLoop;\n        case 0xffff: // Fill bytes\n          if (data[offset] !== 0xff) {\n            // Avoid skipping a valid marker.\n            offset--;\n          }\n          break;\n      }\n      offset = skipData(data, view, offset);\n      fileMarker = view.getUint16(offset);\n      offset += 2;\n    }\n    if (numComponents === 4) {\n      return null;\n    }\n    if (numComponents === 3 && colorTransform === 0) {\n      return null;\n    }\n    return exifOffsets || {};\n  }\n\n  parse(data, { dnlScanLines = null } = {}) {\n    const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n    const maxOffset = data.length - 1;\n    let offset = 0;\n    let jfif = null;\n    let adobe = null;\n    let frame, resetInterval;\n    let numSOSMarkers = 0;\n    const quantizationTables = [];\n    const huffmanTablesAC = [],\n      huffmanTablesDC = [];\n\n    let fileMarker = view.getUint16(offset);\n    offset += 2;\n    if (fileMarker !== /* SOI (Start of Image) = */ 0xffd8) {\n      throw new JpegError(\"SOI not found\");\n    }\n    fileMarker = view.getUint16(offset);\n    offset += 2;\n\n    markerLoop: while (fileMarker !== /* EOI (End of Image) = */ 0xffd9) {\n      let i, j, l;\n      switch (fileMarker) {\n        case 0xffe0: // APP0 (Application Specific)\n        case 0xffe1: // APP1\n        case 0xffe2: // APP2\n        case 0xffe3: // APP3\n        case 0xffe4: // APP4\n        case 0xffe5: // APP5\n        case 0xffe6: // APP6\n        case 0xffe7: // APP7\n        case 0xffe8: // APP8\n        case 0xffe9: // APP9\n        case 0xffea: // APP10\n        case 0xffeb: // APP11\n        case 0xffec: // APP12\n        case 0xffed: // APP13\n        case 0xffee: // APP14\n        case 0xffef: // APP15\n        case 0xfffe: // COM (Comment)\n          const { appData, newOffset } = readDataBlock(data, view, offset);\n          offset = newOffset;\n\n          if (fileMarker === 0xffe0) {\n            // 'JFIF\\x00'\n            if (\n              appData[0] === 0x4a &&\n              appData[1] === 0x46 &&\n              appData[2] === 0x49 &&\n              appData[3] === 0x46 &&\n              appData[4] === 0\n            ) {\n              jfif = {\n                version: { major: appData[5], minor: appData[6] },\n                densityUnits: appData[7],\n                xDensity: (appData[8] << 8) | appData[9],\n                yDensity: (appData[10] << 8) | appData[11],\n                thumbWidth: appData[12],\n                thumbHeight: appData[13],\n                thumbData: appData.subarray(\n                  14,\n                  14 + 3 * appData[12] * appData[13]\n                ),\n              };\n            }\n          }\n          // TODO APP1 - Exif\n          if (fileMarker === 0xffee) {\n            // 'Adobe'\n            if (\n              appData[0] === 0x41 &&\n              appData[1] === 0x64 &&\n              appData[2] === 0x6f &&\n              appData[3] === 0x62 &&\n              appData[4] === 0x65\n            ) {\n              adobe = {\n                version: (appData[5] << 8) | appData[6],\n                flags0: (appData[7] << 8) | appData[8],\n                flags1: (appData[9] << 8) | appData[10],\n                transformCode: appData[11],\n              };\n            }\n          }\n          break;\n\n        case 0xffdb: // DQT (Define Quantization Tables)\n          const quantizationTablesLength = view.getUint16(offset);\n          offset += 2;\n          const quantizationTablesEnd = quantizationTablesLength + offset - 2;\n          let z;\n          while (offset < quantizationTablesEnd) {\n            const quantizationTableSpec = data[offset++];\n            const tableData = new Uint16Array(64);\n            if (quantizationTableSpec >> 4 === 0) {\n              // 8 bit values\n              for (j = 0; j < 64; j++) {\n                z = dctZigZag[j];\n                tableData[z] = data[offset++];\n              }\n            } else if (quantizationTableSpec >> 4 === 1) {\n              // 16 bit values\n              for (j = 0; j < 64; j++) {\n                z = dctZigZag[j];\n                tableData[z] = view.getUint16(offset);\n                offset += 2;\n              }\n            } else {\n              throw new JpegError(\"DQT - invalid table spec\");\n            }\n            quantizationTables[quantizationTableSpec & 15] = tableData;\n          }\n          break;\n\n        case 0xffc0: // SOF0 (Start of Frame, Baseline DCT)\n        case 0xffc1: // SOF1 (Start of Frame, Extended DCT)\n        case 0xffc2: // SOF2 (Start of Frame, Progressive DCT)\n          if (frame) {\n            throw new JpegError(\"Only single frame JPEGs supported\");\n          }\n          offset += 2; // Skip marker length.\n\n          frame = {};\n          frame.extended = fileMarker === 0xffc1;\n          frame.progressive = fileMarker === 0xffc2;\n          frame.precision = data[offset++];\n          const sofScanLines = view.getUint16(offset);\n          offset += 2;\n          frame.scanLines = dnlScanLines || sofScanLines;\n          frame.samplesPerLine = view.getUint16(offset);\n          offset += 2;\n          frame.components = [];\n          frame.componentIds = {};\n          const componentsCount = data[offset++];\n          let maxH = 0,\n            maxV = 0;\n          for (i = 0; i < componentsCount; i++) {\n            const componentId = data[offset];\n            const h = data[offset + 1] >> 4;\n            const v = data[offset + 1] & 15;\n            if (maxH < h) {\n              maxH = h;\n            }\n            if (maxV < v) {\n              maxV = v;\n            }\n            const qId = data[offset + 2];\n            l = frame.components.push({\n              h,\n              v,\n              quantizationId: qId,\n              quantizationTable: null, // See comment below.\n            });\n            frame.componentIds[componentId] = l - 1;\n            offset += 3;\n          }\n          frame.maxH = maxH;\n          frame.maxV = maxV;\n          prepareComponents(frame);\n          break;\n\n        case 0xffc4: // DHT (Define Huffman Tables)\n          const huffmanLength = view.getUint16(offset);\n          offset += 2;\n          for (i = 2; i < huffmanLength;) {\n            const huffmanTableSpec = data[offset++];\n            const codeLengths = new Uint8Array(16);\n            let codeLengthSum = 0;\n            for (j = 0; j < 16; j++, offset++) {\n              codeLengthSum += codeLengths[j] = data[offset];\n            }\n            const huffmanValues = new Uint8Array(codeLengthSum);\n            for (j = 0; j < codeLengthSum; j++, offset++) {\n              huffmanValues[j] = data[offset];\n            }\n            i += 17 + codeLengthSum;\n\n            (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[\n              huffmanTableSpec & 15\n            ] = buildHuffmanTable(codeLengths, huffmanValues);\n          }\n          break;\n\n        case 0xffdd: // DRI (Define Restart Interval)\n          offset += 2; // Skip marker length.\n\n          resetInterval = view.getUint16(offset);\n          offset += 2;\n          break;\n\n        case 0xffda: // SOS (Start of Scan)\n          // A DNL marker (0xFFDC), if it exists, is only allowed at the end\n          // of the first scan segment and may only occur once in an image.\n          // Furthermore, to prevent an infinite loop, do *not* attempt to\n          // parse DNL markers during re-parsing of the JPEG scan data.\n          const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\n\n          offset += 2; // Skip marker length.\n\n          const selectorsCount = data[offset++],\n            components = [];\n          for (i = 0; i < selectorsCount; i++) {\n            const index = data[offset++];\n            const componentIndex = frame.componentIds[index];\n            const component = frame.components[componentIndex];\n            component.index = index;\n            const tableSpec = data[offset++];\n            component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n            component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n            components.push(component);\n          }\n          const spectralStart = data[offset++],\n            spectralEnd = data[offset++],\n            successiveApproximation = data[offset++];\n          try {\n            const processed = decodeScan(\n              data,\n              view,\n              offset,\n              frame,\n              components,\n              resetInterval,\n              spectralStart,\n              spectralEnd,\n              successiveApproximation >> 4,\n              successiveApproximation & 15,\n              parseDNLMarker\n            );\n            offset += processed;\n          } catch (ex) {\n            if (ex instanceof DNLMarkerError) {\n              warn(`${ex.message} -- attempting to re-parse the JPEG image.`);\n              return this.parse(data, { dnlScanLines: ex.scanLines });\n            } else if (ex instanceof EOIMarkerError) {\n              warn(`${ex.message} -- ignoring the rest of the image data.`);\n              break markerLoop;\n            }\n            throw ex;\n          }\n          break;\n\n        case 0xffdc: // DNL (Define Number of Lines)\n          // Ignore the marker, since it's being handled in `decodeScan`.\n          offset += 4;\n          break;\n\n        case 0xffff: // Fill bytes\n          if (data[offset] !== 0xff) {\n            // Avoid skipping a valid marker.\n            offset--;\n          }\n          break;\n\n        default:\n          // Could be incorrect encoding -- the last 0xFF byte of the previous\n          // block could have been eaten by the encoder, hence we fallback to\n          // `startPos = offset - 3` when looking for the next valid marker.\n          const nextFileMarker = findNextFileMarker(\n            data,\n            view,\n            /* currentPos = */ offset - 2,\n            /* startPos = */ offset - 3\n          );\n          if (nextFileMarker?.invalid) {\n            warn(\n              \"JpegImage.parse - unexpected data, current marker is: \" +\n                nextFileMarker.invalid\n            );\n            offset = nextFileMarker.offset;\n            break;\n          }\n          if (!nextFileMarker || offset >= maxOffset) {\n            warn(\n              \"JpegImage.parse - reached the end of the image data \" +\n                \"without finding an EOI marker (0xFFD9).\"\n            );\n            break markerLoop;\n          }\n          throw new JpegError(\n            \"JpegImage.parse - unknown marker: \" + fileMarker.toString(16)\n          );\n      }\n\n      if (offset < maxOffset) {\n        fileMarker = view.getUint16(offset);\n        offset += 2;\n      } else {\n        fileMarker = 0;\n      }\n    }\n\n    if (!frame) {\n      throw new JpegError(\"JpegImage.parse - no frame data found.\");\n    }\n    this.width = frame.samplesPerLine;\n    this.height = frame.scanLines;\n    this.jfif = jfif;\n    this.adobe = adobe;\n    this.components = [];\n    for (const component of frame.components) {\n      // Prevent errors when DQT markers are placed after SOF{n} markers,\n      // by assigning the `quantizationTable` entry after the entire image\n      // has been parsed (fixes issue7406.pdf).\n      const quantizationTable = quantizationTables[component.quantizationId];\n      if (quantizationTable) {\n        component.quantizationTable = quantizationTable;\n      }\n\n      this.components.push({\n        index: component.index,\n        output: buildComponentData(frame, component),\n        scaleX: component.h / frame.maxH,\n        scaleY: component.v / frame.maxV,\n        blocksPerLine: component.blocksPerLine,\n        blocksPerColumn: component.blocksPerColumn,\n      });\n    }\n    this.numComponents = this.components.length;\n    return undefined;\n  }\n\n  #getLinearizedBlockData(width, height, isSourcePDF) {\n    const scaleX = this.width / width,\n      scaleY = this.height / height;\n\n    let component, componentScaleX, componentScaleY, blocksPerScanline;\n    let x, y, i, j, k;\n    let index;\n    let offset = 0;\n    let output;\n    const numComponents = this.components.length;\n    const dataLength = width * height * numComponents;\n    const data = new Uint8ClampedArray(dataLength);\n    const xScaleBlockOffset = new Uint32Array(width);\n    const mask3LSB = 0xfffffff8; // used to clear the 3 LSBs\n    let lastComponentScaleX;\n\n    for (i = 0; i < numComponents; i++) {\n      component = this.components[i];\n      componentScaleX = component.scaleX * scaleX;\n      componentScaleY = component.scaleY * scaleY;\n      offset = i;\n      output = component.output;\n      blocksPerScanline = (component.blocksPerLine + 1) << 3;\n      // Precalculate the `xScaleBlockOffset`. Since it doesn't depend on the\n      // component data, that's only necessary when `componentScaleX` changes.\n      if (componentScaleX !== lastComponentScaleX) {\n        for (x = 0; x < width; x++) {\n          j = 0 | (x * componentScaleX);\n          xScaleBlockOffset[x] = ((j & mask3LSB) << 3) | (j & 7);\n        }\n        lastComponentScaleX = componentScaleX;\n      }\n      // linearize the blocks of the component\n      for (y = 0; y < height; y++) {\n        j = 0 | (y * componentScaleY);\n        index = (blocksPerScanline * (j & mask3LSB)) | ((j & 7) << 3);\n        for (x = 0; x < width; x++) {\n          data[offset] = output[index + xScaleBlockOffset[x]];\n          offset += numComponents;\n        }\n      }\n    }\n\n    // decodeTransform contains pairs of multiplier (-256..256) and additive\n    let transform = this._decodeTransform;\n\n    // In PDF files, JPEG images with CMYK colour spaces are usually inverted\n    // (this can be observed by extracting the raw image data).\n    // Since the conversion algorithms (see below) were written primarily for\n    // the PDF use-cases, attempting to use `JpegImage` to parse standalone\n    // JPEG (CMYK) images may thus result in inverted images (see issue 9513).\n    //\n    // Unfortunately it's not (always) possible to tell, from the image data\n    // alone, if it needs to be inverted. Thus in an attempt to provide better\n    // out-of-the-box behaviour when `JpegImage` is used standalone, default to\n    // inverting JPEG (CMYK) images if and only if the image data does *not*\n    // come from a PDF file and no `decodeTransform` was passed by the user.\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"IMAGE_DECODERS\") &&\n      !isSourcePDF &&\n      numComponents === 4\n    ) {\n      transform ||= new Int32Array([\n        -256, 255, -256, 255, -256, 255, -256, 255,\n      ]);\n    }\n\n    if (transform) {\n      for (i = 0; i < dataLength;) {\n        for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {\n          data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1];\n        }\n      }\n    }\n    return data;\n  }\n\n  get _isColorConversionNeeded() {\n    if (this.adobe) {\n      // The adobe transform marker overrides any previous setting.\n      return !!this.adobe.transformCode;\n    }\n    if (this.numComponents === 3) {\n      if (this._colorTransform === 0) {\n        // If the Adobe transform marker is not present and the image\n        // dictionary has a 'ColorTransform' entry, explicitly set to `0`,\n        // then the colours should *not* be transformed.\n        return false;\n      } else if (\n        this.components[0].index === /* \"R\" = */ 0x52 &&\n        this.components[1].index === /* \"G\" = */ 0x47 &&\n        this.components[2].index === /* \"B\" = */ 0x42\n      ) {\n        // If the three components are indexed as RGB in ASCII\n        // then the colours should *not* be transformed.\n        return false;\n      }\n      return true;\n    }\n    // `this.numComponents !== 3`\n    if (this._colorTransform === 1) {\n      // If the Adobe transform marker is not present and the image\n      // dictionary has a 'ColorTransform' entry, explicitly set to `1`,\n      // then the colours should be transformed.\n      return true;\n    }\n    return false;\n  }\n\n  _convertYccToRgb(data) {\n    let Y, Cb, Cr;\n    for (let i = 0, ii = data.length; i < ii; i += 3) {\n      Y = data[i];\n      Cb = data[i + 1];\n      Cr = data[i + 2];\n      data[i] = Y - 179.456 + 1.402 * Cr;\n      data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n      data[i + 2] = Y - 226.816 + 1.772 * Cb;\n    }\n    return data;\n  }\n\n  _convertYccToRgba(data, out) {\n    for (let i = 0, j = 0, ii = data.length; i < ii; i += 3, j += 4) {\n      const Y = data[i];\n      const Cb = data[i + 1];\n      const Cr = data[i + 2];\n      out[j] = Y - 179.456 + 1.402 * Cr;\n      out[j + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\n      out[j + 2] = Y - 226.816 + 1.772 * Cb;\n      out[j + 3] = 255;\n    }\n    return out;\n  }\n\n  _convertYcckToRgb(data) {\n    this._convertYcckToCmyk(data);\n    return this._convertCmykToRgb(data);\n  }\n\n  _convertYcckToRgba(data) {\n    this._convertYcckToCmyk(data);\n    return this._convertCmykToRgba(data);\n  }\n\n  _convertYcckToCmyk(data) {\n    let Y, Cb, Cr;\n    for (let i = 0, ii = data.length; i < ii; i += 4) {\n      Y = data[i];\n      Cb = data[i + 1];\n      Cr = data[i + 2];\n      data[i] = 434.456 - Y - 1.402 * Cr;\n      data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;\n      data[i + 2] = 481.816 - Y - 1.772 * Cb;\n      // K in data[i + 3] is unchanged\n    }\n    return data;\n  }\n\n  _convertCmykToRgb(data) {\n    const count = data.length / 4;\n    ColorSpaceUtils.cmyk.getRgbBuffer(data, 0, count, data, 0, 8, 0);\n    return data.subarray(0, count * 3);\n  }\n\n  _convertCmykToRgba(data) {\n    ColorSpaceUtils.cmyk.getRgbBuffer(data, 0, data.length / 4, data, 0, 8, 1);\n\n    if (ColorSpaceUtils.cmyk instanceof DeviceCmykCS) {\n      // The alpha-component isn't updated by `DeviceCmykCS`, doing it manually.\n      for (let i = 3, ii = data.length; i < ii; i += 4) {\n        data[i] = 255;\n      }\n    }\n    return data;\n  }\n\n  getData({\n    width,\n    height,\n    forceRGBA = false,\n    forceRGB = false,\n    isSourcePDF = typeof PDFJSDev === \"undefined\" ||\n      !PDFJSDev.test(\"IMAGE_DECODERS\"),\n  }) {\n    if (this.numComponents > 4) {\n      throw new JpegError(\"Unsupported color mode\");\n    }\n    // Type of data: Uint8ClampedArray(width * height * numComponents)\n    const data = this.#getLinearizedBlockData(width, height, isSourcePDF);\n\n    if (this.numComponents === 1 && (forceRGBA || forceRGB)) {\n      const len = data.length * (forceRGBA ? 4 : 3);\n      const rgbaData = new Uint8ClampedArray(len);\n      let offset = 0;\n      if (forceRGBA) {\n        grayToRGBA(data, new Uint32Array(rgbaData.buffer));\n      } else {\n        for (const grayColor of data) {\n          rgbaData[offset++] = grayColor;\n          rgbaData[offset++] = grayColor;\n          rgbaData[offset++] = grayColor;\n        }\n      }\n      return rgbaData;\n    } else if (this.numComponents === 3 && this._isColorConversionNeeded) {\n      if (forceRGBA) {\n        const rgbaData = new Uint8ClampedArray((data.length / 3) * 4);\n        return this._convertYccToRgba(data, rgbaData);\n      }\n      return this._convertYccToRgb(data);\n    } else if (this.numComponents === 4) {\n      if (this._isColorConversionNeeded) {\n        if (forceRGBA) {\n          return this._convertYcckToRgba(data);\n        }\n        if (forceRGB) {\n          return this._convertYcckToRgb(data);\n        }\n        return this._convertYcckToCmyk(data);\n      } else if (forceRGBA) {\n        return this._convertCmykToRgba(data);\n      } else if (forceRGB) {\n        return this._convertCmykToRgb(data);\n      }\n    }\n    return data;\n  }\n}\n\nexport { JpegError, JpegImage };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, shadow, warn } from \"../shared/util.js\";\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Dict } from \"./primitives.js\";\nimport { JpegImage } from \"./jpg.js\";\n\n/**\n * For JPEG's we use a library to decode these images and the stream behaves\n * like all the other DecodeStreams.\n */\nclass JpegStream extends DecodeStream {\n  static #isImageDecoderSupported = FeatureTest.isImageDecoderSupported;\n\n  constructor(stream, maybeLength, params) {\n    super(maybeLength);\n\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n    this.params = params;\n  }\n\n  static get canUseImageDecoder() {\n    return shadow(\n      this,\n      \"canUseImageDecoder\",\n      this.#isImageDecoderSupported\n        ? ImageDecoder.isTypeSupported(\"image/jpeg\")\n        : Promise.resolve(false)\n    );\n  }\n\n  static setOptions({ isImageDecoderSupported = false }) {\n    this.#isImageDecoderSupported = isImageDecoderSupported;\n  }\n\n  get bytes() {\n    // If `this.maybeLength` is null, we'll get the entire stream.\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n\n  ensureBuffer(requested) {\n    // No-op, since `this.readBlock` will always parse the entire image and\n    // directly insert all of its data into `this.buffer`.\n  }\n\n  readBlock() {\n    this.decodeImage();\n  }\n\n  get jpegOptions() {\n    const jpegOptions = {\n      decodeTransform: undefined,\n      colorTransform: undefined,\n    };\n\n    // Checking if values need to be transformed before conversion.\n    const decodeArr = this.dict.getArray(\"D\", \"Decode\");\n    if ((this.forceRGBA || this.forceRGB) && Array.isArray(decodeArr)) {\n      const bitsPerComponent = this.dict.get(\"BPC\", \"BitsPerComponent\") || 8;\n      const decodeArrLength = decodeArr.length;\n      const transform = new Int32Array(decodeArrLength);\n      let transformNeeded = false;\n      const maxValue = (1 << bitsPerComponent) - 1;\n      for (let i = 0; i < decodeArrLength; i += 2) {\n        transform[i] = ((decodeArr[i + 1] - decodeArr[i]) * 256) | 0;\n        transform[i + 1] = (decodeArr[i] * maxValue) | 0;\n        if (transform[i] !== 256 || transform[i + 1] !== 0) {\n          transformNeeded = true;\n        }\n      }\n      if (transformNeeded) {\n        jpegOptions.decodeTransform = transform;\n      }\n    }\n    // Fetching the 'ColorTransform' entry, if it exists.\n    if (this.params instanceof Dict) {\n      const colorTransform = this.params.get(\"ColorTransform\");\n      if (Number.isInteger(colorTransform)) {\n        jpegOptions.colorTransform = colorTransform;\n      }\n    }\n    return shadow(this, \"jpegOptions\", jpegOptions);\n  }\n\n  #skipUselessBytes(data) {\n    // Some images may contain 'junk' before the SOI (start-of-image) marker.\n    // Note: this seems to mainly affect inline images.\n    for (let i = 0, ii = data.length - 1; i < ii; i++) {\n      if (data[i] === 0xff && data[i + 1] === 0xd8) {\n        if (i > 0) {\n          data = data.subarray(i);\n        }\n        break;\n      }\n    }\n    return data;\n  }\n\n  decodeImage(bytes) {\n    if (this.eof) {\n      return this.buffer;\n    }\n    bytes = this.#skipUselessBytes(bytes || this.bytes);\n\n    // TODO: if an image has a mask we need to combine the data.\n    // So ideally get a VideoFrame from getTransferableImage and then use\n    // copyTo.\n\n    const jpegImage = new JpegImage(this.jpegOptions);\n    jpegImage.parse(bytes);\n    const data = jpegImage.getData({\n      width: this.drawWidth,\n      height: this.drawHeight,\n      forceRGBA: this.forceRGBA,\n      forceRGB: this.forceRGB,\n    });\n    this.buffer = data;\n    this.bufferLength = data.length;\n    this.eof = true;\n\n    return this.buffer;\n  }\n\n  get canAsyncDecodeImageFromBuffer() {\n    return this.stream.isAsync;\n  }\n\n  async getTransferableImage() {\n    if (!(await JpegStream.canUseImageDecoder)) {\n      return null;\n    }\n    const jpegOptions = this.jpegOptions;\n    if (jpegOptions.decodeTransform) {\n      // TODO: We could decode the image thanks to ImageDecoder and then\n      // get the pixels with copyTo and apply the decodeTransform.\n      return null;\n    }\n    let decoder;\n    try {\n      // TODO: If the stream is Flate & DCT we could try to just pipe the\n      // the DecompressionStream into the ImageDecoder: it'll avoid the\n      // intermediate ArrayBuffer.\n      const bytes =\n        (this.canAsyncDecodeImageFromBuffer &&\n          (await this.stream.asyncGetBytes())) ||\n        this.bytes;\n      if (!bytes) {\n        return null;\n      }\n      let data = this.#skipUselessBytes(bytes);\n      const useImageDecoder = JpegImage.canUseImageDecoder(\n        data,\n        jpegOptions.colorTransform\n      );\n      if (!useImageDecoder) {\n        return null;\n      }\n      if (useImageDecoder.exifStart) {\n        // Replace the entire EXIF-block with dummy data, to ensure that a\n        // non-default EXIF orientation won't cause the image to be rotated\n        // when using `ImageDecoder` (fixes bug1942064.pdf).\n        //\n        // Copy the data first, to avoid modifying the original PDF document.\n        data = data.slice();\n        data.fill(0x00, useImageDecoder.exifStart, useImageDecoder.exifEnd);\n      }\n      decoder = new ImageDecoder({\n        data,\n        type: \"image/jpeg\",\n        preferAnimation: false,\n      });\n\n      return (await decoder.decode()).image;\n    } catch (reason) {\n      warn(`getTransferableImage - failed: \"${reason}\".`);\n      return null;\n    } finally {\n      decoder?.close();\n    }\n  }\n\n  get isImageStream() {\n    return true;\n  }\n}\n\nexport { JpegStream };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  DrawOPS,\n  F32_BBOX_INIT,\n  ImageKind,\n  OPS,\n  RenderingIntentFlag,\n  Util,\n  warn,\n} from \"../shared/util.js\";\n\nfunction addState(parentState, pattern, checkFn, iterateFn, processFn) {\n  let state = parentState;\n  for (let i = 0, ii = pattern.length - 1; i < ii; i++) {\n    const item = pattern[i];\n    state = state[item] ||= [];\n  }\n  state[pattern.at(-1)] = {\n    checkFn,\n    iterateFn,\n    processFn,\n  };\n}\n\nconst InitialState = [];\n\n// This replaces (save, transform, paintInlineImageXObject, restore)+\n// sequences with one |paintInlineImageXObjectGroup| operation.\naddState(\n  InitialState,\n  [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore],\n  null,\n  function iterateInlineImageGroup(context, i) {\n    const fnArray = context.fnArray;\n    const iFirstSave = context.iCurr - 3;\n    const pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === OPS.save;\n      case 1:\n        return fnArray[i] === OPS.transform;\n      case 2:\n        return fnArray[i] === OPS.paintInlineImageXObject;\n      case 3:\n        return fnArray[i] === OPS.restore;\n    }\n    throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);\n  },\n  function foundInlineImageGroup(context, i) {\n    const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;\n    const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;\n    const MAX_WIDTH = 1000;\n    const IMAGE_PADDING = 1;\n\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const curr = context.iCurr;\n    const iFirstSave = curr - 3;\n    const iFirstTransform = curr - 2;\n    const iFirstPIIXO = curr - 1;\n\n    const count = Math.min(\n      Math.floor((i - iFirstSave) / 4),\n      MAX_IMAGES_IN_INLINE_IMAGES_BLOCK\n    );\n    if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {\n      return i - ((i - iFirstSave) % 4);\n    }\n\n    // assuming that heights of those image is too small (~1 pixel)\n    // packing as much as possible by lines\n    let maxX = 0;\n    const map = [];\n    let maxLineHeight = 0;\n    let currentX = IMAGE_PADDING,\n      currentY = IMAGE_PADDING;\n    for (let q = 0; q < count; q++) {\n      const transform = argsArray[iFirstTransform + (q << 2)];\n      const img = argsArray[iFirstPIIXO + (q << 2)][0];\n      if (currentX + img.width > MAX_WIDTH) {\n        // starting new line\n        maxX = Math.max(maxX, currentX);\n        currentY += maxLineHeight + 2 * IMAGE_PADDING;\n        currentX = 0;\n        maxLineHeight = 0;\n      }\n      map.push({\n        transform,\n        x: currentX,\n        y: currentY,\n        w: img.width,\n        h: img.height,\n      });\n      currentX += img.width + 2 * IMAGE_PADDING;\n      maxLineHeight = Math.max(maxLineHeight, img.height);\n    }\n    const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;\n    const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;\n    const imgData = new Uint8Array(imgWidth * imgHeight * 4);\n    const imgRowSize = imgWidth << 2;\n    for (let q = 0; q < count; q++) {\n      const data = argsArray[iFirstPIIXO + (q << 2)][0].data;\n      // Copy image by lines and extends pixels into padding.\n      const rowSize = map[q].w << 2;\n      let dataOffset = 0;\n      let offset = (map[q].x + map[q].y * imgWidth) << 2;\n      imgData.set(data.subarray(0, rowSize), offset - imgRowSize);\n      for (let k = 0, kk = map[q].h; k < kk; k++) {\n        imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);\n        dataOffset += rowSize;\n        offset += imgRowSize;\n      }\n      imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);\n      while (offset >= 0) {\n        data[offset - 4] = data[offset];\n        data[offset - 3] = data[offset + 1];\n        data[offset - 2] = data[offset + 2];\n        data[offset - 1] = data[offset + 3];\n        data[offset + rowSize] = data[offset + rowSize - 4];\n        data[offset + rowSize + 1] = data[offset + rowSize - 3];\n        data[offset + rowSize + 2] = data[offset + rowSize - 2];\n        data[offset + rowSize + 3] = data[offset + rowSize - 1];\n        offset -= imgRowSize;\n      }\n    }\n\n    const img = {\n      width: imgWidth,\n      height: imgHeight,\n    };\n    if (context.isOffscreenCanvasSupported) {\n      const canvas = new OffscreenCanvas(imgWidth, imgHeight);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.putImageData(\n        new ImageData(\n          new Uint8ClampedArray(imgData.buffer),\n          imgWidth,\n          imgHeight\n        ),\n        0,\n        0\n      );\n      img.bitmap = canvas.transferToImageBitmap();\n      img.data = null;\n    } else {\n      img.kind = ImageKind.RGBA_32BPP;\n      img.data = imgData;\n    }\n\n    // Replace queue items.\n    fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup);\n    argsArray.splice(iFirstSave, count * 4, [img, map]);\n\n    return iFirstSave + 1;\n  }\n);\n\n// This replaces (save, transform, paintImageMaskXObject, restore)+\n// sequences with one |paintImageMaskXObjectGroup| or one\n// |paintImageMaskXObjectRepeat| operation.\naddState(\n  InitialState,\n  [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore],\n  null,\n  function iterateImageMaskGroup(context, i) {\n    const fnArray = context.fnArray;\n    const iFirstSave = context.iCurr - 3;\n    const pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === OPS.save;\n      case 1:\n        return fnArray[i] === OPS.transform;\n      case 2:\n        return fnArray[i] === OPS.paintImageMaskXObject;\n      case 3:\n        return fnArray[i] === OPS.restore;\n    }\n    throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);\n  },\n  function foundImageMaskGroup(context, i) {\n    const MIN_IMAGES_IN_MASKS_BLOCK = 10;\n    const MAX_IMAGES_IN_MASKS_BLOCK = 100;\n    const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;\n\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const curr = context.iCurr;\n    const iFirstSave = curr - 3;\n    const iFirstTransform = curr - 2;\n    const iFirstPIMXO = curr - 1;\n\n    // At this point, i is the index of the first op past the last valid\n    // quartet.\n    let count = Math.floor((i - iFirstSave) / 4);\n    if (count < MIN_IMAGES_IN_MASKS_BLOCK) {\n      return i - ((i - iFirstSave) % 4);\n    }\n\n    let isSameImage = false;\n    let iTransform, transformArgs;\n    const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];\n    const firstTransformArg0 = argsArray[iFirstTransform][0],\n      firstTransformArg1 = argsArray[iFirstTransform][1],\n      firstTransformArg2 = argsArray[iFirstTransform][2],\n      firstTransformArg3 = argsArray[iFirstTransform][3];\n\n    if (firstTransformArg1 === firstTransformArg2) {\n      isSameImage = true;\n      iTransform = iFirstTransform + 4;\n      let iPIMXO = iFirstPIMXO + 4;\n      for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {\n        transformArgs = argsArray[iTransform];\n        if (\n          argsArray[iPIMXO][0] !== firstPIMXOArg0 ||\n          transformArgs[0] !== firstTransformArg0 ||\n          transformArgs[1] !== firstTransformArg1 ||\n          transformArgs[2] !== firstTransformArg2 ||\n          transformArgs[3] !== firstTransformArg3\n        ) {\n          if (q < MIN_IMAGES_IN_MASKS_BLOCK) {\n            isSameImage = false;\n          } else {\n            count = q;\n          }\n          break; // different image or transform\n        }\n      }\n    }\n\n    if (isSameImage) {\n      count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);\n      const positions = new Float32Array(count * 2);\n      iTransform = iFirstTransform;\n      for (let q = 0; q < count; q++, iTransform += 4) {\n        transformArgs = argsArray[iTransform];\n        positions[q << 1] = transformArgs[4];\n        positions[(q << 1) + 1] = transformArgs[5];\n      }\n\n      // Replace queue items.\n      fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat);\n      argsArray.splice(iFirstSave, count * 4, [\n        firstPIMXOArg0,\n        firstTransformArg0,\n        firstTransformArg1,\n        firstTransformArg2,\n        firstTransformArg3,\n        positions,\n      ]);\n    } else {\n      count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);\n      const images = [];\n      for (let q = 0; q < count; q++) {\n        transformArgs = argsArray[iFirstTransform + (q << 2)];\n        const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];\n        images.push({\n          data: maskParams.data,\n          width: maskParams.width,\n          height: maskParams.height,\n          interpolate: maskParams.interpolate,\n          count: maskParams.count,\n          transform: transformArgs,\n        });\n      }\n\n      // Replace queue items.\n      fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup);\n      argsArray.splice(iFirstSave, count * 4, [images]);\n    }\n\n    return iFirstSave + 1;\n  }\n);\n\n// This replaces (save, transform, paintImageXObject, restore)+ sequences\n// with one paintImageXObjectRepeat operation, if the |transform| and\n// |paintImageXObjectRepeat| ops are appropriate.\naddState(\n  InitialState,\n  [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore],\n  function (context) {\n    const argsArray = context.argsArray;\n    const iFirstTransform = context.iCurr - 2;\n    return (\n      argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0\n    );\n  },\n  function iterateImageGroup(context, i) {\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const iFirstSave = context.iCurr - 3;\n    const pos = (i - iFirstSave) % 4;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === OPS.save;\n      case 1:\n        if (fnArray[i] !== OPS.transform) {\n          return false;\n        }\n        const iFirstTransform = context.iCurr - 2;\n        const firstTransformArg0 = argsArray[iFirstTransform][0];\n        const firstTransformArg3 = argsArray[iFirstTransform][3];\n        if (\n          argsArray[i][0] !== firstTransformArg0 ||\n          argsArray[i][1] !== 0 ||\n          argsArray[i][2] !== 0 ||\n          argsArray[i][3] !== firstTransformArg3\n        ) {\n          return false; // transforms don't match\n        }\n        return true;\n      case 2:\n        if (fnArray[i] !== OPS.paintImageXObject) {\n          return false;\n        }\n        const iFirstPIXO = context.iCurr - 1;\n        const firstPIXOArg0 = argsArray[iFirstPIXO][0];\n        if (argsArray[i][0] !== firstPIXOArg0) {\n          return false; // images don't match\n        }\n        return true;\n      case 3:\n        return fnArray[i] === OPS.restore;\n    }\n    throw new Error(`iterateImageGroup - invalid pos: ${pos}`);\n  },\n  function (context, i) {\n    const MIN_IMAGES_IN_BLOCK = 3;\n    const MAX_IMAGES_IN_BLOCK = 1000;\n\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const curr = context.iCurr;\n    const iFirstSave = curr - 3;\n    const iFirstTransform = curr - 2;\n    const iFirstPIXO = curr - 1;\n    const firstPIXOArg0 = argsArray[iFirstPIXO][0];\n    const firstTransformArg0 = argsArray[iFirstTransform][0];\n    const firstTransformArg3 = argsArray[iFirstTransform][3];\n\n    // At this point, i is the index of the first op past the last valid\n    // quartet.\n    const count = Math.min(\n      Math.floor((i - iFirstSave) / 4),\n      MAX_IMAGES_IN_BLOCK\n    );\n    if (count < MIN_IMAGES_IN_BLOCK) {\n      return i - ((i - iFirstSave) % 4);\n    }\n\n    // Extract the (x,y) positions from all of the matching transforms.\n    const positions = new Float32Array(count * 2);\n    let iTransform = iFirstTransform;\n    for (let q = 0; q < count; q++, iTransform += 4) {\n      const transformArgs = argsArray[iTransform];\n      positions[q << 1] = transformArgs[4];\n      positions[(q << 1) + 1] = transformArgs[5];\n    }\n\n    // Replace queue items.\n    const args = [\n      firstPIXOArg0,\n      firstTransformArg0,\n      firstTransformArg3,\n      positions,\n    ];\n    fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat);\n    argsArray.splice(iFirstSave, count * 4, args);\n\n    return iFirstSave + 1;\n  }\n);\n\n// This replaces (beginText, setFont, setTextMatrix, showText, endText)+\n// sequences with (beginText, setFont, (setTextMatrix, showText)+, endText)+\n// sequences, if the font for each one is the same.\naddState(\n  InitialState,\n  [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText],\n  null,\n  function iterateShowTextGroup(context, i) {\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const iFirstSave = context.iCurr - 4;\n    const pos = (i - iFirstSave) % 5;\n    switch (pos) {\n      case 0:\n        return fnArray[i] === OPS.beginText;\n      case 1:\n        return fnArray[i] === OPS.setFont;\n      case 2:\n        return fnArray[i] === OPS.setTextMatrix;\n      case 3:\n        if (fnArray[i] !== OPS.showText) {\n          return false;\n        }\n        const iFirstSetFont = context.iCurr - 3;\n        const firstSetFontArg0 = argsArray[iFirstSetFont][0];\n        const firstSetFontArg1 = argsArray[iFirstSetFont][1];\n        if (\n          argsArray[i][0] !== firstSetFontArg0 ||\n          argsArray[i][1] !== firstSetFontArg1\n        ) {\n          return false; // fonts don't match\n        }\n        return true;\n      case 4:\n        return fnArray[i] === OPS.endText;\n    }\n    throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);\n  },\n  function (context, i) {\n    const MIN_CHARS_IN_BLOCK = 3;\n    const MAX_CHARS_IN_BLOCK = 1000;\n\n    const fnArray = context.fnArray,\n      argsArray = context.argsArray;\n    const curr = context.iCurr;\n    const iFirstBeginText = curr - 4;\n    const iFirstSetFont = curr - 3;\n    const iFirstSetTextMatrix = curr - 2;\n    const iFirstShowText = curr - 1;\n    const iFirstEndText = curr;\n    const firstSetFontArg0 = argsArray[iFirstSetFont][0];\n    const firstSetFontArg1 = argsArray[iFirstSetFont][1];\n\n    // At this point, i is the index of the first op past the last valid\n    // quintet.\n    let count = Math.min(\n      Math.floor((i - iFirstBeginText) / 5),\n      MAX_CHARS_IN_BLOCK\n    );\n    if (count < MIN_CHARS_IN_BLOCK) {\n      return i - ((i - iFirstBeginText) % 5);\n    }\n\n    // If the preceding quintet is (<something>, setFont, setTextMatrix,\n    // showText, endText), include that as well. (E.g. <something> might be\n    // |dependency|.)\n    let iFirst = iFirstBeginText;\n    if (\n      iFirstBeginText >= 4 &&\n      fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] &&\n      fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] &&\n      fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] &&\n      fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] &&\n      argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 &&\n      argsArray[iFirstBeginText - 4][1] === firstSetFontArg1\n    ) {\n      count++;\n      iFirst -= 5;\n    }\n\n    // Remove (endText, beginText, setFont) trios.\n    let iEndText = iFirst + 4;\n    for (let q = 1; q < count; q++) {\n      fnArray.splice(iEndText, 3);\n      argsArray.splice(iEndText, 3);\n      iEndText += 2;\n    }\n\n    return iEndText + 1;\n  }\n);\n\n// This replaces (save, transform, constructPath, restore)\n// sequences with |constructPath| operation.\naddState(\n  InitialState,\n  [OPS.save, OPS.transform, OPS.constructPath, OPS.restore],\n  context => {\n    const argsArray = context.argsArray;\n    const iFirstConstructPath = context.iCurr - 1;\n    const op = argsArray[iFirstConstructPath][0];\n\n    // When stroking the transform has to be applied to the line width too.\n    // So we can only optimize if the transform is an identity.\n    if (\n      op !== OPS.stroke &&\n      op !== OPS.closeStroke &&\n      op !== OPS.fillStroke &&\n      op !== OPS.eoFillStroke &&\n      op !== OPS.closeFillStroke &&\n      op !== OPS.closeEOFillStroke\n    ) {\n      return true;\n    }\n    const iFirstTransform = context.iCurr - 2;\n    const transform = argsArray[iFirstTransform];\n    return (\n      transform[0] === 1 &&\n      transform[1] === 0 &&\n      transform[2] === 0 &&\n      transform[3] === 1\n    );\n  },\n  () => false,\n  (context, i) => {\n    const { fnArray, argsArray } = context;\n    const curr = context.iCurr;\n    const iFirstSave = curr - 3;\n    const iFirstTransform = curr - 2;\n    const iFirstConstructPath = curr - 1;\n    const args = argsArray[iFirstConstructPath];\n    const transform = argsArray[iFirstTransform];\n    const [, [buffer], minMax] = args;\n\n    if (minMax) {\n      const newBBox = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox(minMax, transform, newBBox);\n      minMax.set(newBBox);\n      for (let k = 0, kk = buffer.length; k < kk;) {\n        switch (buffer[k++]) {\n          case DrawOPS.moveTo:\n          case DrawOPS.lineTo:\n            Util.applyTransform(buffer, transform, k);\n            k += 2;\n            break;\n          case DrawOPS.curveTo:\n            Util.applyTransformToBezier(buffer, transform, k);\n            k += 6;\n            break;\n        }\n      }\n    }\n    // Replace queue items.\n    fnArray.splice(iFirstSave, 4, OPS.constructPath);\n    argsArray.splice(iFirstSave, 4, args);\n\n    return iFirstSave + 1;\n  }\n);\n\nclass NullOptimizer {\n  constructor(queue) {\n    this.queue = queue;\n  }\n\n  _optimize() {}\n\n  push(fn, args) {\n    this.queue.fnArray.push(fn);\n    this.queue.argsArray.push(args);\n    this._optimize();\n  }\n\n  flush() {}\n\n  reset() {}\n}\n\nclass QueueOptimizer extends NullOptimizer {\n  constructor(queue) {\n    super(queue);\n    this.state = null;\n    this.context = {\n      iCurr: 0,\n      fnArray: queue.fnArray,\n      argsArray: queue.argsArray,\n      isOffscreenCanvasSupported: OperatorList.isOffscreenCanvasSupported,\n    };\n    this.match = null;\n    this.lastProcessed = 0;\n  }\n\n  _optimize() {\n    // Process new fnArray item(s) chunk.\n    const fnArray = this.queue.fnArray;\n    let i = this.lastProcessed,\n      ii = fnArray.length;\n    let state = this.state;\n    let match = this.match;\n    if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {\n      // Micro-optimization for the common case: last item is not\n      // optimizable, just skipping it.\n      this.lastProcessed = ii;\n      return;\n    }\n\n    const context = this.context;\n    while (i < ii) {\n      if (match) {\n        // Already find a block of potentially optimizable items, iterating...\n        const iterate = (0, match.iterateFn)(context, i);\n        if (iterate) {\n          i++;\n          continue;\n        }\n        // Found last items for the block, processing...\n        i = (0, match.processFn)(context, i + 1);\n        ii = fnArray.length;\n        match = null;\n        state = null;\n        if (i >= ii) {\n          break;\n        }\n      }\n      // Find the potentially optimizable items.\n      state = (state || InitialState)[fnArray[i]];\n      if (!state || Array.isArray(state)) {\n        i++;\n        continue;\n      }\n      // Found a start of the block based on addState rules.\n      context.iCurr = i;\n      i++;\n      if (state.checkFn && !(0, state.checkFn)(context)) {\n        // Check failed, continue search...\n        state = null;\n        continue;\n      }\n      match = state;\n      state = null;\n    }\n    this.state = state;\n    this.match = match;\n    this.lastProcessed = i;\n  }\n\n  flush() {\n    while (this.match) {\n      const length = this.queue.fnArray.length;\n      this.lastProcessed = (0, this.match.processFn)(this.context, length);\n      this.match = null;\n      this.state = null;\n      // Repeat optimization until all chunks are exhausted.\n      this._optimize();\n    }\n  }\n\n  reset() {\n    this.state = null;\n    this.match = null;\n    this.lastProcessed = 0;\n  }\n}\n\nclass OperatorList {\n  static CHUNK_SIZE = 1000;\n\n  // Close to chunk size.\n  static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5;\n\n  static isOffscreenCanvasSupported = false;\n\n  constructor(intent = 0, streamSink) {\n    this._streamSink = streamSink;\n    this.fnArray = [];\n    this.argsArray = [];\n    this.optimizer =\n      streamSink && !(intent & RenderingIntentFlag.OPLIST)\n        ? new QueueOptimizer(this)\n        : new NullOptimizer(this);\n    this.dependencies = new Set();\n    this._totalLength = 0;\n    this.weight = 0;\n    this._resolved = streamSink ? null : Promise.resolve();\n  }\n\n  static setOptions({ isOffscreenCanvasSupported }) {\n    this.isOffscreenCanvasSupported = isOffscreenCanvasSupported;\n  }\n\n  get length() {\n    return this.argsArray.length;\n  }\n\n  get ready() {\n    return this._resolved || this._streamSink.ready;\n  }\n\n  /**\n   * @type {number} The total length of the entire operator list, since\n   *                `this.length === 0` after flushing.\n   */\n  get totalLength() {\n    return this._totalLength + this.length;\n  }\n\n  addOp(fn, args) {\n    this.optimizer.push(fn, args);\n    this.weight++;\n    if (this._streamSink) {\n      if (this.weight >= OperatorList.CHUNK_SIZE) {\n        this.flush();\n      } else if (\n        this.weight >= OperatorList.CHUNK_SIZE_ABOUT &&\n        (fn === OPS.restore || fn === OPS.endText)\n      ) {\n        // Heuristic to flush on boundary of restore or endText.\n        this.flush();\n      }\n    }\n  }\n\n  addImageOps(fn, args, optionalContent, hasMask = false) {\n    if (hasMask) {\n      this.addOp(OPS.save);\n      this.addOp(OPS.setGState, [[[\"SMask\", false]]]);\n    }\n    if (optionalContent !== undefined) {\n      this.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n\n    this.addOp(fn, args);\n\n    if (optionalContent !== undefined) {\n      this.addOp(OPS.endMarkedContent, []);\n    }\n    if (hasMask) {\n      this.addOp(OPS.restore);\n    }\n  }\n\n  addDependency(dependency) {\n    if (this.dependencies.has(dependency)) {\n      return;\n    }\n    this.dependencies.add(dependency);\n    this.addOp(OPS.dependency, [dependency]);\n  }\n\n  addDependencies(dependencies) {\n    for (const dependency of dependencies) {\n      this.addDependency(dependency);\n    }\n  }\n\n  addOpList(opList) {\n    if (!(opList instanceof OperatorList)) {\n      warn('addOpList - ignoring invalid \"opList\" parameter.');\n      return;\n    }\n    for (const dependency of opList.dependencies) {\n      this.dependencies.add(dependency);\n    }\n    for (let i = 0, ii = opList.length; i < ii; i++) {\n      this.addOp(opList.fnArray[i], opList.argsArray[i]);\n    }\n  }\n\n  getIR() {\n    return {\n      fnArray: this.fnArray,\n      argsArray: this.argsArray,\n      length: this.length,\n    };\n  }\n\n  get _transfers() {\n    const transfers = [];\n    const { fnArray, argsArray, length } = this;\n    for (let i = 0; i < length; i++) {\n      switch (fnArray[i]) {\n        case OPS.paintInlineImageXObject:\n        case OPS.paintInlineImageXObjectGroup:\n        case OPS.paintImageMaskXObject: {\n          const { bitmap, data } = argsArray[i][0]; // First parameter in imgData.\n          if (bitmap || data?.buffer) {\n            transfers.push(bitmap || data.buffer);\n          }\n          break;\n        }\n        case OPS.constructPath: {\n          const [, [data], minMax] = argsArray[i];\n          if (data) {\n            transfers.push(data.buffer, minMax.buffer);\n          }\n          break;\n        }\n        case OPS.paintFormXObjectBegin:\n          const [matrix, bbox] = argsArray[i];\n          if (matrix) {\n            transfers.push(matrix.buffer);\n          }\n          if (bbox) {\n            transfers.push(bbox.buffer);\n          }\n          break;\n        case OPS.setTextMatrix:\n          transfers.push(argsArray[i][0].buffer);\n          break;\n      }\n    }\n    return transfers;\n  }\n\n  flush(lastChunk = false, separateAnnots = null) {\n    this.optimizer.flush();\n    const length = this.length;\n    this._totalLength += length;\n\n    this._streamSink.enqueue(\n      {\n        fnArray: this.fnArray,\n        argsArray: this.argsArray,\n        lastChunk,\n        separateAnnots,\n        length,\n      },\n      1,\n      this._transfers\n    );\n\n    this.dependencies.clear();\n    this.fnArray.length = 0;\n    this.argsArray.length = 0;\n    this.weight = 0;\n    this.optimizer.reset();\n  }\n}\n\n/**\n * A subclass of OperatorList that checks whether added group or pattern\n * operations require being drawn in isolation (i.e. on a separate canvas).\n * A group/pattern needs isolation when it uses non-default compositing\n * (blend mode) or a soft mask. The result is exposed via `needsIsolation`.\n *\n * `hasSoftMask` separately flags the use of a soft mask: unlike a plain blend\n * mode, which a non-isolated group can apply directly against its backdrop, a\n * soft mask always requires a real intermediate canvas (see bug 1873345).\n */\nclass CheckedOperatorList extends OperatorList {\n  needsIsolation = false;\n\n  hasSoftMask = false;\n\n  addOp(fn, args) {\n    if (!this.needsIsolation || !this.hasSoftMask) {\n      if (fn === OPS.beginGroup) {\n        // Propagate isolation only if the nested group itself needs it.\n        this.needsIsolation ||= args[0].needsIsolation;\n        this.hasSoftMask ||= args[0].hasSoftMask;\n      } else if (fn === OPS.setGState) {\n        for (const [key, val] of args[0]) {\n          if (key === \"BM\" && val !== \"source-over\") {\n            this.needsIsolation = true;\n          } else if (key === \"SMask\" && val !== false) {\n            this.needsIsolation = true;\n            this.hasSoftMask = true;\n          }\n        }\n      }\n    }\n    super.addOp(fn, args);\n  }\n}\n\nexport { CheckedOperatorList, OperatorList };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  BBOX_INIT,\n  FormatError,\n  info,\n  MeshFigureType,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  IDENTITY_MATRIX,\n  isBooleanArray,\n  isNumberArray,\n  lookupMatrix,\n  lookupNormalRect,\n  lookupRect,\n  MissingDataException,\n} from \"./core_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\nconst ShadingType = {\n  FUNCTION_BASED: 1,\n  AXIAL: 2,\n  RADIAL: 3,\n  FREE_FORM_MESH: 4,\n  LATTICE_FORM_MESH: 5,\n  COONS_PATCH_MESH: 6,\n  TENSOR_PATCH_MESH: 7,\n};\n\n// Bound temporary buffers; DeviceN component counts come from the PDF.\nconst MAX_SAMPLED_COLOR_COMPONENTS = 1 << 16;\n\nfunction getColorConversionBatchSize(count, numComps) {\n  return MathClamp(\n    Math.floor(MAX_SAMPLED_COLOR_COMPONENTS / numComps),\n    1,\n    count\n  );\n}\n\nclass Pattern {\n  // eslint-disable-next-line no-unused-private-class-members\n  static #hasGPU = false;\n\n  constructor() {\n    unreachable(\"Cannot initialize Pattern.\");\n  }\n\n  static setOptions({ hasGPU }) {\n    this.#hasGPU = hasGPU;\n  }\n\n  static parseShading(\n    shading,\n    xref,\n    res,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache\n  ) {\n    const dict = shading instanceof BaseStream ? shading.dict : shading;\n    const type = dict.get(\"ShadingType\");\n\n    try {\n      switch (type) {\n        case ShadingType.FUNCTION_BASED:\n          return new FunctionBasedShading(\n            dict,\n            xref,\n            res,\n            pdfFunctionFactory,\n            globalColorSpaceCache,\n            localColorSpaceCache\n          );\n        case ShadingType.AXIAL:\n        case ShadingType.RADIAL:\n          return new RadialAxialShading(\n            dict,\n            xref,\n            res,\n            pdfFunctionFactory,\n            globalColorSpaceCache,\n            localColorSpaceCache\n          );\n        case ShadingType.FREE_FORM_MESH:\n        case ShadingType.LATTICE_FORM_MESH:\n        case ShadingType.COONS_PATCH_MESH:\n        case ShadingType.TENSOR_PATCH_MESH:\n          return new MeshShading(\n            shading,\n            xref,\n            res,\n            pdfFunctionFactory,\n            globalColorSpaceCache,\n            localColorSpaceCache\n          );\n        default:\n          throw new FormatError(\"Unsupported ShadingType: \" + type);\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(ex);\n      return new DummyShading();\n    }\n  }\n}\n\nclass BaseShading {\n  // A small number to offset the first/last color stops so we can insert ones\n  // to support extend. Number.MIN_VALUE is too small and breaks the extend.\n  static SMALL_NUMBER = 1e-6;\n\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseShading\n    ) {\n      unreachable(\"Cannot initialize BaseShading.\");\n    }\n  }\n\n  getIR() {\n    unreachable(\"Abstract method `getIR` called.\");\n  }\n}\n\n// Radial and axial shading have very similar implementations\n// If needed, the implementations can be broken into two classes.\nclass RadialAxialShading extends BaseShading {\n  constructor(\n    dict,\n    xref,\n    resources,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache\n  ) {\n    super();\n    this.shadingType = dict.get(\"ShadingType\");\n    let coordsLen = 0;\n    if (this.shadingType === ShadingType.AXIAL) {\n      coordsLen = 4;\n    } else if (this.shadingType === ShadingType.RADIAL) {\n      coordsLen = 6;\n    }\n    this.coordsArr = dict.getArray(\"Coords\");\n    if (!isNumberArray(this.coordsArr, coordsLen)) {\n      throw new FormatError(\"RadialAxialShading: Invalid /Coords array.\");\n    }\n    const cs = ColorSpaceUtils.parse({\n      cs: dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\"),\n      xref,\n      resources,\n      pdfFunctionFactory,\n      globalColorSpaceCache,\n      localColorSpaceCache,\n    });\n    this.bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n\n    let t0 = 0.0,\n      t1 = 1.0;\n    const domainArr = dict.getArray(\"Domain\");\n    if (isNumberArray(domainArr, 2)) {\n      [t0, t1] = domainArr;\n    }\n\n    let extendStart = false,\n      extendEnd = false;\n    const extendArr = dict.getArray(\"Extend\");\n    if (isBooleanArray(extendArr, 2)) {\n      [extendStart, extendEnd] = extendArr;\n    }\n\n    this.extendStart = extendStart;\n    this.extendEnd = extendEnd;\n\n    const fnObj = dict.getRaw(\"Function\");\n    const fn = pdfFunctionFactory.create(fnObj, /* parseArray = */ true);\n\n    // Use lcm(1,2,3,4,5,6,7,8,10) = 840 (including 9 increases this to 2520)\n    // to catch evenly spaced stops. oeis.org/A003418\n    const NUMBER_OF_SAMPLES = 840;\n    const step = (t1 - t0) / NUMBER_OF_SAMPLES;\n\n    const colorStops = (this.colorStops = []);\n\n    // Protect against bad domains.\n    if (t0 >= t1 || step <= 0) {\n      // Acrobat doesn't seem to handle these cases so we'll ignore for\n      // now.\n      info(\"Bad shading domain.\");\n      return;\n    }\n\n    const { numComps } = cs;\n    const ratio = new Float32Array(1);\n\n    // Batch colors to reduce ICC Wasm calls and bound temporary memory.\n    const batchSize = getColorConversionBatchSize(NUMBER_OF_SAMPLES, numComps);\n    const comps = new Float32Array(batchSize * numComps);\n    const rgb = new Uint8ClampedArray(NUMBER_OF_SAMPLES * 3);\n    for (let start = 0; start < NUMBER_OF_SAMPLES; start += batchSize) {\n      const count = Math.min(batchSize, NUMBER_OF_SAMPLES - start);\n      for (let i = 0, offset = 0; i < count; i++, offset += numComps) {\n        ratio[0] = t0 + (start + i) * step;\n        fn(ratio, 0, comps, offset);\n      }\n      cs.getRgbItems(comps, count, rgb, start * 3, /* alpha01 = */ 0);\n    }\n\n    let iBase = 0;\n    let rBase = rgb[0],\n      gBase = rgb[1],\n      bBase = rgb[2];\n    colorStops.push([0, Util.makeHexColor(rBase, gBase, bBase)]);\n\n    let iPrev = 1;\n    let rPrev = rgb[3],\n      gPrev = rgb[4],\n      bPrev = rgb[5];\n\n    // Slopes are rise / run.\n    // A max slope is from the least value the base component could have been\n    // to the greatest value the current component could have been.\n    // A min slope is from the greatest value the base component could have been\n    // to the least value the current component could have been.\n    // Each component could have been rounded up to .5 from its original value\n    // so the conservative deltas are +-1 (+-.5 for base and -+.5 for current).\n\n    // The run is iPrev - iBase = 1, so omitted.\n    let maxSlopeR = rPrev - rBase + 1;\n    let maxSlopeG = gPrev - gBase + 1;\n    let maxSlopeB = bPrev - bBase + 1;\n    let minSlopeR = rPrev - rBase - 1;\n    let minSlopeG = gPrev - gBase - 1;\n    let minSlopeB = bPrev - bBase - 1;\n\n    for (let i = 2; i < NUMBER_OF_SAMPLES; i++) {\n      const rgbOffset = i * 3;\n      const r = rgb[rgbOffset],\n        g = rgb[rgbOffset + 1],\n        b = rgb[rgbOffset + 2];\n\n      // Keep going if the maximum minimum slope <= the minimum maximum slope.\n      // Otherwise add a rgbPrev color stop and make it the new base.\n\n      const run = i - iBase;\n      maxSlopeR = Math.min(maxSlopeR, (r - rBase + 1) / run);\n      maxSlopeG = Math.min(maxSlopeG, (g - gBase + 1) / run);\n      maxSlopeB = Math.min(maxSlopeB, (b - bBase + 1) / run);\n      minSlopeR = Math.max(minSlopeR, (r - rBase - 1) / run);\n      minSlopeG = Math.max(minSlopeG, (g - gBase - 1) / run);\n      minSlopeB = Math.max(minSlopeB, (b - bBase - 1) / run);\n\n      const slopesExist =\n        minSlopeR <= maxSlopeR &&\n        minSlopeG <= maxSlopeG &&\n        minSlopeB <= maxSlopeB;\n\n      if (!slopesExist) {\n        const cssColor = Util.makeHexColor(rPrev, gPrev, bPrev);\n        colorStops.push([iPrev / NUMBER_OF_SAMPLES, cssColor]);\n\n        // TODO: When fn frequency is high (iPrev - iBase === 1 twice in a row),\n        // send the color space and function to do the sampling display side.\n\n        // The run is i - iPrev = 1, so omitted.\n        maxSlopeR = r - rPrev + 1;\n        maxSlopeG = g - gPrev + 1;\n        maxSlopeB = b - bPrev + 1;\n        minSlopeR = r - rPrev - 1;\n        minSlopeG = g - gPrev - 1;\n        minSlopeB = b - bPrev - 1;\n\n        iBase = iPrev;\n        rBase = rPrev;\n        gBase = gPrev;\n        bBase = bPrev;\n      }\n\n      iPrev = i;\n      rPrev = r;\n      gPrev = g;\n      bPrev = b;\n    }\n    colorStops.push([1, Util.makeHexColor(rPrev, gPrev, bPrev)]);\n\n    const background = dict.has(\"Background\")\n      ? cs.getRgbHex(dict.get(\"Background\"), 0)\n      : \"transparent\";\n\n    if (!extendStart) {\n      // Insert a color stop at the front and offset the first real color stop\n      // so it doesn't conflict with the one we insert.\n      colorStops.unshift([0, background]);\n      colorStops[1][0] += BaseShading.SMALL_NUMBER;\n    }\n    if (!extendEnd) {\n      // Same idea as above in extendStart but for the end.\n      colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER;\n      colorStops.push([1, background]);\n    }\n\n    this.colorStops = colorStops;\n  }\n\n  getIR() {\n    const { coordsArr, shadingType } = this;\n    let type, p0, p1, r0, r1;\n    if (shadingType === ShadingType.AXIAL) {\n      p0 = [coordsArr[0], coordsArr[1]];\n      p1 = [coordsArr[2], coordsArr[3]];\n      r0 = null;\n      r1 = null;\n      type = \"axial\";\n    } else if (shadingType === ShadingType.RADIAL) {\n      p0 = [coordsArr[0], coordsArr[1]];\n      p1 = [coordsArr[3], coordsArr[4]];\n      r0 = coordsArr[2];\n      r1 = coordsArr[5];\n      type = \"radial\";\n    } else {\n      unreachable(`getPattern type unknown: ${shadingType}`);\n    }\n\n    return [\"RadialAxial\", type, this.bbox, this.colorStops, p0, p1, r0, r1];\n  }\n}\n\n// Helpers for MeshShading, which builds its mesh from a stream.\nfunction meshUpdateBounds(self) {\n  let minX = self.coords[0][0],\n    minY = self.coords[0][1],\n    maxX = minX,\n    maxY = minY;\n  for (let i = 1, ii = self.coords.length; i < ii; i++) {\n    const x = self.coords[i][0],\n      y = self.coords[i][1];\n    minX = minX > x ? x : minX;\n    minY = minY > y ? y : minY;\n    maxX = maxX < x ? x : maxX;\n    maxY = maxY < y ? y : maxY;\n  }\n  self.bounds = [minX, minY, maxX, maxY];\n}\n\nfunction meshPackData(self) {\n  let i, j, ii;\n\n  const coords = self.coords;\n  const coordsPacked = new Float32Array(coords.length * 2);\n  for (i = 0, j = 0, ii = coords.length; i < ii; i++) {\n    const xy = coords[i];\n    coordsPacked[j++] = xy[0];\n    coordsPacked[j++] = xy[1];\n  }\n  self.coords = coordsPacked;\n\n  // Stride 4 (RGB + 1 padding byte) so each color fits in one u32, letting\n  // the WebGPU vertex shader read colors as array<u32> without repacking.\n  const colors = self.colors;\n  const colorsPacked = new Uint8Array(colors.length * 4);\n  for (i = 0, j = 0, ii = colors.length; i < ii; i++) {\n    const c = colors[i];\n    colorsPacked[j++] = c[0];\n    colorsPacked[j++] = c[1];\n    colorsPacked[j++] = c[2];\n    j++; // alpha — unused, stays 0\n  }\n  self.colors = colorsPacked;\n\n  // Store raw vertex indices (not byte offsets) so the GPU shader can\n  // address coords / colors without knowing their strides, and so the\n  // arrays are transferable Uint32Arrays.\n  for (const figure of self.figures) {\n    figure.coords = new Uint32Array(figure.coords);\n    figure.colors = new Uint32Array(figure.colors);\n  }\n}\n\nfunction buildMeshVertexData(coords, colors, figures) {\n  // Count the total expanded vertex count first for a single allocation.\n  let vertexCount = 0;\n  for (const figure of figures) {\n    if (figure.type === MeshFigureType.TRIANGLES) {\n      vertexCount += figure.coords.length;\n    } else if (figure.type === MeshFigureType.LATTICE) {\n      const vpr = figure.verticesPerRow;\n      vertexCount +=\n        (Math.floor(figure.coords.length / vpr) - 1) * (vpr - 1) * 6;\n    }\n  }\n\n  // posData: 2 × float32 per vertex (raw PDF content-space x, y).\n  // colData: 4 × uint8 per vertex (r, g, b, unused).\n  const posData = new Float32Array(vertexCount * 2);\n  const colData = new Uint8Array(vertexCount * 4);\n  let pOff = 0,\n    cOff = 0;\n\n  const addVertex = (pi, ci) => {\n    posData[pOff++] = coords[pi * 2];\n    posData[pOff++] = coords[pi * 2 + 1];\n    colData[cOff++] = colors[ci * 4];\n    colData[cOff++] = colors[ci * 4 + 1];\n    colData[cOff++] = colors[ci * 4 + 2];\n    cOff++; // alpha padding\n  };\n\n  for (const figure of figures) {\n    const ps = figure.coords;\n    const cs = figure.colors;\n    if (figure.type === MeshFigureType.TRIANGLES) {\n      for (let i = 0, ii = ps.length; i < ii; i++) {\n        addVertex(ps[i], cs[i]);\n      }\n    } else if (figure.type === MeshFigureType.LATTICE) {\n      const vpr = figure.verticesPerRow;\n      const rows = Math.floor(ps.length / vpr) - 1;\n      const cols = vpr - 1;\n      for (let i = 0; i < rows; i++) {\n        let q = i * vpr;\n        for (let j = 0; j < cols; j++, q++) {\n          addVertex(ps[q], cs[q]);\n          addVertex(ps[q + 1], cs[q + 1]);\n          addVertex(ps[q + vpr], cs[q + vpr]);\n          addVertex(ps[q + vpr + 1], cs[q + vpr + 1]);\n          addVertex(ps[q + 1], cs[q + 1]);\n          addVertex(ps[q + vpr], cs[q + vpr]);\n        }\n      }\n    }\n  }\n\n  return { posData, colData, vertexCount };\n}\n\n// Type 1 shading: a 2-in, n-out function sampled over a rectangular domain.\nclass FunctionBasedShading extends BaseShading {\n  // Maximum grid steps per axis to avoid huge meshes.\n  static MAX_STEP_COUNT = 512;\n\n  constructor(\n    dict,\n    xref,\n    resources,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache\n  ) {\n    super();\n    this.bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n\n    const cs = ColorSpaceUtils.parse({\n      cs: dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\"),\n      xref,\n      resources,\n      pdfFunctionFactory,\n      globalColorSpaceCache,\n      localColorSpaceCache,\n    });\n    this.background = dict.has(\"Background\")\n      ? cs.getRgb(dict.get(\"Background\"), 0)\n      : null;\n\n    const fnObj = dict.getRaw(\"Function\");\n    if (!fnObj) {\n      throw new FormatError(\"FunctionBasedShading: missing /Function\");\n    }\n    const fn = pdfFunctionFactory.create(fnObj, /* parseArray = */ true);\n\n    // Domain [x0, x1, y0, y1]; defaults to [0, 1, 0, 1].\n    const [x0, x1, y0, y1] = lookupRect(dict.getArray(\"Domain\"), [0, 1, 0, 1]);\n\n    // Matrix maps shading (domain) space to user space; defaults to identity.\n    const matrix = lookupMatrix(dict.getArray(\"Matrix\"), IDENTITY_MATRIX);\n\n    // Transform the four domain corners to find the user-space bounding box.\n    this.bounds = BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([x0, y0, x1, y1], matrix, this.bounds);\n\n    const bboxW = this.bounds[2] - this.bounds[0];\n    const bboxH = this.bounds[3] - this.bounds[1];\n\n    // 1 step per user-space unit, capped for performance.\n    const stepsX = MathClamp(\n      Math.ceil(bboxW),\n      1,\n      FunctionBasedShading.MAX_STEP_COUNT\n    );\n    const stepsY = MathClamp(\n      Math.ceil(bboxH),\n      1,\n      FunctionBasedShading.MAX_STEP_COUNT\n    );\n\n    const verticesPerRow = stepsX + 1;\n    const totalVertices = (stepsY + 1) * verticesPerRow;\n    const coords = (this.coords = new Float32Array(totalVertices * 2));\n    const colors = (this.colors = new Uint8ClampedArray(totalVertices * 4));\n\n    const { numComps } = cs;\n    const xyBuf = new Float32Array(2);\n    // Batch colors to reduce ICC Wasm calls and bound temporary memory.\n    const batchSize = getColorConversionBatchSize(totalVertices, numComps);\n    const comps = new Float32Array(batchSize * numComps);\n    const rangeX = (x1 - x0) / stepsX;\n    const rangeY = (y1 - y0) / stepsY;\n    const halfStepX = rangeX / 2;\n    const halfStepY = rangeY / 2;\n    let coordOffset = 0;\n    let compOffset = 0;\n    let batchCount = 0;\n    let colorOffset = 0;\n    for (let row = 0; row <= stepsY; row++) {\n      const yDomain = y0 + rangeY * row;\n      // Evaluate half a step inside at boundary vertices to avoid a spurious\n      // strip for discontinuous functions; vertex positions stay unchanged.\n      xyBuf[1] = row === stepsY ? yDomain - halfStepY : yDomain;\n      for (let col = 0; col <= stepsX; col++) {\n        const xDomain = x0 + rangeX * col;\n        xyBuf[0] = col === stepsX ? xDomain - halfStepX : xDomain;\n        fn(xyBuf, 0, comps, compOffset);\n        compOffset += numComps;\n        batchCount++;\n\n        coords[coordOffset] = xDomain;\n        coords[coordOffset + 1] = yDomain;\n        Util.applyTransform(coords, matrix, coordOffset);\n        coordOffset += 2;\n\n        if (batchCount === batchSize) {\n          cs.getRgbItems(\n            comps,\n            batchCount,\n            colors,\n            colorOffset,\n            /* alpha01 = */ 1\n          );\n          colorOffset += batchCount * 4;\n          compOffset = batchCount = 0;\n        }\n      }\n    }\n    if (batchCount > 0) {\n      cs.getRgbItems(comps, batchCount, colors, colorOffset, /* alpha01 = */ 1);\n    }\n    // Alpha stays zero.\n\n    const ps = new Uint32Array(totalVertices);\n    for (let i = 0; i < totalVertices; i++) {\n      ps[i] = i;\n    }\n    this.figures = [\n      {\n        type: MeshFigureType.LATTICE,\n        coords: ps,\n        colors: new Uint32Array(ps),\n        verticesPerRow,\n      },\n    ];\n  }\n\n  getIR() {\n    const { posData, colData, vertexCount } = buildMeshVertexData(\n      this.coords,\n      this.colors,\n      this.figures\n    );\n    return [\n      \"Mesh\",\n      ShadingType.FUNCTION_BASED,\n      posData,\n      colData,\n      vertexCount,\n      this.bounds,\n      this.bbox,\n      this.background,\n    ];\n  }\n}\n\n// All mesh shadings. For now, they will be presented as set of the triangles\n// to be drawn on the canvas and rgb color for each vertex.\nclass MeshStreamReader {\n  constructor(stream, context) {\n    this.stream = stream;\n    this.context = context;\n    this.buffer = 0;\n    this.bufferLength = 0;\n\n    const numComps = context.numComps;\n    this.tmpCompsBuf = new Float32Array(numComps);\n    const csNumComps = context.colorSpace.numComps;\n    this.tmpCsCompsBuf = context.colorFn\n      ? new Float32Array(csNumComps)\n      : this.tmpCompsBuf;\n  }\n\n  get hasData() {\n    if (this.stream.end) {\n      return this.stream.pos < this.stream.end;\n    }\n    if (this.bufferLength > 0) {\n      return true;\n    }\n    const nextByte = this.stream.getByte();\n    if (nextByte < 0) {\n      return false;\n    }\n    this.buffer = nextByte;\n    this.bufferLength = 8;\n    return true;\n  }\n\n  readBits(n) {\n    const { stream } = this;\n    let { buffer, bufferLength } = this;\n\n    if (n === 32) {\n      if (bufferLength === 0) {\n        return stream.getInt32() >>> 0;\n      }\n      buffer =\n        (buffer << 24) |\n        (stream.getByte() << 16) |\n        (stream.getByte() << 8) |\n        stream.getByte();\n      const nextByte = stream.getByte();\n      this.buffer = nextByte & ((1 << bufferLength) - 1);\n      return (\n        ((buffer << (8 - bufferLength)) |\n          ((nextByte & 0xff) >> bufferLength)) >>>\n        0\n      );\n    }\n    if (n === 8 && bufferLength === 0) {\n      return stream.getByte();\n    }\n    while (bufferLength < n) {\n      buffer = (buffer << 8) | stream.getByte();\n      bufferLength += 8;\n    }\n    bufferLength -= n;\n    this.bufferLength = bufferLength;\n    this.buffer = buffer & ((1 << bufferLength) - 1);\n    return buffer >> bufferLength;\n  }\n\n  align() {\n    this.buffer = 0;\n    this.bufferLength = 0;\n  }\n\n  readFlag() {\n    return this.readBits(this.context.bitsPerFlag);\n  }\n\n  readCoordinate() {\n    const { bitsPerCoordinate, decode } = this.context;\n    const xi = this.readBits(bitsPerCoordinate);\n    const yi = this.readBits(bitsPerCoordinate);\n    const scale =\n      bitsPerCoordinate < 32\n        ? 1 / ((1 << bitsPerCoordinate) - 1)\n        : 2.3283064365386963e-10; // 2 ^ -32\n    return [\n      xi * scale * (decode[1] - decode[0]) + decode[0],\n      yi * scale * (decode[3] - decode[2]) + decode[2],\n    ];\n  }\n\n  readComponents() {\n    const { bitsPerComponent, colorFn, colorSpace, decode, numComps } =\n      this.context;\n    const scale =\n      bitsPerComponent < 32\n        ? 1 / ((1 << bitsPerComponent) - 1)\n        : 2.3283064365386963e-10; // 2 ^ -32\n    const components = this.tmpCompsBuf;\n    for (let i = 0, j = 4; i < numComps; i++, j += 2) {\n      const ci = this.readBits(bitsPerComponent);\n      components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];\n    }\n    const color = this.tmpCsCompsBuf;\n    colorFn?.(components, 0, color, 0);\n    return colorSpace.getRgb(color, 0);\n  }\n}\n\nlet bCache = null;\n\nfunction getB(count) {\n  return (bCache ??= new Map()).getOrInsertComputed(count, () =>\n    Array.from({ length: count + 1 }, (_, i) => {\n      const t = i / count,\n        t_ = 1 - t;\n      return new Float32Array([\n        t_ ** 3,\n        3 * t * t_ ** 2,\n        3 * t ** 2 * t_,\n        t ** 3,\n      ]);\n    })\n  );\n}\n\nfunction clearPatternCaches() {\n  bCache?.clear();\n}\n\nclass MeshShading extends BaseShading {\n  static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;\n\n  static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;\n\n  // Count of triangles per entire mesh bounds.\n  static TRIANGLE_DENSITY = 20;\n\n  constructor(\n    stream,\n    xref,\n    resources,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache\n  ) {\n    super();\n    if (!(stream instanceof BaseStream)) {\n      throw new FormatError(\"Mesh data is not a stream\");\n    }\n    const dict = stream.dict;\n    this.shadingType = dict.get(\"ShadingType\");\n    this.bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n    const cs = ColorSpaceUtils.parse({\n      cs: dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\"),\n      xref,\n      resources,\n      pdfFunctionFactory,\n      globalColorSpaceCache,\n      localColorSpaceCache,\n    });\n    this.background = dict.has(\"Background\")\n      ? cs.getRgb(dict.get(\"Background\"), 0)\n      : null;\n\n    const fnObj = dict.getRaw(\"Function\");\n    const fn = fnObj\n      ? pdfFunctionFactory.create(fnObj, /* parseArray = */ true)\n      : null;\n\n    this.coords = [];\n    this.colors = [];\n    this.figures = [];\n\n    const decodeContext = {\n      bitsPerCoordinate: dict.get(\"BitsPerCoordinate\"),\n      bitsPerComponent: dict.get(\"BitsPerComponent\"),\n      bitsPerFlag: dict.get(\"BitsPerFlag\"),\n      decode: dict.getArray(\"Decode\"),\n      colorFn: fn,\n      colorSpace: cs,\n      numComps: fn ? 1 : cs.numComps,\n    };\n    const reader = new MeshStreamReader(stream, decodeContext);\n\n    let patchMesh = false;\n    switch (this.shadingType) {\n      case ShadingType.FREE_FORM_MESH:\n        this._decodeType4Shading(reader);\n        break;\n      case ShadingType.LATTICE_FORM_MESH:\n        const verticesPerRow = dict.get(\"VerticesPerRow\") | 0;\n        if (verticesPerRow < 2) {\n          throw new FormatError(\"Invalid VerticesPerRow\");\n        }\n        this._decodeType5Shading(reader, verticesPerRow);\n        break;\n      case ShadingType.COONS_PATCH_MESH:\n        this._decodeType6Shading(reader);\n        patchMesh = true;\n        break;\n      case ShadingType.TENSOR_PATCH_MESH:\n        this._decodeType7Shading(reader);\n        patchMesh = true;\n        break;\n      default:\n        unreachable(\"Unsupported mesh type.\");\n        break;\n    }\n\n    if (patchMesh) {\n      // Dirty bounds calculation, to determine how dense the triangles will be.\n      this._updateBounds();\n      for (let i = 0, ii = this.figures.length; i < ii; i++) {\n        this._buildFigureFromPatch(i);\n      }\n    }\n    // Calculate bounds.\n    this._updateBounds();\n\n    this._packData();\n  }\n\n  _decodeType4Shading(reader) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const operators = [];\n    const ps = []; // not maintaining cs since that will match ps\n    let verticesLeft = 0; // assuming we have all data to start a new triangle\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      const coord = reader.readCoordinate();\n      const color = reader.readComponents();\n      if (verticesLeft === 0) {\n        // ignoring flags if we started a triangle\n        if (!(0 <= f && f <= 2)) {\n          throw new FormatError(\"Unknown type4 flag\");\n        }\n        switch (f) {\n          case 0:\n            verticesLeft = 3;\n            break;\n          case 1:\n            ps.push(ps.at(-2), ps.at(-1));\n            verticesLeft = 1;\n            break;\n          case 2:\n            ps.push(ps.at(-3), ps.at(-1));\n            verticesLeft = 1;\n            break;\n        }\n        operators.push(f);\n      }\n      ps.push(coords.length);\n      coords.push(coord);\n      colors.push(color);\n      verticesLeft--;\n\n      reader.align();\n    }\n    this.figures.push({\n      type: MeshFigureType.TRIANGLES,\n      coords: new Int32Array(ps),\n      colors: new Int32Array(ps),\n    });\n  }\n\n  _decodeType5Shading(reader, verticesPerRow) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = []; // not maintaining cs since that will match ps\n    while (reader.hasData) {\n      const coord = reader.readCoordinate();\n      const color = reader.readComponents();\n      ps.push(coords.length);\n      coords.push(coord);\n      colors.push(color);\n    }\n    this.figures.push({\n      type: MeshFigureType.LATTICE,\n      coords: new Int32Array(ps),\n      colors: new Int32Array(ps),\n      verticesPerRow,\n    });\n  }\n\n  _decodeType6Shading(reader) {\n    // A special case of Type 7. The p11, p12, p21, p22 automatically filled\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33\n    const cs = new Int32Array(4); // c00, c30, c03, c33\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      if (!(0 <= f && f <= 3)) {\n        throw new FormatError(\"Unknown type6 flag\");\n      }\n      const pi = coords.length;\n      for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {\n        coords.push(reader.readCoordinate());\n      }\n      const ci = colors.length;\n      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n        colors.push(reader.readComponents());\n      }\n      let tmp1, tmp2, tmp3, tmp4;\n      switch (f) {\n        // prettier-ignore\n        case 0:\n          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;\n          ps[ 8] = pi + 2; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 7;\n          ps[ 4] = pi + 1; /* calculated below              */ ps[ 7] = pi + 8;\n          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;\n          cs[2] = ci + 1; cs[3] = ci + 2;\n          cs[0] = ci;     cs[1] = ci + 3;\n          break;\n        // prettier-ignore\n        case 1:\n          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];\n          ps[12] = tmp4; ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;\n          ps[ 8] = tmp3; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;\n          ps[ 4] = tmp2; /* calculated below              */ ps[ 7] = pi + 4;\n          ps[ 0] = tmp1; ps[ 1] = pi + 7;   ps[ 2] = pi + 6; ps[ 3] = pi + 5;\n          tmp1 = cs[2]; tmp2 = cs[3];\n          cs[2] = tmp2;   cs[3] = ci;\n          cs[0] = tmp1;   cs[1] = ci + 1;\n          break;\n        // prettier-ignore\n        case 2:\n          tmp1 = ps[15];\n          tmp2 = ps[11];\n          ps[12] = ps[3];  ps[13] = pi + 0; ps[14] = pi + 1;   ps[15] = pi + 2;\n          ps[ 8] = ps[7];  /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;\n          ps[ 4] = tmp2;   /* calculated below              */ ps[ 7] = pi + 4;\n          ps[ 0] = tmp1;  ps[ 1] = pi + 7;   ps[ 2] = pi + 6;  ps[ 3] = pi + 5;\n          tmp1 = cs[3];\n          cs[2] = cs[1]; cs[3] = ci;\n          cs[0] = tmp1;  cs[1] = ci + 1;\n          break;\n        // prettier-ignore\n        case 3:\n          ps[12] = ps[0];  ps[13] = pi + 0;   ps[14] = pi + 1; ps[15] = pi + 2;\n          ps[ 8] = ps[1];  /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;\n          ps[ 4] = ps[2];  /* calculated below              */ ps[ 7] = pi + 4;\n          ps[ 0] = ps[3];  ps[ 1] = pi + 7;   ps[ 2] = pi + 6; ps[ 3] = pi + 5;\n          cs[2] = cs[0]; cs[3] = ci;\n          cs[0] = cs[1]; cs[1] = ci + 1;\n          break;\n      }\n      // set p11, p12, p21, p22\n      ps[5] = coords.length;\n      coords.push([\n        (-4 * coords[ps[0]][0] -\n          coords[ps[15]][0] +\n          6 * (coords[ps[4]][0] + coords[ps[1]][0]) -\n          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +\n          3 * (coords[ps[13]][0] + coords[ps[7]][0])) /\n          9,\n        (-4 * coords[ps[0]][1] -\n          coords[ps[15]][1] +\n          6 * (coords[ps[4]][1] + coords[ps[1]][1]) -\n          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +\n          3 * (coords[ps[13]][1] + coords[ps[7]][1])) /\n          9,\n      ]);\n      ps[6] = coords.length;\n      coords.push([\n        (-4 * coords[ps[3]][0] -\n          coords[ps[12]][0] +\n          6 * (coords[ps[2]][0] + coords[ps[7]][0]) -\n          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +\n          3 * (coords[ps[4]][0] + coords[ps[14]][0])) /\n          9,\n        (-4 * coords[ps[3]][1] -\n          coords[ps[12]][1] +\n          6 * (coords[ps[2]][1] + coords[ps[7]][1]) -\n          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +\n          3 * (coords[ps[4]][1] + coords[ps[14]][1])) /\n          9,\n      ]);\n      ps[9] = coords.length;\n      coords.push([\n        (-4 * coords[ps[12]][0] -\n          coords[ps[3]][0] +\n          6 * (coords[ps[8]][0] + coords[ps[13]][0]) -\n          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +\n          3 * (coords[ps[11]][0] + coords[ps[1]][0])) /\n          9,\n        (-4 * coords[ps[12]][1] -\n          coords[ps[3]][1] +\n          6 * (coords[ps[8]][1] + coords[ps[13]][1]) -\n          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +\n          3 * (coords[ps[11]][1] + coords[ps[1]][1])) /\n          9,\n      ]);\n      ps[10] = coords.length;\n      coords.push([\n        (-4 * coords[ps[15]][0] -\n          coords[ps[0]][0] +\n          6 * (coords[ps[11]][0] + coords[ps[14]][0]) -\n          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +\n          3 * (coords[ps[2]][0] + coords[ps[8]][0])) /\n          9,\n        (-4 * coords[ps[15]][1] -\n          coords[ps[0]][1] +\n          6 * (coords[ps[11]][1] + coords[ps[14]][1]) -\n          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +\n          3 * (coords[ps[2]][1] + coords[ps[8]][1])) /\n          9,\n      ]);\n      this.figures.push({\n        type: MeshFigureType.PATCH,\n        coords: new Int32Array(ps), // making copies of ps and cs\n        colors: new Int32Array(cs),\n      });\n    }\n  }\n\n  _decodeType7Shading(reader) {\n    const coords = this.coords;\n    const colors = this.colors;\n    const ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33\n    const cs = new Int32Array(4); // c00, c30, c03, c33\n    while (reader.hasData) {\n      const f = reader.readFlag();\n      if (!(0 <= f && f <= 3)) {\n        throw new FormatError(\"Unknown type7 flag\");\n      }\n      const pi = coords.length;\n      for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {\n        coords.push(reader.readCoordinate());\n      }\n      const ci = colors.length;\n      for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\n        colors.push(reader.readComponents());\n      }\n      let tmp1, tmp2, tmp3, tmp4;\n      switch (f) {\n        // prettier-ignore\n        case 0:\n          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;\n          ps[ 8] = pi + 2; ps[ 9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7;\n          ps[ 4] = pi + 1; ps[ 5] = pi + 12; ps[ 6] = pi + 15; ps[ 7] = pi + 8;\n          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;\n          cs[2] = ci + 1; cs[3] = ci + 2;\n          cs[0] = ci;     cs[1] = ci + 3;\n          break;\n        // prettier-ignore\n        case 1:\n          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];\n          ps[12] = tmp4;   ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;\n          ps[ 8] = tmp3;   ps[ 9] = pi + 9;  ps[10] = pi + 10; ps[11] = pi + 3;\n          ps[ 4] = tmp2;   ps[ 5] = pi + 8;  ps[ 6] = pi + 11; ps[ 7] = pi + 4;\n          ps[ 0] = tmp1;   ps[ 1] = pi + 7;  ps[ 2] = pi + 6;  ps[ 3] = pi + 5;\n          tmp1 = cs[2]; tmp2 = cs[3];\n          cs[2] = tmp2;   cs[3] = ci;\n          cs[0] = tmp1;   cs[1] = ci + 1;\n          break;\n        // prettier-ignore\n        case 2:\n          tmp1 = ps[15];\n          tmp2 = ps[11];\n          ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1;  ps[15] = pi + 2;\n          ps[ 8] = ps[7]; ps[ 9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3;\n          ps[ 4] = tmp2;  ps[ 5] = pi + 8; ps[ 6] = pi + 11; ps[ 7] = pi + 4;\n          ps[ 0] = tmp1;  ps[ 1] = pi + 7; ps[ 2] = pi + 6;  ps[ 3] = pi + 5;\n          tmp1 = cs[3];\n          cs[2] = cs[1]; cs[3] = ci;\n          cs[0] = tmp1;  cs[1] = ci + 1;\n          break;\n        // prettier-ignore\n        case 3:\n          ps[12] = ps[0];  ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;\n          ps[ 8] = ps[1];  ps[ 9] = pi + 9;  ps[10] = pi + 10; ps[11] = pi + 3;\n          ps[ 4] = ps[2];  ps[ 5] = pi + 8;  ps[ 6] = pi + 11; ps[ 7] = pi + 4;\n          ps[ 0] = ps[3];  ps[ 1] = pi + 7;  ps[ 2] = pi + 6;  ps[ 3] = pi + 5;\n          cs[2] = cs[0]; cs[3] = ci;\n          cs[0] = cs[1]; cs[1] = ci + 1;\n          break;\n      }\n      this.figures.push({\n        type: MeshFigureType.PATCH,\n        coords: new Int32Array(ps), // making copies of ps and cs\n        colors: new Int32Array(cs),\n      });\n    }\n  }\n\n  _buildFigureFromPatch(index) {\n    const figure = this.figures[index];\n    assert(\n      figure.type === MeshFigureType.PATCH,\n      \"Unexpected patch mesh figure\"\n    );\n\n    const coords = this.coords,\n      colors = this.colors;\n    const pi = figure.coords;\n    const ci = figure.colors;\n\n    const figureMinX = Math.min(\n      coords[pi[0]][0],\n      coords[pi[3]][0],\n      coords[pi[12]][0],\n      coords[pi[15]][0]\n    );\n    const figureMinY = Math.min(\n      coords[pi[0]][1],\n      coords[pi[3]][1],\n      coords[pi[12]][1],\n      coords[pi[15]][1]\n    );\n    const figureMaxX = Math.max(\n      coords[pi[0]][0],\n      coords[pi[3]][0],\n      coords[pi[12]][0],\n      coords[pi[15]][0]\n    );\n    const figureMaxY = Math.max(\n      coords[pi[0]][1],\n      coords[pi[3]][1],\n      coords[pi[12]][1],\n      coords[pi[15]][1]\n    );\n    let splitXBy = Math.ceil(\n      ((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY) /\n        (this.bounds[2] - this.bounds[0])\n    );\n    splitXBy = MathClamp(\n      splitXBy,\n      MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,\n      MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT\n    );\n    let splitYBy = Math.ceil(\n      ((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY) /\n        (this.bounds[3] - this.bounds[1])\n    );\n    splitYBy = MathClamp(\n      splitYBy,\n      MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,\n      MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT\n    );\n\n    const verticesPerRow = splitXBy + 1;\n    const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);\n    const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);\n    let k = 0;\n    const cl = new Uint8Array(3),\n      cr = new Uint8Array(3);\n    const c0 = colors[ci[0]],\n      c1 = colors[ci[1]],\n      c2 = colors[ci[2]],\n      c3 = colors[ci[3]];\n    const bRow = getB(splitYBy),\n      bCol = getB(splitXBy);\n    for (let row = 0; row <= splitYBy; row++) {\n      cl[0] = ((c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy) | 0;\n      cl[1] = ((c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy) | 0;\n      cl[2] = ((c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy) | 0;\n\n      cr[0] = ((c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy) | 0;\n      cr[1] = ((c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy) | 0;\n      cr[2] = ((c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy) | 0;\n\n      for (let col = 0; col <= splitXBy; col++, k++) {\n        if (\n          (row === 0 || row === splitYBy) &&\n          (col === 0 || col === splitXBy)\n        ) {\n          continue;\n        }\n        let x = 0,\n          y = 0;\n        let q = 0;\n        for (let i = 0; i <= 3; i++) {\n          for (let j = 0; j <= 3; j++, q++) {\n            const m = bRow[row][i] * bCol[col][j];\n            x += coords[pi[q]][0] * m;\n            y += coords[pi[q]][1] * m;\n          }\n        }\n        figureCoords[k] = coords.length;\n        coords.push([x, y]);\n        figureColors[k] = colors.length;\n        const newColor = new Uint8Array(3);\n        newColor[0] = ((cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy) | 0;\n        newColor[1] = ((cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy) | 0;\n        newColor[2] = ((cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy) | 0;\n        colors.push(newColor);\n      }\n    }\n    figureCoords[0] = pi[0];\n    figureColors[0] = ci[0];\n    figureCoords[splitXBy] = pi[3];\n    figureColors[splitXBy] = ci[1];\n    figureCoords[verticesPerRow * splitYBy] = pi[12];\n    figureColors[verticesPerRow * splitYBy] = ci[2];\n    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];\n    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];\n\n    this.figures[index] = {\n      type: MeshFigureType.LATTICE,\n      coords: figureCoords,\n      colors: figureColors,\n      verticesPerRow,\n    };\n  }\n\n  _updateBounds() {\n    meshUpdateBounds(this);\n  }\n\n  _packData() {\n    meshPackData(this);\n  }\n\n  getIR() {\n    const { posData, colData, vertexCount } = buildMeshVertexData(\n      this.coords,\n      this.colors,\n      this.figures\n    );\n    return [\n      \"Mesh\",\n      this.shadingType,\n      posData,\n      colData,\n      vertexCount,\n      this.bounds,\n      this.bbox,\n      this.background,\n    ];\n  }\n}\n\nclass DummyShading extends BaseShading {\n  getIR() {\n    return [\"Dummy\"];\n  }\n}\n\nfunction getTilingPatternIR(operatorList, dict, color, needsIsolation = true) {\n  const matrix = lookupMatrix(dict.getArray(\"Matrix\"), IDENTITY_MATRIX);\n  const bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n  // Ensure that the pattern has a non-zero width and height, to prevent errors\n  // in `pattern_helper.js` (fixes issue8330.pdf).\n  if (!bbox || bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {\n    throw new FormatError(`Invalid getTilingPatternIR /BBox array.`);\n  }\n  const xstep = dict.get(\"XStep\");\n  if (typeof xstep !== \"number\") {\n    throw new FormatError(`Invalid getTilingPatternIR /XStep value.`);\n  }\n  const ystep = dict.get(\"YStep\");\n  if (typeof ystep !== \"number\") {\n    throw new FormatError(`Invalid getTilingPatternIR /YStep value.`);\n  }\n  const paintType = dict.get(\"PaintType\");\n  if (!Number.isInteger(paintType)) {\n    throw new FormatError(`Invalid getTilingPatternIR /PaintType value.`);\n  }\n  const tilingType = dict.get(\"TilingType\");\n  if (!Number.isInteger(tilingType)) {\n    throw new FormatError(`Invalid getTilingPatternIR /TilingType value.`);\n  }\n\n  return [\n    \"TilingPattern\",\n    color,\n    operatorList,\n    matrix,\n    bbox,\n    xstep,\n    ystep,\n    paintType,\n    tilingType,\n    needsIsolation,\n  ];\n}\n\nexport { clearPatternCaches, getTilingPatternIR, Pattern };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormatError } from \"../shared/util.js\";\nimport { Stream } from \"./stream.js\";\n\nfunction hexToInt(a, size) {\n  let n = 0;\n  for (let i = 0; i <= size; i++) {\n    n = (n << 8) | a[i];\n  }\n  return n >>> 0;\n}\n\nfunction hexToStr(a, size) {\n  // This code is hot. Special-case some common values to avoid creating an\n  // object with subarray().\n  if (size === 1) {\n    return String.fromCharCode(a[0], a[1]);\n  }\n  if (size === 3) {\n    return String.fromCharCode(a[0], a[1], a[2], a[3]);\n  }\n  return String.fromCharCode(...a.subarray(0, size + 1));\n}\n\nfunction addHex(a, b, size) {\n  let c = 0;\n  for (let i = size; i >= 0; i--) {\n    c += a[i] + b[i];\n    a[i] = c & 255;\n    c >>= 8;\n  }\n}\n\nfunction incHex(a, size) {\n  let c = 1;\n  for (let i = size; i >= 0 && c > 0; i--) {\n    c += a[i];\n    a[i] = c & 255;\n    c >>= 8;\n  }\n}\n\nconst MAX_NUM_SIZE = 16;\nconst MAX_ENCODED_NUM_SIZE = 19; // ceil(MAX_NUM_SIZE * 7 / 8)\n\nclass BinaryCMapStream extends Stream {\n  tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);\n\n  constructor(data) {\n    super(\n      /* arrayBuffer = */ data,\n      /* start = */ 0,\n      /* length = */ data.length,\n      /* dict = */ null\n    );\n  }\n\n  readNumber() {\n    let n = 0;\n    let last;\n    do {\n      const b = this.getByte();\n      if (b < 0) {\n        throw new FormatError(\"unexpected EOF in bcmap\");\n      }\n      last = !(b & 0x80);\n      n = (n << 7) | (b & 0x7f);\n    } while (!last);\n    return n;\n  }\n\n  readSigned() {\n    const n = this.readNumber();\n    return n & 1 ? ~(n >>> 1) : n >>> 1;\n  }\n\n  readHex(num, size) {\n    num.set(this.getBytes(size + 1));\n  }\n\n  readHexNumber(num, size) {\n    let last;\n    const stack = this.tmpBuf;\n    let sp = 0;\n    do {\n      const b = this.getByte();\n      if (b < 0) {\n        throw new FormatError(\"unexpected EOF in bcmap\");\n      }\n      last = !(b & 0x80);\n      stack[sp++] = b & 0x7f;\n    } while (!last);\n    let i = size,\n      buffer = 0,\n      bufferSize = 0;\n    while (i >= 0) {\n      while (bufferSize < 8 && stack.length > 0) {\n        buffer |= stack[--sp] << bufferSize;\n        bufferSize += 7;\n      }\n      num[i] = buffer & 255;\n      i--;\n      buffer >>= 8;\n      bufferSize -= 8;\n    }\n  }\n\n  readHexSigned(num, size) {\n    this.readHexNumber(num, size);\n    const sign = num[size] & 1 ? 255 : 0;\n    let c = 0;\n    for (let i = 0; i <= size; i++) {\n      c = ((c & 1) << 8) | num[i];\n      num[i] = (c >> 1) ^ sign;\n    }\n  }\n\n  readString() {\n    const len = this.readNumber(),\n      buf = new Array(len);\n    for (let i = 0; i < len; i++) {\n      buf[i] = this.readNumber();\n    }\n    return String.fromCharCode(...buf);\n  }\n}\n\nclass BinaryCMapReader {\n  async process(data, cMap, extend) {\n    const stream = new BinaryCMapStream(data);\n    const header = stream.getByte();\n    cMap.vertical = !!(header & 1);\n\n    let useCMap = null;\n    const start = new Uint8Array(MAX_NUM_SIZE);\n    const end = new Uint8Array(MAX_NUM_SIZE);\n    const char = new Uint8Array(MAX_NUM_SIZE);\n    const charCode = new Uint8Array(MAX_NUM_SIZE);\n    const tmp = new Uint8Array(MAX_NUM_SIZE);\n    let code;\n\n    let b;\n    while ((b = stream.getByte()) >= 0) {\n      const type = b >> 5;\n      if (type === 7) {\n        // metadata, e.g. comment or usecmap\n        switch (b & 0x1f) {\n          case 0:\n            stream.readString(); // skipping comment\n            break;\n          case 1:\n            useCMap = stream.readString();\n            break;\n        }\n        continue;\n      }\n      const sequence = !!(b & 0x10);\n      const dataSize = b & 15;\n\n      if (dataSize + 1 > MAX_NUM_SIZE) {\n        throw new Error(\"BinaryCMapReader.process: Invalid dataSize.\");\n      }\n\n      const ucs2DataSize = 1;\n      const subitemsCount = stream.readNumber();\n      switch (type) {\n        case 0: // codespacerange\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          cMap.addCodespaceRange(\n            dataSize + 1,\n            hexToInt(start, dataSize),\n            hexToInt(end, dataSize)\n          );\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            stream.readHexNumber(start, dataSize);\n            addHex(start, end, dataSize);\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            cMap.addCodespaceRange(\n              dataSize + 1,\n              hexToInt(start, dataSize),\n              hexToInt(end, dataSize)\n            );\n          }\n          break;\n        case 1: // notdefrange\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          stream.readNumber(); // code\n          // undefined range, skipping\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            stream.readHexNumber(start, dataSize);\n            addHex(start, end, dataSize);\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            stream.readNumber(); // code\n            // nop\n          }\n          break;\n        case 2: // cidchar\n          stream.readHex(char, dataSize);\n          code = stream.readNumber();\n          cMap.mapOne(hexToInt(char, dataSize), code);\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(char, dataSize);\n            if (!sequence) {\n              stream.readHexNumber(tmp, dataSize);\n              addHex(char, tmp, dataSize);\n            }\n            code = stream.readSigned() + (code + 1);\n            cMap.mapOne(hexToInt(char, dataSize), code);\n          }\n          break;\n        case 3: // cidrange\n          stream.readHex(start, dataSize);\n          stream.readHexNumber(end, dataSize);\n          addHex(end, start, dataSize);\n          code = stream.readNumber();\n          cMap.mapCidRange(\n            hexToInt(start, dataSize),\n            hexToInt(end, dataSize),\n            code\n          );\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, dataSize);\n            if (!sequence) {\n              stream.readHexNumber(start, dataSize);\n              addHex(start, end, dataSize);\n            } else {\n              start.set(end);\n            }\n            stream.readHexNumber(end, dataSize);\n            addHex(end, start, dataSize);\n            code = stream.readNumber();\n            cMap.mapCidRange(\n              hexToInt(start, dataSize),\n              hexToInt(end, dataSize),\n              code\n            );\n          }\n          break;\n        case 4: // bfchar\n          stream.readHex(char, ucs2DataSize);\n          stream.readHex(charCode, dataSize);\n          cMap.mapOne(\n            hexToInt(char, ucs2DataSize),\n            hexToStr(charCode, dataSize)\n          );\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(char, ucs2DataSize);\n            if (!sequence) {\n              stream.readHexNumber(tmp, ucs2DataSize);\n              addHex(char, tmp, ucs2DataSize);\n            }\n            incHex(charCode, dataSize);\n            stream.readHexSigned(tmp, dataSize);\n            addHex(charCode, tmp, dataSize);\n            cMap.mapOne(\n              hexToInt(char, ucs2DataSize),\n              hexToStr(charCode, dataSize)\n            );\n          }\n          break;\n        case 5: // bfrange\n          stream.readHex(start, ucs2DataSize);\n          stream.readHexNumber(end, ucs2DataSize);\n          addHex(end, start, ucs2DataSize);\n          stream.readHex(charCode, dataSize);\n          cMap.mapBfRange(\n            hexToInt(start, ucs2DataSize),\n            hexToInt(end, ucs2DataSize),\n            hexToStr(charCode, dataSize)\n          );\n          for (let i = 1; i < subitemsCount; i++) {\n            incHex(end, ucs2DataSize);\n            if (!sequence) {\n              stream.readHexNumber(start, ucs2DataSize);\n              addHex(start, end, ucs2DataSize);\n            } else {\n              start.set(end);\n            }\n            stream.readHexNumber(end, ucs2DataSize);\n            addHex(end, start, ucs2DataSize);\n            stream.readHex(charCode, dataSize);\n            cMap.mapBfRange(\n              hexToInt(start, ucs2DataSize),\n              hexToInt(end, ucs2DataSize),\n              hexToStr(charCode, dataSize)\n            );\n          }\n          break;\n        default:\n          throw new Error(`BinaryCMapReader.process - unknown type: ${type}`);\n      }\n    }\n\n    if (useCMap) {\n      return extend(useCMap);\n    }\n    return cMap;\n  }\n}\n\nexport { BinaryCMapReader };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { isWhiteSpace } from \"./core_utils.js\";\n\nclass Ascii85Stream extends DecodeStream {\n  #input = new Uint8Array(5);\n\n  constructor(str, maybeLength) {\n    // Most streams increase in size when decoded, but Ascii85 streams\n    // typically shrink by ~20%.\n    if (maybeLength) {\n      maybeLength *= 0.8;\n    }\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n  }\n\n  readBlock() {\n    const TILDA_CHAR = 0x7e; // '~'\n    const Z_LOWER_CHAR = 0x7a; // 'z'\n    const EOF = -1;\n\n    const str = this.stream;\n\n    let c = str.getByte();\n    while (isWhiteSpace(c)) {\n      c = str.getByte();\n    }\n\n    if (c === EOF || c === TILDA_CHAR) {\n      this.eof = true;\n      return;\n    }\n\n    const bufferLength = this.bufferLength;\n    let buffer, i;\n\n    // special code for z\n    if (c === Z_LOWER_CHAR) {\n      buffer = this.ensureBuffer(bufferLength + 4);\n      buffer.fill(0, bufferLength, bufferLength + 4);\n      this.bufferLength += 4;\n    } else {\n      const input = this.#input;\n      input[0] = c;\n      for (i = 1; i < 5; ++i) {\n        c = str.getByte();\n        while (isWhiteSpace(c)) {\n          c = str.getByte();\n        }\n\n        input[i] = c;\n\n        if (c === EOF || c === TILDA_CHAR) {\n          break;\n        }\n      }\n      buffer = this.ensureBuffer(bufferLength + i - 1);\n      this.bufferLength += i - 1;\n\n      // partial ending;\n      if (i < 5) {\n        input.fill(0x21 + 84, i, 5);\n        this.eof = true;\n      }\n      let t = 0;\n      for (i = 0; i < 5; ++i) {\n        t = t * 85 + (input[i] - 0x21);\n      }\n\n      for (i = 3; i >= 0; --i) {\n        buffer[bufferLength + i] = t & 0xff;\n        t >>= 8;\n      }\n    }\n  }\n}\n\nexport { Ascii85Stream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\n\nclass AsciiHexStream extends DecodeStream {\n  constructor(str, maybeLength) {\n    // Most streams increase in size when decoded, but AsciiHex streams shrink\n    // by 50%.\n    if (maybeLength) {\n      maybeLength *= 0.5;\n    }\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n\n    this.firstDigit = -1;\n  }\n\n  readBlock() {\n    const UPSTREAM_BLOCK_SIZE = 8000;\n    const bytes = this.stream.getBytes(UPSTREAM_BLOCK_SIZE);\n    if (!bytes.length) {\n      this.eof = true;\n      return;\n    }\n\n    const maxDecodeLength = (bytes.length + 1) >> 1;\n    const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n    let bufferLength = this.bufferLength;\n\n    let firstDigit = this.firstDigit;\n    for (const ch of bytes) {\n      let digit;\n      if (ch >= /* '0' = */ 0x30 && ch <= /* '9' = */ 0x39) {\n        digit = ch & 0x0f;\n      } else if (\n        (ch >= /* 'A' = */ 0x41 && ch <= /* 'Z' = */ 0x46) ||\n        (ch >= /* 'a' = */ 0x61 && ch <= /* 'z' = */ 0x66)\n      ) {\n        digit = (ch & 0x0f) + 9;\n      } else if (ch === /* '>' = */ 0x3e) {\n        this.eof = true;\n        break;\n      } else {\n        // Probably whitespace, ignoring.\n        continue;\n      }\n      if (firstDigit < 0) {\n        firstDigit = digit;\n      } else {\n        buffer[bufferLength++] = (firstDigit << 4) | digit;\n        firstDigit = -1;\n      }\n    }\n    if (firstDigit >= 0 && this.eof) {\n      // incomplete byte\n      buffer[bufferLength++] = firstDigit << 4;\n      firstDigit = -1;\n    }\n    this.firstDigit = firstDigit;\n    this.bufferLength = bufferLength;\n  }\n}\n\nexport { AsciiHexStream };\n","/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    let /** @type {number} */ v = i;\n    while (step > 0) {\n      let /** @type {number} */ next = v >> step;\n      if (next !== 0) {\n        result += step;\n        v = next;\n      }\n      step = step >> 1;\n    }\n    return result + v;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(s, maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      return makeError(s, -23);\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int32Array} */ insertLengthOffsets = new Int32Array(24);\n    const /** @type {!Int32Array} */ copyLengthOffsets = new Int32Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]);\n      copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]);\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + Math.min(copyLengthOffset, 5) - 2;\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8);\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      }\n      return 8 + n;\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    s.isEager = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    s.isLargeWindow = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {number}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      return makeError(s, -27);\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function initState(s) {\n    if (s.runningState !== 0) {\n      return makeError(s, -26);\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    let /** @type {number} */ result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, 3, 120);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ maxDistanceAlphabetLimit = result;\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    result = initBitReader(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      return makeError(s, -25);\n    }\n    if (s.runningState > 0) {\n      s.runningState = 11;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      }\n      return readFewBits(s, n) + (1 << n);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return 0;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        return makeError(s, -6);\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return 0;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          return makeError(s, -8);\n        }\n        s.metaBlockLength += bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          return makeError(s, -8);\n        }\n        s.metaBlockLength += bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n    return 0;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ v = s.accumulator32 >>> s.bitOffset;\n    offset += v & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (v & mask) >>> 8;\n    s.bitOffset += (tableGroup[offset] >> 16) + 8;\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    let /** @type {number} */ i = index;\n    const /** @type {number} */ value = v[i];\n    while (i > 0) {\n      v[i] = v[i - 1];\n      i--;\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; ++i) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        const /** @type {number} */ result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat = repeat << extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          return makeError(s, -2);\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; ++i) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      return makeError(s, -18);\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {number}\n   */\n  function checkDupes(s, symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          return makeError(s, -7);\n        }\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; ++i) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        return makeError(s, -15);\n      }\n      symbols[i] = symbol;\n    }\n    const /** @type {number} */ result = checkDupes(s, symbols, numSymbols);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18; ++i) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= 32 >> v;\n        numCodes++;\n        if (space <= 0) {\n          break;\n        }\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      return makeError(s, -4);\n    }\n    const /** @type {number} */ result = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    if (result < 0) {\n      return result;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      const /** @type {number} */ result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    }\n    return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    let /** @type {number} */ result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    result = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ i = 0;\n    while (i < contextMapSize) {\n      if (s.halfOffset > 2030) {\n        result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            return makeError(s, -3);\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = code - maxRunLengthPrefix;\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize = newSize >> 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    const /** @type {!Int8Array} */ oldBuffer = s.ringBuffer;\n    if (oldBuffer.length !== 0) {\n      newBuffer.set(oldBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return 0;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    let /** @type {number} */ result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    result = decodeMetaBlockLength(s);\n    if (result < 0) {\n      return result;\n    }\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return 0;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      result = jumpToByteBoundary(s);\n      if (result < 0) {\n        return result;\n      }\n      if (s.isMetadata === 0) {\n        s.runningState = 6;\n      } else {\n        s.runningState = 5;\n      }\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return 0;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    let /** @type {number} */ result = readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    if (result < 0) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    result = readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    if (result < 0) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    let /** @type {number} */ result = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.literalBlockLength = result;\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.commandBlockLength = result;\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.distanceBlockLength = result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    let /** @type {number} */ i = 0;\n    while (i < s.numLiteralBlockTypes) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      while (i < limit) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n        i++;\n      }\n      if (s.halfOffset > 2030) {\n        result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n    }\n    const /** @type {number} */ contextMapLength = s.numLiteralBlockTypes << 6;\n    s.contextMap = new Int8Array(contextMapLength);\n    result = decodeContextMap(contextMapLength, s.contextMap, s);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ numLiteralTrees = result;\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < contextMapLength; ++j) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    result = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ numDistTrees = result;\n    s.literalTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(256, numLiteralTrees));\n    result = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s, s.literalTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    s.commandTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(704, s.numCommandBlockTypes));\n    result = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s, s.commandTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n      if (result < 0) {\n        return result;\n      }\n      distanceAlphabetSizeLimit = result;\n    }\n    s.distanceTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees));\n    result = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    let /** @type {number} */ result;\n    if (s.metaBlockLength <= 0) {\n      result = reload(s);\n      if (result < 0) {\n        return result;\n      }\n      s.runningState = 2;\n      return 0;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    result = copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    if (result < 0) {\n      return result;\n    }\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return 0;\n    }\n    result = reload(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 2;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 0;\n    }\n    return 2;\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @return {number}\n   */\n  function huffmanTreeGroupAllocSize(alphabetSizeLimit, n) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    return n + n * maxTableSize;\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @param {!Int32Array} group\n   * @return {number}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s, group) {\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      const /** @type {number} */ result = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n      if (result < 0) {\n        return result;\n      }\n      next += result;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      return makeError(s, -9);\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      const /** @type {number} */ result = initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      if (result < 0) {\n        return result;\n      }\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        return makeError(s, -9);\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        return makeError(s, -9);\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        return makeError(s, -9);\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return 0;\n      }\n      s.runningState = 4;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {number}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      return makeError(s, -9);\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].subarray(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decompress(s) {\n    let /** @type {number} */ result;\n    if (s.runningState === 0) {\n      return makeError(s, -25);\n    }\n    if (s.runningState < 0) {\n      return makeError(s, -28);\n    }\n    if (s.runningState === 11) {\n      return makeError(s, -22);\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        return makeError(s, -11);\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            return makeError(s, -10);\n          }\n          result = readNextMetablockHeader(s);\n          if (result < 0) {\n            return result;\n          }\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          result = readMetablockHuffmanCodesAndContextMaps(s);\n          if (result < 0) {\n            return result;\n          }\n          s.runningState = 4;\n          continue;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n          continue;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                result = readMoreInput(s);\n                if (result < 0) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                result = readMoreInput(s);\n                if (result < 0) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                return makeError(s, -12);\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            return makeError(s, -9);\n          }\n          s.j = 0;\n          s.runningState = 8;\n          continue;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              const /** @type {number} */ numQuads = (copyLength + 3) >> 2;\n              for (let /** @type {number} */ k = 0; k < numQuads; ++k) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            while (s.j < s.copyLength) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          result = doUseDictionary(s, fence);\n          if (result < 0) {\n            return result;\n          }\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return 2;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          result = copyUncompressedData(s);\n          if (result < 0) {\n            return result;\n          }\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n          continue;\n        case 13:\n          result = writeRingBuffer(s);\n          if (result !== 0) {\n            return result;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos = s.pos & ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          return makeError(s, -28);\n      }\n    }\n    if (s.runningState !== 10) {\n      return makeError(s, -29);\n    }\n    if (s.metaBlockLength < 0) {\n      return makeError(s, -10);\n    }\n    result = jumpToByteBoundary(s);\n    if (result !== 0) {\n      return result;\n    }\n    result = checkHealth(s, 1);\n    if (result !== 0) {\n      return result;\n    }\n    return 1;\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {!Int32Array} */ prefixSuffixBytes = toUtf8Runes(prefixSuffixSrc);\n    const /** @type {number} */ n = prefixSuffixBytes.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixBytes[i];\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    // typo:off\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n    // typo:on\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} wordLen\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, wordLen, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    let /** @type {number} */ len = wordLen;\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    let /** @type {number} */ dictOffset = srcOffset + omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[dictOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] = dst[uppercaseOffset] ^ 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] = dst[uppercaseOffset + 1] ^ 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] = dst[uppercaseOffset + 2] ^ 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = scalar & 0x7F;\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = 0xC0 | ((scalar >> 6) & 0x1F);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | (scalar & 0x3F);\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = 0xE0 | ((scalar >> 12) & 0x0F);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 6) & 0x3F);\n            dst[shiftOffset + 2] = (c2 & 0xC0) | (scalar & 0x3F);\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = 0xF0 | ((scalar >> 18) & 0x07);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 12) & 0x3F);\n            dst[shiftOffset + 2] = (c2 & 0xC0) | ((scalar >> 6) & 0x3F);\n            dst[shiftOffset + 3] = (c3 & 0xC0) | (scalar & 0x3F);\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step = step >> 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    let /** @type {number} */ pos = end;\n    while (pos > 0) {\n      pos -= step;\n      table[offset + pos] = item;\n    }\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ bits = len;\n    let /** @type {number} */ left = 1 << (bits - rootBits);\n    while (bits < 15) {\n      left -= count[bits];\n      if (left <= 0) {\n        break;\n      }\n      bits++;\n      left = left << 1;\n    }\n    return bits - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    for (let /** @type {number} */ sym = 0; sym < codeLengthsSize; ++sym) {\n      count[codeLengths[sym]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; ++len) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (let /** @type {number} */ sym = 0; sym < codeLengthsSize; ++sym) {\n      if (codeLengths[sym] !== 0) {\n        sorted[offset[codeLengths[sym]]++] = sym;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (let /** @type {number} */ k = 0; k < totalSize; ++k) {\n        tableGroup[tableOffset + k] = sorted[0];\n      }\n      return totalSize;\n    }\n    let /** @type {number} */ key = 0;\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ step = 1;\n    for (let /** @type {number} */ len = 1; len <= rootBits; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    step = 1;\n    for (let /** @type {number} */ len = rootBits + 1; len <= 15; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return 0;\n      }\n      return makeError(s, -16);\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len < -1) {\n        return len;\n      }\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {number}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return 0;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      return makeError(s, -13);\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      return makeError(s, -17);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ v = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return v;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    return prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      const /** @type {number} */ result = readMoreInput(s);\n      if (result !== 0) {\n        return result;\n      }\n    }\n    let /** @type {number} */ health = checkHealth(s, 0);\n    if (health !== 0) {\n      return health;\n    }\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      return prepare(s);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        return makeError(s, -5);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    let /** @type {number} */ pos = offset;\n    let /** @type {number} */ len = length;\n    if ((s.bitOffset & 7) !== 0) {\n      return makeError(s, -30);\n    }\n    while ((s.bitOffset !== 32) && (len !== 0)) {\n      data[pos++] = s.accumulator32 >>> s.bitOffset;\n      s.bitOffset += 8;\n      len--;\n    }\n    if (len === 0) {\n      return 0;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), len >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), pos);\n      pos += delta;\n      len -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (len === 0) {\n      return 0;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (len !== 0) {\n        data[pos++] = s.accumulator32 >>> s.bitOffset;\n        s.bitOffset += 8;\n        len--;\n      }\n      return checkHealth(s, 0);\n    }\n    while (len > 0) {\n      const /** @type {number} */ chunkLen = readInput(s, data, pos, len);\n      if (chunkLen < -1) {\n        return chunkLen;\n      }\n      if (chunkLen <= 0) {\n        return makeError(s, -16);\n      }\n      pos += chunkLen;\n      len -= chunkLen;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = (byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8);\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} utfMap\n   * @param {string} utfRle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, utfMap, utfRle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (utfMap.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = utfRle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream} */\n    this.input = new InputStream(new Int8Array(0));\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionarySizeBits[i] = newSizeBits[i];\n    }\n    let /** @type {number} */ pos = 0;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        pos += i << (bits & 31);\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    const /** @type {!Int32Array} */ skipFlipRunes = toUtf8Runes(skipFlip);\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlipRunes.length >> 1;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ skip = skipFlipRunes[2 * i] - 36;\n      const /** @type {number} */ flip = skipFlipRunes[2 * i + 1] - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] = dict[offset] ^ 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] = dict[offset] ^ 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    // typo:off\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    // typo:on\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(s, dst, offset, length) {\n    if (s.input === null) {\n      return -1;\n    }\n    const /** @type {!InputStream} */ src = s.input;\n    const /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    const /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function closeInput(s) {\n    s.input = new InputStream(new Int8Array(0));\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    const /** @type {number} */ n = src.length;\n    const /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int32Array}\n   */\n  function toUtf8Runes(src) {\n    const /** @type {number} */ n = src.length;\n    const /** @type {!Int32Array} */ result = new Int32Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} code\n   * @return {number}\n   */\n  function makeError(s, code) {\n    if (code >= 0) {\n      return code;\n    }\n    if (s.runningState >= 0) {\n      s.runningState = code;\n    }\n    throw new Error(\"Brotli error code: \" + code);\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    s.input = new InputStream(bytes);\n    initState(s);\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    closeInput(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrotliDecode } from \"../../external/brotli/decode.js\";\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Stream } from \"./stream.js\";\n\nclass BrotliStream extends DecodeStream {\n  #isAsync = true;\n\n  constructor(stream, maybeLength) {\n    super(maybeLength);\n\n    this.stream = stream;\n    this.dict = stream.dict;\n  }\n\n  readBlock() {\n    // TODO: add some telemetry to measure how often we fallback here.\n    // Get all bytes from the input stream\n    const bytes = this.stream.getBytes();\n    const decodedData = BrotliDecode(\n      new Int8Array(bytes.buffer, bytes.byteOffset, bytes.length)\n    );\n\n    this.buffer = new Uint8Array(\n      decodedData.buffer,\n      decodedData.byteOffset,\n      decodedData.length\n    );\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n  }\n\n  async getImageData(length, _decoderOptions) {\n    const data = await this.asyncGetBytes();\n    if (!data) {\n      return this.getBytes(length);\n    }\n    if (data.length <= length) {\n      return data;\n    }\n    return data.subarray(0, length);\n  }\n\n  async asyncGetBytes() {\n    const { decompressed, compressed } =\n      await this.asyncGetBytesFromDecompressionStream(\"brotli\");\n    if (decompressed) {\n      return decompressed;\n    }\n    // DecompressionStream failed (for example because there are some extra\n    // bytes after the end of the compressed data), so we fallback to our\n    // decoder.\n    // We already get the bytes from the underlying stream, so we just reuse\n    // them to avoid get them again.\n\n    this.#isAsync = false;\n    this.stream = new Stream(\n      compressed,\n      0,\n      compressed.length,\n      this.stream.dict\n    );\n    this.reset();\n    return null;\n  }\n\n  get isAsync() {\n    return this.#isAsync;\n  }\n}\n\nexport { BrotliStream };\n","/* THIS FILE IS GENERATED - DO NOT EDIT */\nasync function JBig2(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{readAsync=async url=>{var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"j\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module[\"locateFile\"]){return locateFile(\"jbig2.wasm\")}return new URL(\"jbig2.wasm\",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var __abort_js=()=>abort(\"\");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module[\"onExit\"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};function _createImageData(size){Module.imageData=new Uint8Array(size)}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};function _setImageData(array_ptr,pitch8,pitch32,height){if(pitch32===pitch8){Module.imageData=new Uint8ClampedArray(HEAPU8.subarray(array_ptr,array_ptr+pitch32*height));return}const destSize=pitch8*height;const imageData=Module.imageData=new Uint8ClampedArray(destSize);for(let srcStart=array_ptr,destStart=0;destStart<destSize;srcStart+=pitch32,destStart+=pitch8){imageData.set(HEAPU8.subarray(srcStart,srcStart+pitch8),destStart)}}function _setLineData(line_ptr,pitch8,offset){Module.imageData.set(HEAPU8.subarray(line_ptr,line_ptr+pitch8),offset)}var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}Module[\"writeArrayToMemory\"]=writeArrayToMemory;var _malloc,_free,_jbig2_decode,_ccitt_decode,__emscripten_timeout,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_malloc=Module[\"_malloc\"]=wasmExports[\"k\"];_free=Module[\"_free\"]=wasmExports[\"l\"];_jbig2_decode=Module[\"_jbig2_decode\"]=wasmExports[\"m\"];_ccitt_decode=Module[\"_ccitt_decode\"]=wasmExports[\"n\"];__emscripten_timeout=wasmExports[\"o\"];memory=wasmMemory=wasmExports[\"i\"];__indirect_function_table=wasmExports[\"__indirect_function_table\"]}var wasmImports={e:__abort_js,b:__emscripten_runtime_keepalive_clear,c:__setitimer_js,g:_createImageData,d:_emscripten_resize_heap,a:_proc_exit,h:_setImageData,f:_setLineData};function run(){preRun();function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n;return moduleRtn}export default JBig2;\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable, warn } from \"../shared/util.js\";\nimport { fetchBinaryData } from \"./core_utils.js\";\n\nclass WasmImage {\n  static #handler = null;\n\n  static #instances = new Set();\n\n  static #useWasm = true;\n\n  static #useWorkerFetch = true;\n\n  static #wasmUrl = null;\n\n  #buffer = null;\n\n  #modulePromise = null;\n\n  _filename = null;\n\n  _noWasmFilename = null;\n\n  static setOptions({ handler, useWasm, useWorkerFetch, wasmUrl }) {\n    WasmImage.#useWasm = useWasm;\n    WasmImage.#useWorkerFetch = useWorkerFetch;\n    WasmImage.#wasmUrl = wasmUrl;\n\n    if (!useWorkerFetch) {\n      WasmImage.#handler = handler;\n    }\n  }\n\n  // eslint-disable-next-line getter-return\n  static get instance() {\n    unreachable(\"Abstract getter `instance` accessed\");\n  }\n\n  static cleanup() {\n    for (const instance of WasmImage.#instances) {\n      instance.#modulePromise = null;\n    }\n  }\n\n  constructor(trackInstance = false) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === WasmImage\n    ) {\n      unreachable(\"Cannot initialize WasmImage.\");\n    }\n\n    if (trackInstance) {\n      // Keep track of the instances for `cleanup` purposes.\n      WasmImage.#instances.add(this);\n    }\n  }\n\n  async #getJsModule(fallbackCallback) {\n    let instance = null;\n    try {\n      const mod = await (typeof PDFJSDev === \"undefined\"\n        ? // eslint-disable-next-line no-unsanitized/method\n          import(`../${WasmImage.#wasmUrl}${this._noWasmFilename}`)\n        : __raw_import__(`${WasmImage.#wasmUrl}${this._noWasmFilename}`));\n      instance = mod.default();\n    } catch (ex) {\n      warn(`#getJsModule: ${ex}`);\n    }\n    fallbackCallback(instance);\n  }\n\n  async #instantiateWasm(fallbackCallback, imports, successCallback) {\n    try {\n      if (!this.#buffer) {\n        if (WasmImage.#useWorkerFetch) {\n          this.#buffer = await fetchBinaryData(\n            `${WasmImage.#wasmUrl}${this._filename}`\n          );\n        } else {\n          if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n            throw new Error(\"Only worker-thread fetching supported.\");\n          }\n          this.#buffer = await WasmImage.#handler.sendWithPromise(\n            \"FetchBinaryData\",\n            { kind: \"wasmUrl\", filename: this._filename }\n          );\n        }\n      }\n      const results = await WebAssembly.instantiate(this.#buffer, imports);\n      return successCallback(results.instance);\n    } catch (ex) {\n      warn(`#instantiateWasm: ${ex}`);\n\n      this.#getJsModule(fallbackCallback);\n      return null;\n    }\n  }\n\n  _getModule(ImageDecoder) {\n    if (!this.#modulePromise) {\n      const { promise, resolve } = Promise.withResolvers();\n      const promises = [promise];\n      if (!WasmImage.#useWasm) {\n        this.#getJsModule(resolve);\n      } else {\n        promises.push(\n          ImageDecoder({\n            warn,\n            instantiateWasm: this.#instantiateWasm.bind(this, resolve),\n          })\n        );\n      }\n      this.#modulePromise = Promise.race(promises);\n    }\n    return this.#modulePromise;\n  }\n\n  async decode(bytes, _params) {\n    unreachable(\"Abstract method `decode` called\");\n  }\n}\n\nexport { WasmImage };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, shadow } from \"../shared/util.js\";\nimport JBig2 from \"../../external/jbig2/jbig2.js\";\nimport { WasmImage } from \"./wasm_image.js\";\n\nclass Jbig2Error extends BaseException {\n  constructor(msg) {\n    super(msg, \"Jbig2Error\");\n  }\n}\n\nclass JBig2CCITTFaxImage extends WasmImage {\n  _filename = \"jbig2.wasm\";\n\n  _noWasmFilename = \"jbig2_nowasm_fallback.js\";\n\n  static get instance() {\n    return shadow(\n      this,\n      \"instance\",\n      new JBig2CCITTFaxImage(/* trackInstance = */ true)\n    );\n  }\n\n  async decode(bytes, width, height, globals, CCITTOptions) {\n    const module = await this._getModule(JBig2);\n\n    if (!module) {\n      throw new Jbig2Error(\"JBig2 failed to initialize\");\n    }\n    let ptr, globalsPtr;\n\n    try {\n      const size = bytes.length;\n      ptr = module._malloc(size);\n      module.writeArrayToMemory(bytes, ptr);\n\n      if (CCITTOptions) {\n        module._ccitt_decode(\n          ptr,\n          size,\n          width,\n          height,\n          CCITTOptions.K,\n          CCITTOptions.EndOfLine ? 1 : 0,\n          CCITTOptions.EncodedByteAlign ? 1 : 0,\n          CCITTOptions.BlackIs1 ? 1 : 0,\n          CCITTOptions.Columns,\n          CCITTOptions.Rows\n        );\n      } else {\n        const globalsSize = globals ? globals.length : 0;\n        if (globalsSize > 0) {\n          globalsPtr = module._malloc(globalsSize);\n          module.writeArrayToMemory(globals, globalsPtr);\n        }\n        module._jbig2_decode(ptr, size, width, height, globalsPtr, globalsSize);\n      }\n      if (!module.imageData) {\n        throw new Jbig2Error(\"Unknown error\");\n      }\n      const { imageData } = module;\n      module.imageData = null;\n\n      return imageData;\n    } finally {\n      if (ptr) {\n        module._free(ptr);\n      }\n      if (globalsPtr) {\n        module._free(globalsPtr);\n      }\n    }\n  }\n}\n\nexport { JBig2CCITTFaxImage, Jbig2Error };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Dict } from \"./primitives.js\";\nimport { JBig2CCITTFaxImage } from \"./jbig2_ccittFax.js\";\nimport { shadow } from \"../shared/util.js\";\n\nclass CCITTFaxStream extends DecodeStream {\n  constructor(str, maybeLength, params) {\n    super(maybeLength);\n\n    this.stream = str;\n    this.maybeLength = maybeLength;\n    this.dict = str.dict;\n\n    if (!(params instanceof Dict)) {\n      params = Dict.empty;\n    }\n\n    this.params = {\n      K: params.get(\"K\") || 0,\n      EndOfLine: !!params.get(\"EndOfLine\"),\n      EncodedByteAlign: !!params.get(\"EncodedByteAlign\"),\n      Columns: params.get(\"Columns\") || 1728,\n      Rows: params.get(\"Rows\") || 0,\n      EndOfBlock: !!(params.get(\"EndOfBlock\") ?? true),\n      BlackIs1: !!params.get(\"BlackIs1\"),\n    };\n  }\n\n  get bytes() {\n    // If `this.maybeLength` is null, we'll get the entire stream.\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n\n  get isImageStream() {\n    return true;\n  }\n\n  get isAsyncDecoder() {\n    return true;\n  }\n\n  async decodeImage(bytes, length, _decoderOptions) {\n    if (this.eof) {\n      return this.buffer;\n    }\n    bytes ??= this.stream.isAsync\n      ? (await this.stream.asyncGetBytes()) || this.bytes\n      : this.bytes;\n\n    this.buffer = await JBig2CCITTFaxImage.instance.decode(\n      bytes,\n      this.dict.get(\"W\", \"Width\"),\n      this.dict.get(\"H\", \"Height\"),\n      null,\n      this.params\n    );\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n\n    return this.buffer;\n  }\n}\n\nexport { CCITTFaxStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* Copyright 1996-2003 Glyph & Cog, LLC\n *\n * The flate stream implementation contained in this file is a JavaScript port\n * of XPDF's implementation, made available under the Apache 2.0 open source\n * license.\n */\n\nimport { FormatError, info } from \"../shared/util.js\";\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Stream } from \"./stream.js\";\n\nconst codeLenCodeMap = new Int32Array([\n  16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,\n]);\n\nconst lengthDecode = new Int32Array([\n  0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,\n  0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,\n  0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,\n  0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102,\n]);\n\nconst distDecode = new Int32Array([\n  0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,\n  0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,\n  0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,\n  0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001,\n]);\n\nconst fixedLitCodeTab = [\n  new Int32Array([\n    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,\n    0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,\n    0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,\n    0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,\n    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,\n    0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,\n    0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,\n    0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,\n    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,\n    0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,\n    0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,\n    0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,\n    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,\n    0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,\n    0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,\n    0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,\n    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,\n    0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,\n    0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,\n    0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,\n    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,\n    0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,\n    0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,\n    0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,\n    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,\n    0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,\n    0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,\n    0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,\n    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,\n    0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,\n    0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,\n    0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,\n    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,\n    0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,\n    0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,\n    0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,\n    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,\n    0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,\n    0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,\n    0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,\n    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,\n    0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,\n    0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,\n    0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,\n    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,\n    0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,\n    0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,\n    0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,\n    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,\n    0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,\n    0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,\n    0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,\n    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,\n    0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,\n    0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,\n    0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,\n    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,\n    0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,\n    0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,\n    0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,\n    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,\n    0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,\n    0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,\n    0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff,\n  ]),\n  9,\n];\n\nconst fixedDistCodeTab = [\n  new Int32Array([\n    0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,\n    0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,\n    0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,\n    0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000,\n  ]),\n  5,\n];\n\nclass FlateStream extends DecodeStream {\n  #isAsync = true;\n\n  constructor(str, maybeLength) {\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n\n    const cmf = str.getByte();\n    const flg = str.getByte();\n    if (cmf === -1 || flg === -1) {\n      throw new FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);\n    }\n    if ((cmf & 0x0f) !== 0x08) {\n      throw new FormatError(\n        `Unknown compression method in flate stream: ${cmf}, ${flg}`\n      );\n    }\n    if (((cmf << 8) + flg) % 31 !== 0) {\n      throw new FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);\n    }\n    if (flg & 0x20) {\n      throw new FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);\n    }\n\n    this.codeSize = 0;\n    this.codeBuf = 0;\n  }\n\n  async getImageData(length, _decoderOptions) {\n    const data = await this.asyncGetBytes();\n    if (!data) {\n      return this.getBytes(length);\n    }\n    if (data.length <= length) {\n      return data;\n    }\n    return data.subarray(0, length);\n  }\n\n  async asyncGetBytes() {\n    const { decompressed, compressed } =\n      await this.asyncGetBytesFromDecompressionStream(\"deflate\");\n    if (decompressed) {\n      return decompressed;\n    }\n    // DecompressionStream failed (for example because there are some extra\n    // bytes after the end of the compressed data), so we fallback to our\n    // decoder.\n    // We already get the bytes from the underlying stream, so we just reuse\n    // them to avoid get them again.\n\n    this.#isAsync = false;\n    this.stream = new Stream(\n      compressed,\n      2 /* = header size (see ctor) */,\n      compressed.length,\n      this.stream.dict\n    );\n    this.reset();\n    return null;\n  }\n\n  get isAsync() {\n    return this.#isAsync;\n  }\n\n  getBits(bits) {\n    const str = this.stream;\n    let codeSize = this.codeSize;\n    let codeBuf = this.codeBuf;\n\n    let b;\n    while (codeSize < bits) {\n      if ((b = str.getByte()) === -1) {\n        throw new FormatError(\"Bad encoding in flate stream\");\n      }\n      codeBuf |= b << codeSize;\n      codeSize += 8;\n    }\n    b = codeBuf & ((1 << bits) - 1);\n    this.codeBuf = codeBuf >> bits;\n    this.codeSize = codeSize -= bits;\n\n    return b;\n  }\n\n  getCode(table) {\n    const str = this.stream;\n    const codes = table[0];\n    const maxLen = table[1];\n    let codeSize = this.codeSize;\n    let codeBuf = this.codeBuf;\n\n    let b;\n    while (codeSize < maxLen) {\n      if ((b = str.getByte()) === -1) {\n        // premature end of stream. code might however still be valid.\n        // codeSize < codeLen check below guards against incomplete codeVal.\n        break;\n      }\n      codeBuf |= b << codeSize;\n      codeSize += 8;\n    }\n    const code = codes[codeBuf & ((1 << maxLen) - 1)];\n    const codeLen = code >> 16;\n    const codeVal = code & 0xffff;\n    if (codeLen < 1 || codeSize < codeLen) {\n      throw new FormatError(\"Bad encoding in flate stream\");\n    }\n    this.codeBuf = codeBuf >> codeLen;\n    this.codeSize = codeSize - codeLen;\n    return codeVal;\n  }\n\n  generateHuffmanTable(lengths) {\n    const n = lengths.length;\n\n    // find max code length\n    let maxLen = 0;\n    let i;\n    for (i = 0; i < n; ++i) {\n      if (lengths[i] > maxLen) {\n        maxLen = lengths[i];\n      }\n    }\n\n    // build the table\n    const size = 1 << maxLen;\n    const codes = new Int32Array(size);\n    for (\n      let len = 1, code = 0, skip = 2;\n      len <= maxLen;\n      ++len, code <<= 1, skip <<= 1\n    ) {\n      for (let val = 0; val < n; ++val) {\n        if (lengths[val] === len) {\n          // bit-reverse the code\n          let code2 = 0;\n          let t = code;\n          for (i = 0; i < len; ++i) {\n            code2 = (code2 << 1) | (t & 1);\n            t >>= 1;\n          }\n\n          // fill the table entries\n          for (i = code2; i < size; i += skip) {\n            codes[i] = (len << 16) | val;\n          }\n          ++code;\n        }\n      }\n    }\n\n    return [codes, maxLen];\n  }\n\n  #endsStreamOnError(err) {\n    info(err);\n    this.eof = true;\n  }\n\n  readBlock() {\n    let buffer, hdr, len;\n    const str = this.stream;\n    // read block header\n    try {\n      hdr = this.getBits(3);\n    } catch (ex) {\n      this.#endsStreamOnError(ex.message);\n      return;\n    }\n    if (hdr & 1) {\n      this.eof = true;\n    }\n    hdr >>= 1;\n\n    if (hdr === 0) {\n      // uncompressed block\n      let b;\n\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      let blockLen = b;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      blockLen |= b << 8;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      let check = b;\n      if ((b = str.getByte()) === -1) {\n        this.#endsStreamOnError(\"Bad block header in flate stream\");\n        return;\n      }\n      check |= b << 8;\n      if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n        // Ignoring error for bad \"empty\" block (see issue 1277)\n        throw new FormatError(\"Bad uncompressed block length in flate stream\");\n      }\n\n      this.codeBuf = 0;\n      this.codeSize = 0;\n\n      const bufferLength = this.bufferLength,\n        end = bufferLength + blockLen;\n      buffer = this.ensureBuffer(end);\n      this.bufferLength = end;\n\n      if (blockLen === 0) {\n        if (str.peekByte() === -1) {\n          this.eof = true;\n        }\n      } else {\n        const block = str.getBytes(blockLen);\n        buffer.set(block, bufferLength);\n        if (block.length < blockLen) {\n          this.eof = true;\n        }\n      }\n      return;\n    }\n\n    let litCodeTable;\n    let distCodeTable;\n    if (hdr === 1) {\n      // compressed block, fixed codes\n      litCodeTable = fixedLitCodeTab;\n      distCodeTable = fixedDistCodeTab;\n    } else if (hdr === 2) {\n      // compressed block, dynamic codes\n      const numLitCodes = this.getBits(5) + 257;\n      const numDistCodes = this.getBits(5) + 1;\n      const numCodeLenCodes = this.getBits(4) + 4;\n\n      // build the code lengths code table\n      const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n\n      let i;\n      for (i = 0; i < numCodeLenCodes; ++i) {\n        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n      }\n      const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n\n      // build the literal and distance code tables\n      len = 0;\n      i = 0;\n      const codes = numLitCodes + numDistCodes;\n      const codeLengths = new Uint8Array(codes);\n      let bitsLength, bitsOffset, what;\n      while (i < codes) {\n        const code = this.getCode(codeLenCodeTab);\n        if (code === 16) {\n          bitsLength = 2;\n          bitsOffset = 3;\n          what = len;\n        } else if (code === 17) {\n          bitsLength = 3;\n          bitsOffset = 3;\n          what = len = 0;\n        } else if (code === 18) {\n          bitsLength = 7;\n          bitsOffset = 11;\n          what = len = 0;\n        } else {\n          codeLengths[i++] = len = code;\n          continue;\n        }\n\n        let repeatLength = this.getBits(bitsLength) + bitsOffset;\n        while (repeatLength-- > 0) {\n          codeLengths[i++] = what;\n        }\n      }\n\n      litCodeTable = this.generateHuffmanTable(\n        codeLengths.subarray(0, numLitCodes)\n      );\n      distCodeTable = this.generateHuffmanTable(\n        codeLengths.subarray(numLitCodes, codes)\n      );\n    } else {\n      throw new FormatError(\"Unknown block type in flate stream\");\n    }\n\n    buffer = this.buffer;\n    let limit = buffer ? buffer.length : 0;\n    let pos = this.bufferLength;\n    while (true) {\n      let code1 = this.getCode(litCodeTable);\n      if (code1 < 256) {\n        if (pos + 1 >= limit) {\n          buffer = this.ensureBuffer(pos + 1);\n          limit = buffer.length;\n        }\n        buffer[pos++] = code1;\n        continue;\n      }\n      if (code1 === 256) {\n        this.bufferLength = pos;\n        return;\n      }\n      code1 -= 257;\n      code1 = lengthDecode[code1];\n      let code2 = code1 >> 16;\n      if (code2 > 0) {\n        code2 = this.getBits(code2);\n      }\n      len = (code1 & 0xffff) + code2;\n      code1 = this.getCode(distCodeTable);\n      code1 = distDecode[code1];\n      code2 = code1 >> 16;\n      if (code2 > 0) {\n        code2 = this.getBits(code2);\n      }\n      const dist = (code1 & 0xffff) + code2;\n      if (pos + len >= limit) {\n        buffer = this.ensureBuffer(pos + len);\n        limit = buffer.length;\n      }\n      for (let k = 0; k < len; ++k, ++pos) {\n        buffer[pos] = buffer[pos - dist];\n      }\n    }\n  }\n}\n\nexport { FlateStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseStream } from \"./base_stream.js\";\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Dict } from \"./primitives.js\";\nimport { JBig2CCITTFaxImage } from \"./jbig2_ccittFax.js\";\nimport { shadow } from \"../shared/util.js\";\n\n/**\n * For JBIG2's we use a library to decode these images and\n * the stream behaves like all the other DecodeStreams.\n */\nclass Jbig2Stream extends DecodeStream {\n  constructor(stream, maybeLength, params) {\n    super(maybeLength);\n\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n    this.params = params;\n  }\n\n  get bytes() {\n    // If `this.maybeLength` is null, we'll get the entire stream.\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n\n  ensureBuffer(requested) {\n    // No-op, since `this.readBlock` will always parse the entire image and\n    // directly insert all of its data into `this.buffer`.\n  }\n\n  get isAsyncDecoder() {\n    return true;\n  }\n\n  get isImageStream() {\n    return true;\n  }\n\n  // The JBIG2 file header is defined in ITU-T T.88, Annex D.4:\n  // https://www.itu.int/rec/T-REC-T.88\n  static stripFileHeader(bytes) {\n    if (\n      bytes.length >= 9 &&\n      bytes[0] === 0x97 &&\n      bytes[1] === 0x4a &&\n      bytes[2] === 0x42 &&\n      bytes[3] === 0x32 &&\n      bytes[4] === 0x0d &&\n      bytes[5] === 0x0a &&\n      bytes[6] === 0x1a &&\n      bytes[7] === 0x0a\n    ) {\n      const headerLength = (bytes[8] & 2) === 0 ? 13 : 9;\n      return bytes.subarray(headerLength);\n    }\n    return bytes;\n  }\n\n  async decodeImage(bytes, length, _decoderOptions) {\n    if (this.eof) {\n      return this.buffer;\n    }\n    bytes = Jbig2Stream.stripFileHeader(bytes || this.bytes);\n\n    let globals = null;\n    if (this.params instanceof Dict) {\n      const globalsStream = this.params.get(\"JBIG2Globals\");\n      if (globalsStream instanceof BaseStream) {\n        globals = Jbig2Stream.stripFileHeader(globalsStream.getBytes());\n      }\n    }\n    this.buffer = await JBig2CCITTFaxImage.instance.decode(\n      bytes,\n      this.dict.get(\"Width\"),\n      this.dict.get(\"Height\"),\n      globals\n    );\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n\n    return this.buffer;\n  }\n\n  get canAsyncDecodeImageFromBuffer() {\n    return this.stream.isAsync;\n  }\n}\n\nexport { Jbig2Stream };\n","/* THIS FILE IS GENERATED - DO NOT EDIT */\nasync function OpenJPEG(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{readAsync=async url=>{var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"s\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module[\"onAbort\"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module[\"locateFile\"]){return locateFile(\"openjpeg.wasm\")}return new URL(\"openjpeg.wasm\",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var __abort_js=()=>abort(\"\");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module[\"onExit\"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};function _copy_pixels_1(compG_ptr,nb_pixels){compG_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);imageData.set(compG)}function _copy_pixels_3(compR_ptr,compG_ptr,compB_ptr,nb_pixels){compR_ptr>>=2;compG_ptr>>=2;compB_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels*3);const compR=HEAP32.subarray(compR_ptr,compR_ptr+nb_pixels);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);const compB=HEAP32.subarray(compB_ptr,compB_ptr+nb_pixels);for(let i=0;i<nb_pixels;i++){imageData[3*i]=compR[i];imageData[3*i+1]=compG[i];imageData[3*i+2]=compB[i]}}function _copy_pixels_4(compR_ptr,compG_ptr,compB_ptr,compA_ptr,nb_pixels){compR_ptr>>=2;compG_ptr>>=2;compB_ptr>>=2;compA_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels*4);const compR=HEAP32.subarray(compR_ptr,compR_ptr+nb_pixels);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);const compB=HEAP32.subarray(compB_ptr,compB_ptr+nb_pixels);const compA=HEAP32.subarray(compA_ptr,compA_ptr+nb_pixels);for(let i=0;i<nb_pixels;i++){imageData[4*i]=compR[i];imageData[4*i+1]=compG[i];imageData[4*i+2]=compB[i];imageData[4*i+3]=compA[i]}}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||\"./this.program\";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):\"\";var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};function _gray_to_rgba(compG_ptr,nb_pixels){compG_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels*4);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);for(let i=0;i<nb_pixels;i++){imageData[4*i]=imageData[4*i+1]=imageData[4*i+2]=compG[i];imageData[4*i+3]=255}}function _graya_to_rgba(compG_ptr,compA_ptr,nb_pixels){compG_ptr>>=2;compA_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels*4);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);const compA=HEAP32.subarray(compA_ptr,compA_ptr+nb_pixels);for(let i=0;i<nb_pixels;i++){imageData[4*i]=imageData[4*i+1]=imageData[4*i+2]=compG[i];imageData[4*i+3]=compA[i]}}function _jsPrintWarning(message_ptr){const message=UTF8ToString(message_ptr);(Module.warn||console.warn)(`OpenJPEG: ${message}`)}function _rgb_to_rgba(compR_ptr,compG_ptr,compB_ptr,nb_pixels){compR_ptr>>=2;compG_ptr>>=2;compB_ptr>>=2;const imageData=Module.imageData=new Uint8ClampedArray(nb_pixels*4);const compR=HEAP32.subarray(compR_ptr,compR_ptr+nb_pixels);const compG=HEAP32.subarray(compG_ptr,compG_ptr+nb_pixels);const compB=HEAP32.subarray(compB_ptr,compB_ptr+nb_pixels);for(let i=0;i<nb_pixels;i++){imageData[4*i]=compR[i];imageData[4*i+1]=compG[i];imageData[4*i+2]=compB[i];imageData[4*i+3]=255}}function _storeErrorMessage(message_ptr){const message=UTF8ToString(message_ptr);if(!Module.errorMessages){Module.errorMessages=message}else{Module.errorMessages+=\"\\n\"+message}}var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}Module[\"writeArrayToMemory\"]=writeArrayToMemory;var _malloc,_free,_jp2_decode,__emscripten_timeout,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_malloc=Module[\"_malloc\"]=wasmExports[\"t\"];_free=Module[\"_free\"]=wasmExports[\"u\"];_jp2_decode=Module[\"_jp2_decode\"]=wasmExports[\"v\"];__emscripten_timeout=wasmExports[\"w\"];memory=wasmMemory=wasmExports[\"r\"];__indirect_function_table=wasmExports[\"__indirect_function_table\"]}var wasmImports={m:__abort_js,l:__emscripten_runtime_keepalive_clear,i:__setitimer_js,f:_copy_pixels_1,e:_copy_pixels_3,d:_copy_pixels_4,j:_emscripten_resize_heap,o:_environ_get,p:_environ_sizes_get,n:_fd_seek,b:_fd_write,q:_gray_to_rgba,h:_graya_to_rgba,c:_jsPrintWarning,k:_proc_exit,g:_rgb_to_rgba,a:_storeErrorMessage};function run(){preRun();function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n;return moduleRtn}export default OpenJPEG;\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, shadow } from \"../shared/util.js\";\nimport OpenJPEG from \"../../external/openjpeg/openjpeg.js\";\nimport { Stream } from \"./stream.js\";\nimport { WasmImage } from \"./wasm_image.js\";\n\nclass JpxError extends BaseException {\n  constructor(msg) {\n    super(msg, \"JpxError\");\n  }\n}\n\nclass JpxImage extends WasmImage {\n  _filename = \"openjpeg.wasm\";\n\n  _noWasmFilename = \"openjpeg_nowasm_fallback.js\";\n\n  static get instance() {\n    return shadow(this, \"instance\", new JpxImage(/* trackInstance = */ true));\n  }\n\n  async decode(\n    bytes,\n    {\n      numComponents = 4,\n      isIndexedColormap = false,\n      smaskInData = false,\n      reducePower = 0,\n    } = {}\n  ) {\n    const module = await this._getModule(OpenJPEG);\n\n    if (!module) {\n      throw new JpxError(\"OpenJPEG failed to initialize\");\n    }\n    let ptr;\n\n    try {\n      const size = bytes.length;\n      ptr = module._malloc(size);\n      module.writeArrayToMemory(bytes, ptr);\n      const ret = module._jp2_decode(\n        ptr,\n        size,\n        numComponents > 0 ? numComponents : 0,\n        !!isIndexedColormap,\n        !!smaskInData,\n        reducePower\n      );\n      if (ret) {\n        const { errorMessages } = module;\n        if (errorMessages) {\n          delete module.errorMessages;\n          throw new JpxError(errorMessages);\n        }\n        throw new JpxError(\"Unknown error\");\n      }\n      const { imageData } = module;\n      module.imageData = null;\n\n      return imageData;\n    } finally {\n      if (ptr) {\n        module._free(ptr);\n      }\n    }\n  }\n\n  static parseImageProperties(stream) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n      if (stream instanceof ArrayBuffer || ArrayBuffer.isView(stream)) {\n        stream = new Stream(stream);\n      } else {\n        throw new JpxError(\"Invalid data format, must be a TypedArray.\");\n      }\n    }\n    // No need to use OpenJPEG here since we're only getting very basic\n    // information which are located in the first bytes of the file.\n    let newByte = stream.getByte();\n    while (newByte >= 0) {\n      const oldByte = newByte;\n      newByte = stream.getByte();\n      const code = (oldByte << 8) | newByte;\n      // Image and tile size (SIZ)\n      if (code === 0xff51) {\n        stream.skip(4);\n        const Xsiz = stream.getInt32() >>> 0; // Byte 4\n        const Ysiz = stream.getInt32() >>> 0; // Byte 8\n        const XOsiz = stream.getInt32() >>> 0; // Byte 12\n        const YOsiz = stream.getInt32() >>> 0; // Byte 16\n        stream.skip(16);\n        const Csiz = stream.getUint16(); // Byte 36\n        return {\n          width: Xsiz - XOsiz,\n          height: Ysiz - YOsiz,\n          // Results are always returned as `Uint8ClampedArray`s.\n          bitsPerComponent: 8,\n          componentsCount: Csiz,\n        };\n      }\n    }\n    throw new JpxError(\"No size marker found in JPX stream\");\n  }\n}\n\nexport { JpxError, JpxImage };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { JpxImage } from \"./jpx.js\";\nimport { shadow } from \"../shared/util.js\";\n\n/**\n * For JPEG 2000's we use a library to decode these images and\n * the stream behaves like all the other DecodeStreams.\n */\nclass JpxStream extends DecodeStream {\n  constructor(stream, maybeLength) {\n    super(maybeLength);\n\n    this.stream = stream;\n    this.dict = stream.dict;\n    this.maybeLength = maybeLength;\n  }\n\n  get bytes() {\n    // If `this.maybeLength` is null, we'll get the entire stream.\n    return shadow(this, \"bytes\", this.stream.getBytes(this.maybeLength));\n  }\n\n  ensureBuffer(requested) {\n    // No-op, since `this.readBlock` will always parse the entire image and\n    // directly insert all of its data into `this.buffer`.\n  }\n\n  get isAsyncDecoder() {\n    return true;\n  }\n\n  async decodeImage(bytes, _length, decoderOptions) {\n    if (this.eof) {\n      return this.buffer;\n    }\n    bytes ||= this.bytes;\n    this.buffer = await JpxImage.instance.decode(bytes, decoderOptions);\n    this.bufferLength = this.buffer.length;\n    this.eof = true;\n\n    return this.buffer;\n  }\n\n  get canAsyncDecodeImageFromBuffer() {\n    return this.stream.isAsync;\n  }\n\n  get isImageStream() {\n    return true;\n  }\n}\n\nexport { JpxStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\n\nclass LZWStream extends DecodeStream {\n  constructor(str, maybeLength, earlyChange) {\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n    this.cachedData = 0;\n    this.bitsCached = 0;\n\n    const maxLzwDictionarySize = 4096;\n    const lzwState = {\n      earlyChange,\n      codeLength: 9,\n      nextCode: 258,\n      dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n      currentSequence: new Uint8Array(maxLzwDictionarySize),\n      currentSequenceLength: 0,\n    };\n    for (let i = 0; i < 256; ++i) {\n      lzwState.dictionaryValues[i] = i;\n      lzwState.dictionaryLengths[i] = 1;\n    }\n    this.lzwState = lzwState;\n  }\n\n  readBits(n) {\n    let bitsCached = this.bitsCached;\n    let cachedData = this.cachedData;\n    while (bitsCached < n) {\n      const c = this.stream.getByte();\n      if (c === -1) {\n        this.eof = true;\n        return null;\n      }\n      cachedData = (cachedData << 8) | c;\n      bitsCached += 8;\n    }\n    this.bitsCached = bitsCached -= n;\n    this.cachedData = cachedData;\n    return (cachedData >>> bitsCached) & ((1 << n) - 1);\n  }\n\n  readBlock() {\n    const blockSize = 512,\n      decodedSizeDelta = blockSize;\n    let estimatedDecodedSize = blockSize * 2;\n    let i, j, q;\n\n    const lzwState = this.lzwState;\n    if (!lzwState) {\n      return; // eof was found\n    }\n\n    const earlyChange = lzwState.earlyChange;\n    let nextCode = lzwState.nextCode;\n    const dictionaryValues = lzwState.dictionaryValues;\n    const dictionaryLengths = lzwState.dictionaryLengths;\n    const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n    let codeLength = lzwState.codeLength;\n    let prevCode = lzwState.prevCode;\n    const currentSequence = lzwState.currentSequence;\n    let currentSequenceLength = lzwState.currentSequenceLength;\n\n    let decodedLength = 0;\n    let currentBufferLength = this.bufferLength;\n    let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n\n    for (i = 0; i < blockSize; i++) {\n      const code = this.readBits(codeLength);\n      const hasPrev = currentSequenceLength > 0;\n      if (code < 256) {\n        currentSequence[0] = code;\n        currentSequenceLength = 1;\n      } else if (code >= 258) {\n        if (code < nextCode) {\n          currentSequenceLength = dictionaryLengths[code];\n          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n            currentSequence[j] = dictionaryValues[q];\n            q = dictionaryPrevCodes[q];\n          }\n        } else {\n          currentSequence[currentSequenceLength++] = currentSequence[0];\n        }\n      } else if (code === 256) {\n        codeLength = 9;\n        nextCode = 258;\n        currentSequenceLength = 0;\n        continue;\n      } else {\n        this.eof = true;\n        delete this.lzwState;\n        break;\n      }\n\n      if (hasPrev) {\n        dictionaryPrevCodes[nextCode] = prevCode;\n        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;\n        dictionaryValues[nextCode] = currentSequence[0];\n        nextCode++;\n        codeLength =\n          (nextCode + earlyChange) & (nextCode + earlyChange - 1)\n            ? codeLength\n            : Math.min(\n                Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1,\n                12\n              ) | 0;\n      }\n      prevCode = code;\n\n      decodedLength += currentSequenceLength;\n      if (estimatedDecodedSize < decodedLength) {\n        do {\n          estimatedDecodedSize += decodedSizeDelta;\n        } while (estimatedDecodedSize < decodedLength);\n        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n      }\n      for (j = 0; j < currentSequenceLength; j++) {\n        buffer[currentBufferLength++] = currentSequence[j];\n      }\n    }\n    lzwState.nextCode = nextCode;\n    lzwState.codeLength = codeLength;\n    lzwState.prevCode = prevCode;\n    lzwState.currentSequenceLength = currentSequenceLength;\n\n    this.bufferLength = currentBufferLength;\n  }\n}\n\nexport { LZWStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { Dict } from \"./primitives.js\";\nimport { FormatError } from \"../shared/util.js\";\n\nclass PredictorStream extends DecodeStream {\n  constructor(str, maybeLength, params) {\n    super(maybeLength);\n\n    if (!(params instanceof Dict)) {\n      return str; // no prediction\n    }\n    const predictor = (this.predictor = params.get(\"Predictor\") || 1);\n\n    if (predictor <= 1) {\n      return str; // no prediction\n    }\n    if (predictor !== 2 && (predictor < 10 || predictor > 15)) {\n      throw new FormatError(`Unsupported predictor: ${predictor}`);\n    }\n\n    this.readBlock = predictor === 2 ? this.readBlockTiff : this.readBlockPng;\n\n    this.stream = str;\n    this.dict = str.dict;\n\n    const colors = (this.colors = params.get(\"Colors\") || 1);\n    const bits = (this.bits = params.get(\"BPC\", \"BitsPerComponent\") || 8);\n    const columns = (this.columns = params.get(\"Columns\") || 1);\n\n    this.pixBytes = (colors * bits + 7) >> 3;\n    this.rowBytes = (columns * colors * bits + 7) >> 3;\n\n    return this;\n  }\n\n  readBlockTiff() {\n    const rowBytes = this.rowBytes;\n\n    const bufferLength = this.bufferLength;\n    const buffer = this.ensureBuffer(bufferLength + rowBytes);\n\n    const bits = this.bits;\n    const colors = this.colors;\n\n    const rawBytes = this.stream.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n\n    let inbuf = 0,\n      outbuf = 0;\n    let inbits = 0,\n      outbits = 0;\n    let pos = bufferLength;\n    let i;\n\n    if (bits === 1 && colors === 1) {\n      // Optimized version of the loop in the \"else\"-branch\n      // for 1 bit-per-component and 1 color TIFF images.\n      for (i = 0; i < rowBytes; ++i) {\n        let c = rawBytes[i] ^ inbuf;\n        c ^= c >> 1;\n        c ^= c >> 2;\n        c ^= c >> 4;\n        inbuf = (c & 1) << 7;\n        buffer[pos++] = c;\n      }\n    } else if (bits === 8) {\n      for (i = 0; i < colors; ++i) {\n        buffer[pos++] = rawBytes[i];\n      }\n      for (; i < rowBytes; ++i) {\n        buffer[pos] = buffer[pos - colors] + rawBytes[i];\n        pos++;\n      }\n    } else if (bits === 16) {\n      const bytesPerPixel = colors * 2;\n      for (i = 0; i < bytesPerPixel; ++i) {\n        buffer[pos++] = rawBytes[i];\n      }\n      for (; i < rowBytes; i += 2) {\n        const sum =\n          ((rawBytes[i] & 0xff) << 8) +\n          (rawBytes[i + 1] & 0xff) +\n          ((buffer[pos - bytesPerPixel] & 0xff) << 8) +\n          (buffer[pos - bytesPerPixel + 1] & 0xff);\n        buffer[pos++] = (sum >> 8) & 0xff;\n        buffer[pos++] = sum & 0xff;\n      }\n    } else {\n      const compArray = new Uint8Array(colors + 1);\n      const bitMask = (1 << bits) - 1;\n      let j = 0,\n        k = bufferLength;\n      const columns = this.columns;\n      for (i = 0; i < columns; ++i) {\n        for (let kk = 0; kk < colors; ++kk) {\n          if (inbits < bits) {\n            inbuf = (inbuf << 8) | (rawBytes[j++] & 0xff);\n            inbits += 8;\n          }\n          compArray[kk] =\n            (compArray[kk] + (inbuf >> (inbits - bits))) & bitMask;\n          inbits -= bits;\n          outbuf = (outbuf << bits) | compArray[kk];\n          outbits += bits;\n          if (outbits >= 8) {\n            buffer[k++] = (outbuf >> (outbits - 8)) & 0xff;\n            outbits -= 8;\n          }\n        }\n      }\n      if (outbits > 0) {\n        buffer[k++] =\n          (outbuf << (8 - outbits)) + (inbuf & ((1 << (8 - outbits)) - 1));\n      }\n    }\n    this.bufferLength += rowBytes;\n  }\n\n  readBlockPng() {\n    const rowBytes = this.rowBytes;\n    const pixBytes = this.pixBytes;\n\n    const predictor = this.stream.getByte();\n    const rawBytes = this.stream.getBytes(rowBytes);\n    this.eof = !rawBytes.length;\n    if (this.eof) {\n      return;\n    }\n\n    const bufferLength = this.bufferLength;\n    const buffer = this.ensureBuffer(bufferLength + rowBytes);\n\n    let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);\n    if (prevRow.length === 0) {\n      prevRow = new Uint8Array(rowBytes);\n    }\n\n    let i,\n      j = bufferLength,\n      up,\n      c;\n    switch (predictor) {\n      case 0:\n        for (i = 0; i < rowBytes; ++i) {\n          buffer[j++] = rawBytes[i];\n        }\n        break;\n      case 1:\n        for (i = 0; i < pixBytes; ++i) {\n          buffer[j++] = rawBytes[i];\n        }\n        for (; i < rowBytes; ++i) {\n          buffer[j] = (buffer[j - pixBytes] + rawBytes[i]) & 0xff;\n          j++;\n        }\n        break;\n      case 2:\n        for (i = 0; i < rowBytes; ++i) {\n          buffer[j++] = (prevRow[i] + rawBytes[i]) & 0xff;\n        }\n        break;\n      case 3:\n        for (i = 0; i < pixBytes; ++i) {\n          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];\n        }\n        for (; i < rowBytes; ++i) {\n          buffer[j] =\n            (((prevRow[i] + buffer[j - pixBytes]) >> 1) + rawBytes[i]) & 0xff;\n          j++;\n        }\n        break;\n      case 4:\n        // we need to save the up left pixels values. the simplest way\n        // is to create a new buffer\n        for (i = 0; i < pixBytes; ++i) {\n          up = prevRow[i];\n          c = rawBytes[i];\n          buffer[j++] = up + c;\n        }\n        for (; i < rowBytes; ++i) {\n          up = prevRow[i];\n          const upLeft = prevRow[i - pixBytes];\n          const left = buffer[j - pixBytes];\n          const p = left + up - upLeft;\n\n          let pa = p - left;\n          if (pa < 0) {\n            pa = -pa;\n          }\n          let pb = p - up;\n          if (pb < 0) {\n            pb = -pb;\n          }\n          let pc = p - upLeft;\n          if (pc < 0) {\n            pc = -pc;\n          }\n\n          c = rawBytes[i];\n          if (pa <= pb && pa <= pc) {\n            buffer[j++] = left + c;\n          } else if (pb <= pc) {\n            buffer[j++] = up + c;\n          } else {\n            buffer[j++] = upLeft + c;\n          }\n        }\n        break;\n      default:\n        throw new FormatError(`Unsupported predictor: ${predictor}`);\n    }\n    this.bufferLength += rowBytes;\n  }\n}\n\nexport { PredictorStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\n\nclass RunLengthStream extends DecodeStream {\n  constructor(str, maybeLength) {\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n  }\n\n  readBlock() {\n    // The repeatHeader has following format. The first byte defines type of run\n    // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes\n    // (in addition to the second byte from the header), n = 129 through 255 -\n    // duplicate the second byte from the header (257 - n) times, n = 128 - end.\n    const repeatHeader = this.stream.getBytes(2);\n    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n      this.eof = true;\n      return;\n    }\n\n    let buffer;\n    let bufferLength = this.bufferLength;\n    let n = repeatHeader[0];\n    if (n < 128) {\n      // copy n bytes\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      buffer[bufferLength++] = repeatHeader[1];\n      if (n > 0) {\n        const source = this.stream.getBytes(n);\n        buffer.set(source, bufferLength);\n        bufferLength += n;\n      }\n    } else {\n      n = 257 - n;\n      buffer = this.ensureBuffer(bufferLength + n + 1);\n      buffer.fill(repeatHeader[1], bufferLength, bufferLength + n);\n      bufferLength += n;\n    }\n    this.bufferLength = bufferLength;\n  }\n}\n\nexport { RunLengthStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  bytesToString,\n  FormatError,\n  info,\n  warn,\n} from \"../shared/util.js\";\nimport { Cmd, Dict, EOF, isCmd, isName, Name, Ref } from \"./primitives.js\";\nimport {\n  isWhiteSpace,\n  MissingDataException,\n  ParserEOFException,\n} from \"./core_utils.js\";\nimport { NullStream, Stream } from \"./stream.js\";\nimport { Ascii85Stream } from \"./ascii_85_stream.js\";\nimport { AsciiHexStream } from \"./ascii_hex_stream.js\";\nimport { BrotliStream } from \"./brotli_stream.js\";\nimport { CCITTFaxStream } from \"./ccitt_stream.js\";\nimport { FlateStream } from \"./flate_stream.js\";\nimport { Jbig2Stream } from \"./jbig2_stream.js\";\nimport { JpegStream } from \"./jpeg_stream.js\";\nimport { JpxStream } from \"./jpx_stream.js\";\nimport { LZWStream } from \"./lzw_stream.js\";\nimport { PredictorStream } from \"./predictor_stream.js\";\nimport { RunLengthStream } from \"./run_length_stream.js\";\n\n/**\n * @import { BaseStream } from \"./base_stream.js\"\n * @import { CipherTransform } from \"./crypto.js\"\n */\n\n/**\n * @typedef {Ascii85Stream | AsciiHexStream | BaseStream | BrotliStream\n * | CCITTFaxStream | FlateStream | Jbig2Stream | JpegStream | JpxStream\n * | LZWStream | NullStream | PredictorStream | RunLengthStream} Streams\n */\n\nconst MAX_LENGTH_TO_CACHE = 1000;\n\nfunction getInlineImageCacheKey(bytes) {\n  const strBuf = [],\n    ii = bytes.length;\n  let i = 0;\n  while (i < ii - 1) {\n    strBuf.push((bytes[i++] << 8) | bytes[i++]);\n  }\n  // Handle an odd number of elements.\n  if (i < ii) {\n    strBuf.push(bytes[i]);\n  }\n  // We purposely include the \"raw\" length in the cacheKey, to prevent any\n  // possible issues with hash collisions in the inline image cache.\n  // Here we also assume that `strBuf` is never larger than 8192 elements,\n  // please refer to the `bytesToString` implementation.\n  return ii + \"_\" + String.fromCharCode.apply(null, strBuf);\n}\n\nclass Parser {\n  constructor({ lexer, xref, allowStreams = false, recoveryMode = false }) {\n    this.lexer = lexer;\n    this.xref = xref;\n    this.allowStreams = allowStreams;\n    this.recoveryMode = recoveryMode;\n\n    this.imageCache = Object.create(null);\n    this._imageId = 0;\n    this.refill();\n  }\n\n  refill() {\n    this.buf1 = this.lexer.getObj();\n    this.buf2 = this.lexer.getObj();\n  }\n\n  shift() {\n    if (this.buf2 instanceof Cmd && this.buf2.cmd === \"ID\") {\n      this.buf1 = this.buf2;\n      this.buf2 = null;\n    } else {\n      this.buf1 = this.buf2;\n      this.buf2 = this.lexer.getObj();\n    }\n  }\n\n  tryShift() {\n    try {\n      this.shift();\n      return true;\n    } catch (e) {\n      if (e instanceof MissingDataException) {\n        throw e;\n      }\n      // Upon failure, the caller should reset this.lexer.pos to a known good\n      // state and call this.shift() twice to reset the buffers.\n      return false;\n    }\n  }\n\n  /**\n   * @param {CipherTransform | null} cipherTransform\n   *   Cipher transform for decryption.\n   * @returns {unknown}\n   */\n  getObj(cipherTransform = null) {\n    const buf1 = this.buf1;\n    this.shift();\n\n    if (buf1 instanceof Cmd) {\n      switch (buf1.cmd) {\n        case \"BI\": // inline image\n          return this.makeInlineImage(cipherTransform);\n        case \"[\": // array\n          const array = [];\n          while (!isCmd(this.buf1, \"]\") && this.buf1 !== EOF) {\n            array.push(this.getObj(cipherTransform));\n          }\n          if (this.buf1 === EOF) {\n            if (this.recoveryMode) {\n              return array;\n            }\n            throw new ParserEOFException(\"End of file inside array.\");\n          }\n          this.shift();\n          return array;\n        case \"<<\": // dictionary or stream\n          const dict = new Dict(this.xref);\n          while (!isCmd(this.buf1, \">>\") && this.buf1 !== EOF) {\n            if (!(this.buf1 instanceof Name)) {\n              info(\"Malformed dictionary: key must be a name object\");\n              this.shift();\n              continue;\n            }\n\n            const key = this.buf1.name;\n            this.shift();\n            if (this.buf1 === EOF) {\n              break;\n            }\n            dict.set(key, this.getObj(cipherTransform));\n          }\n          if (this.buf1 === EOF) {\n            if (this.recoveryMode) {\n              return dict;\n            }\n            throw new ParserEOFException(\"End of file inside dictionary.\");\n          }\n\n          // Stream objects are not allowed inside content streams or\n          // object streams.\n          if (isCmd(this.buf2, \"stream\")) {\n            return this.allowStreams\n              ? this.makeStream(dict, cipherTransform)\n              : dict;\n          }\n          this.shift();\n          return dict;\n        default: // simple object\n          return buf1;\n      }\n    }\n\n    if (Number.isInteger(buf1)) {\n      // indirect reference or integer\n      if (Number.isInteger(this.buf1) && isCmd(this.buf2, \"R\")) {\n        const ref = Ref.get(buf1, this.buf1);\n        this.shift();\n        this.shift();\n        return ref;\n      }\n      return buf1;\n    }\n\n    if (typeof buf1 === \"string\") {\n      if (cipherTransform) {\n        return cipherTransform.decryptString(buf1);\n      }\n      return buf1;\n    }\n\n    // simple object\n    return buf1;\n  }\n\n  /**\n   * Find the end of the stream by searching for the /EI\\s/.\n   * @returns {number} The inline stream length.\n   */\n  findDefaultInlineStreamEnd(stream) {\n    const E = 0x45,\n      I = 0x49,\n      SPACE = 0x20,\n      LF = 0xa,\n      CR = 0xd,\n      NUL = 0x0;\n    const { knownCommands } = this.lexer,\n      startPos = stream.pos,\n      n = 15;\n    let state = 0,\n      ch,\n      maybeEIPos;\n    while ((ch = stream.getByte()) !== -1) {\n      if (state === 0) {\n        state = ch === E ? 1 : 0;\n      } else if (state === 1) {\n        state = ch === I ? 2 : 0;\n      } else {\n        if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n          assert(state === 2, \"findDefaultInlineStreamEnd - invalid state.\");\n        }\n        if (ch === SPACE || ch === LF || ch === CR) {\n          maybeEIPos = stream.pos;\n          // Let's check that the next `n` bytes are ASCII... just to be sure.\n          const followingBytes = stream.peekBytes(n);\n\n          const ii = followingBytes.length;\n          if (ii === 0) {\n            break; // The end of the stream was reached, nothing to check.\n          }\n          for (let i = 0; i < ii; i++) {\n            ch = followingBytes[i];\n            if (ch === NUL && followingBytes[i + 1] !== NUL) {\n              // NUL bytes are not supposed to occur *outside* of inline\n              // images, but some PDF generators violate that assumption,\n              // thus breaking the EI detection heuristics used below.\n              //\n              // However, we can't unconditionally treat NUL bytes as \"ASCII\",\n              // since that *could* result in inline images being truncated.\n              //\n              // To attempt to address this, we'll still treat any *sequence*\n              // of NUL bytes as non-ASCII, but for a *single* NUL byte we'll\n              // continue checking the `followingBytes` (fixes issue8823.pdf).\n              continue;\n            }\n            if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {\n              // Not a LF, CR, SPACE or any visible ASCII character, i.e.\n              // it's binary stuff. Resetting the state.\n              state = 0;\n              break;\n            }\n          }\n\n          if (state !== 2) {\n            continue;\n          }\n          if (!knownCommands) {\n            warn(\n              \"findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.\"\n            );\n            continue;\n          }\n          // Check that the \"EI\" sequence isn't part of the image data, since\n          // that would cause the image to be truncated (fixes issue11124.pdf).\n          //\n          // Check more than the `followingBytes` to be able to find operators\n          // with multiple arguments, e.g. transform (cm) with decimal arguments\n          // (fixes issue19494.pdf).\n          const tmpLexer = new Lexer(\n            new Stream(stream.peekBytes(5 * n)),\n            knownCommands\n          );\n          // Reduce the number of (potential) warning messages.\n          tmpLexer._hexStringWarn = () => {};\n          let numArgs = 0;\n\n          while (true) {\n            const nextObj = tmpLexer.getObj();\n\n            if (nextObj === EOF) {\n              state = 0; // No valid command found, resetting the state.\n              break;\n            }\n            if (nextObj instanceof Cmd) {\n              const knownCommand = knownCommands[nextObj.cmd];\n              if (!knownCommand) {\n                // Not a valid command, i.e. the inline image data *itself*\n                // contains an \"EI\" sequence. Resetting the state.\n                state = 0;\n                break;\n              } else if (\n                knownCommand.variableArgs\n                  ? numArgs <= knownCommand.numArgs\n                  : numArgs === knownCommand.numArgs\n              ) {\n                break; // Valid command found.\n              }\n              numArgs = 0;\n              continue;\n            }\n            numArgs++;\n          }\n\n          if (state === 2) {\n            break; // Finished!\n          }\n        } else {\n          state = 0;\n        }\n      }\n    }\n\n    if (ch === -1) {\n      warn(\n        \"findDefaultInlineStreamEnd: \" +\n          \"Reached the end of the stream without finding a valid EI marker\"\n      );\n      if (maybeEIPos) {\n        warn('... trying to recover by using the last \"EI\" occurrence.');\n        stream.skip(-(stream.pos - maybeEIPos)); // Reset the stream position.\n      }\n    }\n\n    let endOffset = 4;\n    stream.skip(-endOffset); // Set the stream position to just before \"EI\".\n    ch = stream.peekByte();\n    stream.skip(endOffset); // ... and remember to reset the stream position.\n\n    // Ensure that we don't accidentally truncate the inline image, when the\n    // data is immediately followed by the \"EI\" marker (fixes issue10388.pdf).\n    if (!isWhiteSpace(ch)) {\n      endOffset--;\n    }\n    return stream.pos - endOffset - startPos;\n  }\n\n  /**\n   * Find the EOI (end-of-image) marker 0xFFD9 of the stream.\n   * @returns {number} The inline stream length.\n   */\n  findDCTDecodeInlineStreamEnd(stream) {\n    const startPos = stream.pos;\n    let foundEOI = false,\n      b,\n      markerLength;\n    while ((b = stream.getByte()) !== -1) {\n      if (b !== 0xff) {\n        // Not a valid marker.\n        continue;\n      }\n      switch (stream.getByte()) {\n        case 0x00: // Byte stuffing.\n          // 0xFF00 appears to be a very common byte sequence in JPEG images.\n          break;\n\n        case 0xff: // Fill byte.\n          // Avoid skipping a valid marker, resetting the stream position.\n          stream.skip(-1);\n          break;\n\n        case 0xd9: // EOI\n          foundEOI = true;\n          break;\n\n        case 0xc0: // SOF0\n        case 0xc1: // SOF1\n        case 0xc2: // SOF2\n        case 0xc3: // SOF3\n        /* falls through */\n        case 0xc5: // SOF5\n        case 0xc6: // SOF6\n        case 0xc7: // SOF7\n        /* falls through */\n        case 0xc9: // SOF9\n        case 0xca: // SOF10\n        case 0xcb: // SOF11\n        /* falls through */\n        case 0xcd: // SOF13\n        case 0xce: // SOF14\n        case 0xcf: // SOF15\n        /* falls through */\n        case 0xc4: // DHT\n        case 0xcc: // DAC\n        /* falls through */\n        case 0xda: // SOS\n        case 0xdb: // DQT\n        case 0xdc: // DNL\n        case 0xdd: // DRI\n        case 0xde: // DHP\n        case 0xdf: // EXP\n        /* falls through */\n        case 0xe0: // APP0\n        case 0xe1: // APP1\n        case 0xe2: // APP2\n        case 0xe3: // APP3\n        case 0xe4: // APP4\n        case 0xe5: // APP5\n        case 0xe6: // APP6\n        case 0xe7: // APP7\n        case 0xe8: // APP8\n        case 0xe9: // APP9\n        case 0xea: // APP10\n        case 0xeb: // APP11\n        case 0xec: // APP12\n        case 0xed: // APP13\n        case 0xee: // APP14\n        case 0xef: // APP15\n        /* falls through */\n        case 0xfe: // COM\n          // The marker should be followed by the length of the segment.\n          markerLength = stream.getUint16();\n          if (markerLength > 2) {\n            // |markerLength| contains the byte length of the marker segment,\n            // including its own length (2 bytes) and excluding the marker.\n            stream.skip(markerLength - 2); // Jump to the next marker.\n          } else {\n            // The marker length is invalid, resetting the stream position.\n            stream.skip(-2);\n          }\n          break;\n      }\n      if (foundEOI) {\n        break;\n      }\n    }\n    const length = stream.pos - startPos;\n    if (b === -1) {\n      warn(\n        \"Inline DCTDecode image stream: \" +\n          \"EOI marker not found, searching for /EI/ instead.\"\n      );\n      stream.skip(-length); // Reset the stream position.\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n\n  /**\n   * Find the EOD (end-of-data) marker '~>' (i.e. TILDE + GT) of the stream.\n   * @returns {number} The inline stream length.\n   */\n  findASCII85DecodeInlineStreamEnd(stream) {\n    const TILDE = 0x7e,\n      GT = 0x3e;\n    const startPos = stream.pos;\n    let ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === TILDE) {\n        const tildePos = stream.pos;\n\n        ch = stream.peekByte();\n        // Handle corrupt PDF documents which contains whitespace \"inside\" of\n        // the EOD marker (fixes issue10614.pdf).\n        while (isWhiteSpace(ch)) {\n          stream.skip();\n          ch = stream.peekByte();\n        }\n        if (ch === GT) {\n          stream.skip();\n          break;\n        }\n        // Handle corrupt PDF documents which contains truncated EOD markers,\n        // where the '>' character is missing (fixes issue11385.pdf).\n        if (stream.pos > tildePos) {\n          const maybeEI = stream.peekBytes(2);\n          if (maybeEI[0] === /* E = */ 0x45 && maybeEI[1] === /* I = */ 0x49) {\n            break;\n          }\n        }\n      }\n    }\n    const length = stream.pos - startPos;\n    if (ch === -1) {\n      warn(\n        \"Inline ASCII85Decode image stream: \" +\n          \"EOD marker not found, searching for /EI/ instead.\"\n      );\n      stream.skip(-length); // Reset the stream position.\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n\n  /**\n   * Find the EOD (end-of-data) marker '>' (i.e. GT) of the stream.\n   * @returns {number} The inline stream length.\n   */\n  findASCIIHexDecodeInlineStreamEnd(stream) {\n    const GT = 0x3e;\n    const startPos = stream.pos;\n    let ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (ch === GT) {\n        break;\n      }\n    }\n    const length = stream.pos - startPos;\n    if (ch === -1) {\n      warn(\n        \"Inline ASCIIHexDecode image stream: \" +\n          \"EOD marker not found, searching for /EI/ instead.\"\n      );\n      stream.skip(-length); // Reset the stream position.\n      return this.findDefaultInlineStreamEnd(stream);\n    }\n    this.inlineStreamSkipEI(stream);\n    return length;\n  }\n\n  /**\n   * Skip over the /EI/ for streams where we search for an EOD marker.\n   */\n  inlineStreamSkipEI(stream) {\n    const E = 0x45,\n      I = 0x49;\n    let state = 0,\n      ch;\n    while ((ch = stream.getByte()) !== -1) {\n      if (state === 0) {\n        state = ch === E ? 1 : 0;\n      } else if (state === 1) {\n        state = ch === I ? 2 : 0;\n      } else if (state === 2) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * @param {CipherTransform | null} cipherTransform\n   * @returns {Streams}\n   */\n  makeInlineImage(cipherTransform) {\n    const lexer = this.lexer;\n    const stream = lexer.stream;\n\n    // Parse dictionary, but initialize it lazily to improve performance with\n    // cached inline images (see issue 2618).\n    const dictMap = Object.create(null);\n    let dictLength;\n    while (!isCmd(this.buf1, \"ID\") && this.buf1 !== EOF) {\n      if (!(this.buf1 instanceof Name)) {\n        throw new FormatError(\"Dictionary key must be a name object\");\n      }\n      const key = this.buf1.name;\n      this.shift();\n      if (this.buf1 === EOF) {\n        break;\n      }\n      dictMap[key] = this.getObj(cipherTransform);\n    }\n    if (lexer.beginInlineImagePos !== -1) {\n      dictLength = stream.pos - lexer.beginInlineImagePos;\n    }\n\n    // Extract the name of the first (i.e. the current) image filter.\n    const filter = this.#fetchIfRef(dictMap.F || dictMap.Filter);\n    let filterName;\n    if (filter instanceof Name) {\n      filterName = filter.name;\n    } else if (Array.isArray(filter)) {\n      const filterZero = this.#fetchIfRef(filter[0]);\n      if (filterZero instanceof Name) {\n        filterName = filterZero.name;\n      }\n    }\n\n    // Parse image stream.\n    const startPos = stream.pos;\n    let length;\n    switch (filterName) {\n      case \"DCT\":\n      case \"DCTDecode\":\n        length = this.findDCTDecodeInlineStreamEnd(stream);\n        break;\n      case \"A85\":\n      case \"ASCII85Decode\":\n        length = this.findASCII85DecodeInlineStreamEnd(stream);\n        break;\n      case \"AHx\":\n      case \"ASCIIHexDecode\":\n        length = this.findASCIIHexDecodeInlineStreamEnd(stream);\n        break;\n      default:\n        length = this.findDefaultInlineStreamEnd(stream);\n    }\n\n    // Cache all images below the MAX_LENGTH_TO_CACHE threshold by their\n    // stringified content, to prevent possible hash collisions.\n    let cacheKey;\n    if (length < MAX_LENGTH_TO_CACHE && dictLength > 0) {\n      const initialStreamPos = stream.pos;\n      // Set the stream position to the beginning of the dictionary data...\n      stream.pos = lexer.beginInlineImagePos;\n      // ... and fetch the bytes of the dictionary *and* the inline image.\n      cacheKey = getInlineImageCacheKey(stream.getBytes(dictLength + length));\n      // Finally, don't forget to reset the stream position.\n      stream.pos = initialStreamPos;\n\n      const cacheEntry = this.imageCache[cacheKey];\n      if (cacheEntry !== undefined) {\n        this.buf2 = Cmd.get(\"EI\");\n        this.shift();\n\n        cacheEntry.reset();\n        return cacheEntry;\n      }\n    }\n\n    const dict = new Dict(this.xref);\n    for (const key in dictMap) {\n      dict.set(key, dictMap[key]);\n    }\n    let imageStream = stream.makeSubStream(startPos, length, dict);\n    if (cipherTransform && !this.#hasCryptFilter(filter)) {\n      imageStream = cipherTransform.createStream(imageStream, length);\n    }\n\n    imageStream = this.filter(imageStream, dict, length, cipherTransform);\n    imageStream.dict = dict;\n    if (cacheKey !== undefined) {\n      imageStream.cacheKey = `inline_img_${++this._imageId}`;\n      this.imageCache[cacheKey] = imageStream;\n    }\n\n    this.buf2 = Cmd.get(\"EI\");\n    this.shift();\n\n    return imageStream;\n  }\n\n  /**\n   * Resolve indirect objects when `xref` is available.\n   *\n   * @param {unknown} obj\n   * @returns {unknown}\n   */\n  #fetchIfRef(obj) {\n    return this.xref ? this.xref.fetchIfRef(obj) : obj;\n  }\n\n  /**\n   * Check if a stream filter chain contains `/Crypt`.\n   *\n   * @param {unknown} [filter]\n   *   Object, probably a name or an array of names.\n   * @returns {boolean}\n   *   Whether the filter chain contains `/Crypt`.\n   */\n  #hasCryptFilter(filter) {\n    if (!Array.isArray(filter)) {\n      return isName(filter, \"Crypt\");\n    }\n\n    for (const f of filter) {\n      if (isName(this.#fetchIfRef(f), \"Crypt\")) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  #findStreamLength(startPos) {\n    const { stream } = this.lexer;\n    stream.pos = startPos;\n\n    const SCAN_BLOCK_LENGTH = 2048;\n    const signatureLength = \"endstream\".length;\n\n    const END_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64]);\n    const endLength = END_SIGNATURE.length;\n\n    // Ideally we'd directly search for \"endstream\", however there are corrupt\n    // PDF documents where the command is incomplete; hence we search for:\n    //  1. The normal case.\n    //  2. The misspelled case (fixes issue18122.pdf).\n    //  3. The truncated case (fixes issue10004.pdf).\n    const PARTIAL_SIGNATURE = [\n      new Uint8Array([0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]), // \"stream\"\n      new Uint8Array([0x73, 0x74, 0x65, 0x61, 0x6d]), // \"steam\",\n      new Uint8Array([0x73, 0x74, 0x72, 0x65, 0x61]), // \"strea\"\n    ];\n    const normalLength = signatureLength - endLength;\n\n    while (stream.pos < stream.end) {\n      const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n      const scanLength = scanBytes.length - signatureLength;\n\n      if (scanLength <= 0) {\n        break;\n      }\n      let pos = 0;\n      while (pos < scanLength) {\n        let j = 0;\n        while (j < endLength && scanBytes[pos + j] === END_SIGNATURE[j]) {\n          j++;\n        }\n        if (j >= endLength) {\n          // \"end\" found, find the complete command.\n          let found = false;\n          for (const part of PARTIAL_SIGNATURE) {\n            const partLen = part.length;\n            let k = 0;\n            while (k < partLen && scanBytes[pos + j + k] === part[k]) {\n              k++;\n            }\n            if (k >= normalLength) {\n              // Found \"endstream\" command.\n              found = true;\n              break;\n            }\n            if (k >= partLen) {\n              // Found \"endsteam\" or \"endstea\" command.\n              // Ensure that the byte immediately following the corrupt\n              // endstream command is a space, to prevent false positives.\n              const lastByte = scanBytes[pos + j + k];\n              if (isWhiteSpace(lastByte)) {\n                info(\n                  `Found \"${bytesToString([...END_SIGNATURE, ...part])}\" when ` +\n                    \"searching for endstream command.\"\n                );\n                found = true;\n              }\n              break;\n            }\n          }\n\n          if (found) {\n            stream.pos += pos;\n            return stream.pos - startPos;\n          }\n        }\n        pos++;\n      }\n      stream.pos += scanLength;\n    }\n    return -1;\n  }\n\n  makeStream(dict, cipherTransform) {\n    const lexer = this.lexer;\n    let stream = lexer.stream;\n\n    // Get the stream's start position.\n    lexer.skipToNextLine();\n    const startPos = stream.pos - 1;\n\n    // Get the length.\n    let length = dict.get(\"Length\");\n    if (!Number.isInteger(length)) {\n      info(`Bad length \"${length && length.toString()}\" in stream.`);\n      length = 0;\n    }\n\n    // Skip over the stream data.\n    stream.pos = startPos + length;\n    lexer.nextChar();\n\n    // Shift '>>' and check whether the new object marks the end of the stream.\n    if (this.tryShift() && isCmd(this.buf2, \"endstream\")) {\n      this.shift(); // 'stream'\n    } else {\n      // Bad stream length, scanning for endstream command.\n      length = this.#findStreamLength(startPos);\n      if (length < 0) {\n        throw new FormatError(\"Missing endstream command.\");\n      }\n\n      lexer.nextChar();\n      this.shift();\n      this.shift();\n    }\n    this.shift(); // 'endstream'\n\n    stream = stream.makeSubStream(startPos, length, dict);\n    const filter = dict.get(\"F\", \"Filter\");\n    // Streams that explicitly use `/Crypt` are decrypted in the filter chain,\n    // so avoid applying the default stream cipher up-front.\n    if (cipherTransform && !this.#hasCryptFilter(filter)) {\n      stream = cipherTransform.createStream(stream, length);\n    }\n    stream = this.filter(stream, dict, length, cipherTransform);\n    stream.dict = dict;\n    return stream;\n  }\n\n  /**\n   * @param {Streams} stream\n   * @param {Dict} dict\n   * @param {number | null} length\n   * @param {CipherTransform | null} cipherTransform\n   * @returns {Streams}\n   */\n  filter(stream, dict, length, cipherTransform = null) {\n    let filter = dict.get(\"F\", \"Filter\");\n    let params = dict.get(\"DP\", \"DecodeParms\");\n\n    if (filter instanceof Name) {\n      if (Array.isArray(params)) {\n        warn(\"/DecodeParms should not be an Array, when /Filter is a Name.\");\n      }\n      return this.makeFilter(\n        stream,\n        filter.name,\n        length,\n        params,\n        cipherTransform\n      );\n    }\n\n    let maybeLength = length;\n    if (Array.isArray(filter)) {\n      const filterArray = filter;\n      const paramsArray = params;\n      for (let i = 0, ii = filterArray.length; i < ii; ++i) {\n        filter = this.#fetchIfRef(filterArray[i]);\n        if (!(filter instanceof Name)) {\n          throw new FormatError(`Bad filter name \"${filter}\"`);\n        }\n\n        params = null;\n        if (Array.isArray(paramsArray) && i in paramsArray) {\n          params = this.#fetchIfRef(paramsArray[i]);\n        }\n        stream = this.makeFilter(\n          stream,\n          filter.name,\n          maybeLength,\n          params,\n          cipherTransform\n        );\n        // After the first stream the `length` variable is invalid.\n        maybeLength = null;\n      }\n    }\n    return stream;\n  }\n\n  /**\n   * @param {Streams} stream\n   * @param {string} name\n   * @param {number | null} maybeLength\n   * @param {Dict | null} params\n   * @param {CipherTransform | null | undefined} [cipherTransform]\n   * @returns {Streams}\n   */\n  makeFilter(stream, name, maybeLength, params, cipherTransform = null) {\n    // Since the 'Length' entry in the stream dictionary can be completely\n    // wrong, e.g. zero for non-empty streams, only skip parsing the stream\n    // when we can be absolutely certain that it actually is empty.\n    if (maybeLength === 0) {\n      warn(`Empty \"${name}\" stream.`);\n      return new NullStream();\n    }\n\n    try {\n      switch (name) {\n        case \"Fl\":\n        case \"FlateDecode\":\n          if (params) {\n            return new PredictorStream(\n              new FlateStream(stream, maybeLength),\n              maybeLength,\n              params\n            );\n          }\n          return new FlateStream(stream, maybeLength);\n        case \"LZW\":\n        case \"LZWDecode\":\n          let earlyChange = 1;\n          if (params) {\n            if (params.has(\"EarlyChange\")) {\n              earlyChange = params.get(\"EarlyChange\");\n            }\n            return new PredictorStream(\n              new LZWStream(stream, maybeLength, earlyChange),\n              maybeLength,\n              params\n            );\n          }\n          return new LZWStream(stream, maybeLength, earlyChange);\n        case \"DCT\":\n        case \"DCTDecode\":\n          return new JpegStream(stream, maybeLength, params);\n        case \"JPX\":\n        case \"JPXDecode\":\n          return new JpxStream(stream, maybeLength);\n        case \"A85\":\n        case \"ASCII85Decode\":\n          return new Ascii85Stream(stream, maybeLength);\n        case \"AHx\":\n        case \"ASCIIHexDecode\":\n          return new AsciiHexStream(stream, maybeLength);\n        case \"CCF\":\n        case \"CCITTFaxDecode\":\n          return new CCITTFaxStream(stream, maybeLength, params);\n        case \"RL\":\n        case \"RunLengthDecode\":\n          return new RunLengthStream(stream, maybeLength);\n        case \"JBIG2Decode\":\n          return new Jbig2Stream(stream, maybeLength, params);\n        case \"BrotliDecode\":\n          return new BrotliStream(stream, maybeLength);\n        case \"Crypt\": {\n          if (!cipherTransform) {\n            warn('Filter \"Crypt\" is missing a cipher transform.');\n            return stream;\n          }\n          const param = params instanceof Dict ? params.get(\"Name\") : null;\n          // Default to \"Identity\" (PDF 7.4.10).\n          const cryptName =\n            param instanceof Name ? param : Name.get(\"Identity\");\n          return cipherTransform.createStream(stream, maybeLength, cryptName);\n        }\n      }\n      warn(`Filter \"${name}\" is not supported.`);\n      return stream;\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Invalid stream: \"${ex}\"`);\n      return new NullStream();\n    }\n  }\n}\n\n// A '1' in this array means the character is white space. A '1' or\n// '2' means the character ends a name or command.\n// prettier-ignore\nconst specialChars = [\n  1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x\n  1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // fx\n];\n\nfunction toHexDigit(ch) {\n  if (ch >= /* '0' = */ 0x30 && ch /* '9' = */ <= 0x39) {\n    return ch & 0x0f;\n  }\n  if (\n    (ch >= /* 'A' = */ 0x41 && ch <= /* 'F' = */ 0x46) ||\n    (ch >= /* 'a' = */ 0x61 && ch <= /* 'f' = */ 0x66)\n  ) {\n    return (ch & 0x0f) + 9;\n  }\n  return -1;\n}\n\nclass Lexer {\n  constructor(stream, knownCommands = null) {\n    this.stream = stream;\n    this.nextChar();\n\n    // While lexing, we build up many strings one char at a time. Using += for\n    // this can result in lots of garbage strings. It's better to build an\n    // array of single-char strings and then join() them together at the end.\n    // And reusing a single array (i.e. |this.strBuf|) over and over for this\n    // purpose uses less memory than using a new array for each string.\n    this.strBuf = [];\n\n    // The PDFs might have \"glued\" commands with other commands, operands or\n    // literals, e.g. \"q1\". The knownCommands is a dictionary of the valid\n    // commands and their prefixes. The prefixes are built the following way:\n    // if there a command that is a prefix of the other valid command or\n    // literal (e.g. 'f' and 'false') the following prefixes must be included,\n    // 'fa', 'fal', 'fals'. The prefixes are not needed, if the command has no\n    // other commands or literals as a prefix. The knowCommands is optional.\n    this.knownCommands = knownCommands;\n\n    this._hexStringNumWarn = 0;\n    this.beginInlineImagePos = -1;\n  }\n\n  nextChar() {\n    return (this.currentChar = this.stream.getByte());\n  }\n\n  peekChar() {\n    return this.stream.peekByte();\n  }\n\n  getNumber() {\n    let ch = this.currentChar;\n    let divideBy = 0; // Different from 0 if it's a floating point value.\n    let sign = 1;\n\n    if (ch === /* '-' = */ 0x2d) {\n      sign = -1;\n      ch = this.nextChar();\n\n      if (ch === /* '-' = */ 0x2d) {\n        // Ignore double negative (this is consistent with Adobe Reader).\n        ch = this.nextChar();\n      }\n    } else if (ch === /* '+' = */ 0x2b) {\n      ch = this.nextChar();\n    }\n    if (ch === /* LF = */ 0x0a || ch === /* CR = */ 0x0d) {\n      // Ignore line-breaks (this is consistent with Adobe Reader).\n      do {\n        ch = this.nextChar();\n      } while (ch === 0x0a || ch === 0x0d);\n    }\n    if (ch === /* '.' = */ 0x2e) {\n      divideBy = 10;\n      ch = this.nextChar();\n    }\n    if (ch < /* '0' = */ 0x30 || ch > /* '9' = */ 0x39) {\n      const msg = `Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`;\n\n      if (\n        isWhiteSpace(ch) ||\n        /* '(' = */ ch === 0x28 ||\n        /* '<' = */ ch === 0x3c ||\n        ch === /* EOF = */ -1\n      ) {\n        // This is consistent with Adobe Reader (fixes issue9252.pdf,\n        // issue15604.pdf, bug1753983.pdf, bug1953099.pdf).\n        info(`Lexer.getNumber - \"${msg}\".`);\n        return 0;\n      }\n      throw new FormatError(msg);\n    }\n\n    let baseValue = ch - 0x30; // '0'\n\n    while ((ch = this.nextChar()) >= 0) {\n      if (ch >= /* '0' = */ 0x30 && ch <= /* '9' = */ 0x39) {\n        const currentDigit = ch - 0x30; // '0'\n        if (divideBy !== 0) {\n          // We are after a point.\n          divideBy *= 10;\n        }\n        baseValue = baseValue * 10 + currentDigit;\n      } else if (ch === /* '.' = */ 0x2e) {\n        if (divideBy === 0) {\n          divideBy = 1;\n        } else {\n          // A number can have only one dot.\n          break;\n        }\n      } else if (ch === /* '-' = */ 0x2d) {\n        // Ignore minus signs in the middle of numbers to match\n        // Adobe's behavior.\n        warn(\"Badly formatted number: minus sign in the middle\");\n      } else {\n        // The last character doesn't belong to us.\n        break;\n      }\n    }\n\n    if (divideBy !== 0) {\n      baseValue /= divideBy;\n    }\n    return sign * baseValue;\n  }\n\n  getString() {\n    let numParen = 1;\n    let done = false;\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n\n    let ch = this.nextChar();\n    while (true) {\n      let charBuffered = false;\n      switch (ch | 0) {\n        case -1:\n          warn(\"Unterminated string\");\n          done = true;\n          break;\n        case 0x28: // '('\n          ++numParen;\n          strBuf.push(\"(\");\n          break;\n        case 0x29: // ')'\n          if (--numParen === 0) {\n            this.nextChar(); // consume strings ')'\n            done = true;\n          } else {\n            strBuf.push(\")\");\n          }\n          break;\n        case 0x5c: // '\\\\'\n          ch = this.nextChar();\n          switch (ch) {\n            case -1:\n              warn(\"Unterminated string\");\n              done = true;\n              break;\n            case 0x6e: // 'n'\n              strBuf.push(\"\\n\");\n              break;\n            case 0x72: // 'r'\n              strBuf.push(\"\\r\");\n              break;\n            case 0x74: // 't'\n              strBuf.push(\"\\t\");\n              break;\n            case 0x62: // 'b'\n              strBuf.push(\"\\b\");\n              break;\n            case 0x66: // 'f'\n              strBuf.push(\"\\f\");\n              break;\n            case 0x5c: // '\\'\n            case 0x28: // '('\n            case 0x29: // ')'\n              strBuf.push(String.fromCharCode(ch));\n              break;\n            case 0x30: // '0'\n            case 0x31: // '1'\n            case 0x32: // '2'\n            case 0x33: // '3'\n            case 0x34: // '4'\n            case 0x35: // '5'\n            case 0x36: // '6'\n            case 0x37: // '7'\n              let x = ch & 0x0f;\n              ch = this.nextChar();\n              charBuffered = true;\n              if (ch >= /* '0' = */ 0x30 && ch <= /* '7' = */ 0x37) {\n                x = (x << 3) + (ch & 0x0f);\n                ch = this.nextChar();\n                if (ch >= /* '0' = */ 0x30 && ch /* '7' = */ <= 0x37) {\n                  charBuffered = false;\n                  x = (x << 3) + (ch & 0x0f);\n                }\n              }\n              strBuf.push(String.fromCharCode(x));\n              break;\n            case 0x0d: // CR\n              if (this.peekChar() === /* LF = */ 0x0a) {\n                this.nextChar();\n              }\n              break;\n            case 0x0a: // LF\n              break;\n            default:\n              strBuf.push(String.fromCharCode(ch));\n              break;\n          }\n          break;\n        default:\n          strBuf.push(String.fromCharCode(ch));\n          break;\n      }\n      if (done) {\n        break;\n      }\n      if (!charBuffered) {\n        ch = this.nextChar();\n      }\n    }\n    return strBuf.join(\"\");\n  }\n\n  getName() {\n    let ch, previousCh;\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n\n    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n      if (ch === /* '#' = */ 0x23) {\n        ch = this.nextChar();\n        if (specialChars[ch]) {\n          warn(\n            \"Lexer_getName: \" +\n              \"NUMBER SIGN (#) should be followed by a hexadecimal number.\"\n          );\n          strBuf.push(\"#\");\n          break;\n        }\n        const x = toHexDigit(ch);\n        if (x !== -1) {\n          previousCh = ch;\n          ch = this.nextChar();\n          const x2 = toHexDigit(ch);\n          if (x2 === -1) {\n            warn(\n              `Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` +\n                \"in hexadecimal number.\"\n            );\n            strBuf.push(\"#\", String.fromCharCode(previousCh));\n            if (specialChars[ch]) {\n              break;\n            }\n            strBuf.push(String.fromCharCode(ch));\n            continue;\n          }\n          strBuf.push(String.fromCharCode((x << 4) | x2));\n        } else {\n          strBuf.push(\"#\", String.fromCharCode(ch));\n        }\n      } else {\n        strBuf.push(String.fromCharCode(ch));\n      }\n    }\n    if (strBuf.length > 127) {\n      warn(`Name token is longer than allowed by the spec: ${strBuf.length}`);\n    }\n    return Name.get(strBuf.join(\"\"));\n  }\n\n  /**\n   * @private\n   */\n  _hexStringWarn(ch) {\n    const MAX_HEX_STRING_NUM_WARN = 5;\n\n    if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {\n      warn(\"getHexString - ignoring additional invalid characters.\");\n      return;\n    }\n    if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {\n      // Limit the number of warning messages printed for a `this.getHexString`\n      // invocation, since corrupt PDF documents may otherwise spam the console\n      // enough to affect general performance negatively.\n      return;\n    }\n    warn(`getHexString - ignoring invalid character: ${ch}`);\n  }\n\n  getHexString() {\n    const strBuf = this.strBuf;\n    strBuf.length = 0;\n    let ch = this.currentChar;\n    let firstDigit = -1,\n      digit = -1;\n    this._hexStringNumWarn = 0;\n\n    while (true) {\n      if (ch < 0) {\n        warn(\"Unterminated hex string\");\n        break;\n      } else if (ch === /* '>' = */ 0x3e) {\n        this.nextChar();\n        break;\n      } else if (specialChars[ch] === 1) {\n        ch = this.nextChar();\n        continue;\n      } else {\n        digit = toHexDigit(ch);\n        if (digit === -1) {\n          this._hexStringWarn(ch);\n        } else if (firstDigit === -1) {\n          firstDigit = digit;\n        } else {\n          strBuf.push(String.fromCharCode((firstDigit << 4) | digit));\n          firstDigit = -1;\n        }\n        ch = this.nextChar();\n      }\n    }\n\n    // According to the PDF spec, section \"7.3.4.3 Hexadecimal Strings\":\n    //  \"If the final digit of a hexadecimal string is missing—that is, if there\n    //   is an odd number of digits—the final digit shall be assumed to be 0.\"\n    if (firstDigit !== -1) {\n      strBuf.push(String.fromCharCode(firstDigit << 4));\n    }\n    return strBuf.join(\"\");\n  }\n\n  getObj() {\n    // Skip whitespace and comments.\n    let comment = false;\n    let ch = this.currentChar;\n    while (true) {\n      if (ch < 0) {\n        return EOF;\n      }\n      if (comment) {\n        if (ch === /* LF = */ 0x0a || ch === /* CR = */ 0x0d) {\n          comment = false;\n        }\n      } else if (ch === /* '%' = */ 0x25) {\n        comment = true;\n      } else if (specialChars[ch] !== 1) {\n        break;\n      }\n      ch = this.nextChar();\n    }\n\n    // Start reading a token.\n    switch (ch | 0) {\n      case 0x30: // '0'\n      case 0x31: // '1'\n      case 0x32: // '2'\n      case 0x33: // '3'\n      case 0x34: // '4'\n      case 0x35: // '5'\n      case 0x36: // '6'\n      case 0x37: // '7'\n      case 0x38: // '8'\n      case 0x39: // '9'\n      case 0x2b: // '+'\n      case 0x2d: // '-'\n      case 0x2e: // '.'\n        return this.getNumber();\n      case 0x28: // '('\n        return this.getString();\n      case 0x2f: // '/'\n        return this.getName();\n      // array punctuation\n      case 0x5b: // '['\n        this.nextChar();\n        return Cmd.get(\"[\");\n      case 0x5d: // ']'\n        this.nextChar();\n        return Cmd.get(\"]\");\n      // hex string or dict punctuation\n      case 0x3c: // '<'\n        ch = this.nextChar();\n        if (ch === 0x3c) {\n          // dict punctuation\n          this.nextChar();\n          return Cmd.get(\"<<\");\n        }\n        return this.getHexString();\n      // dict punctuation\n      case 0x3e: // '>'\n        ch = this.nextChar();\n        if (ch === 0x3e) {\n          this.nextChar();\n          return Cmd.get(\">>\");\n        }\n        return Cmd.get(\">\");\n      case 0x7b: // '{'\n        this.nextChar();\n        return Cmd.get(\"{\");\n      case 0x7d: // '}'\n        this.nextChar();\n        return Cmd.get(\"}\");\n      case 0x29: // ')'\n        // Consume the current character in order to avoid permanently hanging\n        // the worker thread if `Lexer.getObj` is called from within a loop\n        // containing try-catch statements, since we would otherwise attempt\n        // to parse the *same* character over and over (fixes issue8061.pdf).\n        this.nextChar();\n        throw new FormatError(`Illegal character: ${ch}`);\n    }\n\n    // Start reading a command.\n    let str = String.fromCharCode(ch);\n    // A valid command cannot start with a non-visible ASCII character,\n    // and the next character may be (the start of) a valid command.\n    if (ch < 0x20 || ch > 0x7f) {\n      const nextCh = this.peekChar();\n      if (nextCh >= 0x20 && nextCh <= 0x7f) {\n        this.nextChar();\n        return Cmd.get(str);\n      }\n    }\n    const knownCommands = this.knownCommands;\n    let knownCommandFound = knownCommands?.[str] !== undefined;\n    while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\n      // Stop if a known command is found and next character does not make\n      // the string a command.\n      const possibleCommand = str + String.fromCharCode(ch);\n      if (knownCommandFound && knownCommands[possibleCommand] === undefined) {\n        break;\n      }\n      if (str.length === 128) {\n        throw new FormatError(`Command token too long: ${str.length}`);\n      }\n      str = possibleCommand;\n      knownCommandFound = knownCommands?.[str] !== undefined;\n    }\n    if (str === \"true\") {\n      return true;\n    }\n    if (str === \"false\") {\n      return false;\n    }\n    if (str === \"null\") {\n      return null;\n    }\n\n    if (str === \"BI\") {\n      // Keep track of the current stream position, since it's needed in order\n      // to correctly cache inline images; see `Parser.makeInlineImage`.\n      this.beginInlineImagePos = this.stream.pos;\n    }\n\n    return Cmd.get(str);\n  }\n\n  skipToNextLine() {\n    let ch = this.currentChar;\n    while (ch >= 0) {\n      if (ch === /* CR = */ 0x0d) {\n        ch = this.nextChar();\n        if (ch === /* LF = */ 0x0a) {\n          this.nextChar();\n        }\n        break;\n      } else if (ch === /* LF = */ 0x0a) {\n        this.nextChar();\n        break;\n      }\n      ch = this.nextChar();\n    }\n  }\n}\n\nclass Linearization {\n  static create(stream) {\n    function getInt(linDict, name, allowZeroValue = false) {\n      const obj = linDict.get(name);\n      if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {\n        return obj;\n      }\n      throw new Error(\n        `The \"${name}\" parameter in the linearization ` +\n          \"dictionary is invalid.\"\n      );\n    }\n\n    function getHints(linDict) {\n      const hints = linDict.get(\"H\");\n      let hintsLength;\n\n      if (\n        Array.isArray(hints) &&\n        ((hintsLength = hints.length) === 2 || hintsLength === 4)\n      ) {\n        for (let index = 0; index < hintsLength; index++) {\n          const hint = hints[index];\n          if (!(Number.isInteger(hint) && hint > 0)) {\n            throw new Error(\n              `Hint (${index}) in the linearization dictionary is invalid.`\n            );\n          }\n        }\n        return hints;\n      }\n      throw new Error(\"Hint array in the linearization dictionary is invalid.\");\n    }\n\n    const parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: null,\n    });\n    const obj1 = parser.getObj();\n    const obj2 = parser.getObj();\n    const obj3 = parser.getObj();\n    const linDict = parser.getObj();\n    let obj, length;\n    if (!(\n      Number.isInteger(obj1) &&\n      Number.isInteger(obj2) &&\n      isCmd(obj3, \"obj\") &&\n      linDict instanceof Dict &&\n      typeof (obj = linDict.get(\"Linearized\")) === \"number\" &&\n      obj > 0\n    )) {\n      return null; // No valid linearization dictionary found.\n    } else if ((length = getInt(linDict, \"L\")) !== stream.length) {\n      throw new Error(\n        'The \"L\" parameter in the linearization dictionary ' +\n          \"does not equal the stream length.\"\n      );\n    }\n    return {\n      length,\n      hints: getHints(linDict),\n      objectNumberFirst: getInt(linDict, \"O\"),\n      endFirst: getInt(linDict, \"E\"),\n      numPages: getInt(linDict, \"N\"),\n      mainXRefEntriesOffset: getInt(linDict, \"T\"),\n      pageFirst: linDict.has(\"P\")\n        ? getInt(linDict, \"P\", /* allowZeroValue = */ true)\n        : 0,\n    };\n  }\n}\n\nexport { Lexer, Linearization, Parser };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Cmd, EOF, isCmd, Name } from \"./primitives.js\";\nimport { FormatError, unreachable, warn } from \"../shared/util.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { BinaryCMapReader } from \"./binary_cmap.js\";\nimport { Lexer } from \"./parser.js\";\nimport { MissingDataException } from \"./core_utils.js\";\nimport { Stream } from \"./stream.js\";\n\nconst BUILT_IN_CMAPS = [\n  // << Start unicode maps.\n  \"Adobe-GB1-UCS2\",\n  \"Adobe-CNS1-UCS2\",\n  \"Adobe-Japan1-UCS2\",\n  \"Adobe-Korea1-UCS2\",\n  // >> End unicode maps.\n  \"78-EUC-H\",\n  \"78-EUC-V\",\n  \"78-H\",\n  \"78-RKSJ-H\",\n  \"78-RKSJ-V\",\n  \"78-V\",\n  \"78ms-RKSJ-H\",\n  \"78ms-RKSJ-V\",\n  \"83pv-RKSJ-H\",\n  \"90ms-RKSJ-H\",\n  \"90ms-RKSJ-V\",\n  \"90msp-RKSJ-H\",\n  \"90msp-RKSJ-V\",\n  \"90pv-RKSJ-H\",\n  \"90pv-RKSJ-V\",\n  \"Add-H\",\n  \"Add-RKSJ-H\",\n  \"Add-RKSJ-V\",\n  \"Add-V\",\n  \"Adobe-CNS1-0\",\n  \"Adobe-CNS1-1\",\n  \"Adobe-CNS1-2\",\n  \"Adobe-CNS1-3\",\n  \"Adobe-CNS1-4\",\n  \"Adobe-CNS1-5\",\n  \"Adobe-CNS1-6\",\n  \"Adobe-GB1-0\",\n  \"Adobe-GB1-1\",\n  \"Adobe-GB1-2\",\n  \"Adobe-GB1-3\",\n  \"Adobe-GB1-4\",\n  \"Adobe-GB1-5\",\n  \"Adobe-Japan1-0\",\n  \"Adobe-Japan1-1\",\n  \"Adobe-Japan1-2\",\n  \"Adobe-Japan1-3\",\n  \"Adobe-Japan1-4\",\n  \"Adobe-Japan1-5\",\n  \"Adobe-Japan1-6\",\n  \"Adobe-Korea1-0\",\n  \"Adobe-Korea1-1\",\n  \"Adobe-Korea1-2\",\n  \"B5-H\",\n  \"B5-V\",\n  \"B5pc-H\",\n  \"B5pc-V\",\n  \"CNS-EUC-H\",\n  \"CNS-EUC-V\",\n  \"CNS1-H\",\n  \"CNS1-V\",\n  \"CNS2-H\",\n  \"CNS2-V\",\n  \"ETHK-B5-H\",\n  \"ETHK-B5-V\",\n  \"ETen-B5-H\",\n  \"ETen-B5-V\",\n  \"ETenms-B5-H\",\n  \"ETenms-B5-V\",\n  \"EUC-H\",\n  \"EUC-V\",\n  \"Ext-H\",\n  \"Ext-RKSJ-H\",\n  \"Ext-RKSJ-V\",\n  \"Ext-V\",\n  \"GB-EUC-H\",\n  \"GB-EUC-V\",\n  \"GB-H\",\n  \"GB-V\",\n  \"GBK-EUC-H\",\n  \"GBK-EUC-V\",\n  \"GBK2K-H\",\n  \"GBK2K-V\",\n  \"GBKp-EUC-H\",\n  \"GBKp-EUC-V\",\n  \"GBT-EUC-H\",\n  \"GBT-EUC-V\",\n  \"GBT-H\",\n  \"GBT-V\",\n  \"GBTpc-EUC-H\",\n  \"GBTpc-EUC-V\",\n  \"GBpc-EUC-H\",\n  \"GBpc-EUC-V\",\n  \"H\",\n  \"HKdla-B5-H\",\n  \"HKdla-B5-V\",\n  \"HKdlb-B5-H\",\n  \"HKdlb-B5-V\",\n  \"HKgccs-B5-H\",\n  \"HKgccs-B5-V\",\n  \"HKm314-B5-H\",\n  \"HKm314-B5-V\",\n  \"HKm471-B5-H\",\n  \"HKm471-B5-V\",\n  \"HKscs-B5-H\",\n  \"HKscs-B5-V\",\n  \"Hankaku\",\n  \"Hiragana\",\n  \"KSC-EUC-H\",\n  \"KSC-EUC-V\",\n  \"KSC-H\",\n  \"KSC-Johab-H\",\n  \"KSC-Johab-V\",\n  \"KSC-V\",\n  \"KSCms-UHC-H\",\n  \"KSCms-UHC-HW-H\",\n  \"KSCms-UHC-HW-V\",\n  \"KSCms-UHC-V\",\n  \"KSCpc-EUC-H\",\n  \"KSCpc-EUC-V\",\n  \"Katakana\",\n  \"NWP-H\",\n  \"NWP-V\",\n  \"RKSJ-H\",\n  \"RKSJ-V\",\n  \"Roman\",\n  \"UniCNS-UCS2-H\",\n  \"UniCNS-UCS2-V\",\n  \"UniCNS-UTF16-H\",\n  \"UniCNS-UTF16-V\",\n  \"UniCNS-UTF32-H\",\n  \"UniCNS-UTF32-V\",\n  \"UniCNS-UTF8-H\",\n  \"UniCNS-UTF8-V\",\n  \"UniGB-UCS2-H\",\n  \"UniGB-UCS2-V\",\n  \"UniGB-UTF16-H\",\n  \"UniGB-UTF16-V\",\n  \"UniGB-UTF32-H\",\n  \"UniGB-UTF32-V\",\n  \"UniGB-UTF8-H\",\n  \"UniGB-UTF8-V\",\n  \"UniJIS-UCS2-H\",\n  \"UniJIS-UCS2-HW-H\",\n  \"UniJIS-UCS2-HW-V\",\n  \"UniJIS-UCS2-V\",\n  \"UniJIS-UTF16-H\",\n  \"UniJIS-UTF16-V\",\n  \"UniJIS-UTF32-H\",\n  \"UniJIS-UTF32-V\",\n  \"UniJIS-UTF8-H\",\n  \"UniJIS-UTF8-V\",\n  \"UniJIS2004-UTF16-H\",\n  \"UniJIS2004-UTF16-V\",\n  \"UniJIS2004-UTF32-H\",\n  \"UniJIS2004-UTF32-V\",\n  \"UniJIS2004-UTF8-H\",\n  \"UniJIS2004-UTF8-V\",\n  \"UniJISPro-UCS2-HW-V\",\n  \"UniJISPro-UCS2-V\",\n  \"UniJISPro-UTF8-V\",\n  \"UniJISX0213-UTF32-H\",\n  \"UniJISX0213-UTF32-V\",\n  \"UniJISX02132004-UTF32-H\",\n  \"UniJISX02132004-UTF32-V\",\n  \"UniKS-UCS2-H\",\n  \"UniKS-UCS2-V\",\n  \"UniKS-UTF16-H\",\n  \"UniKS-UTF16-V\",\n  \"UniKS-UTF32-H\",\n  \"UniKS-UTF32-V\",\n  \"UniKS-UTF8-H\",\n  \"UniKS-UTF8-V\",\n  \"V\",\n  \"WP-Symbol\",\n];\n\n// Heuristic to avoid hanging the worker-thread for CMap data with ridiculously\n// large ranges, such as e.g. 0xFFFFFFFF (fixes issue11922_reduced.pdf).\nconst MAX_MAP_RANGE = 2 ** 24 - 1; // = 0xFFFFFF\n\n// CMap, not to be confused with TrueType's cmap.\nclass CMap {\n  constructor(builtInCMap = false) {\n    // Codespace ranges are stored as follows:\n    // [[1BytePairs], [2BytePairs], [3BytePairs], [4BytePairs]]\n    // where nBytePairs are ranges e.g. [low1, high1, low2, high2, ...]\n    this.codespaceRanges = [[], [], [], []];\n    this.numCodespaceRanges = 0;\n    // Map entries have one of two forms.\n    // - cid chars are 16-bit unsigned integers, stored as integers.\n    // - bf chars are variable-length byte sequences, stored as strings, with\n    //   one byte per character.\n    this._map = [];\n    this.name = \"\";\n    this.vertical = false;\n    this.useCMap = null;\n    this.builtInCMap = builtInCMap;\n  }\n\n  addCodespaceRange(n, low, high) {\n    this.codespaceRanges[n - 1].push(low, high);\n    this.numCodespaceRanges++;\n  }\n\n  mapCidRange(low, high, dstLow) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapCidRange - ignoring data above MAX_MAP_RANGE.\");\n    }\n    while (low <= high) {\n      this._map[low++] = dstLow++;\n    }\n  }\n\n  mapBfRange(low, high, dstLow) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapBfRange - ignoring data above MAX_MAP_RANGE.\");\n    }\n    const lastByte = dstLow.length - 1;\n    while (low <= high) {\n      this._map[low++] = dstLow;\n      // Only the last byte has to be incremented (in the normal case).\n      const nextCharCode = dstLow.charCodeAt(lastByte) + 1;\n      if (nextCharCode > 0xff) {\n        dstLow =\n          dstLow.substring(0, lastByte - 1) +\n          String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) +\n          \"\\x00\";\n        continue;\n      }\n      dstLow =\n        dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode);\n    }\n  }\n\n  mapBfRangeToArray(low, high, array) {\n    if (high - low > MAX_MAP_RANGE) {\n      throw new Error(\"mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.\");\n    }\n    const ii = array.length;\n    let i = 0;\n    while (low <= high && i < ii) {\n      this._map[low] = array[i++];\n      ++low;\n    }\n  }\n\n  // This is used for both bf and cid chars.\n  mapOne(src, dst) {\n    this._map[src] = dst;\n  }\n\n  lookup(code) {\n    return this._map[code];\n  }\n\n  contains(code) {\n    return this._map[code] !== undefined;\n  }\n\n  forEach(callback) {\n    // Most maps have fewer than 65536 entries, and for those we use normal\n    // array iteration. But really sparse tables are possible -- e.g. with\n    // indices in the *billions*. For such tables we use for..in, which isn't\n    // ideal because it stringifies the indices for all present elements, but\n    // it does avoid iterating over every undefined entry.\n    const map = this._map;\n    const length = map.length;\n    if (length <= 0x10000) {\n      for (let i = 0; i < length; i++) {\n        if (map[i] !== undefined) {\n          callback(i, map[i]);\n        }\n      }\n    } else {\n      for (const i in map) {\n        callback(i, map[i]);\n      }\n    }\n  }\n\n  charCodeOf(value) {\n    // `Array.prototype.indexOf` is *extremely* inefficient for arrays which\n    // are both very sparse and very large (see issue8372.pdf).\n    const map = this._map;\n    if (map.length <= 0x10000) {\n      return map.indexOf(value);\n    }\n    for (const charCode in map) {\n      if (map[charCode] === value) {\n        return charCode | 0;\n      }\n    }\n    return -1;\n  }\n\n  getMap() {\n    return this._map;\n  }\n\n  readCharCode(str, offset, out) {\n    let c = 0;\n    const codespaceRanges = this.codespaceRanges;\n    // 9.7.6.2 CMap Mapping\n    // The code length is at most 4.\n    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {\n      c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;\n      // Check each codespace range to see if it falls within.\n      const codespaceRange = codespaceRanges[n];\n      for (let k = 0, kk = codespaceRange.length; k < kk;) {\n        const low = codespaceRange[k++];\n        const high = codespaceRange[k++];\n        if (c >= low && c <= high) {\n          out.charcode = c;\n          out.length = n + 1;\n          return;\n        }\n      }\n    }\n    out.charcode = 0;\n    out.length = 1;\n  }\n\n  getCharCodeLength(charCode) {\n    const codespaceRanges = this.codespaceRanges;\n    for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {\n      // Check each codespace range to see if it falls within.\n      const codespaceRange = codespaceRanges[n];\n      for (let k = 0, kk = codespaceRange.length; k < kk;) {\n        const low = codespaceRange[k++];\n        const high = codespaceRange[k++];\n        if (charCode >= low && charCode <= high) {\n          return n + 1;\n        }\n      }\n    }\n    return 1;\n  }\n\n  get length() {\n    return this._map.length;\n  }\n\n  get isIdentityCMap() {\n    if (!(this.name === \"Identity-H\" || this.name === \"Identity-V\")) {\n      return false;\n    }\n    if (this._map.length !== 0x10000) {\n      return false;\n    }\n    for (let i = 0; i < 0x10000; i++) {\n      if (this._map[i] !== i) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\n// A special case of CMap, where the _map array implicitly has a length of\n// 65536 and each element is equal to its index.\nclass IdentityCMap extends CMap {\n  constructor(vertical, n) {\n    super();\n\n    this.vertical = vertical;\n    this.addCodespaceRange(n, 0, 0xffff);\n  }\n\n  mapCidRange(low, high, dstLow) {\n    unreachable(\"should not call mapCidRange\");\n  }\n\n  mapBfRange(low, high, dstLow) {\n    unreachable(\"should not call mapBfRange\");\n  }\n\n  mapBfRangeToArray(low, high, array) {\n    unreachable(\"should not call mapBfRangeToArray\");\n  }\n\n  mapOne(src, dst) {\n    unreachable(\"should not call mapCidOne\");\n  }\n\n  lookup(code) {\n    return Number.isInteger(code) && code <= 0xffff ? code : undefined;\n  }\n\n  contains(code) {\n    return Number.isInteger(code) && code <= 0xffff;\n  }\n\n  forEach(callback) {\n    for (let i = 0; i <= 0xffff; i++) {\n      callback(i, i);\n    }\n  }\n\n  charCodeOf(value) {\n    return Number.isInteger(value) && value <= 0xffff ? value : -1;\n  }\n\n  getMap() {\n    // Sometimes identity maps must be instantiated, but it's rare.\n    const map = new Array(0x10000);\n    for (let i = 0; i <= 0xffff; i++) {\n      map[i] = i;\n    }\n    return map;\n  }\n\n  get length() {\n    return 0x10000;\n  }\n\n  // eslint-disable-next-line getter-return\n  get isIdentityCMap() {\n    unreachable(\"should not access .isIdentityCMap\");\n  }\n}\n\nfunction strToInt(str) {\n  let a = 0;\n  for (let i = 0; i < str.length; i++) {\n    a = (a << 8) | str.charCodeAt(i);\n  }\n  return a >>> 0;\n}\n\nfunction expectString(obj) {\n  if (typeof obj !== \"string\") {\n    throw new FormatError(\"Malformed CMap: expected string.\");\n  }\n}\n\nfunction expectInt(obj) {\n  if (!Number.isInteger(obj)) {\n    throw new FormatError(\"Malformed CMap: expected int.\");\n  }\n}\n\nfunction parseBfChar(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endbfchar\")) {\n      return;\n    }\n    expectString(obj);\n    const src = strToInt(obj);\n    obj = lexer.getObj();\n    // TODO are /dstName used?\n    expectString(obj);\n    const dst = obj;\n    cMap.mapOne(src, dst);\n  }\n}\n\nfunction parseBfRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endbfrange\")) {\n      return;\n    }\n    expectString(obj);\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    expectString(obj);\n    const high = strToInt(obj);\n    obj = lexer.getObj();\n    if (Number.isInteger(obj) || typeof obj === \"string\") {\n      const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;\n      cMap.mapBfRange(low, high, dstLow);\n    } else if (isCmd(obj, \"[\")) {\n      obj = lexer.getObj();\n      const array = [];\n      while (!isCmd(obj, \"]\") && obj !== EOF) {\n        array.push(obj);\n        obj = lexer.getObj();\n      }\n      cMap.mapBfRangeToArray(low, high, array);\n    } else {\n      break;\n    }\n  }\n  throw new FormatError(\"Invalid bf range.\");\n}\n\nfunction parseCidChar(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcidchar\")) {\n      return;\n    }\n    expectString(obj);\n    const src = strToInt(obj);\n    obj = lexer.getObj();\n    expectInt(obj);\n    const dst = obj;\n    cMap.mapOne(src, dst);\n  }\n}\n\nfunction parseCidRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcidrange\")) {\n      return;\n    }\n    expectString(obj);\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    expectString(obj);\n    const high = strToInt(obj);\n    obj = lexer.getObj();\n    expectInt(obj);\n    const dstLow = obj;\n    cMap.mapCidRange(low, high, dstLow);\n  }\n}\n\nfunction parseCodespaceRange(cMap, lexer) {\n  while (true) {\n    let obj = lexer.getObj();\n    if (obj === EOF) {\n      break;\n    }\n    if (isCmd(obj, \"endcodespacerange\")) {\n      return;\n    }\n    if (typeof obj !== \"string\") {\n      break;\n    }\n    const low = strToInt(obj);\n    obj = lexer.getObj();\n    if (typeof obj !== \"string\") {\n      break;\n    }\n    const high = strToInt(obj);\n    cMap.addCodespaceRange(obj.length, low, high);\n  }\n  throw new FormatError(\"Invalid codespace range.\");\n}\n\nfunction parseWMode(cMap, lexer) {\n  const obj = lexer.getObj();\n  if (Number.isInteger(obj)) {\n    cMap.vertical = !!obj;\n  }\n}\n\nfunction parseCMapName(cMap, lexer) {\n  const obj = lexer.getObj();\n  if (obj instanceof Name) {\n    cMap.name = obj.name;\n  }\n}\n\nasync function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {\n  let previous, embeddedUseCMap;\n  objLoop: while (true) {\n    try {\n      const obj = lexer.getObj();\n      if (obj === EOF) {\n        break;\n      } else if (obj instanceof Name) {\n        if (obj.name === \"WMode\") {\n          parseWMode(cMap, lexer);\n        } else if (obj.name === \"CMapName\") {\n          parseCMapName(cMap, lexer);\n        }\n        previous = obj;\n      } else if (obj instanceof Cmd) {\n        switch (obj.cmd) {\n          case \"endcmap\":\n            break objLoop;\n          case \"usecmap\":\n            if (previous instanceof Name) {\n              embeddedUseCMap = previous.name;\n            }\n            break;\n          case \"begincodespacerange\":\n            parseCodespaceRange(cMap, lexer);\n            break;\n          case \"beginbfchar\":\n            parseBfChar(cMap, lexer);\n            break;\n          case \"begincidchar\":\n            parseCidChar(cMap, lexer);\n            break;\n          case \"beginbfrange\":\n            parseBfRange(cMap, lexer);\n            break;\n          case \"begincidrange\":\n            parseCidRange(cMap, lexer);\n            break;\n        }\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Invalid cMap data: \" + ex);\n      continue;\n    }\n  }\n\n  if (!useCMap && embeddedUseCMap) {\n    // Load the useCMap definition from the file only if there wasn't one\n    // specified.\n    useCMap = embeddedUseCMap;\n  }\n  if (useCMap) {\n    return extendCMap(cMap, fetchBuiltInCMap, useCMap);\n  }\n  return cMap;\n}\n\nasync function extendCMap(cMap, fetchBuiltInCMap, useCMap) {\n  cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap);\n  // If there aren't any code space ranges defined clone all the parent ones\n  // into this cMap.\n  if (cMap.numCodespaceRanges === 0) {\n    const useCodespaceRanges = cMap.useCMap.codespaceRanges;\n    for (let i = 0; i < useCodespaceRanges.length; i++) {\n      cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();\n    }\n    cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;\n  }\n  // Merge the map into the current one, making sure not to override\n  // any previously defined entries.\n  cMap.useCMap.forEach(function (key, value) {\n    if (!cMap.contains(key)) {\n      cMap.mapOne(key, value);\n    }\n  });\n\n  return cMap;\n}\n\nasync function createBuiltInCMap(name, fetchBuiltInCMap) {\n  if (name === \"Identity-H\") {\n    return new IdentityCMap(false, 2);\n  } else if (name === \"Identity-V\") {\n    return new IdentityCMap(true, 2);\n  }\n  if (!BUILT_IN_CMAPS.includes(name)) {\n    throw new Error(\"Unknown CMap name: \" + name);\n  }\n  if (!fetchBuiltInCMap) {\n    throw new Error(\"Built-in CMap parameters are not provided.\");\n  }\n\n  const { cMapData, isCompressed } = await fetchBuiltInCMap(name);\n  const cMap = new CMap(true);\n\n  if (isCompressed) {\n    return new BinaryCMapReader().process(cMapData, cMap, useCMap =>\n      extendCMap(cMap, fetchBuiltInCMap, useCMap)\n    );\n  }\n  const lexer = new Lexer(new Stream(cMapData));\n  return parseCMap(cMap, lexer, fetchBuiltInCMap, null);\n}\n\nclass CMapFactory {\n  static async create({ encoding, fetchBuiltInCMap, useCMap }) {\n    if (encoding instanceof Name) {\n      return createBuiltInCMap(encoding.name, fetchBuiltInCMap);\n    } else if (encoding instanceof BaseStream) {\n      if (encoding.isAsync) {\n        const bytes = await encoding.asyncGetBytes();\n        if (bytes) {\n          encoding = new Stream(bytes, 0, bytes.length, encoding.dict);\n        }\n      }\n      const parsedCMap = await parseCMap(\n        /* cMap = */ new CMap(),\n        /* lexer = */ new Lexer(encoding),\n        fetchBuiltInCMap,\n        useCMap\n      );\n\n      if (parsedCMap.isIdentityCMap) {\n        return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);\n      }\n      return parsedCMap;\n    }\n    throw new Error(\"Encoding required.\");\n  }\n}\n\nexport { CMap, CMapFactory, IdentityCMap };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// prettier-ignore\nconst ExpertEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"\", \"dollaroldstyle\",\n  \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\",\n  \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\",\n  \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\",\n  \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\",\n  \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\",\n  \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\",\n  \"questionsmall\", \"\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\",\n  \"esuperior\", \"\", \"\", \"\", \"isuperior\", \"\", \"\", \"lsuperior\", \"msuperior\",\n  \"nsuperior\", \"osuperior\", \"\", \"\", \"rsuperior\", \"ssuperior\", \"tsuperior\",\n  \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\",\n  \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n  \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n  \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n  \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n  \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n  \"onefitted\", \"rupiah\", \"Tildesmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\",\n  \"\", \"\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n  \"Caronsmall\", \"\", \"Dotaccentsmall\", \"\", \"\", \"Macronsmall\", \"\", \"\",\n  \"figuredash\", \"hypheninferior\", \"\", \"\", \"Ogoneksmall\", \"Ringsmall\",\n  \"Cedillasmall\", \"\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\",\n  \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n  \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"zerosuperior\",\n  \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\",\n  \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n  \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n  \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n  \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n  \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n  \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n  \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n  \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n  \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n  \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n  \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n  \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n  \"Ydieresissmall\"];\n\n// prettier-ignore\nconst MacExpertEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"centoldstyle\",\n  \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n  \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n  \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\",\n  \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\",\n  \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\",\n  \"nineoldstyle\", \"colon\", \"semicolon\", \"\", \"threequartersemdash\", \"\",\n  \"questionsmall\", \"\", \"\", \"\", \"\", \"Ethsmall\", \"\", \"\", \"onequarter\",\n  \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n  \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"\", \"\", \"\", \"\", \"ff\",\n  \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\",\n  \"Circumflexsmall\", \"hypheninferior\", \"Gravesmall\", \"Asmall\", \"Bsmall\",\n  \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\",\n  \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\",\n  \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\",\n  \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\",\n  \"Tildesmall\", \"\", \"\", \"asuperior\", \"centsuperior\", \"\", \"\", \"\", \"\",\n  \"Aacutesmall\", \"Agravesmall\", \"Acircumflexsmall\", \"Adieresissmall\",\n  \"Atildesmall\", \"Aringsmall\", \"Ccedillasmall\", \"Eacutesmall\", \"Egravesmall\",\n  \"Ecircumflexsmall\", \"Edieresissmall\", \"Iacutesmall\", \"Igravesmall\",\n  \"Icircumflexsmall\", \"Idieresissmall\", \"Ntildesmall\", \"Oacutesmall\",\n  \"Ogravesmall\", \"Ocircumflexsmall\", \"Odieresissmall\", \"Otildesmall\",\n  \"Uacutesmall\", \"Ugravesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"\",\n  \"eightsuperior\", \"fourinferior\", \"threeinferior\", \"sixinferior\",\n  \"eightinferior\", \"seveninferior\", \"Scaronsmall\", \"\", \"centinferior\",\n  \"twoinferior\", \"\", \"Dieresissmall\", \"\", \"Caronsmall\", \"osuperior\",\n  \"fiveinferior\", \"\", \"commainferior\", \"periodinferior\", \"Yacutesmall\", \"\",\n  \"dollarinferior\", \"\", \"\", \"Thornsmall\", \"\", \"nineinferior\", \"zeroinferior\",\n  \"Zcaronsmall\", \"AEsmall\", \"Oslashsmall\", \"questiondownsmall\",\n  \"oneinferior\", \"Lslashsmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"Cedillasmall\", \"\",\n  \"\", \"\", \"\", \"\", \"OEsmall\", \"figuredash\", \"hyphensuperior\", \"\", \"\", \"\", \"\",\n  \"exclamdownsmall\", \"\", \"Ydieresissmall\", \"\", \"onesuperior\", \"twosuperior\",\n  \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\",\n  \"sevensuperior\", \"ninesuperior\", \"zerosuperior\", \"\", \"esuperior\",\n  \"rsuperior\", \"tsuperior\", \"\", \"\", \"isuperior\", \"ssuperior\", \"dsuperior\",\n  \"\", \"\", \"\", \"\", \"\", \"lsuperior\", \"Ogoneksmall\", \"Brevesmall\",\n  \"Macronsmall\", \"bsuperior\", \"nsuperior\", \"msuperior\", \"commasuperior\",\n  \"periodsuperior\", \"Dotaccentsmall\", \"Ringsmall\", \"\", \"\", \"\", \"\"];\n\n// prettier-ignore\nconst MacRomanEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\",\n  \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\",\n  \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\",\n  \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\",\n  \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\",\n  \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\",\n  \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\",\n  \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\",\n  \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\",\n  \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"\",\n  \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\", \"Odieresis\",\n  \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\", \"atilde\",\n  \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\",\n  \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\",\n  \"ograve\", \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\",\n  \"ucircumflex\", \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\",\n  \"section\", \"bullet\", \"paragraph\", \"germandbls\", \"registered\", \"copyright\",\n  \"trademark\", \"acute\", \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\",\n  \"plusminus\", \"lessequal\", \"greaterequal\", \"yen\", \"mu\", \"partialdiff\",\n  \"summation\", \"product\", \"pi\", \"integral\", \"ordfeminine\", \"ordmasculine\",\n  \"Omega\", \"ae\", \"oslash\", \"questiondown\", \"exclamdown\", \"logicalnot\",\n  \"radical\", \"florin\", \"approxequal\", \"Delta\", \"guillemotleft\",\n  \"guillemotright\", \"ellipsis\", \"space\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\",\n  \"oe\", \"endash\", \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\",\n  \"quoteright\", \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\",\n  \"currency\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\",\n  \"periodcentered\", \"quotesinglbase\", \"quotedblbase\", \"perthousand\",\n  \"Acircumflex\", \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\",\n  \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\",\n  \"Ograve\", \"Uacute\", \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\",\n  \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\",\n  \"ogonek\", \"caron\"];\n\n// prettier-ignore\nconst StandardEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\",\n  \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\",\n  \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\",\n  \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\",\n  \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\",\n  \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\",\n  \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\",\n  \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\",\n  \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\",\n  \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdown\",\n  \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\",\n  \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\",\n  \"guilsinglright\", \"fi\", \"fl\", \"\", \"endash\", \"dagger\", \"daggerdbl\",\n  \"periodcentered\", \"\", \"paragraph\", \"bullet\", \"quotesinglbase\",\n  \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\",\n  \"perthousand\", \"\", \"questiondown\", \"\", \"grave\", \"acute\", \"circumflex\",\n  \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"\", \"ring\", \"cedilla\",\n  \"\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"AE\", \"\", \"ordfeminine\", \"\", \"\",\n  \"\", \"\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"\", \"\", \"\", \"\", \"\", \"ae\",\n  \"\", \"\", \"\", \"dotlessi\", \"\", \"\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"\",\n  \"\", \"\", \"\"];\n\n// prettier-ignore\nconst WinAnsiEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\",\n  \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\",\n  \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\",\n  \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\",\n  \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\",\n  \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\",\n  \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\",\n  \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\",\n  \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\",\n  \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\",\n  \"bullet\", \"Euro\", \"bullet\", \"quotesinglbase\", \"florin\", \"quotedblbase\",\n  \"ellipsis\", \"dagger\", \"daggerdbl\", \"circumflex\", \"perthousand\", \"Scaron\",\n  \"guilsinglleft\", \"OE\", \"bullet\", \"Zcaron\", \"bullet\", \"bullet\", \"quoteleft\",\n  \"quoteright\", \"quotedblleft\", \"quotedblright\", \"bullet\", \"endash\",\n  \"emdash\", \"tilde\", \"trademark\", \"scaron\", \"guilsinglright\", \"oe\", \"bullet\",\n  \"zcaron\", \"Ydieresis\", \"space\", \"exclamdown\", \"cent\", \"sterling\",\n  \"currency\", \"yen\", \"brokenbar\", \"section\", \"dieresis\", \"copyright\",\n  \"ordfeminine\", \"guillemotleft\", \"logicalnot\", \"hyphen\", \"registered\",\n  \"macron\", \"degree\", \"plusminus\", \"twosuperior\", \"threesuperior\", \"acute\",\n  \"mu\", \"paragraph\", \"periodcentered\", \"cedilla\", \"onesuperior\",\n  \"ordmasculine\", \"guillemotright\", \"onequarter\", \"onehalf\", \"threequarters\",\n  \"questiondown\", \"Agrave\", \"Aacute\", \"Acircumflex\", \"Atilde\", \"Adieresis\",\n  \"Aring\", \"AE\", \"Ccedilla\", \"Egrave\", \"Eacute\", \"Ecircumflex\", \"Edieresis\",\n  \"Igrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Eth\", \"Ntilde\", \"Ograve\",\n  \"Oacute\", \"Ocircumflex\", \"Otilde\", \"Odieresis\", \"multiply\", \"Oslash\",\n  \"Ugrave\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Yacute\", \"Thorn\",\n  \"germandbls\", \"agrave\", \"aacute\", \"acircumflex\", \"atilde\", \"adieresis\",\n  \"aring\", \"ae\", \"ccedilla\", \"egrave\", \"eacute\", \"ecircumflex\", \"edieresis\",\n  \"igrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"eth\", \"ntilde\", \"ograve\",\n  \"oacute\", \"ocircumflex\", \"otilde\", \"odieresis\", \"divide\", \"oslash\",\n  \"ugrave\", \"uacute\", \"ucircumflex\", \"udieresis\", \"yacute\", \"thorn\",\n  \"ydieresis\"];\n\n// prettier-ignore\nconst SymbolSetEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"exclam\", \"universal\", \"numbersign\", \"existential\", \"percent\",\n  \"ampersand\", \"suchthat\", \"parenleft\", \"parenright\", \"asteriskmath\", \"plus\",\n  \"comma\", \"minus\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\",\n  \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\",\n  \"equal\", \"greater\", \"question\", \"congruent\", \"Alpha\", \"Beta\", \"Chi\",\n  \"Delta\", \"Epsilon\", \"Phi\", \"Gamma\", \"Eta\", \"Iota\", \"theta1\", \"Kappa\",\n  \"Lambda\", \"Mu\", \"Nu\", \"Omicron\", \"Pi\", \"Theta\", \"Rho\", \"Sigma\", \"Tau\",\n  \"Upsilon\", \"sigma1\", \"Omega\", \"Xi\", \"Psi\", \"Zeta\", \"bracketleft\",\n  \"therefore\", \"bracketright\", \"perpendicular\", \"underscore\", \"radicalex\",\n  \"alpha\", \"beta\", \"chi\", \"delta\", \"epsilon\", \"phi\", \"gamma\", \"eta\", \"iota\",\n  \"phi1\", \"kappa\", \"lambda\", \"mu\", \"nu\", \"omicron\", \"pi\", \"theta\", \"rho\",\n  \"sigma\", \"tau\", \"upsilon\", \"omega1\", \"omega\", \"xi\", \"psi\", \"zeta\",\n  \"braceleft\", \"bar\", \"braceright\", \"similar\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"Euro\", \"Upsilon1\", \"minute\", \"lessequal\",\n  \"fraction\", \"infinity\", \"florin\", \"club\", \"diamond\", \"heart\", \"spade\",\n  \"arrowboth\", \"arrowleft\", \"arrowup\", \"arrowright\", \"arrowdown\", \"degree\",\n  \"plusminus\", \"second\", \"greaterequal\", \"multiply\", \"proportional\",\n  \"partialdiff\", \"bullet\", \"divide\", \"notequal\", \"equivalence\",\n  \"approxequal\", \"ellipsis\", \"arrowvertex\", \"arrowhorizex\", \"carriagereturn\",\n  \"aleph\", \"Ifraktur\", \"Rfraktur\", \"weierstrass\", \"circlemultiply\",\n  \"circleplus\", \"emptyset\", \"intersection\", \"union\", \"propersuperset\",\n  \"reflexsuperset\", \"notsubset\", \"propersubset\", \"reflexsubset\", \"element\",\n  \"notelement\", \"angle\", \"gradient\", \"registerserif\", \"copyrightserif\",\n  \"trademarkserif\", \"product\", \"radical\", \"dotmath\", \"logicalnot\",\n  \"logicaland\", \"logicalor\", \"arrowdblboth\", \"arrowdblleft\", \"arrowdblup\",\n  \"arrowdblright\", \"arrowdbldown\", \"lozenge\", \"angleleft\", \"registersans\",\n  \"copyrightsans\", \"trademarksans\", \"summation\", \"parenlefttp\",\n  \"parenleftex\", \"parenleftbt\", \"bracketlefttp\", \"bracketleftex\",\n  \"bracketleftbt\", \"bracelefttp\", \"braceleftmid\", \"braceleftbt\", \"braceex\",\n  \"\", \"angleright\", \"integral\", \"integraltp\", \"integralex\", \"integralbt\",\n  \"parenrighttp\", \"parenrightex\", \"parenrightbt\", \"bracketrighttp\",\n  \"bracketrightex\", \"bracketrightbt\", \"bracerighttp\", \"bracerightmid\",\n  \"bracerightbt\", \"\"];\n\n// prettier-ignore\nconst ZapfDingbatsEncoding = [\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"space\", \"a1\", \"a2\", \"a202\", \"a3\", \"a4\", \"a5\", \"a119\", \"a118\", \"a117\",\n  \"a11\", \"a12\", \"a13\", \"a14\", \"a15\", \"a16\", \"a105\", \"a17\", \"a18\", \"a19\",\n  \"a20\", \"a21\", \"a22\", \"a23\", \"a24\", \"a25\", \"a26\", \"a27\", \"a28\", \"a6\", \"a7\",\n  \"a8\", \"a9\", \"a10\", \"a29\", \"a30\", \"a31\", \"a32\", \"a33\", \"a34\", \"a35\", \"a36\",\n  \"a37\", \"a38\", \"a39\", \"a40\", \"a41\", \"a42\", \"a43\", \"a44\", \"a45\", \"a46\",\n  \"a47\", \"a48\", \"a49\", \"a50\", \"a51\", \"a52\", \"a53\", \"a54\", \"a55\", \"a56\",\n  \"a57\", \"a58\", \"a59\", \"a60\", \"a61\", \"a62\", \"a63\", \"a64\", \"a65\", \"a66\",\n  \"a67\", \"a68\", \"a69\", \"a70\", \"a71\", \"a72\", \"a73\", \"a74\", \"a203\", \"a75\",\n  \"a204\", \"a76\", \"a77\", \"a78\", \"a79\", \"a81\", \"a82\", \"a83\", \"a84\", \"a97\",\n  \"a98\", \"a99\", \"a100\", \"\", \"a89\", \"a90\", \"a93\", \"a94\", \"a91\", \"a92\", \"a205\",\n  \"a85\", \"a206\", \"a86\", \"a87\", \"a88\", \"a95\", \"a96\", \"\", \"\", \"\", \"\", \"\", \"\",\n  \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"a101\", \"a102\", \"a103\",\n  \"a104\", \"a106\", \"a107\", \"a108\", \"a112\", \"a111\", \"a110\", \"a109\", \"a120\",\n  \"a121\", \"a122\", \"a123\", \"a124\", \"a125\", \"a126\", \"a127\", \"a128\", \"a129\",\n  \"a130\", \"a131\", \"a132\", \"a133\", \"a134\", \"a135\", \"a136\", \"a137\", \"a138\",\n  \"a139\", \"a140\", \"a141\", \"a142\", \"a143\", \"a144\", \"a145\", \"a146\", \"a147\",\n  \"a148\", \"a149\", \"a150\", \"a151\", \"a152\", \"a153\", \"a154\", \"a155\", \"a156\",\n  \"a157\", \"a158\", \"a159\", \"a160\", \"a161\", \"a163\", \"a164\", \"a196\", \"a165\",\n  \"a192\", \"a166\", \"a167\", \"a168\", \"a169\", \"a170\", \"a171\", \"a172\", \"a173\",\n  \"a162\", \"a174\", \"a175\", \"a176\", \"a177\", \"a178\", \"a179\", \"a193\", \"a180\",\n  \"a199\", \"a181\", \"a200\", \"a182\", \"\", \"a201\", \"a183\", \"a184\", \"a197\", \"a185\",\n  \"a194\", \"a198\", \"a186\", \"a195\", \"a187\", \"a188\", \"a189\", \"a190\", \"a191\", \"\"];\n\nfunction getEncoding(encodingName) {\n  switch (encodingName) {\n    case \"WinAnsiEncoding\":\n      return WinAnsiEncoding;\n    case \"StandardEncoding\":\n      return StandardEncoding;\n    case \"MacRomanEncoding\":\n      return MacRomanEncoding;\n    case \"SymbolSetEncoding\":\n      return SymbolSetEncoding;\n    case \"ZapfDingbatsEncoding\":\n      return ZapfDingbatsEncoding;\n    case \"ExpertEncoding\":\n      return ExpertEncoding;\n    case \"MacExpertEncoding\":\n      return MacExpertEncoding;\n    default:\n      return null;\n  }\n}\n\nexport {\n  ExpertEncoding,\n  getEncoding,\n  MacRomanEncoding,\n  StandardEncoding,\n  SymbolSetEncoding,\n  WinAnsiEncoding,\n  ZapfDingbatsEncoding,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getLookupTableFactory } from \"./core_utils.js\";\n\nconst getGlyphsUnicode = getLookupTableFactory(function (t) {\n  t.A = 0x0041;\n  t.AE = 0x00c6;\n  t.AEacute = 0x01fc;\n  t.AEmacron = 0x01e2;\n  t.AEsmall = 0xf7e6;\n  t.Aacute = 0x00c1;\n  t.Aacutesmall = 0xf7e1;\n  t.Abreve = 0x0102;\n  t.Abreveacute = 0x1eae;\n  t.Abrevecyrillic = 0x04d0;\n  t.Abrevedotbelow = 0x1eb6;\n  t.Abrevegrave = 0x1eb0;\n  t.Abrevehookabove = 0x1eb2;\n  t.Abrevetilde = 0x1eb4;\n  t.Acaron = 0x01cd;\n  t.Acircle = 0x24b6;\n  t.Acircumflex = 0x00c2;\n  t.Acircumflexacute = 0x1ea4;\n  t.Acircumflexdotbelow = 0x1eac;\n  t.Acircumflexgrave = 0x1ea6;\n  t.Acircumflexhookabove = 0x1ea8;\n  t.Acircumflexsmall = 0xf7e2;\n  t.Acircumflextilde = 0x1eaa;\n  t.Acute = 0xf6c9;\n  t.Acutesmall = 0xf7b4;\n  t.Acyrillic = 0x0410;\n  t.Adblgrave = 0x0200;\n  t.Adieresis = 0x00c4;\n  t.Adieresiscyrillic = 0x04d2;\n  t.Adieresismacron = 0x01de;\n  t.Adieresissmall = 0xf7e4;\n  t.Adotbelow = 0x1ea0;\n  t.Adotmacron = 0x01e0;\n  t.Agrave = 0x00c0;\n  t.Agravesmall = 0xf7e0;\n  t.Ahookabove = 0x1ea2;\n  t.Aiecyrillic = 0x04d4;\n  t.Ainvertedbreve = 0x0202;\n  t.Alpha = 0x0391;\n  t.Alphatonos = 0x0386;\n  t.Amacron = 0x0100;\n  t.Amonospace = 0xff21;\n  t.Aogonek = 0x0104;\n  t.Aring = 0x00c5;\n  t.Aringacute = 0x01fa;\n  t.Aringbelow = 0x1e00;\n  t.Aringsmall = 0xf7e5;\n  t.Asmall = 0xf761;\n  t.Atilde = 0x00c3;\n  t.Atildesmall = 0xf7e3;\n  t.Aybarmenian = 0x0531;\n  t.B = 0x0042;\n  t.Bcircle = 0x24b7;\n  t.Bdotaccent = 0x1e02;\n  t.Bdotbelow = 0x1e04;\n  t.Becyrillic = 0x0411;\n  t.Benarmenian = 0x0532;\n  t.Beta = 0x0392;\n  t.Bhook = 0x0181;\n  t.Blinebelow = 0x1e06;\n  t.Bmonospace = 0xff22;\n  t.Brevesmall = 0xf6f4;\n  t.Bsmall = 0xf762;\n  t.Btopbar = 0x0182;\n  t.C = 0x0043;\n  t.Caarmenian = 0x053e;\n  t.Cacute = 0x0106;\n  t.Caron = 0xf6ca;\n  t.Caronsmall = 0xf6f5;\n  t.Ccaron = 0x010c;\n  t.Ccedilla = 0x00c7;\n  t.Ccedillaacute = 0x1e08;\n  t.Ccedillasmall = 0xf7e7;\n  t.Ccircle = 0x24b8;\n  t.Ccircumflex = 0x0108;\n  t.Cdot = 0x010a;\n  t.Cdotaccent = 0x010a;\n  t.Cedillasmall = 0xf7b8;\n  t.Chaarmenian = 0x0549;\n  t.Cheabkhasiancyrillic = 0x04bc;\n  t.Checyrillic = 0x0427;\n  t.Chedescenderabkhasiancyrillic = 0x04be;\n  t.Chedescendercyrillic = 0x04b6;\n  t.Chedieresiscyrillic = 0x04f4;\n  t.Cheharmenian = 0x0543;\n  t.Chekhakassiancyrillic = 0x04cb;\n  t.Cheverticalstrokecyrillic = 0x04b8;\n  t.Chi = 0x03a7;\n  t.Chook = 0x0187;\n  t.Circumflexsmall = 0xf6f6;\n  t.Cmonospace = 0xff23;\n  t.Coarmenian = 0x0551;\n  t.Csmall = 0xf763;\n  t.D = 0x0044;\n  t.DZ = 0x01f1;\n  t.DZcaron = 0x01c4;\n  t.Daarmenian = 0x0534;\n  t.Dafrican = 0x0189;\n  t.Dcaron = 0x010e;\n  t.Dcedilla = 0x1e10;\n  t.Dcircle = 0x24b9;\n  t.Dcircumflexbelow = 0x1e12;\n  t.Dcroat = 0x0110;\n  t.Ddotaccent = 0x1e0a;\n  t.Ddotbelow = 0x1e0c;\n  t.Decyrillic = 0x0414;\n  t.Deicoptic = 0x03ee;\n  t.Delta = 0x2206;\n  t.Deltagreek = 0x0394;\n  t.Dhook = 0x018a;\n  t.Dieresis = 0xf6cb;\n  t.DieresisAcute = 0xf6cc;\n  t.DieresisGrave = 0xf6cd;\n  t.Dieresissmall = 0xf7a8;\n  t.Digammagreek = 0x03dc;\n  t.Djecyrillic = 0x0402;\n  t.Dlinebelow = 0x1e0e;\n  t.Dmonospace = 0xff24;\n  t.Dotaccentsmall = 0xf6f7;\n  t.Dslash = 0x0110;\n  t.Dsmall = 0xf764;\n  t.Dtopbar = 0x018b;\n  t.Dz = 0x01f2;\n  t.Dzcaron = 0x01c5;\n  t.Dzeabkhasiancyrillic = 0x04e0;\n  t.Dzecyrillic = 0x0405;\n  t.Dzhecyrillic = 0x040f;\n  t.E = 0x0045;\n  t.Eacute = 0x00c9;\n  t.Eacutesmall = 0xf7e9;\n  t.Ebreve = 0x0114;\n  t.Ecaron = 0x011a;\n  t.Ecedillabreve = 0x1e1c;\n  t.Echarmenian = 0x0535;\n  t.Ecircle = 0x24ba;\n  t.Ecircumflex = 0x00ca;\n  t.Ecircumflexacute = 0x1ebe;\n  t.Ecircumflexbelow = 0x1e18;\n  t.Ecircumflexdotbelow = 0x1ec6;\n  t.Ecircumflexgrave = 0x1ec0;\n  t.Ecircumflexhookabove = 0x1ec2;\n  t.Ecircumflexsmall = 0xf7ea;\n  t.Ecircumflextilde = 0x1ec4;\n  t.Ecyrillic = 0x0404;\n  t.Edblgrave = 0x0204;\n  t.Edieresis = 0x00cb;\n  t.Edieresissmall = 0xf7eb;\n  t.Edot = 0x0116;\n  t.Edotaccent = 0x0116;\n  t.Edotbelow = 0x1eb8;\n  t.Efcyrillic = 0x0424;\n  t.Egrave = 0x00c8;\n  t.Egravesmall = 0xf7e8;\n  t.Eharmenian = 0x0537;\n  t.Ehookabove = 0x1eba;\n  t.Eightroman = 0x2167;\n  t.Einvertedbreve = 0x0206;\n  t.Eiotifiedcyrillic = 0x0464;\n  t.Elcyrillic = 0x041b;\n  t.Elevenroman = 0x216a;\n  t.Emacron = 0x0112;\n  t.Emacronacute = 0x1e16;\n  t.Emacrongrave = 0x1e14;\n  t.Emcyrillic = 0x041c;\n  t.Emonospace = 0xff25;\n  t.Encyrillic = 0x041d;\n  t.Endescendercyrillic = 0x04a2;\n  t.Eng = 0x014a;\n  t.Enghecyrillic = 0x04a4;\n  t.Enhookcyrillic = 0x04c7;\n  t.Eogonek = 0x0118;\n  t.Eopen = 0x0190;\n  t.Epsilon = 0x0395;\n  t.Epsilontonos = 0x0388;\n  t.Ercyrillic = 0x0420;\n  t.Ereversed = 0x018e;\n  t.Ereversedcyrillic = 0x042d;\n  t.Escyrillic = 0x0421;\n  t.Esdescendercyrillic = 0x04aa;\n  t.Esh = 0x01a9;\n  t.Esmall = 0xf765;\n  t.Eta = 0x0397;\n  t.Etarmenian = 0x0538;\n  t.Etatonos = 0x0389;\n  t.Eth = 0x00d0;\n  t.Ethsmall = 0xf7f0;\n  t.Etilde = 0x1ebc;\n  t.Etildebelow = 0x1e1a;\n  t.Euro = 0x20ac;\n  t.Ezh = 0x01b7;\n  t.Ezhcaron = 0x01ee;\n  t.Ezhreversed = 0x01b8;\n  t.F = 0x0046;\n  t.Fcircle = 0x24bb;\n  t.Fdotaccent = 0x1e1e;\n  t.Feharmenian = 0x0556;\n  t.Feicoptic = 0x03e4;\n  t.Fhook = 0x0191;\n  t.Fitacyrillic = 0x0472;\n  t.Fiveroman = 0x2164;\n  t.Fmonospace = 0xff26;\n  t.Fourroman = 0x2163;\n  t.Fsmall = 0xf766;\n  t.G = 0x0047;\n  t.GBsquare = 0x3387;\n  t.Gacute = 0x01f4;\n  t.Gamma = 0x0393;\n  t.Gammaafrican = 0x0194;\n  t.Gangiacoptic = 0x03ea;\n  t.Gbreve = 0x011e;\n  t.Gcaron = 0x01e6;\n  t.Gcedilla = 0x0122;\n  t.Gcircle = 0x24bc;\n  t.Gcircumflex = 0x011c;\n  t.Gcommaaccent = 0x0122;\n  t.Gdot = 0x0120;\n  t.Gdotaccent = 0x0120;\n  t.Gecyrillic = 0x0413;\n  t.Ghadarmenian = 0x0542;\n  t.Ghemiddlehookcyrillic = 0x0494;\n  t.Ghestrokecyrillic = 0x0492;\n  t.Gheupturncyrillic = 0x0490;\n  t.Ghook = 0x0193;\n  t.Gimarmenian = 0x0533;\n  t.Gjecyrillic = 0x0403;\n  t.Gmacron = 0x1e20;\n  t.Gmonospace = 0xff27;\n  t.Grave = 0xf6ce;\n  t.Gravesmall = 0xf760;\n  t.Gsmall = 0xf767;\n  t.Gsmallhook = 0x029b;\n  t.Gstroke = 0x01e4;\n  t.H = 0x0048;\n  t.H18533 = 0x25cf;\n  t.H18543 = 0x25aa;\n  t.H18551 = 0x25ab;\n  t.H22073 = 0x25a1;\n  t.HPsquare = 0x33cb;\n  t.Haabkhasiancyrillic = 0x04a8;\n  t.Hadescendercyrillic = 0x04b2;\n  t.Hardsigncyrillic = 0x042a;\n  t.Hbar = 0x0126;\n  t.Hbrevebelow = 0x1e2a;\n  t.Hcedilla = 0x1e28;\n  t.Hcircle = 0x24bd;\n  t.Hcircumflex = 0x0124;\n  t.Hdieresis = 0x1e26;\n  t.Hdotaccent = 0x1e22;\n  t.Hdotbelow = 0x1e24;\n  t.Hmonospace = 0xff28;\n  t.Hoarmenian = 0x0540;\n  t.Horicoptic = 0x03e8;\n  t.Hsmall = 0xf768;\n  t.Hungarumlaut = 0xf6cf;\n  t.Hungarumlautsmall = 0xf6f8;\n  t.Hzsquare = 0x3390;\n  t.I = 0x0049;\n  t.IAcyrillic = 0x042f;\n  t.IJ = 0x0132;\n  t.IUcyrillic = 0x042e;\n  t.Iacute = 0x00cd;\n  t.Iacutesmall = 0xf7ed;\n  t.Ibreve = 0x012c;\n  t.Icaron = 0x01cf;\n  t.Icircle = 0x24be;\n  t.Icircumflex = 0x00ce;\n  t.Icircumflexsmall = 0xf7ee;\n  t.Icyrillic = 0x0406;\n  t.Idblgrave = 0x0208;\n  t.Idieresis = 0x00cf;\n  t.Idieresisacute = 0x1e2e;\n  t.Idieresiscyrillic = 0x04e4;\n  t.Idieresissmall = 0xf7ef;\n  t.Idot = 0x0130;\n  t.Idotaccent = 0x0130;\n  t.Idotbelow = 0x1eca;\n  t.Iebrevecyrillic = 0x04d6;\n  t.Iecyrillic = 0x0415;\n  t.Ifraktur = 0x2111;\n  t.Igrave = 0x00cc;\n  t.Igravesmall = 0xf7ec;\n  t.Ihookabove = 0x1ec8;\n  t.Iicyrillic = 0x0418;\n  t.Iinvertedbreve = 0x020a;\n  t.Iishortcyrillic = 0x0419;\n  t.Imacron = 0x012a;\n  t.Imacroncyrillic = 0x04e2;\n  t.Imonospace = 0xff29;\n  t.Iniarmenian = 0x053b;\n  t.Iocyrillic = 0x0401;\n  t.Iogonek = 0x012e;\n  t.Iota = 0x0399;\n  t.Iotaafrican = 0x0196;\n  t.Iotadieresis = 0x03aa;\n  t.Iotatonos = 0x038a;\n  t.Ismall = 0xf769;\n  t.Istroke = 0x0197;\n  t.Itilde = 0x0128;\n  t.Itildebelow = 0x1e2c;\n  t.Izhitsacyrillic = 0x0474;\n  t.Izhitsadblgravecyrillic = 0x0476;\n  t.J = 0x004a;\n  t.Jaarmenian = 0x0541;\n  t.Jcircle = 0x24bf;\n  t.Jcircumflex = 0x0134;\n  t.Jecyrillic = 0x0408;\n  t.Jheharmenian = 0x054b;\n  t.Jmonospace = 0xff2a;\n  t.Jsmall = 0xf76a;\n  t.K = 0x004b;\n  t.KBsquare = 0x3385;\n  t.KKsquare = 0x33cd;\n  t.Kabashkircyrillic = 0x04a0;\n  t.Kacute = 0x1e30;\n  t.Kacyrillic = 0x041a;\n  t.Kadescendercyrillic = 0x049a;\n  t.Kahookcyrillic = 0x04c3;\n  t.Kappa = 0x039a;\n  t.Kastrokecyrillic = 0x049e;\n  t.Kaverticalstrokecyrillic = 0x049c;\n  t.Kcaron = 0x01e8;\n  t.Kcedilla = 0x0136;\n  t.Kcircle = 0x24c0;\n  t.Kcommaaccent = 0x0136;\n  t.Kdotbelow = 0x1e32;\n  t.Keharmenian = 0x0554;\n  t.Kenarmenian = 0x053f;\n  t.Khacyrillic = 0x0425;\n  t.Kheicoptic = 0x03e6;\n  t.Khook = 0x0198;\n  t.Kjecyrillic = 0x040c;\n  t.Klinebelow = 0x1e34;\n  t.Kmonospace = 0xff2b;\n  t.Koppacyrillic = 0x0480;\n  t.Koppagreek = 0x03de;\n  t.Ksicyrillic = 0x046e;\n  t.Ksmall = 0xf76b;\n  t.L = 0x004c;\n  t.LJ = 0x01c7;\n  t.LL = 0xf6bf;\n  t.Lacute = 0x0139;\n  t.Lambda = 0x039b;\n  t.Lcaron = 0x013d;\n  t.Lcedilla = 0x013b;\n  t.Lcircle = 0x24c1;\n  t.Lcircumflexbelow = 0x1e3c;\n  t.Lcommaaccent = 0x013b;\n  t.Ldot = 0x013f;\n  t.Ldotaccent = 0x013f;\n  t.Ldotbelow = 0x1e36;\n  t.Ldotbelowmacron = 0x1e38;\n  t.Liwnarmenian = 0x053c;\n  t.Lj = 0x01c8;\n  t.Ljecyrillic = 0x0409;\n  t.Llinebelow = 0x1e3a;\n  t.Lmonospace = 0xff2c;\n  t.Lslash = 0x0141;\n  t.Lslashsmall = 0xf6f9;\n  t.Lsmall = 0xf76c;\n  t.M = 0x004d;\n  t.MBsquare = 0x3386;\n  t.Macron = 0xf6d0;\n  t.Macronsmall = 0xf7af;\n  t.Macute = 0x1e3e;\n  t.Mcircle = 0x24c2;\n  t.Mdotaccent = 0x1e40;\n  t.Mdotbelow = 0x1e42;\n  t.Menarmenian = 0x0544;\n  t.Mmonospace = 0xff2d;\n  t.Msmall = 0xf76d;\n  t.Mturned = 0x019c;\n  t.Mu = 0x039c;\n  t.N = 0x004e;\n  t.NJ = 0x01ca;\n  t.Nacute = 0x0143;\n  t.Ncaron = 0x0147;\n  t.Ncedilla = 0x0145;\n  t.Ncircle = 0x24c3;\n  t.Ncircumflexbelow = 0x1e4a;\n  t.Ncommaaccent = 0x0145;\n  t.Ndotaccent = 0x1e44;\n  t.Ndotbelow = 0x1e46;\n  t.Nhookleft = 0x019d;\n  t.Nineroman = 0x2168;\n  t.Nj = 0x01cb;\n  t.Njecyrillic = 0x040a;\n  t.Nlinebelow = 0x1e48;\n  t.Nmonospace = 0xff2e;\n  t.Nowarmenian = 0x0546;\n  t.Nsmall = 0xf76e;\n  t.Ntilde = 0x00d1;\n  t.Ntildesmall = 0xf7f1;\n  t.Nu = 0x039d;\n  t.O = 0x004f;\n  t.OE = 0x0152;\n  t.OEsmall = 0xf6fa;\n  t.Oacute = 0x00d3;\n  t.Oacutesmall = 0xf7f3;\n  t.Obarredcyrillic = 0x04e8;\n  t.Obarreddieresiscyrillic = 0x04ea;\n  t.Obreve = 0x014e;\n  t.Ocaron = 0x01d1;\n  t.Ocenteredtilde = 0x019f;\n  t.Ocircle = 0x24c4;\n  t.Ocircumflex = 0x00d4;\n  t.Ocircumflexacute = 0x1ed0;\n  t.Ocircumflexdotbelow = 0x1ed8;\n  t.Ocircumflexgrave = 0x1ed2;\n  t.Ocircumflexhookabove = 0x1ed4;\n  t.Ocircumflexsmall = 0xf7f4;\n  t.Ocircumflextilde = 0x1ed6;\n  t.Ocyrillic = 0x041e;\n  t.Odblacute = 0x0150;\n  t.Odblgrave = 0x020c;\n  t.Odieresis = 0x00d6;\n  t.Odieresiscyrillic = 0x04e6;\n  t.Odieresissmall = 0xf7f6;\n  t.Odotbelow = 0x1ecc;\n  t.Ogoneksmall = 0xf6fb;\n  t.Ograve = 0x00d2;\n  t.Ogravesmall = 0xf7f2;\n  t.Oharmenian = 0x0555;\n  t.Ohm = 0x2126;\n  t.Ohookabove = 0x1ece;\n  t.Ohorn = 0x01a0;\n  t.Ohornacute = 0x1eda;\n  t.Ohorndotbelow = 0x1ee2;\n  t.Ohorngrave = 0x1edc;\n  t.Ohornhookabove = 0x1ede;\n  t.Ohorntilde = 0x1ee0;\n  t.Ohungarumlaut = 0x0150;\n  t.Oi = 0x01a2;\n  t.Oinvertedbreve = 0x020e;\n  t.Omacron = 0x014c;\n  t.Omacronacute = 0x1e52;\n  t.Omacrongrave = 0x1e50;\n  t.Omega = 0x2126;\n  t.Omegacyrillic = 0x0460;\n  t.Omegagreek = 0x03a9;\n  t.Omegaroundcyrillic = 0x047a;\n  t.Omegatitlocyrillic = 0x047c;\n  t.Omegatonos = 0x038f;\n  t.Omicron = 0x039f;\n  t.Omicrontonos = 0x038c;\n  t.Omonospace = 0xff2f;\n  t.Oneroman = 0x2160;\n  t.Oogonek = 0x01ea;\n  t.Oogonekmacron = 0x01ec;\n  t.Oopen = 0x0186;\n  t.Oslash = 0x00d8;\n  t.Oslashacute = 0x01fe;\n  t.Oslashsmall = 0xf7f8;\n  t.Osmall = 0xf76f;\n  t.Ostrokeacute = 0x01fe;\n  t.Otcyrillic = 0x047e;\n  t.Otilde = 0x00d5;\n  t.Otildeacute = 0x1e4c;\n  t.Otildedieresis = 0x1e4e;\n  t.Otildesmall = 0xf7f5;\n  t.P = 0x0050;\n  t.Pacute = 0x1e54;\n  t.Pcircle = 0x24c5;\n  t.Pdotaccent = 0x1e56;\n  t.Pecyrillic = 0x041f;\n  t.Peharmenian = 0x054a;\n  t.Pemiddlehookcyrillic = 0x04a6;\n  t.Phi = 0x03a6;\n  t.Phook = 0x01a4;\n  t.Pi = 0x03a0;\n  t.Piwrarmenian = 0x0553;\n  t.Pmonospace = 0xff30;\n  t.Psi = 0x03a8;\n  t.Psicyrillic = 0x0470;\n  t.Psmall = 0xf770;\n  t.Q = 0x0051;\n  t.Qcircle = 0x24c6;\n  t.Qmonospace = 0xff31;\n  t.Qsmall = 0xf771;\n  t.R = 0x0052;\n  t.Raarmenian = 0x054c;\n  t.Racute = 0x0154;\n  t.Rcaron = 0x0158;\n  t.Rcedilla = 0x0156;\n  t.Rcircle = 0x24c7;\n  t.Rcommaaccent = 0x0156;\n  t.Rdblgrave = 0x0210;\n  t.Rdotaccent = 0x1e58;\n  t.Rdotbelow = 0x1e5a;\n  t.Rdotbelowmacron = 0x1e5c;\n  t.Reharmenian = 0x0550;\n  t.Rfraktur = 0x211c;\n  t.Rho = 0x03a1;\n  t.Ringsmall = 0xf6fc;\n  t.Rinvertedbreve = 0x0212;\n  t.Rlinebelow = 0x1e5e;\n  t.Rmonospace = 0xff32;\n  t.Rsmall = 0xf772;\n  t.Rsmallinverted = 0x0281;\n  t.Rsmallinvertedsuperior = 0x02b6;\n  t.S = 0x0053;\n  t.SF010000 = 0x250c;\n  t.SF020000 = 0x2514;\n  t.SF030000 = 0x2510;\n  t.SF040000 = 0x2518;\n  t.SF050000 = 0x253c;\n  t.SF060000 = 0x252c;\n  t.SF070000 = 0x2534;\n  t.SF080000 = 0x251c;\n  t.SF090000 = 0x2524;\n  t.SF100000 = 0x2500;\n  t.SF110000 = 0x2502;\n  t.SF190000 = 0x2561;\n  t.SF200000 = 0x2562;\n  t.SF210000 = 0x2556;\n  t.SF220000 = 0x2555;\n  t.SF230000 = 0x2563;\n  t.SF240000 = 0x2551;\n  t.SF250000 = 0x2557;\n  t.SF260000 = 0x255d;\n  t.SF270000 = 0x255c;\n  t.SF280000 = 0x255b;\n  t.SF360000 = 0x255e;\n  t.SF370000 = 0x255f;\n  t.SF380000 = 0x255a;\n  t.SF390000 = 0x2554;\n  t.SF400000 = 0x2569;\n  t.SF410000 = 0x2566;\n  t.SF420000 = 0x2560;\n  t.SF430000 = 0x2550;\n  t.SF440000 = 0x256c;\n  t.SF450000 = 0x2567;\n  t.SF460000 = 0x2568;\n  t.SF470000 = 0x2564;\n  t.SF480000 = 0x2565;\n  t.SF490000 = 0x2559;\n  t.SF500000 = 0x2558;\n  t.SF510000 = 0x2552;\n  t.SF520000 = 0x2553;\n  t.SF530000 = 0x256b;\n  t.SF540000 = 0x256a;\n  t.Sacute = 0x015a;\n  t.Sacutedotaccent = 0x1e64;\n  t.Sampigreek = 0x03e0;\n  t.Scaron = 0x0160;\n  t.Scarondotaccent = 0x1e66;\n  t.Scaronsmall = 0xf6fd;\n  t.Scedilla = 0x015e;\n  t.Schwa = 0x018f;\n  t.Schwacyrillic = 0x04d8;\n  t.Schwadieresiscyrillic = 0x04da;\n  t.Scircle = 0x24c8;\n  t.Scircumflex = 0x015c;\n  t.Scommaaccent = 0x0218;\n  t.Sdotaccent = 0x1e60;\n  t.Sdotbelow = 0x1e62;\n  t.Sdotbelowdotaccent = 0x1e68;\n  t.Seharmenian = 0x054d;\n  t.Sevenroman = 0x2166;\n  t.Shaarmenian = 0x0547;\n  t.Shacyrillic = 0x0428;\n  t.Shchacyrillic = 0x0429;\n  t.Sheicoptic = 0x03e2;\n  t.Shhacyrillic = 0x04ba;\n  t.Shimacoptic = 0x03ec;\n  t.Sigma = 0x03a3;\n  t.Sixroman = 0x2165;\n  t.Smonospace = 0xff33;\n  t.Softsigncyrillic = 0x042c;\n  t.Ssmall = 0xf773;\n  t.Stigmagreek = 0x03da;\n  t.T = 0x0054;\n  t.Tau = 0x03a4;\n  t.Tbar = 0x0166;\n  t.Tcaron = 0x0164;\n  t.Tcedilla = 0x0162;\n  t.Tcircle = 0x24c9;\n  t.Tcircumflexbelow = 0x1e70;\n  t.Tcommaaccent = 0x0162;\n  t.Tdotaccent = 0x1e6a;\n  t.Tdotbelow = 0x1e6c;\n  t.Tecyrillic = 0x0422;\n  t.Tedescendercyrillic = 0x04ac;\n  t.Tenroman = 0x2169;\n  t.Tetsecyrillic = 0x04b4;\n  t.Theta = 0x0398;\n  t.Thook = 0x01ac;\n  t.Thorn = 0x00de;\n  t.Thornsmall = 0xf7fe;\n  t.Threeroman = 0x2162;\n  t.Tildesmall = 0xf6fe;\n  t.Tiwnarmenian = 0x054f;\n  t.Tlinebelow = 0x1e6e;\n  t.Tmonospace = 0xff34;\n  t.Toarmenian = 0x0539;\n  t.Tonefive = 0x01bc;\n  t.Tonesix = 0x0184;\n  t.Tonetwo = 0x01a7;\n  t.Tretroflexhook = 0x01ae;\n  t.Tsecyrillic = 0x0426;\n  t.Tshecyrillic = 0x040b;\n  t.Tsmall = 0xf774;\n  t.Twelveroman = 0x216b;\n  t.Tworoman = 0x2161;\n  t.U = 0x0055;\n  t.Uacute = 0x00da;\n  t.Uacutesmall = 0xf7fa;\n  t.Ubreve = 0x016c;\n  t.Ucaron = 0x01d3;\n  t.Ucircle = 0x24ca;\n  t.Ucircumflex = 0x00db;\n  t.Ucircumflexbelow = 0x1e76;\n  t.Ucircumflexsmall = 0xf7fb;\n  t.Ucyrillic = 0x0423;\n  t.Udblacute = 0x0170;\n  t.Udblgrave = 0x0214;\n  t.Udieresis = 0x00dc;\n  t.Udieresisacute = 0x01d7;\n  t.Udieresisbelow = 0x1e72;\n  t.Udieresiscaron = 0x01d9;\n  t.Udieresiscyrillic = 0x04f0;\n  t.Udieresisgrave = 0x01db;\n  t.Udieresismacron = 0x01d5;\n  t.Udieresissmall = 0xf7fc;\n  t.Udotbelow = 0x1ee4;\n  t.Ugrave = 0x00d9;\n  t.Ugravesmall = 0xf7f9;\n  t.Uhookabove = 0x1ee6;\n  t.Uhorn = 0x01af;\n  t.Uhornacute = 0x1ee8;\n  t.Uhorndotbelow = 0x1ef0;\n  t.Uhorngrave = 0x1eea;\n  t.Uhornhookabove = 0x1eec;\n  t.Uhorntilde = 0x1eee;\n  t.Uhungarumlaut = 0x0170;\n  t.Uhungarumlautcyrillic = 0x04f2;\n  t.Uinvertedbreve = 0x0216;\n  t.Ukcyrillic = 0x0478;\n  t.Umacron = 0x016a;\n  t.Umacroncyrillic = 0x04ee;\n  t.Umacrondieresis = 0x1e7a;\n  t.Umonospace = 0xff35;\n  t.Uogonek = 0x0172;\n  t.Upsilon = 0x03a5;\n  t.Upsilon1 = 0x03d2;\n  t.Upsilonacutehooksymbolgreek = 0x03d3;\n  t.Upsilonafrican = 0x01b1;\n  t.Upsilondieresis = 0x03ab;\n  t.Upsilondieresishooksymbolgreek = 0x03d4;\n  t.Upsilonhooksymbol = 0x03d2;\n  t.Upsilontonos = 0x038e;\n  t.Uring = 0x016e;\n  t.Ushortcyrillic = 0x040e;\n  t.Usmall = 0xf775;\n  t.Ustraightcyrillic = 0x04ae;\n  t.Ustraightstrokecyrillic = 0x04b0;\n  t.Utilde = 0x0168;\n  t.Utildeacute = 0x1e78;\n  t.Utildebelow = 0x1e74;\n  t.V = 0x0056;\n  t.Vcircle = 0x24cb;\n  t.Vdotbelow = 0x1e7e;\n  t.Vecyrillic = 0x0412;\n  t.Vewarmenian = 0x054e;\n  t.Vhook = 0x01b2;\n  t.Vmonospace = 0xff36;\n  t.Voarmenian = 0x0548;\n  t.Vsmall = 0xf776;\n  t.Vtilde = 0x1e7c;\n  t.W = 0x0057;\n  t.Wacute = 0x1e82;\n  t.Wcircle = 0x24cc;\n  t.Wcircumflex = 0x0174;\n  t.Wdieresis = 0x1e84;\n  t.Wdotaccent = 0x1e86;\n  t.Wdotbelow = 0x1e88;\n  t.Wgrave = 0x1e80;\n  t.Wmonospace = 0xff37;\n  t.Wsmall = 0xf777;\n  t.X = 0x0058;\n  t.Xcircle = 0x24cd;\n  t.Xdieresis = 0x1e8c;\n  t.Xdotaccent = 0x1e8a;\n  t.Xeharmenian = 0x053d;\n  t.Xi = 0x039e;\n  t.Xmonospace = 0xff38;\n  t.Xsmall = 0xf778;\n  t.Y = 0x0059;\n  t.Yacute = 0x00dd;\n  t.Yacutesmall = 0xf7fd;\n  t.Yatcyrillic = 0x0462;\n  t.Ycircle = 0x24ce;\n  t.Ycircumflex = 0x0176;\n  t.Ydieresis = 0x0178;\n  t.Ydieresissmall = 0xf7ff;\n  t.Ydotaccent = 0x1e8e;\n  t.Ydotbelow = 0x1ef4;\n  t.Yericyrillic = 0x042b;\n  t.Yerudieresiscyrillic = 0x04f8;\n  t.Ygrave = 0x1ef2;\n  t.Yhook = 0x01b3;\n  t.Yhookabove = 0x1ef6;\n  t.Yiarmenian = 0x0545;\n  t.Yicyrillic = 0x0407;\n  t.Yiwnarmenian = 0x0552;\n  t.Ymonospace = 0xff39;\n  t.Ysmall = 0xf779;\n  t.Ytilde = 0x1ef8;\n  t.Yusbigcyrillic = 0x046a;\n  t.Yusbigiotifiedcyrillic = 0x046c;\n  t.Yuslittlecyrillic = 0x0466;\n  t.Yuslittleiotifiedcyrillic = 0x0468;\n  t.Z = 0x005a;\n  t.Zaarmenian = 0x0536;\n  t.Zacute = 0x0179;\n  t.Zcaron = 0x017d;\n  t.Zcaronsmall = 0xf6ff;\n  t.Zcircle = 0x24cf;\n  t.Zcircumflex = 0x1e90;\n  t.Zdot = 0x017b;\n  t.Zdotaccent = 0x017b;\n  t.Zdotbelow = 0x1e92;\n  t.Zecyrillic = 0x0417;\n  t.Zedescendercyrillic = 0x0498;\n  t.Zedieresiscyrillic = 0x04de;\n  t.Zeta = 0x0396;\n  t.Zhearmenian = 0x053a;\n  t.Zhebrevecyrillic = 0x04c1;\n  t.Zhecyrillic = 0x0416;\n  t.Zhedescendercyrillic = 0x0496;\n  t.Zhedieresiscyrillic = 0x04dc;\n  t.Zlinebelow = 0x1e94;\n  t.Zmonospace = 0xff3a;\n  t.Zsmall = 0xf77a;\n  t.Zstroke = 0x01b5;\n  t.a = 0x0061;\n  t.aabengali = 0x0986;\n  t.aacute = 0x00e1;\n  t.aadeva = 0x0906;\n  t.aagujarati = 0x0a86;\n  t.aagurmukhi = 0x0a06;\n  t.aamatragurmukhi = 0x0a3e;\n  t.aarusquare = 0x3303;\n  t.aavowelsignbengali = 0x09be;\n  t.aavowelsigndeva = 0x093e;\n  t.aavowelsigngujarati = 0x0abe;\n  t.abbreviationmarkarmenian = 0x055f;\n  t.abbreviationsigndeva = 0x0970;\n  t.abengali = 0x0985;\n  t.abopomofo = 0x311a;\n  t.abreve = 0x0103;\n  t.abreveacute = 0x1eaf;\n  t.abrevecyrillic = 0x04d1;\n  t.abrevedotbelow = 0x1eb7;\n  t.abrevegrave = 0x1eb1;\n  t.abrevehookabove = 0x1eb3;\n  t.abrevetilde = 0x1eb5;\n  t.acaron = 0x01ce;\n  t.acircle = 0x24d0;\n  t.acircumflex = 0x00e2;\n  t.acircumflexacute = 0x1ea5;\n  t.acircumflexdotbelow = 0x1ead;\n  t.acircumflexgrave = 0x1ea7;\n  t.acircumflexhookabove = 0x1ea9;\n  t.acircumflextilde = 0x1eab;\n  t.acute = 0x00b4;\n  t.acutebelowcmb = 0x0317;\n  t.acutecmb = 0x0301;\n  t.acutecomb = 0x0301;\n  t.acutedeva = 0x0954;\n  t.acutelowmod = 0x02cf;\n  t.acutetonecmb = 0x0341;\n  t.acyrillic = 0x0430;\n  t.adblgrave = 0x0201;\n  t.addakgurmukhi = 0x0a71;\n  t.adeva = 0x0905;\n  t.adieresis = 0x00e4;\n  t.adieresiscyrillic = 0x04d3;\n  t.adieresismacron = 0x01df;\n  t.adotbelow = 0x1ea1;\n  t.adotmacron = 0x01e1;\n  t.ae = 0x00e6;\n  t.aeacute = 0x01fd;\n  t.aekorean = 0x3150;\n  t.aemacron = 0x01e3;\n  t.afii00208 = 0x2015;\n  t.afii08941 = 0x20a4;\n  t.afii10017 = 0x0410;\n  t.afii10018 = 0x0411;\n  t.afii10019 = 0x0412;\n  t.afii10020 = 0x0413;\n  t.afii10021 = 0x0414;\n  t.afii10022 = 0x0415;\n  t.afii10023 = 0x0401;\n  t.afii10024 = 0x0416;\n  t.afii10025 = 0x0417;\n  t.afii10026 = 0x0418;\n  t.afii10027 = 0x0419;\n  t.afii10028 = 0x041a;\n  t.afii10029 = 0x041b;\n  t.afii10030 = 0x041c;\n  t.afii10031 = 0x041d;\n  t.afii10032 = 0x041e;\n  t.afii10033 = 0x041f;\n  t.afii10034 = 0x0420;\n  t.afii10035 = 0x0421;\n  t.afii10036 = 0x0422;\n  t.afii10037 = 0x0423;\n  t.afii10038 = 0x0424;\n  t.afii10039 = 0x0425;\n  t.afii10040 = 0x0426;\n  t.afii10041 = 0x0427;\n  t.afii10042 = 0x0428;\n  t.afii10043 = 0x0429;\n  t.afii10044 = 0x042a;\n  t.afii10045 = 0x042b;\n  t.afii10046 = 0x042c;\n  t.afii10047 = 0x042d;\n  t.afii10048 = 0x042e;\n  t.afii10049 = 0x042f;\n  t.afii10050 = 0x0490;\n  t.afii10051 = 0x0402;\n  t.afii10052 = 0x0403;\n  t.afii10053 = 0x0404;\n  t.afii10054 = 0x0405;\n  t.afii10055 = 0x0406;\n  t.afii10056 = 0x0407;\n  t.afii10057 = 0x0408;\n  t.afii10058 = 0x0409;\n  t.afii10059 = 0x040a;\n  t.afii10060 = 0x040b;\n  t.afii10061 = 0x040c;\n  t.afii10062 = 0x040e;\n  t.afii10063 = 0xf6c4;\n  t.afii10064 = 0xf6c5;\n  t.afii10065 = 0x0430;\n  t.afii10066 = 0x0431;\n  t.afii10067 = 0x0432;\n  t.afii10068 = 0x0433;\n  t.afii10069 = 0x0434;\n  t.afii10070 = 0x0435;\n  t.afii10071 = 0x0451;\n  t.afii10072 = 0x0436;\n  t.afii10073 = 0x0437;\n  t.afii10074 = 0x0438;\n  t.afii10075 = 0x0439;\n  t.afii10076 = 0x043a;\n  t.afii10077 = 0x043b;\n  t.afii10078 = 0x043c;\n  t.afii10079 = 0x043d;\n  t.afii10080 = 0x043e;\n  t.afii10081 = 0x043f;\n  t.afii10082 = 0x0440;\n  t.afii10083 = 0x0441;\n  t.afii10084 = 0x0442;\n  t.afii10085 = 0x0443;\n  t.afii10086 = 0x0444;\n  t.afii10087 = 0x0445;\n  t.afii10088 = 0x0446;\n  t.afii10089 = 0x0447;\n  t.afii10090 = 0x0448;\n  t.afii10091 = 0x0449;\n  t.afii10092 = 0x044a;\n  t.afii10093 = 0x044b;\n  t.afii10094 = 0x044c;\n  t.afii10095 = 0x044d;\n  t.afii10096 = 0x044e;\n  t.afii10097 = 0x044f;\n  t.afii10098 = 0x0491;\n  t.afii10099 = 0x0452;\n  t.afii10100 = 0x0453;\n  t.afii10101 = 0x0454;\n  t.afii10102 = 0x0455;\n  t.afii10103 = 0x0456;\n  t.afii10104 = 0x0457;\n  t.afii10105 = 0x0458;\n  t.afii10106 = 0x0459;\n  t.afii10107 = 0x045a;\n  t.afii10108 = 0x045b;\n  t.afii10109 = 0x045c;\n  t.afii10110 = 0x045e;\n  t.afii10145 = 0x040f;\n  t.afii10146 = 0x0462;\n  t.afii10147 = 0x0472;\n  t.afii10148 = 0x0474;\n  t.afii10192 = 0xf6c6;\n  t.afii10193 = 0x045f;\n  t.afii10194 = 0x0463;\n  t.afii10195 = 0x0473;\n  t.afii10196 = 0x0475;\n  t.afii10831 = 0xf6c7;\n  t.afii10832 = 0xf6c8;\n  t.afii10846 = 0x04d9;\n  t.afii299 = 0x200e;\n  t.afii300 = 0x200f;\n  t.afii301 = 0x200d;\n  t.afii57381 = 0x066a;\n  t.afii57388 = 0x060c;\n  t.afii57392 = 0x0660;\n  t.afii57393 = 0x0661;\n  t.afii57394 = 0x0662;\n  t.afii57395 = 0x0663;\n  t.afii57396 = 0x0664;\n  t.afii57397 = 0x0665;\n  t.afii57398 = 0x0666;\n  t.afii57399 = 0x0667;\n  t.afii57400 = 0x0668;\n  t.afii57401 = 0x0669;\n  t.afii57403 = 0x061b;\n  t.afii57407 = 0x061f;\n  t.afii57409 = 0x0621;\n  t.afii57410 = 0x0622;\n  t.afii57411 = 0x0623;\n  t.afii57412 = 0x0624;\n  t.afii57413 = 0x0625;\n  t.afii57414 = 0x0626;\n  t.afii57415 = 0x0627;\n  t.afii57416 = 0x0628;\n  t.afii57417 = 0x0629;\n  t.afii57418 = 0x062a;\n  t.afii57419 = 0x062b;\n  t.afii57420 = 0x062c;\n  t.afii57421 = 0x062d;\n  t.afii57422 = 0x062e;\n  t.afii57423 = 0x062f;\n  t.afii57424 = 0x0630;\n  t.afii57425 = 0x0631;\n  t.afii57426 = 0x0632;\n  t.afii57427 = 0x0633;\n  t.afii57428 = 0x0634;\n  t.afii57429 = 0x0635;\n  t.afii57430 = 0x0636;\n  t.afii57431 = 0x0637;\n  t.afii57432 = 0x0638;\n  t.afii57433 = 0x0639;\n  t.afii57434 = 0x063a;\n  t.afii57440 = 0x0640;\n  t.afii57441 = 0x0641;\n  t.afii57442 = 0x0642;\n  t.afii57443 = 0x0643;\n  t.afii57444 = 0x0644;\n  t.afii57445 = 0x0645;\n  t.afii57446 = 0x0646;\n  t.afii57448 = 0x0648;\n  t.afii57449 = 0x0649;\n  t.afii57450 = 0x064a;\n  t.afii57451 = 0x064b;\n  t.afii57452 = 0x064c;\n  t.afii57453 = 0x064d;\n  t.afii57454 = 0x064e;\n  t.afii57455 = 0x064f;\n  t.afii57456 = 0x0650;\n  t.afii57457 = 0x0651;\n  t.afii57458 = 0x0652;\n  t.afii57470 = 0x0647;\n  t.afii57505 = 0x06a4;\n  t.afii57506 = 0x067e;\n  t.afii57507 = 0x0686;\n  t.afii57508 = 0x0698;\n  t.afii57509 = 0x06af;\n  t.afii57511 = 0x0679;\n  t.afii57512 = 0x0688;\n  t.afii57513 = 0x0691;\n  t.afii57514 = 0x06ba;\n  t.afii57519 = 0x06d2;\n  t.afii57534 = 0x06d5;\n  t.afii57636 = 0x20aa;\n  t.afii57645 = 0x05be;\n  t.afii57658 = 0x05c3;\n  t.afii57664 = 0x05d0;\n  t.afii57665 = 0x05d1;\n  t.afii57666 = 0x05d2;\n  t.afii57667 = 0x05d3;\n  t.afii57668 = 0x05d4;\n  t.afii57669 = 0x05d5;\n  t.afii57670 = 0x05d6;\n  t.afii57671 = 0x05d7;\n  t.afii57672 = 0x05d8;\n  t.afii57673 = 0x05d9;\n  t.afii57674 = 0x05da;\n  t.afii57675 = 0x05db;\n  t.afii57676 = 0x05dc;\n  t.afii57677 = 0x05dd;\n  t.afii57678 = 0x05de;\n  t.afii57679 = 0x05df;\n  t.afii57680 = 0x05e0;\n  t.afii57681 = 0x05e1;\n  t.afii57682 = 0x05e2;\n  t.afii57683 = 0x05e3;\n  t.afii57684 = 0x05e4;\n  t.afii57685 = 0x05e5;\n  t.afii57686 = 0x05e6;\n  t.afii57687 = 0x05e7;\n  t.afii57688 = 0x05e8;\n  t.afii57689 = 0x05e9;\n  t.afii57690 = 0x05ea;\n  t.afii57694 = 0xfb2a;\n  t.afii57695 = 0xfb2b;\n  t.afii57700 = 0xfb4b;\n  t.afii57705 = 0xfb1f;\n  t.afii57716 = 0x05f0;\n  t.afii57717 = 0x05f1;\n  t.afii57718 = 0x05f2;\n  t.afii57723 = 0xfb35;\n  t.afii57793 = 0x05b4;\n  t.afii57794 = 0x05b5;\n  t.afii57795 = 0x05b6;\n  t.afii57796 = 0x05bb;\n  t.afii57797 = 0x05b8;\n  t.afii57798 = 0x05b7;\n  t.afii57799 = 0x05b0;\n  t.afii57800 = 0x05b2;\n  t.afii57801 = 0x05b1;\n  t.afii57802 = 0x05b3;\n  t.afii57803 = 0x05c2;\n  t.afii57804 = 0x05c1;\n  t.afii57806 = 0x05b9;\n  t.afii57807 = 0x05bc;\n  t.afii57839 = 0x05bd;\n  t.afii57841 = 0x05bf;\n  t.afii57842 = 0x05c0;\n  t.afii57929 = 0x02bc;\n  t.afii61248 = 0x2105;\n  t.afii61289 = 0x2113;\n  t.afii61352 = 0x2116;\n  t.afii61573 = 0x202c;\n  t.afii61574 = 0x202d;\n  t.afii61575 = 0x202e;\n  t.afii61664 = 0x200c;\n  t.afii63167 = 0x066d;\n  t.afii64937 = 0x02bd;\n  t.agrave = 0x00e0;\n  t.agujarati = 0x0a85;\n  t.agurmukhi = 0x0a05;\n  t.ahiragana = 0x3042;\n  t.ahookabove = 0x1ea3;\n  t.aibengali = 0x0990;\n  t.aibopomofo = 0x311e;\n  t.aideva = 0x0910;\n  t.aiecyrillic = 0x04d5;\n  t.aigujarati = 0x0a90;\n  t.aigurmukhi = 0x0a10;\n  t.aimatragurmukhi = 0x0a48;\n  t.ainarabic = 0x0639;\n  t.ainfinalarabic = 0xfeca;\n  t.aininitialarabic = 0xfecb;\n  t.ainmedialarabic = 0xfecc;\n  t.ainvertedbreve = 0x0203;\n  t.aivowelsignbengali = 0x09c8;\n  t.aivowelsigndeva = 0x0948;\n  t.aivowelsigngujarati = 0x0ac8;\n  t.akatakana = 0x30a2;\n  t.akatakanahalfwidth = 0xff71;\n  t.akorean = 0x314f;\n  t.alef = 0x05d0;\n  t.alefarabic = 0x0627;\n  t.alefdageshhebrew = 0xfb30;\n  t.aleffinalarabic = 0xfe8e;\n  t.alefhamzaabovearabic = 0x0623;\n  t.alefhamzaabovefinalarabic = 0xfe84;\n  t.alefhamzabelowarabic = 0x0625;\n  t.alefhamzabelowfinalarabic = 0xfe88;\n  t.alefhebrew = 0x05d0;\n  t.aleflamedhebrew = 0xfb4f;\n  t.alefmaddaabovearabic = 0x0622;\n  t.alefmaddaabovefinalarabic = 0xfe82;\n  t.alefmaksuraarabic = 0x0649;\n  t.alefmaksurafinalarabic = 0xfef0;\n  t.alefmaksurainitialarabic = 0xfef3;\n  t.alefmaksuramedialarabic = 0xfef4;\n  t.alefpatahhebrew = 0xfb2e;\n  t.alefqamatshebrew = 0xfb2f;\n  t.aleph = 0x2135;\n  t.allequal = 0x224c;\n  t.alpha = 0x03b1;\n  t.alphatonos = 0x03ac;\n  t.amacron = 0x0101;\n  t.amonospace = 0xff41;\n  t.ampersand = 0x0026;\n  t.ampersandmonospace = 0xff06;\n  t.ampersandsmall = 0xf726;\n  t.amsquare = 0x33c2;\n  t.anbopomofo = 0x3122;\n  t.angbopomofo = 0x3124;\n  t.angbracketleft = 0x3008; // Glyph is missing from Adobe's original list.\n  t.angbracketright = 0x3009; // Glyph is missing from Adobe's original list.\n  t.angkhankhuthai = 0x0e5a;\n  t.angle = 0x2220;\n  t.anglebracketleft = 0x3008;\n  t.anglebracketleftvertical = 0xfe3f;\n  t.anglebracketright = 0x3009;\n  t.anglebracketrightvertical = 0xfe40;\n  t.angleleft = 0x2329;\n  t.angleright = 0x232a;\n  t.angstrom = 0x212b;\n  t.anoteleia = 0x0387;\n  t.anudattadeva = 0x0952;\n  t.anusvarabengali = 0x0982;\n  t.anusvaradeva = 0x0902;\n  t.anusvaragujarati = 0x0a82;\n  t.aogonek = 0x0105;\n  t.apaatosquare = 0x3300;\n  t.aparen = 0x249c;\n  t.apostrophearmenian = 0x055a;\n  t.apostrophemod = 0x02bc;\n  t.apple = 0xf8ff;\n  t.approaches = 0x2250;\n  t.approxequal = 0x2248;\n  t.approxequalorimage = 0x2252;\n  t.approximatelyequal = 0x2245;\n  t.araeaekorean = 0x318e;\n  t.araeakorean = 0x318d;\n  t.arc = 0x2312;\n  t.arighthalfring = 0x1e9a;\n  t.aring = 0x00e5;\n  t.aringacute = 0x01fb;\n  t.aringbelow = 0x1e01;\n  t.arrowboth = 0x2194;\n  t.arrowdashdown = 0x21e3;\n  t.arrowdashleft = 0x21e0;\n  t.arrowdashright = 0x21e2;\n  t.arrowdashup = 0x21e1;\n  t.arrowdblboth = 0x21d4;\n  t.arrowdbldown = 0x21d3;\n  t.arrowdblleft = 0x21d0;\n  t.arrowdblright = 0x21d2;\n  t.arrowdblup = 0x21d1;\n  t.arrowdown = 0x2193;\n  t.arrowdownleft = 0x2199;\n  t.arrowdownright = 0x2198;\n  t.arrowdownwhite = 0x21e9;\n  t.arrowheaddownmod = 0x02c5;\n  t.arrowheadleftmod = 0x02c2;\n  t.arrowheadrightmod = 0x02c3;\n  t.arrowheadupmod = 0x02c4;\n  t.arrowhorizex = 0xf8e7;\n  t.arrowleft = 0x2190;\n  t.arrowleftdbl = 0x21d0;\n  t.arrowleftdblstroke = 0x21cd;\n  t.arrowleftoverright = 0x21c6;\n  t.arrowleftwhite = 0x21e6;\n  t.arrowright = 0x2192;\n  t.arrowrightdblstroke = 0x21cf;\n  t.arrowrightheavy = 0x279e;\n  t.arrowrightoverleft = 0x21c4;\n  t.arrowrightwhite = 0x21e8;\n  t.arrowtableft = 0x21e4;\n  t.arrowtabright = 0x21e5;\n  t.arrowup = 0x2191;\n  t.arrowupdn = 0x2195;\n  t.arrowupdnbse = 0x21a8;\n  t.arrowupdownbase = 0x21a8;\n  t.arrowupleft = 0x2196;\n  t.arrowupleftofdown = 0x21c5;\n  t.arrowupright = 0x2197;\n  t.arrowupwhite = 0x21e7;\n  t.arrowvertex = 0xf8e6;\n  t.asciicircum = 0x005e;\n  t.asciicircummonospace = 0xff3e;\n  t.asciitilde = 0x007e;\n  t.asciitildemonospace = 0xff5e;\n  t.ascript = 0x0251;\n  t.ascriptturned = 0x0252;\n  t.asmallhiragana = 0x3041;\n  t.asmallkatakana = 0x30a1;\n  t.asmallkatakanahalfwidth = 0xff67;\n  t.asterisk = 0x002a;\n  t.asteriskaltonearabic = 0x066d;\n  t.asteriskarabic = 0x066d;\n  t.asteriskmath = 0x2217;\n  t.asteriskmonospace = 0xff0a;\n  t.asterisksmall = 0xfe61;\n  t.asterism = 0x2042;\n  t.asuperior = 0xf6e9;\n  t.asymptoticallyequal = 0x2243;\n  t.at = 0x0040;\n  t.atilde = 0x00e3;\n  t.atmonospace = 0xff20;\n  t.atsmall = 0xfe6b;\n  t.aturned = 0x0250;\n  t.aubengali = 0x0994;\n  t.aubopomofo = 0x3120;\n  t.audeva = 0x0914;\n  t.augujarati = 0x0a94;\n  t.augurmukhi = 0x0a14;\n  t.aulengthmarkbengali = 0x09d7;\n  t.aumatragurmukhi = 0x0a4c;\n  t.auvowelsignbengali = 0x09cc;\n  t.auvowelsigndeva = 0x094c;\n  t.auvowelsigngujarati = 0x0acc;\n  t.avagrahadeva = 0x093d;\n  t.aybarmenian = 0x0561;\n  t.ayin = 0x05e2;\n  t.ayinaltonehebrew = 0xfb20;\n  t.ayinhebrew = 0x05e2;\n  t.b = 0x0062;\n  t.babengali = 0x09ac;\n  t.backslash = 0x005c;\n  t.backslashmonospace = 0xff3c;\n  t.badeva = 0x092c;\n  t.bagujarati = 0x0aac;\n  t.bagurmukhi = 0x0a2c;\n  t.bahiragana = 0x3070;\n  t.bahtthai = 0x0e3f;\n  t.bakatakana = 0x30d0;\n  t.bar = 0x007c;\n  t.barmonospace = 0xff5c;\n  t.bbopomofo = 0x3105;\n  t.bcircle = 0x24d1;\n  t.bdotaccent = 0x1e03;\n  t.bdotbelow = 0x1e05;\n  t.beamedsixteenthnotes = 0x266c;\n  t.because = 0x2235;\n  t.becyrillic = 0x0431;\n  t.beharabic = 0x0628;\n  t.behfinalarabic = 0xfe90;\n  t.behinitialarabic = 0xfe91;\n  t.behiragana = 0x3079;\n  t.behmedialarabic = 0xfe92;\n  t.behmeeminitialarabic = 0xfc9f;\n  t.behmeemisolatedarabic = 0xfc08;\n  t.behnoonfinalarabic = 0xfc6d;\n  t.bekatakana = 0x30d9;\n  t.benarmenian = 0x0562;\n  t.bet = 0x05d1;\n  t.beta = 0x03b2;\n  t.betasymbolgreek = 0x03d0;\n  t.betdagesh = 0xfb31;\n  t.betdageshhebrew = 0xfb31;\n  t.bethebrew = 0x05d1;\n  t.betrafehebrew = 0xfb4c;\n  t.bhabengali = 0x09ad;\n  t.bhadeva = 0x092d;\n  t.bhagujarati = 0x0aad;\n  t.bhagurmukhi = 0x0a2d;\n  t.bhook = 0x0253;\n  t.bihiragana = 0x3073;\n  t.bikatakana = 0x30d3;\n  t.bilabialclick = 0x0298;\n  t.bindigurmukhi = 0x0a02;\n  t.birusquare = 0x3331;\n  t.blackcircle = 0x25cf;\n  t.blackdiamond = 0x25c6;\n  t.blackdownpointingtriangle = 0x25bc;\n  t.blackleftpointingpointer = 0x25c4;\n  t.blackleftpointingtriangle = 0x25c0;\n  t.blacklenticularbracketleft = 0x3010;\n  t.blacklenticularbracketleftvertical = 0xfe3b;\n  t.blacklenticularbracketright = 0x3011;\n  t.blacklenticularbracketrightvertical = 0xfe3c;\n  t.blacklowerlefttriangle = 0x25e3;\n  t.blacklowerrighttriangle = 0x25e2;\n  t.blackrectangle = 0x25ac;\n  t.blackrightpointingpointer = 0x25ba;\n  t.blackrightpointingtriangle = 0x25b6;\n  t.blacksmallsquare = 0x25aa;\n  t.blacksmilingface = 0x263b;\n  t.blacksquare = 0x25a0;\n  t.blackstar = 0x2605;\n  t.blackupperlefttriangle = 0x25e4;\n  t.blackupperrighttriangle = 0x25e5;\n  t.blackuppointingsmalltriangle = 0x25b4;\n  t.blackuppointingtriangle = 0x25b2;\n  t.blank = 0x2423;\n  t.blinebelow = 0x1e07;\n  t.block = 0x2588;\n  t.bmonospace = 0xff42;\n  t.bobaimaithai = 0x0e1a;\n  t.bohiragana = 0x307c;\n  t.bokatakana = 0x30dc;\n  t.bparen = 0x249d;\n  t.bqsquare = 0x33c3;\n  t.braceex = 0xf8f4;\n  t.braceleft = 0x007b;\n  t.braceleftbt = 0xf8f3;\n  t.braceleftmid = 0xf8f2;\n  t.braceleftmonospace = 0xff5b;\n  t.braceleftsmall = 0xfe5b;\n  t.bracelefttp = 0xf8f1;\n  t.braceleftvertical = 0xfe37;\n  t.braceright = 0x007d;\n  t.bracerightbt = 0xf8fe;\n  t.bracerightmid = 0xf8fd;\n  t.bracerightmonospace = 0xff5d;\n  t.bracerightsmall = 0xfe5c;\n  t.bracerighttp = 0xf8fc;\n  t.bracerightvertical = 0xfe38;\n  t.bracketleft = 0x005b;\n  t.bracketleftbt = 0xf8f0;\n  t.bracketleftex = 0xf8ef;\n  t.bracketleftmonospace = 0xff3b;\n  t.bracketlefttp = 0xf8ee;\n  t.bracketright = 0x005d;\n  t.bracketrightbt = 0xf8fb;\n  t.bracketrightex = 0xf8fa;\n  t.bracketrightmonospace = 0xff3d;\n  t.bracketrighttp = 0xf8f9;\n  t.breve = 0x02d8;\n  t.brevebelowcmb = 0x032e;\n  t.brevecmb = 0x0306;\n  t.breveinvertedbelowcmb = 0x032f;\n  t.breveinvertedcmb = 0x0311;\n  t.breveinverteddoublecmb = 0x0361;\n  t.bridgebelowcmb = 0x032a;\n  t.bridgeinvertedbelowcmb = 0x033a;\n  t.brokenbar = 0x00a6;\n  t.bstroke = 0x0180;\n  t.bsuperior = 0xf6ea;\n  t.btopbar = 0x0183;\n  t.buhiragana = 0x3076;\n  t.bukatakana = 0x30d6;\n  t.bullet = 0x2022;\n  t.bulletinverse = 0x25d8;\n  t.bulletoperator = 0x2219;\n  t.bullseye = 0x25ce;\n  t.c = 0x0063;\n  t.caarmenian = 0x056e;\n  t.cabengali = 0x099a;\n  t.cacute = 0x0107;\n  t.cadeva = 0x091a;\n  t.cagujarati = 0x0a9a;\n  t.cagurmukhi = 0x0a1a;\n  t.calsquare = 0x3388;\n  t.candrabindubengali = 0x0981;\n  t.candrabinducmb = 0x0310;\n  t.candrabindudeva = 0x0901;\n  t.candrabindugujarati = 0x0a81;\n  t.capslock = 0x21ea;\n  t.careof = 0x2105;\n  t.caron = 0x02c7;\n  t.caronbelowcmb = 0x032c;\n  t.caroncmb = 0x030c;\n  t.carriagereturn = 0x21b5;\n  t.cbopomofo = 0x3118;\n  t.ccaron = 0x010d;\n  t.ccedilla = 0x00e7;\n  t.ccedillaacute = 0x1e09;\n  t.ccircle = 0x24d2;\n  t.ccircumflex = 0x0109;\n  t.ccurl = 0x0255;\n  t.cdot = 0x010b;\n  t.cdotaccent = 0x010b;\n  t.cdsquare = 0x33c5;\n  t.cedilla = 0x00b8;\n  t.cedillacmb = 0x0327;\n  t.cent = 0x00a2;\n  t.centigrade = 0x2103;\n  t.centinferior = 0xf6df;\n  t.centmonospace = 0xffe0;\n  t.centoldstyle = 0xf7a2;\n  t.centsuperior = 0xf6e0;\n  t.chaarmenian = 0x0579;\n  t.chabengali = 0x099b;\n  t.chadeva = 0x091b;\n  t.chagujarati = 0x0a9b;\n  t.chagurmukhi = 0x0a1b;\n  t.chbopomofo = 0x3114;\n  t.cheabkhasiancyrillic = 0x04bd;\n  t.checkmark = 0x2713;\n  t.checyrillic = 0x0447;\n  t.chedescenderabkhasiancyrillic = 0x04bf;\n  t.chedescendercyrillic = 0x04b7;\n  t.chedieresiscyrillic = 0x04f5;\n  t.cheharmenian = 0x0573;\n  t.chekhakassiancyrillic = 0x04cc;\n  t.cheverticalstrokecyrillic = 0x04b9;\n  t.chi = 0x03c7;\n  t.chieuchacirclekorean = 0x3277;\n  t.chieuchaparenkorean = 0x3217;\n  t.chieuchcirclekorean = 0x3269;\n  t.chieuchkorean = 0x314a;\n  t.chieuchparenkorean = 0x3209;\n  t.chochangthai = 0x0e0a;\n  t.chochanthai = 0x0e08;\n  t.chochingthai = 0x0e09;\n  t.chochoethai = 0x0e0c;\n  t.chook = 0x0188;\n  t.cieucacirclekorean = 0x3276;\n  t.cieucaparenkorean = 0x3216;\n  t.cieuccirclekorean = 0x3268;\n  t.cieuckorean = 0x3148;\n  t.cieucparenkorean = 0x3208;\n  t.cieucuparenkorean = 0x321c;\n  t.circle = 0x25cb;\n  t.circlecopyrt = 0x00a9; // Glyph is missing from Adobe's original list.\n  t.circlemultiply = 0x2297;\n  t.circleot = 0x2299;\n  t.circleplus = 0x2295;\n  t.circlepostalmark = 0x3036;\n  t.circlewithlefthalfblack = 0x25d0;\n  t.circlewithrighthalfblack = 0x25d1;\n  t.circumflex = 0x02c6;\n  t.circumflexbelowcmb = 0x032d;\n  t.circumflexcmb = 0x0302;\n  t.clear = 0x2327;\n  t.clickalveolar = 0x01c2;\n  t.clickdental = 0x01c0;\n  t.clicklateral = 0x01c1;\n  t.clickretroflex = 0x01c3;\n  t.club = 0x2663;\n  t.clubsuitblack = 0x2663;\n  t.clubsuitwhite = 0x2667;\n  t.cmcubedsquare = 0x33a4;\n  t.cmonospace = 0xff43;\n  t.cmsquaredsquare = 0x33a0;\n  t.coarmenian = 0x0581;\n  t.colon = 0x003a;\n  t.colonmonetary = 0x20a1;\n  t.colonmonospace = 0xff1a;\n  t.colonsign = 0x20a1;\n  t.colonsmall = 0xfe55;\n  t.colontriangularhalfmod = 0x02d1;\n  t.colontriangularmod = 0x02d0;\n  t.comma = 0x002c;\n  t.commaabovecmb = 0x0313;\n  t.commaaboverightcmb = 0x0315;\n  t.commaaccent = 0xf6c3;\n  t.commaarabic = 0x060c;\n  t.commaarmenian = 0x055d;\n  t.commainferior = 0xf6e1;\n  t.commamonospace = 0xff0c;\n  t.commareversedabovecmb = 0x0314;\n  t.commareversedmod = 0x02bd;\n  t.commasmall = 0xfe50;\n  t.commasuperior = 0xf6e2;\n  t.commaturnedabovecmb = 0x0312;\n  t.commaturnedmod = 0x02bb;\n  t.compass = 0x263c;\n  t.congruent = 0x2245;\n  t.contourintegral = 0x222e;\n  t.control = 0x2303;\n  t.controlACK = 0x0006;\n  t.controlBEL = 0x0007;\n  t.controlBS = 0x0008;\n  t.controlCAN = 0x0018;\n  t.controlCR = 0x000d;\n  t.controlDC1 = 0x0011;\n  t.controlDC2 = 0x0012;\n  t.controlDC3 = 0x0013;\n  t.controlDC4 = 0x0014;\n  t.controlDEL = 0x007f;\n  t.controlDLE = 0x0010;\n  t.controlEM = 0x0019;\n  t.controlENQ = 0x0005;\n  t.controlEOT = 0x0004;\n  t.controlESC = 0x001b;\n  t.controlETB = 0x0017;\n  t.controlETX = 0x0003;\n  t.controlFF = 0x000c;\n  t.controlFS = 0x001c;\n  t.controlGS = 0x001d;\n  t.controlHT = 0x0009;\n  t.controlLF = 0x000a;\n  t.controlNAK = 0x0015;\n  t.controlNULL = 0x0000; // Glyph is missing from Adobe's original list.\n  t.controlRS = 0x001e;\n  t.controlSI = 0x000f;\n  t.controlSO = 0x000e;\n  t.controlSOT = 0x0002;\n  t.controlSTX = 0x0001;\n  t.controlSUB = 0x001a;\n  t.controlSYN = 0x0016;\n  t.controlUS = 0x001f;\n  t.controlVT = 0x000b;\n  t.copyright = 0x00a9;\n  t.copyrightsans = 0xf8e9;\n  t.copyrightserif = 0xf6d9;\n  t.cornerbracketleft = 0x300c;\n  t.cornerbracketlefthalfwidth = 0xff62;\n  t.cornerbracketleftvertical = 0xfe41;\n  t.cornerbracketright = 0x300d;\n  t.cornerbracketrighthalfwidth = 0xff63;\n  t.cornerbracketrightvertical = 0xfe42;\n  t.corporationsquare = 0x337f;\n  t.cosquare = 0x33c7;\n  t.coverkgsquare = 0x33c6;\n  t.cparen = 0x249e;\n  t.cruzeiro = 0x20a2;\n  t.cstretched = 0x0297;\n  t.curlyand = 0x22cf;\n  t.curlyor = 0x22ce;\n  t.currency = 0x00a4;\n  t.cyrBreve = 0xf6d1;\n  t.cyrFlex = 0xf6d2;\n  t.cyrbreve = 0xf6d4;\n  t.cyrflex = 0xf6d5;\n  t.d = 0x0064;\n  t.daarmenian = 0x0564;\n  t.dabengali = 0x09a6;\n  t.dadarabic = 0x0636;\n  t.dadeva = 0x0926;\n  t.dadfinalarabic = 0xfebe;\n  t.dadinitialarabic = 0xfebf;\n  t.dadmedialarabic = 0xfec0;\n  t.dagesh = 0x05bc;\n  t.dageshhebrew = 0x05bc;\n  t.dagger = 0x2020;\n  t.daggerdbl = 0x2021;\n  t.dagujarati = 0x0aa6;\n  t.dagurmukhi = 0x0a26;\n  t.dahiragana = 0x3060;\n  t.dakatakana = 0x30c0;\n  t.dalarabic = 0x062f;\n  t.dalet = 0x05d3;\n  t.daletdagesh = 0xfb33;\n  t.daletdageshhebrew = 0xfb33;\n  t.dalethebrew = 0x05d3;\n  t.dalfinalarabic = 0xfeaa;\n  t.dammaarabic = 0x064f;\n  t.dammalowarabic = 0x064f;\n  t.dammatanaltonearabic = 0x064c;\n  t.dammatanarabic = 0x064c;\n  t.danda = 0x0964;\n  t.dargahebrew = 0x05a7;\n  t.dargalefthebrew = 0x05a7;\n  t.dasiapneumatacyrilliccmb = 0x0485;\n  t.dblGrave = 0xf6d3;\n  t.dblanglebracketleft = 0x300a;\n  t.dblanglebracketleftvertical = 0xfe3d;\n  t.dblanglebracketright = 0x300b;\n  t.dblanglebracketrightvertical = 0xfe3e;\n  t.dblarchinvertedbelowcmb = 0x032b;\n  t.dblarrowleft = 0x21d4;\n  t.dblarrowright = 0x21d2;\n  t.dbldanda = 0x0965;\n  t.dblgrave = 0xf6d6;\n  t.dblgravecmb = 0x030f;\n  t.dblintegral = 0x222c;\n  t.dbllowline = 0x2017;\n  t.dbllowlinecmb = 0x0333;\n  t.dbloverlinecmb = 0x033f;\n  t.dblprimemod = 0x02ba;\n  t.dblverticalbar = 0x2016;\n  t.dblverticallineabovecmb = 0x030e;\n  t.dbopomofo = 0x3109;\n  t.dbsquare = 0x33c8;\n  t.dcaron = 0x010f;\n  t.dcedilla = 0x1e11;\n  t.dcircle = 0x24d3;\n  t.dcircumflexbelow = 0x1e13;\n  t.dcroat = 0x0111;\n  t.ddabengali = 0x09a1;\n  t.ddadeva = 0x0921;\n  t.ddagujarati = 0x0aa1;\n  t.ddagurmukhi = 0x0a21;\n  t.ddalarabic = 0x0688;\n  t.ddalfinalarabic = 0xfb89;\n  t.dddhadeva = 0x095c;\n  t.ddhabengali = 0x09a2;\n  t.ddhadeva = 0x0922;\n  t.ddhagujarati = 0x0aa2;\n  t.ddhagurmukhi = 0x0a22;\n  t.ddotaccent = 0x1e0b;\n  t.ddotbelow = 0x1e0d;\n  t.decimalseparatorarabic = 0x066b;\n  t.decimalseparatorpersian = 0x066b;\n  t.decyrillic = 0x0434;\n  t.degree = 0x00b0;\n  t.dehihebrew = 0x05ad;\n  t.dehiragana = 0x3067;\n  t.deicoptic = 0x03ef;\n  t.dekatakana = 0x30c7;\n  t.deleteleft = 0x232b;\n  t.deleteright = 0x2326;\n  t.delta = 0x03b4;\n  t.deltaturned = 0x018d;\n  t.denominatorminusonenumeratorbengali = 0x09f8;\n  t.dezh = 0x02a4;\n  t.dhabengali = 0x09a7;\n  t.dhadeva = 0x0927;\n  t.dhagujarati = 0x0aa7;\n  t.dhagurmukhi = 0x0a27;\n  t.dhook = 0x0257;\n  t.dialytikatonos = 0x0385;\n  t.dialytikatonoscmb = 0x0344;\n  t.diamond = 0x2666;\n  t.diamondsuitwhite = 0x2662;\n  t.dieresis = 0x00a8;\n  t.dieresisacute = 0xf6d7;\n  t.dieresisbelowcmb = 0x0324;\n  t.dieresiscmb = 0x0308;\n  t.dieresisgrave = 0xf6d8;\n  t.dieresistonos = 0x0385;\n  t.dihiragana = 0x3062;\n  t.dikatakana = 0x30c2;\n  t.dittomark = 0x3003;\n  t.divide = 0x00f7;\n  t.divides = 0x2223;\n  t.divisionslash = 0x2215;\n  t.djecyrillic = 0x0452;\n  t.dkshade = 0x2593;\n  t.dlinebelow = 0x1e0f;\n  t.dlsquare = 0x3397;\n  t.dmacron = 0x0111;\n  t.dmonospace = 0xff44;\n  t.dnblock = 0x2584;\n  t.dochadathai = 0x0e0e;\n  t.dodekthai = 0x0e14;\n  t.dohiragana = 0x3069;\n  t.dokatakana = 0x30c9;\n  t.dollar = 0x0024;\n  t.dollarinferior = 0xf6e3;\n  t.dollarmonospace = 0xff04;\n  t.dollaroldstyle = 0xf724;\n  t.dollarsmall = 0xfe69;\n  t.dollarsuperior = 0xf6e4;\n  t.dong = 0x20ab;\n  t.dorusquare = 0x3326;\n  t.dotaccent = 0x02d9;\n  t.dotaccentcmb = 0x0307;\n  t.dotbelowcmb = 0x0323;\n  t.dotbelowcomb = 0x0323;\n  t.dotkatakana = 0x30fb;\n  t.dotlessi = 0x0131;\n  t.dotlessj = 0xf6be;\n  t.dotlessjstrokehook = 0x0284;\n  t.dotmath = 0x22c5;\n  t.dottedcircle = 0x25cc;\n  t.doubleyodpatah = 0xfb1f;\n  t.doubleyodpatahhebrew = 0xfb1f;\n  t.downtackbelowcmb = 0x031e;\n  t.downtackmod = 0x02d5;\n  t.dparen = 0x249f;\n  t.dsuperior = 0xf6eb;\n  t.dtail = 0x0256;\n  t.dtopbar = 0x018c;\n  t.duhiragana = 0x3065;\n  t.dukatakana = 0x30c5;\n  t.dz = 0x01f3;\n  t.dzaltone = 0x02a3;\n  t.dzcaron = 0x01c6;\n  t.dzcurl = 0x02a5;\n  t.dzeabkhasiancyrillic = 0x04e1;\n  t.dzecyrillic = 0x0455;\n  t.dzhecyrillic = 0x045f;\n  t.e = 0x0065;\n  t.eacute = 0x00e9;\n  t.earth = 0x2641;\n  t.ebengali = 0x098f;\n  t.ebopomofo = 0x311c;\n  t.ebreve = 0x0115;\n  t.ecandradeva = 0x090d;\n  t.ecandragujarati = 0x0a8d;\n  t.ecandravowelsigndeva = 0x0945;\n  t.ecandravowelsigngujarati = 0x0ac5;\n  t.ecaron = 0x011b;\n  t.ecedillabreve = 0x1e1d;\n  t.echarmenian = 0x0565;\n  t.echyiwnarmenian = 0x0587;\n  t.ecircle = 0x24d4;\n  t.ecircumflex = 0x00ea;\n  t.ecircumflexacute = 0x1ebf;\n  t.ecircumflexbelow = 0x1e19;\n  t.ecircumflexdotbelow = 0x1ec7;\n  t.ecircumflexgrave = 0x1ec1;\n  t.ecircumflexhookabove = 0x1ec3;\n  t.ecircumflextilde = 0x1ec5;\n  t.ecyrillic = 0x0454;\n  t.edblgrave = 0x0205;\n  t.edeva = 0x090f;\n  t.edieresis = 0x00eb;\n  t.edot = 0x0117;\n  t.edotaccent = 0x0117;\n  t.edotbelow = 0x1eb9;\n  t.eegurmukhi = 0x0a0f;\n  t.eematragurmukhi = 0x0a47;\n  t.efcyrillic = 0x0444;\n  t.egrave = 0x00e8;\n  t.egujarati = 0x0a8f;\n  t.eharmenian = 0x0567;\n  t.ehbopomofo = 0x311d;\n  t.ehiragana = 0x3048;\n  t.ehookabove = 0x1ebb;\n  t.eibopomofo = 0x311f;\n  t.eight = 0x0038;\n  t.eightarabic = 0x0668;\n  t.eightbengali = 0x09ee;\n  t.eightcircle = 0x2467;\n  t.eightcircleinversesansserif = 0x2791;\n  t.eightdeva = 0x096e;\n  t.eighteencircle = 0x2471;\n  t.eighteenparen = 0x2485;\n  t.eighteenperiod = 0x2499;\n  t.eightgujarati = 0x0aee;\n  t.eightgurmukhi = 0x0a6e;\n  t.eighthackarabic = 0x0668;\n  t.eighthangzhou = 0x3028;\n  t.eighthnotebeamed = 0x266b;\n  t.eightideographicparen = 0x3227;\n  t.eightinferior = 0x2088;\n  t.eightmonospace = 0xff18;\n  t.eightoldstyle = 0xf738;\n  t.eightparen = 0x247b;\n  t.eightperiod = 0x248f;\n  t.eightpersian = 0x06f8;\n  t.eightroman = 0x2177;\n  t.eightsuperior = 0x2078;\n  t.eightthai = 0x0e58;\n  t.einvertedbreve = 0x0207;\n  t.eiotifiedcyrillic = 0x0465;\n  t.ekatakana = 0x30a8;\n  t.ekatakanahalfwidth = 0xff74;\n  t.ekonkargurmukhi = 0x0a74;\n  t.ekorean = 0x3154;\n  t.elcyrillic = 0x043b;\n  t.element = 0x2208;\n  t.elevencircle = 0x246a;\n  t.elevenparen = 0x247e;\n  t.elevenperiod = 0x2492;\n  t.elevenroman = 0x217a;\n  t.ellipsis = 0x2026;\n  t.ellipsisvertical = 0x22ee;\n  t.emacron = 0x0113;\n  t.emacronacute = 0x1e17;\n  t.emacrongrave = 0x1e15;\n  t.emcyrillic = 0x043c;\n  t.emdash = 0x2014;\n  t.emdashvertical = 0xfe31;\n  t.emonospace = 0xff45;\n  t.emphasismarkarmenian = 0x055b;\n  t.emptyset = 0x2205;\n  t.enbopomofo = 0x3123;\n  t.encyrillic = 0x043d;\n  t.endash = 0x2013;\n  t.endashvertical = 0xfe32;\n  t.endescendercyrillic = 0x04a3;\n  t.eng = 0x014b;\n  t.engbopomofo = 0x3125;\n  t.enghecyrillic = 0x04a5;\n  t.enhookcyrillic = 0x04c8;\n  t.enspace = 0x2002;\n  t.eogonek = 0x0119;\n  t.eokorean = 0x3153;\n  t.eopen = 0x025b;\n  t.eopenclosed = 0x029a;\n  t.eopenreversed = 0x025c;\n  t.eopenreversedclosed = 0x025e;\n  t.eopenreversedhook = 0x025d;\n  t.eparen = 0x24a0;\n  t.epsilon = 0x03b5;\n  t.epsilontonos = 0x03ad;\n  t.equal = 0x003d;\n  t.equalmonospace = 0xff1d;\n  t.equalsmall = 0xfe66;\n  t.equalsuperior = 0x207c;\n  t.equivalence = 0x2261;\n  t.erbopomofo = 0x3126;\n  t.ercyrillic = 0x0440;\n  t.ereversed = 0x0258;\n  t.ereversedcyrillic = 0x044d;\n  t.escyrillic = 0x0441;\n  t.esdescendercyrillic = 0x04ab;\n  t.esh = 0x0283;\n  t.eshcurl = 0x0286;\n  t.eshortdeva = 0x090e;\n  t.eshortvowelsigndeva = 0x0946;\n  t.eshreversedloop = 0x01aa;\n  t.eshsquatreversed = 0x0285;\n  t.esmallhiragana = 0x3047;\n  t.esmallkatakana = 0x30a7;\n  t.esmallkatakanahalfwidth = 0xff6a;\n  t.estimated = 0x212e;\n  t.esuperior = 0xf6ec;\n  t.eta = 0x03b7;\n  t.etarmenian = 0x0568;\n  t.etatonos = 0x03ae;\n  t.eth = 0x00f0;\n  t.etilde = 0x1ebd;\n  t.etildebelow = 0x1e1b;\n  t.etnahtafoukhhebrew = 0x0591;\n  t.etnahtafoukhlefthebrew = 0x0591;\n  t.etnahtahebrew = 0x0591;\n  t.etnahtalefthebrew = 0x0591;\n  t.eturned = 0x01dd;\n  t.eukorean = 0x3161;\n  t.euro = 0x20ac;\n  t.evowelsignbengali = 0x09c7;\n  t.evowelsigndeva = 0x0947;\n  t.evowelsigngujarati = 0x0ac7;\n  t.exclam = 0x0021;\n  t.exclamarmenian = 0x055c;\n  t.exclamdbl = 0x203c;\n  t.exclamdown = 0x00a1;\n  t.exclamdownsmall = 0xf7a1;\n  t.exclammonospace = 0xff01;\n  t.exclamsmall = 0xf721;\n  t.existential = 0x2203;\n  t.ezh = 0x0292;\n  t.ezhcaron = 0x01ef;\n  t.ezhcurl = 0x0293;\n  t.ezhreversed = 0x01b9;\n  t.ezhtail = 0x01ba;\n  t.f = 0x0066;\n  t.fadeva = 0x095e;\n  t.fagurmukhi = 0x0a5e;\n  t.fahrenheit = 0x2109;\n  t.fathaarabic = 0x064e;\n  t.fathalowarabic = 0x064e;\n  t.fathatanarabic = 0x064b;\n  t.fbopomofo = 0x3108;\n  t.fcircle = 0x24d5;\n  t.fdotaccent = 0x1e1f;\n  t.feharabic = 0x0641;\n  t.feharmenian = 0x0586;\n  t.fehfinalarabic = 0xfed2;\n  t.fehinitialarabic = 0xfed3;\n  t.fehmedialarabic = 0xfed4;\n  t.feicoptic = 0x03e5;\n  t.female = 0x2640;\n  t.ff = 0xfb00;\n  t.f_f = 0xfb00;\n  t.ffi = 0xfb03;\n  t.f_f_i = 0xfb03;\n  t.ffl = 0xfb04;\n  t.f_f_l = 0xfb04;\n  t.fi = 0xfb01;\n  t.f_i = 0xfb01;\n  t.fifteencircle = 0x246e;\n  t.fifteenparen = 0x2482;\n  t.fifteenperiod = 0x2496;\n  t.figuredash = 0x2012;\n  t.filledbox = 0x25a0;\n  t.filledrect = 0x25ac;\n  t.finalkaf = 0x05da;\n  t.finalkafdagesh = 0xfb3a;\n  t.finalkafdageshhebrew = 0xfb3a;\n  t.finalkafhebrew = 0x05da;\n  t.finalmem = 0x05dd;\n  t.finalmemhebrew = 0x05dd;\n  t.finalnun = 0x05df;\n  t.finalnunhebrew = 0x05df;\n  t.finalpe = 0x05e3;\n  t.finalpehebrew = 0x05e3;\n  t.finaltsadi = 0x05e5;\n  t.finaltsadihebrew = 0x05e5;\n  t.firsttonechinese = 0x02c9;\n  t.fisheye = 0x25c9;\n  t.fitacyrillic = 0x0473;\n  t.five = 0x0035;\n  t.fivearabic = 0x0665;\n  t.fivebengali = 0x09eb;\n  t.fivecircle = 0x2464;\n  t.fivecircleinversesansserif = 0x278e;\n  t.fivedeva = 0x096b;\n  t.fiveeighths = 0x215d;\n  t.fivegujarati = 0x0aeb;\n  t.fivegurmukhi = 0x0a6b;\n  t.fivehackarabic = 0x0665;\n  t.fivehangzhou = 0x3025;\n  t.fiveideographicparen = 0x3224;\n  t.fiveinferior = 0x2085;\n  t.fivemonospace = 0xff15;\n  t.fiveoldstyle = 0xf735;\n  t.fiveparen = 0x2478;\n  t.fiveperiod = 0x248c;\n  t.fivepersian = 0x06f5;\n  t.fiveroman = 0x2174;\n  t.fivesuperior = 0x2075;\n  t.fivethai = 0x0e55;\n  t.fl = 0xfb02;\n  t.f_l = 0xfb02;\n  t.florin = 0x0192;\n  t.fmonospace = 0xff46;\n  t.fmsquare = 0x3399;\n  t.fofanthai = 0x0e1f;\n  t.fofathai = 0x0e1d;\n  t.fongmanthai = 0x0e4f;\n  t.forall = 0x2200;\n  t.four = 0x0034;\n  t.fourarabic = 0x0664;\n  t.fourbengali = 0x09ea;\n  t.fourcircle = 0x2463;\n  t.fourcircleinversesansserif = 0x278d;\n  t.fourdeva = 0x096a;\n  t.fourgujarati = 0x0aea;\n  t.fourgurmukhi = 0x0a6a;\n  t.fourhackarabic = 0x0664;\n  t.fourhangzhou = 0x3024;\n  t.fourideographicparen = 0x3223;\n  t.fourinferior = 0x2084;\n  t.fourmonospace = 0xff14;\n  t.fournumeratorbengali = 0x09f7;\n  t.fouroldstyle = 0xf734;\n  t.fourparen = 0x2477;\n  t.fourperiod = 0x248b;\n  t.fourpersian = 0x06f4;\n  t.fourroman = 0x2173;\n  t.foursuperior = 0x2074;\n  t.fourteencircle = 0x246d;\n  t.fourteenparen = 0x2481;\n  t.fourteenperiod = 0x2495;\n  t.fourthai = 0x0e54;\n  t.fourthtonechinese = 0x02cb;\n  t.fparen = 0x24a1;\n  t.fraction = 0x2044;\n  t.franc = 0x20a3;\n  t.g = 0x0067;\n  t.gabengali = 0x0997;\n  t.gacute = 0x01f5;\n  t.gadeva = 0x0917;\n  t.gafarabic = 0x06af;\n  t.gaffinalarabic = 0xfb93;\n  t.gafinitialarabic = 0xfb94;\n  t.gafmedialarabic = 0xfb95;\n  t.gagujarati = 0x0a97;\n  t.gagurmukhi = 0x0a17;\n  t.gahiragana = 0x304c;\n  t.gakatakana = 0x30ac;\n  t.gamma = 0x03b3;\n  t.gammalatinsmall = 0x0263;\n  t.gammasuperior = 0x02e0;\n  t.gangiacoptic = 0x03eb;\n  t.gbopomofo = 0x310d;\n  t.gbreve = 0x011f;\n  t.gcaron = 0x01e7;\n  t.gcedilla = 0x0123;\n  t.gcircle = 0x24d6;\n  t.gcircumflex = 0x011d;\n  t.gcommaaccent = 0x0123;\n  t.gdot = 0x0121;\n  t.gdotaccent = 0x0121;\n  t.gecyrillic = 0x0433;\n  t.gehiragana = 0x3052;\n  t.gekatakana = 0x30b2;\n  t.geometricallyequal = 0x2251;\n  t.gereshaccenthebrew = 0x059c;\n  t.gereshhebrew = 0x05f3;\n  t.gereshmuqdamhebrew = 0x059d;\n  t.germandbls = 0x00df;\n  t.gershayimaccenthebrew = 0x059e;\n  t.gershayimhebrew = 0x05f4;\n  t.getamark = 0x3013;\n  t.ghabengali = 0x0998;\n  t.ghadarmenian = 0x0572;\n  t.ghadeva = 0x0918;\n  t.ghagujarati = 0x0a98;\n  t.ghagurmukhi = 0x0a18;\n  t.ghainarabic = 0x063a;\n  t.ghainfinalarabic = 0xfece;\n  t.ghaininitialarabic = 0xfecf;\n  t.ghainmedialarabic = 0xfed0;\n  t.ghemiddlehookcyrillic = 0x0495;\n  t.ghestrokecyrillic = 0x0493;\n  t.gheupturncyrillic = 0x0491;\n  t.ghhadeva = 0x095a;\n  t.ghhagurmukhi = 0x0a5a;\n  t.ghook = 0x0260;\n  t.ghzsquare = 0x3393;\n  t.gihiragana = 0x304e;\n  t.gikatakana = 0x30ae;\n  t.gimarmenian = 0x0563;\n  t.gimel = 0x05d2;\n  t.gimeldagesh = 0xfb32;\n  t.gimeldageshhebrew = 0xfb32;\n  t.gimelhebrew = 0x05d2;\n  t.gjecyrillic = 0x0453;\n  t.glottalinvertedstroke = 0x01be;\n  t.glottalstop = 0x0294;\n  t.glottalstopinverted = 0x0296;\n  t.glottalstopmod = 0x02c0;\n  t.glottalstopreversed = 0x0295;\n  t.glottalstopreversedmod = 0x02c1;\n  t.glottalstopreversedsuperior = 0x02e4;\n  t.glottalstopstroke = 0x02a1;\n  t.glottalstopstrokereversed = 0x02a2;\n  t.gmacron = 0x1e21;\n  t.gmonospace = 0xff47;\n  t.gohiragana = 0x3054;\n  t.gokatakana = 0x30b4;\n  t.gparen = 0x24a2;\n  t.gpasquare = 0x33ac;\n  t.gradient = 0x2207;\n  t.grave = 0x0060;\n  t.gravebelowcmb = 0x0316;\n  t.gravecmb = 0x0300;\n  t.gravecomb = 0x0300;\n  t.gravedeva = 0x0953;\n  t.gravelowmod = 0x02ce;\n  t.gravemonospace = 0xff40;\n  t.gravetonecmb = 0x0340;\n  t.greater = 0x003e;\n  t.greaterequal = 0x2265;\n  t.greaterequalorless = 0x22db;\n  t.greatermonospace = 0xff1e;\n  t.greaterorequivalent = 0x2273;\n  t.greaterorless = 0x2277;\n  t.greateroverequal = 0x2267;\n  t.greatersmall = 0xfe65;\n  t.gscript = 0x0261;\n  t.gstroke = 0x01e5;\n  t.guhiragana = 0x3050;\n  t.guillemotleft = 0x00ab;\n  t.guillemotright = 0x00bb;\n  t.guilsinglleft = 0x2039;\n  t.guilsinglright = 0x203a;\n  t.gukatakana = 0x30b0;\n  t.guramusquare = 0x3318;\n  t.gysquare = 0x33c9;\n  t.h = 0x0068;\n  t.haabkhasiancyrillic = 0x04a9;\n  t.haaltonearabic = 0x06c1;\n  t.habengali = 0x09b9;\n  t.hadescendercyrillic = 0x04b3;\n  t.hadeva = 0x0939;\n  t.hagujarati = 0x0ab9;\n  t.hagurmukhi = 0x0a39;\n  t.haharabic = 0x062d;\n  t.hahfinalarabic = 0xfea2;\n  t.hahinitialarabic = 0xfea3;\n  t.hahiragana = 0x306f;\n  t.hahmedialarabic = 0xfea4;\n  t.haitusquare = 0x332a;\n  t.hakatakana = 0x30cf;\n  t.hakatakanahalfwidth = 0xff8a;\n  t.halantgurmukhi = 0x0a4d;\n  t.hamzaarabic = 0x0621;\n  t.hamzalowarabic = 0x0621;\n  t.hangulfiller = 0x3164;\n  t.hardsigncyrillic = 0x044a;\n  t.harpoonleftbarbup = 0x21bc;\n  t.harpoonrightbarbup = 0x21c0;\n  t.hasquare = 0x33ca;\n  t.hatafpatah = 0x05b2;\n  t.hatafpatah16 = 0x05b2;\n  t.hatafpatah23 = 0x05b2;\n  t.hatafpatah2f = 0x05b2;\n  t.hatafpatahhebrew = 0x05b2;\n  t.hatafpatahnarrowhebrew = 0x05b2;\n  t.hatafpatahquarterhebrew = 0x05b2;\n  t.hatafpatahwidehebrew = 0x05b2;\n  t.hatafqamats = 0x05b3;\n  t.hatafqamats1b = 0x05b3;\n  t.hatafqamats28 = 0x05b3;\n  t.hatafqamats34 = 0x05b3;\n  t.hatafqamatshebrew = 0x05b3;\n  t.hatafqamatsnarrowhebrew = 0x05b3;\n  t.hatafqamatsquarterhebrew = 0x05b3;\n  t.hatafqamatswidehebrew = 0x05b3;\n  t.hatafsegol = 0x05b1;\n  t.hatafsegol17 = 0x05b1;\n  t.hatafsegol24 = 0x05b1;\n  t.hatafsegol30 = 0x05b1;\n  t.hatafsegolhebrew = 0x05b1;\n  t.hatafsegolnarrowhebrew = 0x05b1;\n  t.hatafsegolquarterhebrew = 0x05b1;\n  t.hatafsegolwidehebrew = 0x05b1;\n  t.hbar = 0x0127;\n  t.hbopomofo = 0x310f;\n  t.hbrevebelow = 0x1e2b;\n  t.hcedilla = 0x1e29;\n  t.hcircle = 0x24d7;\n  t.hcircumflex = 0x0125;\n  t.hdieresis = 0x1e27;\n  t.hdotaccent = 0x1e23;\n  t.hdotbelow = 0x1e25;\n  t.he = 0x05d4;\n  t.heart = 0x2665;\n  t.heartsuitblack = 0x2665;\n  t.heartsuitwhite = 0x2661;\n  t.hedagesh = 0xfb34;\n  t.hedageshhebrew = 0xfb34;\n  t.hehaltonearabic = 0x06c1;\n  t.heharabic = 0x0647;\n  t.hehebrew = 0x05d4;\n  t.hehfinalaltonearabic = 0xfba7;\n  t.hehfinalalttwoarabic = 0xfeea;\n  t.hehfinalarabic = 0xfeea;\n  t.hehhamzaabovefinalarabic = 0xfba5;\n  t.hehhamzaaboveisolatedarabic = 0xfba4;\n  t.hehinitialaltonearabic = 0xfba8;\n  t.hehinitialarabic = 0xfeeb;\n  t.hehiragana = 0x3078;\n  t.hehmedialaltonearabic = 0xfba9;\n  t.hehmedialarabic = 0xfeec;\n  t.heiseierasquare = 0x337b;\n  t.hekatakana = 0x30d8;\n  t.hekatakanahalfwidth = 0xff8d;\n  t.hekutaarusquare = 0x3336;\n  t.henghook = 0x0267;\n  t.herutusquare = 0x3339;\n  t.het = 0x05d7;\n  t.hethebrew = 0x05d7;\n  t.hhook = 0x0266;\n  t.hhooksuperior = 0x02b1;\n  t.hieuhacirclekorean = 0x327b;\n  t.hieuhaparenkorean = 0x321b;\n  t.hieuhcirclekorean = 0x326d;\n  t.hieuhkorean = 0x314e;\n  t.hieuhparenkorean = 0x320d;\n  t.hihiragana = 0x3072;\n  t.hikatakana = 0x30d2;\n  t.hikatakanahalfwidth = 0xff8b;\n  t.hiriq = 0x05b4;\n  t.hiriq14 = 0x05b4;\n  t.hiriq21 = 0x05b4;\n  t.hiriq2d = 0x05b4;\n  t.hiriqhebrew = 0x05b4;\n  t.hiriqnarrowhebrew = 0x05b4;\n  t.hiriqquarterhebrew = 0x05b4;\n  t.hiriqwidehebrew = 0x05b4;\n  t.hlinebelow = 0x1e96;\n  t.hmonospace = 0xff48;\n  t.hoarmenian = 0x0570;\n  t.hohipthai = 0x0e2b;\n  t.hohiragana = 0x307b;\n  t.hokatakana = 0x30db;\n  t.hokatakanahalfwidth = 0xff8e;\n  t.holam = 0x05b9;\n  t.holam19 = 0x05b9;\n  t.holam26 = 0x05b9;\n  t.holam32 = 0x05b9;\n  t.holamhebrew = 0x05b9;\n  t.holamnarrowhebrew = 0x05b9;\n  t.holamquarterhebrew = 0x05b9;\n  t.holamwidehebrew = 0x05b9;\n  t.honokhukthai = 0x0e2e;\n  t.hookabovecomb = 0x0309;\n  t.hookcmb = 0x0309;\n  t.hookpalatalizedbelowcmb = 0x0321;\n  t.hookretroflexbelowcmb = 0x0322;\n  t.hoonsquare = 0x3342;\n  t.horicoptic = 0x03e9;\n  t.horizontalbar = 0x2015;\n  t.horncmb = 0x031b;\n  t.hotsprings = 0x2668;\n  t.house = 0x2302;\n  t.hparen = 0x24a3;\n  t.hsuperior = 0x02b0;\n  t.hturned = 0x0265;\n  t.huhiragana = 0x3075;\n  t.huiitosquare = 0x3333;\n  t.hukatakana = 0x30d5;\n  t.hukatakanahalfwidth = 0xff8c;\n  t.hungarumlaut = 0x02dd;\n  t.hungarumlautcmb = 0x030b;\n  t.hv = 0x0195;\n  t.hyphen = 0x002d;\n  t.hypheninferior = 0xf6e5;\n  t.hyphenmonospace = 0xff0d;\n  t.hyphensmall = 0xfe63;\n  t.hyphensuperior = 0xf6e6;\n  t.hyphentwo = 0x2010;\n  t.i = 0x0069;\n  t.iacute = 0x00ed;\n  t.iacyrillic = 0x044f;\n  t.ibengali = 0x0987;\n  t.ibopomofo = 0x3127;\n  t.ibreve = 0x012d;\n  t.icaron = 0x01d0;\n  t.icircle = 0x24d8;\n  t.icircumflex = 0x00ee;\n  t.icyrillic = 0x0456;\n  t.idblgrave = 0x0209;\n  t.ideographearthcircle = 0x328f;\n  t.ideographfirecircle = 0x328b;\n  t.ideographicallianceparen = 0x323f;\n  t.ideographiccallparen = 0x323a;\n  t.ideographiccentrecircle = 0x32a5;\n  t.ideographicclose = 0x3006;\n  t.ideographiccomma = 0x3001;\n  t.ideographiccommaleft = 0xff64;\n  t.ideographiccongratulationparen = 0x3237;\n  t.ideographiccorrectcircle = 0x32a3;\n  t.ideographicearthparen = 0x322f;\n  t.ideographicenterpriseparen = 0x323d;\n  t.ideographicexcellentcircle = 0x329d;\n  t.ideographicfestivalparen = 0x3240;\n  t.ideographicfinancialcircle = 0x3296;\n  t.ideographicfinancialparen = 0x3236;\n  t.ideographicfireparen = 0x322b;\n  t.ideographichaveparen = 0x3232;\n  t.ideographichighcircle = 0x32a4;\n  t.ideographiciterationmark = 0x3005;\n  t.ideographiclaborcircle = 0x3298;\n  t.ideographiclaborparen = 0x3238;\n  t.ideographicleftcircle = 0x32a7;\n  t.ideographiclowcircle = 0x32a6;\n  t.ideographicmedicinecircle = 0x32a9;\n  t.ideographicmetalparen = 0x322e;\n  t.ideographicmoonparen = 0x322a;\n  t.ideographicnameparen = 0x3234;\n  t.ideographicperiod = 0x3002;\n  t.ideographicprintcircle = 0x329e;\n  t.ideographicreachparen = 0x3243;\n  t.ideographicrepresentparen = 0x3239;\n  t.ideographicresourceparen = 0x323e;\n  t.ideographicrightcircle = 0x32a8;\n  t.ideographicsecretcircle = 0x3299;\n  t.ideographicselfparen = 0x3242;\n  t.ideographicsocietyparen = 0x3233;\n  t.ideographicspace = 0x3000;\n  t.ideographicspecialparen = 0x3235;\n  t.ideographicstockparen = 0x3231;\n  t.ideographicstudyparen = 0x323b;\n  t.ideographicsunparen = 0x3230;\n  t.ideographicsuperviseparen = 0x323c;\n  t.ideographicwaterparen = 0x322c;\n  t.ideographicwoodparen = 0x322d;\n  t.ideographiczero = 0x3007;\n  t.ideographmetalcircle = 0x328e;\n  t.ideographmooncircle = 0x328a;\n  t.ideographnamecircle = 0x3294;\n  t.ideographsuncircle = 0x3290;\n  t.ideographwatercircle = 0x328c;\n  t.ideographwoodcircle = 0x328d;\n  t.ideva = 0x0907;\n  t.idieresis = 0x00ef;\n  t.idieresisacute = 0x1e2f;\n  t.idieresiscyrillic = 0x04e5;\n  t.idotbelow = 0x1ecb;\n  t.iebrevecyrillic = 0x04d7;\n  t.iecyrillic = 0x0435;\n  t.ieungacirclekorean = 0x3275;\n  t.ieungaparenkorean = 0x3215;\n  t.ieungcirclekorean = 0x3267;\n  t.ieungkorean = 0x3147;\n  t.ieungparenkorean = 0x3207;\n  t.igrave = 0x00ec;\n  t.igujarati = 0x0a87;\n  t.igurmukhi = 0x0a07;\n  t.ihiragana = 0x3044;\n  t.ihookabove = 0x1ec9;\n  t.iibengali = 0x0988;\n  t.iicyrillic = 0x0438;\n  t.iideva = 0x0908;\n  t.iigujarati = 0x0a88;\n  t.iigurmukhi = 0x0a08;\n  t.iimatragurmukhi = 0x0a40;\n  t.iinvertedbreve = 0x020b;\n  t.iishortcyrillic = 0x0439;\n  t.iivowelsignbengali = 0x09c0;\n  t.iivowelsigndeva = 0x0940;\n  t.iivowelsigngujarati = 0x0ac0;\n  t.ij = 0x0133;\n  t.ikatakana = 0x30a4;\n  t.ikatakanahalfwidth = 0xff72;\n  t.ikorean = 0x3163;\n  t.ilde = 0x02dc;\n  t.iluyhebrew = 0x05ac;\n  t.imacron = 0x012b;\n  t.imacroncyrillic = 0x04e3;\n  t.imageorapproximatelyequal = 0x2253;\n  t.imatragurmukhi = 0x0a3f;\n  t.imonospace = 0xff49;\n  t.increment = 0x2206;\n  t.infinity = 0x221e;\n  t.iniarmenian = 0x056b;\n  t.integral = 0x222b;\n  t.integralbottom = 0x2321;\n  t.integralbt = 0x2321;\n  t.integralex = 0xf8f5;\n  t.integraltop = 0x2320;\n  t.integraltp = 0x2320;\n  t.intersection = 0x2229;\n  t.intisquare = 0x3305;\n  t.invbullet = 0x25d8;\n  t.invcircle = 0x25d9;\n  t.invsmileface = 0x263b;\n  t.iocyrillic = 0x0451;\n  t.iogonek = 0x012f;\n  t.iota = 0x03b9;\n  t.iotadieresis = 0x03ca;\n  t.iotadieresistonos = 0x0390;\n  t.iotalatin = 0x0269;\n  t.iotatonos = 0x03af;\n  t.iparen = 0x24a4;\n  t.irigurmukhi = 0x0a72;\n  t.ismallhiragana = 0x3043;\n  t.ismallkatakana = 0x30a3;\n  t.ismallkatakanahalfwidth = 0xff68;\n  t.issharbengali = 0x09fa;\n  t.istroke = 0x0268;\n  t.isuperior = 0xf6ed;\n  t.iterationhiragana = 0x309d;\n  t.iterationkatakana = 0x30fd;\n  t.itilde = 0x0129;\n  t.itildebelow = 0x1e2d;\n  t.iubopomofo = 0x3129;\n  t.iucyrillic = 0x044e;\n  t.ivowelsignbengali = 0x09bf;\n  t.ivowelsigndeva = 0x093f;\n  t.ivowelsigngujarati = 0x0abf;\n  t.izhitsacyrillic = 0x0475;\n  t.izhitsadblgravecyrillic = 0x0477;\n  t.j = 0x006a;\n  t.jaarmenian = 0x0571;\n  t.jabengali = 0x099c;\n  t.jadeva = 0x091c;\n  t.jagujarati = 0x0a9c;\n  t.jagurmukhi = 0x0a1c;\n  t.jbopomofo = 0x3110;\n  t.jcaron = 0x01f0;\n  t.jcircle = 0x24d9;\n  t.jcircumflex = 0x0135;\n  t.jcrossedtail = 0x029d;\n  t.jdotlessstroke = 0x025f;\n  t.jecyrillic = 0x0458;\n  t.jeemarabic = 0x062c;\n  t.jeemfinalarabic = 0xfe9e;\n  t.jeeminitialarabic = 0xfe9f;\n  t.jeemmedialarabic = 0xfea0;\n  t.jeharabic = 0x0698;\n  t.jehfinalarabic = 0xfb8b;\n  t.jhabengali = 0x099d;\n  t.jhadeva = 0x091d;\n  t.jhagujarati = 0x0a9d;\n  t.jhagurmukhi = 0x0a1d;\n  t.jheharmenian = 0x057b;\n  t.jis = 0x3004;\n  t.jmonospace = 0xff4a;\n  t.jparen = 0x24a5;\n  t.jsuperior = 0x02b2;\n  t.k = 0x006b;\n  t.kabashkircyrillic = 0x04a1;\n  t.kabengali = 0x0995;\n  t.kacute = 0x1e31;\n  t.kacyrillic = 0x043a;\n  t.kadescendercyrillic = 0x049b;\n  t.kadeva = 0x0915;\n  t.kaf = 0x05db;\n  t.kafarabic = 0x0643;\n  t.kafdagesh = 0xfb3b;\n  t.kafdageshhebrew = 0xfb3b;\n  t.kaffinalarabic = 0xfeda;\n  t.kafhebrew = 0x05db;\n  t.kafinitialarabic = 0xfedb;\n  t.kafmedialarabic = 0xfedc;\n  t.kafrafehebrew = 0xfb4d;\n  t.kagujarati = 0x0a95;\n  t.kagurmukhi = 0x0a15;\n  t.kahiragana = 0x304b;\n  t.kahookcyrillic = 0x04c4;\n  t.kakatakana = 0x30ab;\n  t.kakatakanahalfwidth = 0xff76;\n  t.kappa = 0x03ba;\n  t.kappasymbolgreek = 0x03f0;\n  t.kapyeounmieumkorean = 0x3171;\n  t.kapyeounphieuphkorean = 0x3184;\n  t.kapyeounpieupkorean = 0x3178;\n  t.kapyeounssangpieupkorean = 0x3179;\n  t.karoriisquare = 0x330d;\n  t.kashidaautoarabic = 0x0640;\n  t.kashidaautonosidebearingarabic = 0x0640;\n  t.kasmallkatakana = 0x30f5;\n  t.kasquare = 0x3384;\n  t.kasraarabic = 0x0650;\n  t.kasratanarabic = 0x064d;\n  t.kastrokecyrillic = 0x049f;\n  t.katahiraprolongmarkhalfwidth = 0xff70;\n  t.kaverticalstrokecyrillic = 0x049d;\n  t.kbopomofo = 0x310e;\n  t.kcalsquare = 0x3389;\n  t.kcaron = 0x01e9;\n  t.kcedilla = 0x0137;\n  t.kcircle = 0x24da;\n  t.kcommaaccent = 0x0137;\n  t.kdotbelow = 0x1e33;\n  t.keharmenian = 0x0584;\n  t.kehiragana = 0x3051;\n  t.kekatakana = 0x30b1;\n  t.kekatakanahalfwidth = 0xff79;\n  t.kenarmenian = 0x056f;\n  t.kesmallkatakana = 0x30f6;\n  t.kgreenlandic = 0x0138;\n  t.khabengali = 0x0996;\n  t.khacyrillic = 0x0445;\n  t.khadeva = 0x0916;\n  t.khagujarati = 0x0a96;\n  t.khagurmukhi = 0x0a16;\n  t.khaharabic = 0x062e;\n  t.khahfinalarabic = 0xfea6;\n  t.khahinitialarabic = 0xfea7;\n  t.khahmedialarabic = 0xfea8;\n  t.kheicoptic = 0x03e7;\n  t.khhadeva = 0x0959;\n  t.khhagurmukhi = 0x0a59;\n  t.khieukhacirclekorean = 0x3278;\n  t.khieukhaparenkorean = 0x3218;\n  t.khieukhcirclekorean = 0x326a;\n  t.khieukhkorean = 0x314b;\n  t.khieukhparenkorean = 0x320a;\n  t.khokhaithai = 0x0e02;\n  t.khokhonthai = 0x0e05;\n  t.khokhuatthai = 0x0e03;\n  t.khokhwaithai = 0x0e04;\n  t.khomutthai = 0x0e5b;\n  t.khook = 0x0199;\n  t.khorakhangthai = 0x0e06;\n  t.khzsquare = 0x3391;\n  t.kihiragana = 0x304d;\n  t.kikatakana = 0x30ad;\n  t.kikatakanahalfwidth = 0xff77;\n  t.kiroguramusquare = 0x3315;\n  t.kiromeetorusquare = 0x3316;\n  t.kirosquare = 0x3314;\n  t.kiyeokacirclekorean = 0x326e;\n  t.kiyeokaparenkorean = 0x320e;\n  t.kiyeokcirclekorean = 0x3260;\n  t.kiyeokkorean = 0x3131;\n  t.kiyeokparenkorean = 0x3200;\n  t.kiyeoksioskorean = 0x3133;\n  t.kjecyrillic = 0x045c;\n  t.klinebelow = 0x1e35;\n  t.klsquare = 0x3398;\n  t.kmcubedsquare = 0x33a6;\n  t.kmonospace = 0xff4b;\n  t.kmsquaredsquare = 0x33a2;\n  t.kohiragana = 0x3053;\n  t.kohmsquare = 0x33c0;\n  t.kokaithai = 0x0e01;\n  t.kokatakana = 0x30b3;\n  t.kokatakanahalfwidth = 0xff7a;\n  t.kooposquare = 0x331e;\n  t.koppacyrillic = 0x0481;\n  t.koreanstandardsymbol = 0x327f;\n  t.koroniscmb = 0x0343;\n  t.kparen = 0x24a6;\n  t.kpasquare = 0x33aa;\n  t.ksicyrillic = 0x046f;\n  t.ktsquare = 0x33cf;\n  t.kturned = 0x029e;\n  t.kuhiragana = 0x304f;\n  t.kukatakana = 0x30af;\n  t.kukatakanahalfwidth = 0xff78;\n  t.kvsquare = 0x33b8;\n  t.kwsquare = 0x33be;\n  t.l = 0x006c;\n  t.labengali = 0x09b2;\n  t.lacute = 0x013a;\n  t.ladeva = 0x0932;\n  t.lagujarati = 0x0ab2;\n  t.lagurmukhi = 0x0a32;\n  t.lakkhangyaothai = 0x0e45;\n  t.lamaleffinalarabic = 0xfefc;\n  t.lamalefhamzaabovefinalarabic = 0xfef8;\n  t.lamalefhamzaaboveisolatedarabic = 0xfef7;\n  t.lamalefhamzabelowfinalarabic = 0xfefa;\n  t.lamalefhamzabelowisolatedarabic = 0xfef9;\n  t.lamalefisolatedarabic = 0xfefb;\n  t.lamalefmaddaabovefinalarabic = 0xfef6;\n  t.lamalefmaddaaboveisolatedarabic = 0xfef5;\n  t.lamarabic = 0x0644;\n  t.lambda = 0x03bb;\n  t.lambdastroke = 0x019b;\n  t.lamed = 0x05dc;\n  t.lameddagesh = 0xfb3c;\n  t.lameddageshhebrew = 0xfb3c;\n  t.lamedhebrew = 0x05dc;\n  t.lamfinalarabic = 0xfede;\n  t.lamhahinitialarabic = 0xfcca;\n  t.laminitialarabic = 0xfedf;\n  t.lamjeeminitialarabic = 0xfcc9;\n  t.lamkhahinitialarabic = 0xfccb;\n  t.lamlamhehisolatedarabic = 0xfdf2;\n  t.lammedialarabic = 0xfee0;\n  t.lammeemhahinitialarabic = 0xfd88;\n  t.lammeeminitialarabic = 0xfccc;\n  t.largecircle = 0x25ef;\n  t.lbar = 0x019a;\n  t.lbelt = 0x026c;\n  t.lbopomofo = 0x310c;\n  t.lcaron = 0x013e;\n  t.lcedilla = 0x013c;\n  t.lcircle = 0x24db;\n  t.lcircumflexbelow = 0x1e3d;\n  t.lcommaaccent = 0x013c;\n  t.ldot = 0x0140;\n  t.ldotaccent = 0x0140;\n  t.ldotbelow = 0x1e37;\n  t.ldotbelowmacron = 0x1e39;\n  t.leftangleabovecmb = 0x031a;\n  t.lefttackbelowcmb = 0x0318;\n  t.less = 0x003c;\n  t.lessequal = 0x2264;\n  t.lessequalorgreater = 0x22da;\n  t.lessmonospace = 0xff1c;\n  t.lessorequivalent = 0x2272;\n  t.lessorgreater = 0x2276;\n  t.lessoverequal = 0x2266;\n  t.lesssmall = 0xfe64;\n  t.lezh = 0x026e;\n  t.lfblock = 0x258c;\n  t.lhookretroflex = 0x026d;\n  t.lira = 0x20a4;\n  t.liwnarmenian = 0x056c;\n  t.lj = 0x01c9;\n  t.ljecyrillic = 0x0459;\n  t.ll = 0xf6c0;\n  t.lladeva = 0x0933;\n  t.llagujarati = 0x0ab3;\n  t.llinebelow = 0x1e3b;\n  t.llladeva = 0x0934;\n  t.llvocalicbengali = 0x09e1;\n  t.llvocalicdeva = 0x0961;\n  t.llvocalicvowelsignbengali = 0x09e3;\n  t.llvocalicvowelsigndeva = 0x0963;\n  t.lmiddletilde = 0x026b;\n  t.lmonospace = 0xff4c;\n  t.lmsquare = 0x33d0;\n  t.lochulathai = 0x0e2c;\n  t.logicaland = 0x2227;\n  t.logicalnot = 0x00ac;\n  t.logicalnotreversed = 0x2310;\n  t.logicalor = 0x2228;\n  t.lolingthai = 0x0e25;\n  t.longs = 0x017f;\n  t.lowlinecenterline = 0xfe4e;\n  t.lowlinecmb = 0x0332;\n  t.lowlinedashed = 0xfe4d;\n  t.lozenge = 0x25ca;\n  t.lparen = 0x24a7;\n  t.lslash = 0x0142;\n  t.lsquare = 0x2113;\n  t.lsuperior = 0xf6ee;\n  t.ltshade = 0x2591;\n  t.luthai = 0x0e26;\n  t.lvocalicbengali = 0x098c;\n  t.lvocalicdeva = 0x090c;\n  t.lvocalicvowelsignbengali = 0x09e2;\n  t.lvocalicvowelsigndeva = 0x0962;\n  t.lxsquare = 0x33d3;\n  t.m = 0x006d;\n  t.mabengali = 0x09ae;\n  t.macron = 0x00af;\n  t.macronbelowcmb = 0x0331;\n  t.macroncmb = 0x0304;\n  t.macronlowmod = 0x02cd;\n  t.macronmonospace = 0xffe3;\n  t.macute = 0x1e3f;\n  t.madeva = 0x092e;\n  t.magujarati = 0x0aae;\n  t.magurmukhi = 0x0a2e;\n  t.mahapakhhebrew = 0x05a4;\n  t.mahapakhlefthebrew = 0x05a4;\n  t.mahiragana = 0x307e;\n  t.maichattawalowleftthai = 0xf895;\n  t.maichattawalowrightthai = 0xf894;\n  t.maichattawathai = 0x0e4b;\n  t.maichattawaupperleftthai = 0xf893;\n  t.maieklowleftthai = 0xf88c;\n  t.maieklowrightthai = 0xf88b;\n  t.maiekthai = 0x0e48;\n  t.maiekupperleftthai = 0xf88a;\n  t.maihanakatleftthai = 0xf884;\n  t.maihanakatthai = 0x0e31;\n  t.maitaikhuleftthai = 0xf889;\n  t.maitaikhuthai = 0x0e47;\n  t.maitholowleftthai = 0xf88f;\n  t.maitholowrightthai = 0xf88e;\n  t.maithothai = 0x0e49;\n  t.maithoupperleftthai = 0xf88d;\n  t.maitrilowleftthai = 0xf892;\n  t.maitrilowrightthai = 0xf891;\n  t.maitrithai = 0x0e4a;\n  t.maitriupperleftthai = 0xf890;\n  t.maiyamokthai = 0x0e46;\n  t.makatakana = 0x30de;\n  t.makatakanahalfwidth = 0xff8f;\n  t.male = 0x2642;\n  t.mansyonsquare = 0x3347;\n  t.maqafhebrew = 0x05be;\n  t.mars = 0x2642;\n  t.masoracirclehebrew = 0x05af;\n  t.masquare = 0x3383;\n  t.mbopomofo = 0x3107;\n  t.mbsquare = 0x33d4;\n  t.mcircle = 0x24dc;\n  t.mcubedsquare = 0x33a5;\n  t.mdotaccent = 0x1e41;\n  t.mdotbelow = 0x1e43;\n  t.meemarabic = 0x0645;\n  t.meemfinalarabic = 0xfee2;\n  t.meeminitialarabic = 0xfee3;\n  t.meemmedialarabic = 0xfee4;\n  t.meemmeeminitialarabic = 0xfcd1;\n  t.meemmeemisolatedarabic = 0xfc48;\n  t.meetorusquare = 0x334d;\n  t.mehiragana = 0x3081;\n  t.meizierasquare = 0x337e;\n  t.mekatakana = 0x30e1;\n  t.mekatakanahalfwidth = 0xff92;\n  t.mem = 0x05de;\n  t.memdagesh = 0xfb3e;\n  t.memdageshhebrew = 0xfb3e;\n  t.memhebrew = 0x05de;\n  t.menarmenian = 0x0574;\n  t.merkhahebrew = 0x05a5;\n  t.merkhakefulahebrew = 0x05a6;\n  t.merkhakefulalefthebrew = 0x05a6;\n  t.merkhalefthebrew = 0x05a5;\n  t.mhook = 0x0271;\n  t.mhzsquare = 0x3392;\n  t.middledotkatakanahalfwidth = 0xff65;\n  t.middot = 0x00b7;\n  t.mieumacirclekorean = 0x3272;\n  t.mieumaparenkorean = 0x3212;\n  t.mieumcirclekorean = 0x3264;\n  t.mieumkorean = 0x3141;\n  t.mieumpansioskorean = 0x3170;\n  t.mieumparenkorean = 0x3204;\n  t.mieumpieupkorean = 0x316e;\n  t.mieumsioskorean = 0x316f;\n  t.mihiragana = 0x307f;\n  t.mikatakana = 0x30df;\n  t.mikatakanahalfwidth = 0xff90;\n  t.minus = 0x2212;\n  t.minusbelowcmb = 0x0320;\n  t.minuscircle = 0x2296;\n  t.minusmod = 0x02d7;\n  t.minusplus = 0x2213;\n  t.minute = 0x2032;\n  t.miribaarusquare = 0x334a;\n  t.mirisquare = 0x3349;\n  t.mlonglegturned = 0x0270;\n  t.mlsquare = 0x3396;\n  t.mmcubedsquare = 0x33a3;\n  t.mmonospace = 0xff4d;\n  t.mmsquaredsquare = 0x339f;\n  t.mohiragana = 0x3082;\n  t.mohmsquare = 0x33c1;\n  t.mokatakana = 0x30e2;\n  t.mokatakanahalfwidth = 0xff93;\n  t.molsquare = 0x33d6;\n  t.momathai = 0x0e21;\n  t.moverssquare = 0x33a7;\n  t.moverssquaredsquare = 0x33a8;\n  t.mparen = 0x24a8;\n  t.mpasquare = 0x33ab;\n  t.mssquare = 0x33b3;\n  t.msuperior = 0xf6ef;\n  t.mturned = 0x026f;\n  t.mu = 0x00b5;\n  t.mu1 = 0x00b5;\n  t.muasquare = 0x3382;\n  t.muchgreater = 0x226b;\n  t.muchless = 0x226a;\n  t.mufsquare = 0x338c;\n  t.mugreek = 0x03bc;\n  t.mugsquare = 0x338d;\n  t.muhiragana = 0x3080;\n  t.mukatakana = 0x30e0;\n  t.mukatakanahalfwidth = 0xff91;\n  t.mulsquare = 0x3395;\n  t.multiply = 0x00d7;\n  t.mumsquare = 0x339b;\n  t.munahhebrew = 0x05a3;\n  t.munahlefthebrew = 0x05a3;\n  t.musicalnote = 0x266a;\n  t.musicalnotedbl = 0x266b;\n  t.musicflatsign = 0x266d;\n  t.musicsharpsign = 0x266f;\n  t.mussquare = 0x33b2;\n  t.muvsquare = 0x33b6;\n  t.muwsquare = 0x33bc;\n  t.mvmegasquare = 0x33b9;\n  t.mvsquare = 0x33b7;\n  t.mwmegasquare = 0x33bf;\n  t.mwsquare = 0x33bd;\n  t.n = 0x006e;\n  t.nabengali = 0x09a8;\n  t.nabla = 0x2207;\n  t.nacute = 0x0144;\n  t.nadeva = 0x0928;\n  t.nagujarati = 0x0aa8;\n  t.nagurmukhi = 0x0a28;\n  t.nahiragana = 0x306a;\n  t.nakatakana = 0x30ca;\n  t.nakatakanahalfwidth = 0xff85;\n  t.napostrophe = 0x0149;\n  t.nasquare = 0x3381;\n  t.nbopomofo = 0x310b;\n  t.nbspace = 0x00a0;\n  t.ncaron = 0x0148;\n  t.ncedilla = 0x0146;\n  t.ncircle = 0x24dd;\n  t.ncircumflexbelow = 0x1e4b;\n  t.ncommaaccent = 0x0146;\n  t.ndotaccent = 0x1e45;\n  t.ndotbelow = 0x1e47;\n  t.nehiragana = 0x306d;\n  t.nekatakana = 0x30cd;\n  t.nekatakanahalfwidth = 0xff88;\n  t.newsheqelsign = 0x20aa;\n  t.nfsquare = 0x338b;\n  t.ngabengali = 0x0999;\n  t.ngadeva = 0x0919;\n  t.ngagujarati = 0x0a99;\n  t.ngagurmukhi = 0x0a19;\n  t.ngonguthai = 0x0e07;\n  t.nhiragana = 0x3093;\n  t.nhookleft = 0x0272;\n  t.nhookretroflex = 0x0273;\n  t.nieunacirclekorean = 0x326f;\n  t.nieunaparenkorean = 0x320f;\n  t.nieuncieuckorean = 0x3135;\n  t.nieuncirclekorean = 0x3261;\n  t.nieunhieuhkorean = 0x3136;\n  t.nieunkorean = 0x3134;\n  t.nieunpansioskorean = 0x3168;\n  t.nieunparenkorean = 0x3201;\n  t.nieunsioskorean = 0x3167;\n  t.nieuntikeutkorean = 0x3166;\n  t.nihiragana = 0x306b;\n  t.nikatakana = 0x30cb;\n  t.nikatakanahalfwidth = 0xff86;\n  t.nikhahitleftthai = 0xf899;\n  t.nikhahitthai = 0x0e4d;\n  t.nine = 0x0039;\n  t.ninearabic = 0x0669;\n  t.ninebengali = 0x09ef;\n  t.ninecircle = 0x2468;\n  t.ninecircleinversesansserif = 0x2792;\n  t.ninedeva = 0x096f;\n  t.ninegujarati = 0x0aef;\n  t.ninegurmukhi = 0x0a6f;\n  t.ninehackarabic = 0x0669;\n  t.ninehangzhou = 0x3029;\n  t.nineideographicparen = 0x3228;\n  t.nineinferior = 0x2089;\n  t.ninemonospace = 0xff19;\n  t.nineoldstyle = 0xf739;\n  t.nineparen = 0x247c;\n  t.nineperiod = 0x2490;\n  t.ninepersian = 0x06f9;\n  t.nineroman = 0x2178;\n  t.ninesuperior = 0x2079;\n  t.nineteencircle = 0x2472;\n  t.nineteenparen = 0x2486;\n  t.nineteenperiod = 0x249a;\n  t.ninethai = 0x0e59;\n  t.nj = 0x01cc;\n  t.njecyrillic = 0x045a;\n  t.nkatakana = 0x30f3;\n  t.nkatakanahalfwidth = 0xff9d;\n  t.nlegrightlong = 0x019e;\n  t.nlinebelow = 0x1e49;\n  t.nmonospace = 0xff4e;\n  t.nmsquare = 0x339a;\n  t.nnabengali = 0x09a3;\n  t.nnadeva = 0x0923;\n  t.nnagujarati = 0x0aa3;\n  t.nnagurmukhi = 0x0a23;\n  t.nnnadeva = 0x0929;\n  t.nohiragana = 0x306e;\n  t.nokatakana = 0x30ce;\n  t.nokatakanahalfwidth = 0xff89;\n  t.nonbreakingspace = 0x00a0;\n  t.nonenthai = 0x0e13;\n  t.nonuthai = 0x0e19;\n  t.noonarabic = 0x0646;\n  t.noonfinalarabic = 0xfee6;\n  t.noonghunnaarabic = 0x06ba;\n  t.noonghunnafinalarabic = 0xfb9f;\n  t.nooninitialarabic = 0xfee7;\n  t.noonjeeminitialarabic = 0xfcd2;\n  t.noonjeemisolatedarabic = 0xfc4b;\n  t.noonmedialarabic = 0xfee8;\n  t.noonmeeminitialarabic = 0xfcd5;\n  t.noonmeemisolatedarabic = 0xfc4e;\n  t.noonnoonfinalarabic = 0xfc8d;\n  t.notcontains = 0x220c;\n  t.notelement = 0x2209;\n  t.notelementof = 0x2209;\n  t.notequal = 0x2260;\n  t.notgreater = 0x226f;\n  t.notgreaternorequal = 0x2271;\n  t.notgreaternorless = 0x2279;\n  t.notidentical = 0x2262;\n  t.notless = 0x226e;\n  t.notlessnorequal = 0x2270;\n  t.notparallel = 0x2226;\n  t.notprecedes = 0x2280;\n  t.notsubset = 0x2284;\n  t.notsucceeds = 0x2281;\n  t.notsuperset = 0x2285;\n  t.nowarmenian = 0x0576;\n  t.nparen = 0x24a9;\n  t.nssquare = 0x33b1;\n  t.nsuperior = 0x207f;\n  t.ntilde = 0x00f1;\n  t.nu = 0x03bd;\n  t.nuhiragana = 0x306c;\n  t.nukatakana = 0x30cc;\n  t.nukatakanahalfwidth = 0xff87;\n  t.nuktabengali = 0x09bc;\n  t.nuktadeva = 0x093c;\n  t.nuktagujarati = 0x0abc;\n  t.nuktagurmukhi = 0x0a3c;\n  t.numbersign = 0x0023;\n  t.numbersignmonospace = 0xff03;\n  t.numbersignsmall = 0xfe5f;\n  t.numeralsigngreek = 0x0374;\n  t.numeralsignlowergreek = 0x0375;\n  t.numero = 0x2116;\n  t.nun = 0x05e0;\n  t.nundagesh = 0xfb40;\n  t.nundageshhebrew = 0xfb40;\n  t.nunhebrew = 0x05e0;\n  t.nvsquare = 0x33b5;\n  t.nwsquare = 0x33bb;\n  t.nyabengali = 0x099e;\n  t.nyadeva = 0x091e;\n  t.nyagujarati = 0x0a9e;\n  t.nyagurmukhi = 0x0a1e;\n  t.o = 0x006f;\n  t.oacute = 0x00f3;\n  t.oangthai = 0x0e2d;\n  t.obarred = 0x0275;\n  t.obarredcyrillic = 0x04e9;\n  t.obarreddieresiscyrillic = 0x04eb;\n  t.obengali = 0x0993;\n  t.obopomofo = 0x311b;\n  t.obreve = 0x014f;\n  t.ocandradeva = 0x0911;\n  t.ocandragujarati = 0x0a91;\n  t.ocandravowelsigndeva = 0x0949;\n  t.ocandravowelsigngujarati = 0x0ac9;\n  t.ocaron = 0x01d2;\n  t.ocircle = 0x24de;\n  t.ocircumflex = 0x00f4;\n  t.ocircumflexacute = 0x1ed1;\n  t.ocircumflexdotbelow = 0x1ed9;\n  t.ocircumflexgrave = 0x1ed3;\n  t.ocircumflexhookabove = 0x1ed5;\n  t.ocircumflextilde = 0x1ed7;\n  t.ocyrillic = 0x043e;\n  t.odblacute = 0x0151;\n  t.odblgrave = 0x020d;\n  t.odeva = 0x0913;\n  t.odieresis = 0x00f6;\n  t.odieresiscyrillic = 0x04e7;\n  t.odotbelow = 0x1ecd;\n  t.oe = 0x0153;\n  t.oekorean = 0x315a;\n  t.ogonek = 0x02db;\n  t.ogonekcmb = 0x0328;\n  t.ograve = 0x00f2;\n  t.ogujarati = 0x0a93;\n  t.oharmenian = 0x0585;\n  t.ohiragana = 0x304a;\n  t.ohookabove = 0x1ecf;\n  t.ohorn = 0x01a1;\n  t.ohornacute = 0x1edb;\n  t.ohorndotbelow = 0x1ee3;\n  t.ohorngrave = 0x1edd;\n  t.ohornhookabove = 0x1edf;\n  t.ohorntilde = 0x1ee1;\n  t.ohungarumlaut = 0x0151;\n  t.oi = 0x01a3;\n  t.oinvertedbreve = 0x020f;\n  t.okatakana = 0x30aa;\n  t.okatakanahalfwidth = 0xff75;\n  t.okorean = 0x3157;\n  t.olehebrew = 0x05ab;\n  t.omacron = 0x014d;\n  t.omacronacute = 0x1e53;\n  t.omacrongrave = 0x1e51;\n  t.omdeva = 0x0950;\n  t.omega = 0x03c9;\n  t.omega1 = 0x03d6;\n  t.omegacyrillic = 0x0461;\n  t.omegalatinclosed = 0x0277;\n  t.omegaroundcyrillic = 0x047b;\n  t.omegatitlocyrillic = 0x047d;\n  t.omegatonos = 0x03ce;\n  t.omgujarati = 0x0ad0;\n  t.omicron = 0x03bf;\n  t.omicrontonos = 0x03cc;\n  t.omonospace = 0xff4f;\n  t.one = 0x0031;\n  t.onearabic = 0x0661;\n  t.onebengali = 0x09e7;\n  t.onecircle = 0x2460;\n  t.onecircleinversesansserif = 0x278a;\n  t.onedeva = 0x0967;\n  t.onedotenleader = 0x2024;\n  t.oneeighth = 0x215b;\n  t.onefitted = 0xf6dc;\n  t.onegujarati = 0x0ae7;\n  t.onegurmukhi = 0x0a67;\n  t.onehackarabic = 0x0661;\n  t.onehalf = 0x00bd;\n  t.onehangzhou = 0x3021;\n  t.oneideographicparen = 0x3220;\n  t.oneinferior = 0x2081;\n  t.onemonospace = 0xff11;\n  t.onenumeratorbengali = 0x09f4;\n  t.oneoldstyle = 0xf731;\n  t.oneparen = 0x2474;\n  t.oneperiod = 0x2488;\n  t.onepersian = 0x06f1;\n  t.onequarter = 0x00bc;\n  t.oneroman = 0x2170;\n  t.onesuperior = 0x00b9;\n  t.onethai = 0x0e51;\n  t.onethird = 0x2153;\n  t.oogonek = 0x01eb;\n  t.oogonekmacron = 0x01ed;\n  t.oogurmukhi = 0x0a13;\n  t.oomatragurmukhi = 0x0a4b;\n  t.oopen = 0x0254;\n  t.oparen = 0x24aa;\n  t.openbullet = 0x25e6;\n  t.option = 0x2325;\n  t.ordfeminine = 0x00aa;\n  t.ordmasculine = 0x00ba;\n  t.orthogonal = 0x221f;\n  t.oshortdeva = 0x0912;\n  t.oshortvowelsigndeva = 0x094a;\n  t.oslash = 0x00f8;\n  t.oslashacute = 0x01ff;\n  t.osmallhiragana = 0x3049;\n  t.osmallkatakana = 0x30a9;\n  t.osmallkatakanahalfwidth = 0xff6b;\n  t.ostrokeacute = 0x01ff;\n  t.osuperior = 0xf6f0;\n  t.otcyrillic = 0x047f;\n  t.otilde = 0x00f5;\n  t.otildeacute = 0x1e4d;\n  t.otildedieresis = 0x1e4f;\n  t.oubopomofo = 0x3121;\n  t.overline = 0x203e;\n  t.overlinecenterline = 0xfe4a;\n  t.overlinecmb = 0x0305;\n  t.overlinedashed = 0xfe49;\n  t.overlinedblwavy = 0xfe4c;\n  t.overlinewavy = 0xfe4b;\n  t.overscore = 0x00af;\n  t.ovowelsignbengali = 0x09cb;\n  t.ovowelsigndeva = 0x094b;\n  t.ovowelsigngujarati = 0x0acb;\n  t.p = 0x0070;\n  t.paampssquare = 0x3380;\n  t.paasentosquare = 0x332b;\n  t.pabengali = 0x09aa;\n  t.pacute = 0x1e55;\n  t.padeva = 0x092a;\n  t.pagedown = 0x21df;\n  t.pageup = 0x21de;\n  t.pagujarati = 0x0aaa;\n  t.pagurmukhi = 0x0a2a;\n  t.pahiragana = 0x3071;\n  t.paiyannoithai = 0x0e2f;\n  t.pakatakana = 0x30d1;\n  t.palatalizationcyrilliccmb = 0x0484;\n  t.palochkacyrillic = 0x04c0;\n  t.pansioskorean = 0x317f;\n  t.paragraph = 0x00b6;\n  t.parallel = 0x2225;\n  t.parenleft = 0x0028;\n  t.parenleftaltonearabic = 0xfd3e;\n  t.parenleftbt = 0xf8ed;\n  t.parenleftex = 0xf8ec;\n  t.parenleftinferior = 0x208d;\n  t.parenleftmonospace = 0xff08;\n  t.parenleftsmall = 0xfe59;\n  t.parenleftsuperior = 0x207d;\n  t.parenlefttp = 0xf8eb;\n  t.parenleftvertical = 0xfe35;\n  t.parenright = 0x0029;\n  t.parenrightaltonearabic = 0xfd3f;\n  t.parenrightbt = 0xf8f8;\n  t.parenrightex = 0xf8f7;\n  t.parenrightinferior = 0x208e;\n  t.parenrightmonospace = 0xff09;\n  t.parenrightsmall = 0xfe5a;\n  t.parenrightsuperior = 0x207e;\n  t.parenrighttp = 0xf8f6;\n  t.parenrightvertical = 0xfe36;\n  t.partialdiff = 0x2202;\n  t.paseqhebrew = 0x05c0;\n  t.pashtahebrew = 0x0599;\n  t.pasquare = 0x33a9;\n  t.patah = 0x05b7;\n  t.patah11 = 0x05b7;\n  t.patah1d = 0x05b7;\n  t.patah2a = 0x05b7;\n  t.patahhebrew = 0x05b7;\n  t.patahnarrowhebrew = 0x05b7;\n  t.patahquarterhebrew = 0x05b7;\n  t.patahwidehebrew = 0x05b7;\n  t.pazerhebrew = 0x05a1;\n  t.pbopomofo = 0x3106;\n  t.pcircle = 0x24df;\n  t.pdotaccent = 0x1e57;\n  t.pe = 0x05e4;\n  t.pecyrillic = 0x043f;\n  t.pedagesh = 0xfb44;\n  t.pedageshhebrew = 0xfb44;\n  t.peezisquare = 0x333b;\n  t.pefinaldageshhebrew = 0xfb43;\n  t.peharabic = 0x067e;\n  t.peharmenian = 0x057a;\n  t.pehebrew = 0x05e4;\n  t.pehfinalarabic = 0xfb57;\n  t.pehinitialarabic = 0xfb58;\n  t.pehiragana = 0x307a;\n  t.pehmedialarabic = 0xfb59;\n  t.pekatakana = 0x30da;\n  t.pemiddlehookcyrillic = 0x04a7;\n  t.perafehebrew = 0xfb4e;\n  t.percent = 0x0025;\n  t.percentarabic = 0x066a;\n  t.percentmonospace = 0xff05;\n  t.percentsmall = 0xfe6a;\n  t.period = 0x002e;\n  t.periodarmenian = 0x0589;\n  t.periodcentered = 0x00b7;\n  t.periodhalfwidth = 0xff61;\n  t.periodinferior = 0xf6e7;\n  t.periodmonospace = 0xff0e;\n  t.periodsmall = 0xfe52;\n  t.periodsuperior = 0xf6e8;\n  t.perispomenigreekcmb = 0x0342;\n  t.perpendicular = 0x22a5;\n  t.perthousand = 0x2030;\n  t.peseta = 0x20a7;\n  t.pfsquare = 0x338a;\n  t.phabengali = 0x09ab;\n  t.phadeva = 0x092b;\n  t.phagujarati = 0x0aab;\n  t.phagurmukhi = 0x0a2b;\n  t.phi = 0x03c6;\n  t.phi1 = 0x03d5;\n  t.phieuphacirclekorean = 0x327a;\n  t.phieuphaparenkorean = 0x321a;\n  t.phieuphcirclekorean = 0x326c;\n  t.phieuphkorean = 0x314d;\n  t.phieuphparenkorean = 0x320c;\n  t.philatin = 0x0278;\n  t.phinthuthai = 0x0e3a;\n  t.phisymbolgreek = 0x03d5;\n  t.phook = 0x01a5;\n  t.phophanthai = 0x0e1e;\n  t.phophungthai = 0x0e1c;\n  t.phosamphaothai = 0x0e20;\n  t.pi = 0x03c0;\n  t.pieupacirclekorean = 0x3273;\n  t.pieupaparenkorean = 0x3213;\n  t.pieupcieuckorean = 0x3176;\n  t.pieupcirclekorean = 0x3265;\n  t.pieupkiyeokkorean = 0x3172;\n  t.pieupkorean = 0x3142;\n  t.pieupparenkorean = 0x3205;\n  t.pieupsioskiyeokkorean = 0x3174;\n  t.pieupsioskorean = 0x3144;\n  t.pieupsiostikeutkorean = 0x3175;\n  t.pieupthieuthkorean = 0x3177;\n  t.pieuptikeutkorean = 0x3173;\n  t.pihiragana = 0x3074;\n  t.pikatakana = 0x30d4;\n  t.pisymbolgreek = 0x03d6;\n  t.piwrarmenian = 0x0583;\n  t.planckover2pi = 0x210f;\n  t.planckover2pi1 = 0x210f;\n  t.plus = 0x002b;\n  t.plusbelowcmb = 0x031f;\n  t.pluscircle = 0x2295;\n  t.plusminus = 0x00b1;\n  t.plusmod = 0x02d6;\n  t.plusmonospace = 0xff0b;\n  t.plussmall = 0xfe62;\n  t.plussuperior = 0x207a;\n  t.pmonospace = 0xff50;\n  t.pmsquare = 0x33d8;\n  t.pohiragana = 0x307d;\n  t.pointingindexdownwhite = 0x261f;\n  t.pointingindexleftwhite = 0x261c;\n  t.pointingindexrightwhite = 0x261e;\n  t.pointingindexupwhite = 0x261d;\n  t.pokatakana = 0x30dd;\n  t.poplathai = 0x0e1b;\n  t.postalmark = 0x3012;\n  t.postalmarkface = 0x3020;\n  t.pparen = 0x24ab;\n  t.precedes = 0x227a;\n  t.prescription = 0x211e;\n  t.primemod = 0x02b9;\n  t.primereversed = 0x2035;\n  t.product = 0x220f;\n  t.projective = 0x2305;\n  t.prolongedkana = 0x30fc;\n  t.propellor = 0x2318;\n  t.propersubset = 0x2282;\n  t.propersuperset = 0x2283;\n  t.proportion = 0x2237;\n  t.proportional = 0x221d;\n  t.psi = 0x03c8;\n  t.psicyrillic = 0x0471;\n  t.psilipneumatacyrilliccmb = 0x0486;\n  t.pssquare = 0x33b0;\n  t.puhiragana = 0x3077;\n  t.pukatakana = 0x30d7;\n  t.pvsquare = 0x33b4;\n  t.pwsquare = 0x33ba;\n  t.q = 0x0071;\n  t.qadeva = 0x0958;\n  t.qadmahebrew = 0x05a8;\n  t.qafarabic = 0x0642;\n  t.qaffinalarabic = 0xfed6;\n  t.qafinitialarabic = 0xfed7;\n  t.qafmedialarabic = 0xfed8;\n  t.qamats = 0x05b8;\n  t.qamats10 = 0x05b8;\n  t.qamats1a = 0x05b8;\n  t.qamats1c = 0x05b8;\n  t.qamats27 = 0x05b8;\n  t.qamats29 = 0x05b8;\n  t.qamats33 = 0x05b8;\n  t.qamatsde = 0x05b8;\n  t.qamatshebrew = 0x05b8;\n  t.qamatsnarrowhebrew = 0x05b8;\n  t.qamatsqatanhebrew = 0x05b8;\n  t.qamatsqatannarrowhebrew = 0x05b8;\n  t.qamatsqatanquarterhebrew = 0x05b8;\n  t.qamatsqatanwidehebrew = 0x05b8;\n  t.qamatsquarterhebrew = 0x05b8;\n  t.qamatswidehebrew = 0x05b8;\n  t.qarneyparahebrew = 0x059f;\n  t.qbopomofo = 0x3111;\n  t.qcircle = 0x24e0;\n  t.qhook = 0x02a0;\n  t.qmonospace = 0xff51;\n  t.qof = 0x05e7;\n  t.qofdagesh = 0xfb47;\n  t.qofdageshhebrew = 0xfb47;\n  t.qofhebrew = 0x05e7;\n  t.qparen = 0x24ac;\n  t.quarternote = 0x2669;\n  t.qubuts = 0x05bb;\n  t.qubuts18 = 0x05bb;\n  t.qubuts25 = 0x05bb;\n  t.qubuts31 = 0x05bb;\n  t.qubutshebrew = 0x05bb;\n  t.qubutsnarrowhebrew = 0x05bb;\n  t.qubutsquarterhebrew = 0x05bb;\n  t.qubutswidehebrew = 0x05bb;\n  t.question = 0x003f;\n  t.questionarabic = 0x061f;\n  t.questionarmenian = 0x055e;\n  t.questiondown = 0x00bf;\n  t.questiondownsmall = 0xf7bf;\n  t.questiongreek = 0x037e;\n  t.questionmonospace = 0xff1f;\n  t.questionsmall = 0xf73f;\n  t.quotedbl = 0x0022;\n  t.quotedblbase = 0x201e;\n  t.quotedblleft = 0x201c;\n  t.quotedblmonospace = 0xff02;\n  t.quotedblprime = 0x301e;\n  t.quotedblprimereversed = 0x301d;\n  t.quotedblright = 0x201d;\n  t.quoteleft = 0x2018;\n  t.quoteleftreversed = 0x201b;\n  t.quotereversed = 0x201b;\n  t.quoteright = 0x2019;\n  t.quoterightn = 0x0149;\n  t.quotesinglbase = 0x201a;\n  t.quotesingle = 0x0027;\n  t.quotesinglemonospace = 0xff07;\n  t.r = 0x0072;\n  t.raarmenian = 0x057c;\n  t.rabengali = 0x09b0;\n  t.racute = 0x0155;\n  t.radeva = 0x0930;\n  t.radical = 0x221a;\n  t.radicalex = 0xf8e5;\n  t.radoverssquare = 0x33ae;\n  t.radoverssquaredsquare = 0x33af;\n  t.radsquare = 0x33ad;\n  t.rafe = 0x05bf;\n  t.rafehebrew = 0x05bf;\n  t.ragujarati = 0x0ab0;\n  t.ragurmukhi = 0x0a30;\n  t.rahiragana = 0x3089;\n  t.rakatakana = 0x30e9;\n  t.rakatakanahalfwidth = 0xff97;\n  t.ralowerdiagonalbengali = 0x09f1;\n  t.ramiddlediagonalbengali = 0x09f0;\n  t.ramshorn = 0x0264;\n  t.ratio = 0x2236;\n  t.rbopomofo = 0x3116;\n  t.rcaron = 0x0159;\n  t.rcedilla = 0x0157;\n  t.rcircle = 0x24e1;\n  t.rcommaaccent = 0x0157;\n  t.rdblgrave = 0x0211;\n  t.rdotaccent = 0x1e59;\n  t.rdotbelow = 0x1e5b;\n  t.rdotbelowmacron = 0x1e5d;\n  t.referencemark = 0x203b;\n  t.reflexsubset = 0x2286;\n  t.reflexsuperset = 0x2287;\n  t.registered = 0x00ae;\n  t.registersans = 0xf8e8;\n  t.registerserif = 0xf6da;\n  t.reharabic = 0x0631;\n  t.reharmenian = 0x0580;\n  t.rehfinalarabic = 0xfeae;\n  t.rehiragana = 0x308c;\n  t.rekatakana = 0x30ec;\n  t.rekatakanahalfwidth = 0xff9a;\n  t.resh = 0x05e8;\n  t.reshdageshhebrew = 0xfb48;\n  t.reshhebrew = 0x05e8;\n  t.reversedtilde = 0x223d;\n  t.reviahebrew = 0x0597;\n  t.reviamugrashhebrew = 0x0597;\n  t.revlogicalnot = 0x2310;\n  t.rfishhook = 0x027e;\n  t.rfishhookreversed = 0x027f;\n  t.rhabengali = 0x09dd;\n  t.rhadeva = 0x095d;\n  t.rho = 0x03c1;\n  t.rhook = 0x027d;\n  t.rhookturned = 0x027b;\n  t.rhookturnedsuperior = 0x02b5;\n  t.rhosymbolgreek = 0x03f1;\n  t.rhotichookmod = 0x02de;\n  t.rieulacirclekorean = 0x3271;\n  t.rieulaparenkorean = 0x3211;\n  t.rieulcirclekorean = 0x3263;\n  t.rieulhieuhkorean = 0x3140;\n  t.rieulkiyeokkorean = 0x313a;\n  t.rieulkiyeoksioskorean = 0x3169;\n  t.rieulkorean = 0x3139;\n  t.rieulmieumkorean = 0x313b;\n  t.rieulpansioskorean = 0x316c;\n  t.rieulparenkorean = 0x3203;\n  t.rieulphieuphkorean = 0x313f;\n  t.rieulpieupkorean = 0x313c;\n  t.rieulpieupsioskorean = 0x316b;\n  t.rieulsioskorean = 0x313d;\n  t.rieulthieuthkorean = 0x313e;\n  t.rieultikeutkorean = 0x316a;\n  t.rieulyeorinhieuhkorean = 0x316d;\n  t.rightangle = 0x221f;\n  t.righttackbelowcmb = 0x0319;\n  t.righttriangle = 0x22bf;\n  t.rihiragana = 0x308a;\n  t.rikatakana = 0x30ea;\n  t.rikatakanahalfwidth = 0xff98;\n  t.ring = 0x02da;\n  t.ringbelowcmb = 0x0325;\n  t.ringcmb = 0x030a;\n  t.ringhalfleft = 0x02bf;\n  t.ringhalfleftarmenian = 0x0559;\n  t.ringhalfleftbelowcmb = 0x031c;\n  t.ringhalfleftcentered = 0x02d3;\n  t.ringhalfright = 0x02be;\n  t.ringhalfrightbelowcmb = 0x0339;\n  t.ringhalfrightcentered = 0x02d2;\n  t.rinvertedbreve = 0x0213;\n  t.rittorusquare = 0x3351;\n  t.rlinebelow = 0x1e5f;\n  t.rlongleg = 0x027c;\n  t.rlonglegturned = 0x027a;\n  t.rmonospace = 0xff52;\n  t.rohiragana = 0x308d;\n  t.rokatakana = 0x30ed;\n  t.rokatakanahalfwidth = 0xff9b;\n  t.roruathai = 0x0e23;\n  t.rparen = 0x24ad;\n  t.rrabengali = 0x09dc;\n  t.rradeva = 0x0931;\n  t.rragurmukhi = 0x0a5c;\n  t.rreharabic = 0x0691;\n  t.rrehfinalarabic = 0xfb8d;\n  t.rrvocalicbengali = 0x09e0;\n  t.rrvocalicdeva = 0x0960;\n  t.rrvocalicgujarati = 0x0ae0;\n  t.rrvocalicvowelsignbengali = 0x09c4;\n  t.rrvocalicvowelsigndeva = 0x0944;\n  t.rrvocalicvowelsigngujarati = 0x0ac4;\n  t.rsuperior = 0xf6f1;\n  t.rtblock = 0x2590;\n  t.rturned = 0x0279;\n  t.rturnedsuperior = 0x02b4;\n  t.ruhiragana = 0x308b;\n  t.rukatakana = 0x30eb;\n  t.rukatakanahalfwidth = 0xff99;\n  t.rupeemarkbengali = 0x09f2;\n  t.rupeesignbengali = 0x09f3;\n  t.rupiah = 0xf6dd;\n  t.ruthai = 0x0e24;\n  t.rvocalicbengali = 0x098b;\n  t.rvocalicdeva = 0x090b;\n  t.rvocalicgujarati = 0x0a8b;\n  t.rvocalicvowelsignbengali = 0x09c3;\n  t.rvocalicvowelsigndeva = 0x0943;\n  t.rvocalicvowelsigngujarati = 0x0ac3;\n  t.s = 0x0073;\n  t.sabengali = 0x09b8;\n  t.sacute = 0x015b;\n  t.sacutedotaccent = 0x1e65;\n  t.sadarabic = 0x0635;\n  t.sadeva = 0x0938;\n  t.sadfinalarabic = 0xfeba;\n  t.sadinitialarabic = 0xfebb;\n  t.sadmedialarabic = 0xfebc;\n  t.sagujarati = 0x0ab8;\n  t.sagurmukhi = 0x0a38;\n  t.sahiragana = 0x3055;\n  t.sakatakana = 0x30b5;\n  t.sakatakanahalfwidth = 0xff7b;\n  t.sallallahoualayhewasallamarabic = 0xfdfa;\n  t.samekh = 0x05e1;\n  t.samekhdagesh = 0xfb41;\n  t.samekhdageshhebrew = 0xfb41;\n  t.samekhhebrew = 0x05e1;\n  t.saraaathai = 0x0e32;\n  t.saraaethai = 0x0e41;\n  t.saraaimaimalaithai = 0x0e44;\n  t.saraaimaimuanthai = 0x0e43;\n  t.saraamthai = 0x0e33;\n  t.saraathai = 0x0e30;\n  t.saraethai = 0x0e40;\n  t.saraiileftthai = 0xf886;\n  t.saraiithai = 0x0e35;\n  t.saraileftthai = 0xf885;\n  t.saraithai = 0x0e34;\n  t.saraothai = 0x0e42;\n  t.saraueeleftthai = 0xf888;\n  t.saraueethai = 0x0e37;\n  t.saraueleftthai = 0xf887;\n  t.sarauethai = 0x0e36;\n  t.sarauthai = 0x0e38;\n  t.sarauuthai = 0x0e39;\n  t.sbopomofo = 0x3119;\n  t.scaron = 0x0161;\n  t.scarondotaccent = 0x1e67;\n  t.scedilla = 0x015f;\n  t.schwa = 0x0259;\n  t.schwacyrillic = 0x04d9;\n  t.schwadieresiscyrillic = 0x04db;\n  t.schwahook = 0x025a;\n  t.scircle = 0x24e2;\n  t.scircumflex = 0x015d;\n  t.scommaaccent = 0x0219;\n  t.sdotaccent = 0x1e61;\n  t.sdotbelow = 0x1e63;\n  t.sdotbelowdotaccent = 0x1e69;\n  t.seagullbelowcmb = 0x033c;\n  t.second = 0x2033;\n  t.secondtonechinese = 0x02ca;\n  t.section = 0x00a7;\n  t.seenarabic = 0x0633;\n  t.seenfinalarabic = 0xfeb2;\n  t.seeninitialarabic = 0xfeb3;\n  t.seenmedialarabic = 0xfeb4;\n  t.segol = 0x05b6;\n  t.segol13 = 0x05b6;\n  t.segol1f = 0x05b6;\n  t.segol2c = 0x05b6;\n  t.segolhebrew = 0x05b6;\n  t.segolnarrowhebrew = 0x05b6;\n  t.segolquarterhebrew = 0x05b6;\n  t.segoltahebrew = 0x0592;\n  t.segolwidehebrew = 0x05b6;\n  t.seharmenian = 0x057d;\n  t.sehiragana = 0x305b;\n  t.sekatakana = 0x30bb;\n  t.sekatakanahalfwidth = 0xff7e;\n  t.semicolon = 0x003b;\n  t.semicolonarabic = 0x061b;\n  t.semicolonmonospace = 0xff1b;\n  t.semicolonsmall = 0xfe54;\n  t.semivoicedmarkkana = 0x309c;\n  t.semivoicedmarkkanahalfwidth = 0xff9f;\n  t.sentisquare = 0x3322;\n  t.sentosquare = 0x3323;\n  t.seven = 0x0037;\n  t.sevenarabic = 0x0667;\n  t.sevenbengali = 0x09ed;\n  t.sevencircle = 0x2466;\n  t.sevencircleinversesansserif = 0x2790;\n  t.sevendeva = 0x096d;\n  t.seveneighths = 0x215e;\n  t.sevengujarati = 0x0aed;\n  t.sevengurmukhi = 0x0a6d;\n  t.sevenhackarabic = 0x0667;\n  t.sevenhangzhou = 0x3027;\n  t.sevenideographicparen = 0x3226;\n  t.seveninferior = 0x2087;\n  t.sevenmonospace = 0xff17;\n  t.sevenoldstyle = 0xf737;\n  t.sevenparen = 0x247a;\n  t.sevenperiod = 0x248e;\n  t.sevenpersian = 0x06f7;\n  t.sevenroman = 0x2176;\n  t.sevensuperior = 0x2077;\n  t.seventeencircle = 0x2470;\n  t.seventeenparen = 0x2484;\n  t.seventeenperiod = 0x2498;\n  t.seventhai = 0x0e57;\n  t.sfthyphen = 0x00ad;\n  t.shaarmenian = 0x0577;\n  t.shabengali = 0x09b6;\n  t.shacyrillic = 0x0448;\n  t.shaddaarabic = 0x0651;\n  t.shaddadammaarabic = 0xfc61;\n  t.shaddadammatanarabic = 0xfc5e;\n  t.shaddafathaarabic = 0xfc60;\n  t.shaddakasraarabic = 0xfc62;\n  t.shaddakasratanarabic = 0xfc5f;\n  t.shade = 0x2592;\n  t.shadedark = 0x2593;\n  t.shadelight = 0x2591;\n  t.shademedium = 0x2592;\n  t.shadeva = 0x0936;\n  t.shagujarati = 0x0ab6;\n  t.shagurmukhi = 0x0a36;\n  t.shalshelethebrew = 0x0593;\n  t.shbopomofo = 0x3115;\n  t.shchacyrillic = 0x0449;\n  t.sheenarabic = 0x0634;\n  t.sheenfinalarabic = 0xfeb6;\n  t.sheeninitialarabic = 0xfeb7;\n  t.sheenmedialarabic = 0xfeb8;\n  t.sheicoptic = 0x03e3;\n  t.sheqel = 0x20aa;\n  t.sheqelhebrew = 0x20aa;\n  t.sheva = 0x05b0;\n  t.sheva115 = 0x05b0;\n  t.sheva15 = 0x05b0;\n  t.sheva22 = 0x05b0;\n  t.sheva2e = 0x05b0;\n  t.shevahebrew = 0x05b0;\n  t.shevanarrowhebrew = 0x05b0;\n  t.shevaquarterhebrew = 0x05b0;\n  t.shevawidehebrew = 0x05b0;\n  t.shhacyrillic = 0x04bb;\n  t.shimacoptic = 0x03ed;\n  t.shin = 0x05e9;\n  t.shindagesh = 0xfb49;\n  t.shindageshhebrew = 0xfb49;\n  t.shindageshshindot = 0xfb2c;\n  t.shindageshshindothebrew = 0xfb2c;\n  t.shindageshsindot = 0xfb2d;\n  t.shindageshsindothebrew = 0xfb2d;\n  t.shindothebrew = 0x05c1;\n  t.shinhebrew = 0x05e9;\n  t.shinshindot = 0xfb2a;\n  t.shinshindothebrew = 0xfb2a;\n  t.shinsindot = 0xfb2b;\n  t.shinsindothebrew = 0xfb2b;\n  t.shook = 0x0282;\n  t.sigma = 0x03c3;\n  t.sigma1 = 0x03c2;\n  t.sigmafinal = 0x03c2;\n  t.sigmalunatesymbolgreek = 0x03f2;\n  t.sihiragana = 0x3057;\n  t.sikatakana = 0x30b7;\n  t.sikatakanahalfwidth = 0xff7c;\n  t.siluqhebrew = 0x05bd;\n  t.siluqlefthebrew = 0x05bd;\n  t.similar = 0x223c;\n  t.sindothebrew = 0x05c2;\n  t.siosacirclekorean = 0x3274;\n  t.siosaparenkorean = 0x3214;\n  t.sioscieuckorean = 0x317e;\n  t.sioscirclekorean = 0x3266;\n  t.sioskiyeokkorean = 0x317a;\n  t.sioskorean = 0x3145;\n  t.siosnieunkorean = 0x317b;\n  t.siosparenkorean = 0x3206;\n  t.siospieupkorean = 0x317d;\n  t.siostikeutkorean = 0x317c;\n  t.six = 0x0036;\n  t.sixarabic = 0x0666;\n  t.sixbengali = 0x09ec;\n  t.sixcircle = 0x2465;\n  t.sixcircleinversesansserif = 0x278f;\n  t.sixdeva = 0x096c;\n  t.sixgujarati = 0x0aec;\n  t.sixgurmukhi = 0x0a6c;\n  t.sixhackarabic = 0x0666;\n  t.sixhangzhou = 0x3026;\n  t.sixideographicparen = 0x3225;\n  t.sixinferior = 0x2086;\n  t.sixmonospace = 0xff16;\n  t.sixoldstyle = 0xf736;\n  t.sixparen = 0x2479;\n  t.sixperiod = 0x248d;\n  t.sixpersian = 0x06f6;\n  t.sixroman = 0x2175;\n  t.sixsuperior = 0x2076;\n  t.sixteencircle = 0x246f;\n  t.sixteencurrencydenominatorbengali = 0x09f9;\n  t.sixteenparen = 0x2483;\n  t.sixteenperiod = 0x2497;\n  t.sixthai = 0x0e56;\n  t.slash = 0x002f;\n  t.slashmonospace = 0xff0f;\n  t.slong = 0x017f;\n  t.slongdotaccent = 0x1e9b;\n  t.smileface = 0x263a;\n  t.smonospace = 0xff53;\n  t.sofpasuqhebrew = 0x05c3;\n  t.softhyphen = 0x00ad;\n  t.softsigncyrillic = 0x044c;\n  t.sohiragana = 0x305d;\n  t.sokatakana = 0x30bd;\n  t.sokatakanahalfwidth = 0xff7f;\n  t.soliduslongoverlaycmb = 0x0338;\n  t.solidusshortoverlaycmb = 0x0337;\n  t.sorusithai = 0x0e29;\n  t.sosalathai = 0x0e28;\n  t.sosothai = 0x0e0b;\n  t.sosuathai = 0x0e2a;\n  t.space = 0x0020;\n  t.spacehackarabic = 0x0020;\n  t.spade = 0x2660;\n  t.spadesuitblack = 0x2660;\n  t.spadesuitwhite = 0x2664;\n  t.sparen = 0x24ae;\n  t.squarebelowcmb = 0x033b;\n  t.squarecc = 0x33c4;\n  t.squarecm = 0x339d;\n  t.squarediagonalcrosshatchfill = 0x25a9;\n  t.squarehorizontalfill = 0x25a4;\n  t.squarekg = 0x338f;\n  t.squarekm = 0x339e;\n  t.squarekmcapital = 0x33ce;\n  t.squareln = 0x33d1;\n  t.squarelog = 0x33d2;\n  t.squaremg = 0x338e;\n  t.squaremil = 0x33d5;\n  t.squaremm = 0x339c;\n  t.squaremsquared = 0x33a1;\n  t.squareorthogonalcrosshatchfill = 0x25a6;\n  t.squareupperlefttolowerrightfill = 0x25a7;\n  t.squareupperrighttolowerleftfill = 0x25a8;\n  t.squareverticalfill = 0x25a5;\n  t.squarewhitewithsmallblack = 0x25a3;\n  t.srsquare = 0x33db;\n  t.ssabengali = 0x09b7;\n  t.ssadeva = 0x0937;\n  t.ssagujarati = 0x0ab7;\n  t.ssangcieuckorean = 0x3149;\n  t.ssanghieuhkorean = 0x3185;\n  t.ssangieungkorean = 0x3180;\n  t.ssangkiyeokkorean = 0x3132;\n  t.ssangnieunkorean = 0x3165;\n  t.ssangpieupkorean = 0x3143;\n  t.ssangsioskorean = 0x3146;\n  t.ssangtikeutkorean = 0x3138;\n  t.ssuperior = 0xf6f2;\n  t.sterling = 0x00a3;\n  t.sterlingmonospace = 0xffe1;\n  t.strokelongoverlaycmb = 0x0336;\n  t.strokeshortoverlaycmb = 0x0335;\n  t.subset = 0x2282;\n  t.subsetnotequal = 0x228a;\n  t.subsetorequal = 0x2286;\n  t.succeeds = 0x227b;\n  t.suchthat = 0x220b;\n  t.suhiragana = 0x3059;\n  t.sukatakana = 0x30b9;\n  t.sukatakanahalfwidth = 0xff7d;\n  t.sukunarabic = 0x0652;\n  t.summation = 0x2211;\n  t.sun = 0x263c;\n  t.superset = 0x2283;\n  t.supersetnotequal = 0x228b;\n  t.supersetorequal = 0x2287;\n  t.svsquare = 0x33dc;\n  t.syouwaerasquare = 0x337c;\n  t.t = 0x0074;\n  t.tabengali = 0x09a4;\n  t.tackdown = 0x22a4;\n  t.tackleft = 0x22a3;\n  t.tadeva = 0x0924;\n  t.tagujarati = 0x0aa4;\n  t.tagurmukhi = 0x0a24;\n  t.taharabic = 0x0637;\n  t.tahfinalarabic = 0xfec2;\n  t.tahinitialarabic = 0xfec3;\n  t.tahiragana = 0x305f;\n  t.tahmedialarabic = 0xfec4;\n  t.taisyouerasquare = 0x337d;\n  t.takatakana = 0x30bf;\n  t.takatakanahalfwidth = 0xff80;\n  t.tatweelarabic = 0x0640;\n  t.tau = 0x03c4;\n  t.tav = 0x05ea;\n  t.tavdages = 0xfb4a;\n  t.tavdagesh = 0xfb4a;\n  t.tavdageshhebrew = 0xfb4a;\n  t.tavhebrew = 0x05ea;\n  t.tbar = 0x0167;\n  t.tbopomofo = 0x310a;\n  t.tcaron = 0x0165;\n  t.tccurl = 0x02a8;\n  t.tcedilla = 0x0163;\n  t.tcheharabic = 0x0686;\n  t.tchehfinalarabic = 0xfb7b;\n  t.tchehinitialarabic = 0xfb7c;\n  t.tchehmedialarabic = 0xfb7d;\n  t.tcircle = 0x24e3;\n  t.tcircumflexbelow = 0x1e71;\n  t.tcommaaccent = 0x0163;\n  t.tdieresis = 0x1e97;\n  t.tdotaccent = 0x1e6b;\n  t.tdotbelow = 0x1e6d;\n  t.tecyrillic = 0x0442;\n  t.tedescendercyrillic = 0x04ad;\n  t.teharabic = 0x062a;\n  t.tehfinalarabic = 0xfe96;\n  t.tehhahinitialarabic = 0xfca2;\n  t.tehhahisolatedarabic = 0xfc0c;\n  t.tehinitialarabic = 0xfe97;\n  t.tehiragana = 0x3066;\n  t.tehjeeminitialarabic = 0xfca1;\n  t.tehjeemisolatedarabic = 0xfc0b;\n  t.tehmarbutaarabic = 0x0629;\n  t.tehmarbutafinalarabic = 0xfe94;\n  t.tehmedialarabic = 0xfe98;\n  t.tehmeeminitialarabic = 0xfca4;\n  t.tehmeemisolatedarabic = 0xfc0e;\n  t.tehnoonfinalarabic = 0xfc73;\n  t.tekatakana = 0x30c6;\n  t.tekatakanahalfwidth = 0xff83;\n  t.telephone = 0x2121;\n  t.telephoneblack = 0x260e;\n  t.telishagedolahebrew = 0x05a0;\n  t.telishaqetanahebrew = 0x05a9;\n  t.tencircle = 0x2469;\n  t.tenideographicparen = 0x3229;\n  t.tenparen = 0x247d;\n  t.tenperiod = 0x2491;\n  t.tenroman = 0x2179;\n  t.tesh = 0x02a7;\n  t.tet = 0x05d8;\n  t.tetdagesh = 0xfb38;\n  t.tetdageshhebrew = 0xfb38;\n  t.tethebrew = 0x05d8;\n  t.tetsecyrillic = 0x04b5;\n  t.tevirhebrew = 0x059b;\n  t.tevirlefthebrew = 0x059b;\n  t.thabengali = 0x09a5;\n  t.thadeva = 0x0925;\n  t.thagujarati = 0x0aa5;\n  t.thagurmukhi = 0x0a25;\n  t.thalarabic = 0x0630;\n  t.thalfinalarabic = 0xfeac;\n  t.thanthakhatlowleftthai = 0xf898;\n  t.thanthakhatlowrightthai = 0xf897;\n  t.thanthakhatthai = 0x0e4c;\n  t.thanthakhatupperleftthai = 0xf896;\n  t.theharabic = 0x062b;\n  t.thehfinalarabic = 0xfe9a;\n  t.thehinitialarabic = 0xfe9b;\n  t.thehmedialarabic = 0xfe9c;\n  t.thereexists = 0x2203;\n  t.therefore = 0x2234;\n  t.theta = 0x03b8;\n  t.theta1 = 0x03d1;\n  t.thetasymbolgreek = 0x03d1;\n  t.thieuthacirclekorean = 0x3279;\n  t.thieuthaparenkorean = 0x3219;\n  t.thieuthcirclekorean = 0x326b;\n  t.thieuthkorean = 0x314c;\n  t.thieuthparenkorean = 0x320b;\n  t.thirteencircle = 0x246c;\n  t.thirteenparen = 0x2480;\n  t.thirteenperiod = 0x2494;\n  t.thonangmonthothai = 0x0e11;\n  t.thook = 0x01ad;\n  t.thophuthaothai = 0x0e12;\n  t.thorn = 0x00fe;\n  t.thothahanthai = 0x0e17;\n  t.thothanthai = 0x0e10;\n  t.thothongthai = 0x0e18;\n  t.thothungthai = 0x0e16;\n  t.thousandcyrillic = 0x0482;\n  t.thousandsseparatorarabic = 0x066c;\n  t.thousandsseparatorpersian = 0x066c;\n  t.three = 0x0033;\n  t.threearabic = 0x0663;\n  t.threebengali = 0x09e9;\n  t.threecircle = 0x2462;\n  t.threecircleinversesansserif = 0x278c;\n  t.threedeva = 0x0969;\n  t.threeeighths = 0x215c;\n  t.threegujarati = 0x0ae9;\n  t.threegurmukhi = 0x0a69;\n  t.threehackarabic = 0x0663;\n  t.threehangzhou = 0x3023;\n  t.threeideographicparen = 0x3222;\n  t.threeinferior = 0x2083;\n  t.threemonospace = 0xff13;\n  t.threenumeratorbengali = 0x09f6;\n  t.threeoldstyle = 0xf733;\n  t.threeparen = 0x2476;\n  t.threeperiod = 0x248a;\n  t.threepersian = 0x06f3;\n  t.threequarters = 0x00be;\n  t.threequartersemdash = 0xf6de;\n  t.threeroman = 0x2172;\n  t.threesuperior = 0x00b3;\n  t.threethai = 0x0e53;\n  t.thzsquare = 0x3394;\n  t.tihiragana = 0x3061;\n  t.tikatakana = 0x30c1;\n  t.tikatakanahalfwidth = 0xff81;\n  t.tikeutacirclekorean = 0x3270;\n  t.tikeutaparenkorean = 0x3210;\n  t.tikeutcirclekorean = 0x3262;\n  t.tikeutkorean = 0x3137;\n  t.tikeutparenkorean = 0x3202;\n  t.tilde = 0x02dc;\n  t.tildebelowcmb = 0x0330;\n  t.tildecmb = 0x0303;\n  t.tildecomb = 0x0303;\n  t.tildedoublecmb = 0x0360;\n  t.tildeoperator = 0x223c;\n  t.tildeoverlaycmb = 0x0334;\n  t.tildeverticalcmb = 0x033e;\n  t.timescircle = 0x2297;\n  t.tipehahebrew = 0x0596;\n  t.tipehalefthebrew = 0x0596;\n  t.tippigurmukhi = 0x0a70;\n  t.titlocyrilliccmb = 0x0483;\n  t.tiwnarmenian = 0x057f;\n  t.tlinebelow = 0x1e6f;\n  t.tmonospace = 0xff54;\n  t.toarmenian = 0x0569;\n  t.tohiragana = 0x3068;\n  t.tokatakana = 0x30c8;\n  t.tokatakanahalfwidth = 0xff84;\n  t.tonebarextrahighmod = 0x02e5;\n  t.tonebarextralowmod = 0x02e9;\n  t.tonebarhighmod = 0x02e6;\n  t.tonebarlowmod = 0x02e8;\n  t.tonebarmidmod = 0x02e7;\n  t.tonefive = 0x01bd;\n  t.tonesix = 0x0185;\n  t.tonetwo = 0x01a8;\n  t.tonos = 0x0384;\n  t.tonsquare = 0x3327;\n  t.topatakthai = 0x0e0f;\n  t.tortoiseshellbracketleft = 0x3014;\n  t.tortoiseshellbracketleftsmall = 0xfe5d;\n  t.tortoiseshellbracketleftvertical = 0xfe39;\n  t.tortoiseshellbracketright = 0x3015;\n  t.tortoiseshellbracketrightsmall = 0xfe5e;\n  t.tortoiseshellbracketrightvertical = 0xfe3a;\n  t.totaothai = 0x0e15;\n  t.tpalatalhook = 0x01ab;\n  t.tparen = 0x24af;\n  t.trademark = 0x2122;\n  t.trademarksans = 0xf8ea;\n  t.trademarkserif = 0xf6db;\n  t.tretroflexhook = 0x0288;\n  t.triagdn = 0x25bc;\n  t.triaglf = 0x25c4;\n  t.triagrt = 0x25ba;\n  t.triagup = 0x25b2;\n  t.ts = 0x02a6;\n  t.tsadi = 0x05e6;\n  t.tsadidagesh = 0xfb46;\n  t.tsadidageshhebrew = 0xfb46;\n  t.tsadihebrew = 0x05e6;\n  t.tsecyrillic = 0x0446;\n  t.tsere = 0x05b5;\n  t.tsere12 = 0x05b5;\n  t.tsere1e = 0x05b5;\n  t.tsere2b = 0x05b5;\n  t.tserehebrew = 0x05b5;\n  t.tserenarrowhebrew = 0x05b5;\n  t.tserequarterhebrew = 0x05b5;\n  t.tserewidehebrew = 0x05b5;\n  t.tshecyrillic = 0x045b;\n  t.tsuperior = 0xf6f3;\n  t.ttabengali = 0x099f;\n  t.ttadeva = 0x091f;\n  t.ttagujarati = 0x0a9f;\n  t.ttagurmukhi = 0x0a1f;\n  t.tteharabic = 0x0679;\n  t.ttehfinalarabic = 0xfb67;\n  t.ttehinitialarabic = 0xfb68;\n  t.ttehmedialarabic = 0xfb69;\n  t.tthabengali = 0x09a0;\n  t.tthadeva = 0x0920;\n  t.tthagujarati = 0x0aa0;\n  t.tthagurmukhi = 0x0a20;\n  t.tturned = 0x0287;\n  t.tuhiragana = 0x3064;\n  t.tukatakana = 0x30c4;\n  t.tukatakanahalfwidth = 0xff82;\n  t.tusmallhiragana = 0x3063;\n  t.tusmallkatakana = 0x30c3;\n  t.tusmallkatakanahalfwidth = 0xff6f;\n  t.twelvecircle = 0x246b;\n  t.twelveparen = 0x247f;\n  t.twelveperiod = 0x2493;\n  t.twelveroman = 0x217b;\n  t.twentycircle = 0x2473;\n  t.twentyhangzhou = 0x5344;\n  t.twentyparen = 0x2487;\n  t.twentyperiod = 0x249b;\n  t.two = 0x0032;\n  t.twoarabic = 0x0662;\n  t.twobengali = 0x09e8;\n  t.twocircle = 0x2461;\n  t.twocircleinversesansserif = 0x278b;\n  t.twodeva = 0x0968;\n  t.twodotenleader = 0x2025;\n  t.twodotleader = 0x2025;\n  t.twodotleadervertical = 0xfe30;\n  t.twogujarati = 0x0ae8;\n  t.twogurmukhi = 0x0a68;\n  t.twohackarabic = 0x0662;\n  t.twohangzhou = 0x3022;\n  t.twoideographicparen = 0x3221;\n  t.twoinferior = 0x2082;\n  t.twomonospace = 0xff12;\n  t.twonumeratorbengali = 0x09f5;\n  t.twooldstyle = 0xf732;\n  t.twoparen = 0x2475;\n  t.twoperiod = 0x2489;\n  t.twopersian = 0x06f2;\n  t.tworoman = 0x2171;\n  t.twostroke = 0x01bb;\n  t.twosuperior = 0x00b2;\n  t.twothai = 0x0e52;\n  t.twothirds = 0x2154;\n  t.u = 0x0075;\n  t.uacute = 0x00fa;\n  t.ubar = 0x0289;\n  t.ubengali = 0x0989;\n  t.ubopomofo = 0x3128;\n  t.ubreve = 0x016d;\n  t.ucaron = 0x01d4;\n  t.ucircle = 0x24e4;\n  t.ucircumflex = 0x00fb;\n  t.ucircumflexbelow = 0x1e77;\n  t.ucyrillic = 0x0443;\n  t.udattadeva = 0x0951;\n  t.udblacute = 0x0171;\n  t.udblgrave = 0x0215;\n  t.udeva = 0x0909;\n  t.udieresis = 0x00fc;\n  t.udieresisacute = 0x01d8;\n  t.udieresisbelow = 0x1e73;\n  t.udieresiscaron = 0x01da;\n  t.udieresiscyrillic = 0x04f1;\n  t.udieresisgrave = 0x01dc;\n  t.udieresismacron = 0x01d6;\n  t.udotbelow = 0x1ee5;\n  t.ugrave = 0x00f9;\n  t.ugujarati = 0x0a89;\n  t.ugurmukhi = 0x0a09;\n  t.uhiragana = 0x3046;\n  t.uhookabove = 0x1ee7;\n  t.uhorn = 0x01b0;\n  t.uhornacute = 0x1ee9;\n  t.uhorndotbelow = 0x1ef1;\n  t.uhorngrave = 0x1eeb;\n  t.uhornhookabove = 0x1eed;\n  t.uhorntilde = 0x1eef;\n  t.uhungarumlaut = 0x0171;\n  t.uhungarumlautcyrillic = 0x04f3;\n  t.uinvertedbreve = 0x0217;\n  t.ukatakana = 0x30a6;\n  t.ukatakanahalfwidth = 0xff73;\n  t.ukcyrillic = 0x0479;\n  t.ukorean = 0x315c;\n  t.umacron = 0x016b;\n  t.umacroncyrillic = 0x04ef;\n  t.umacrondieresis = 0x1e7b;\n  t.umatragurmukhi = 0x0a41;\n  t.umonospace = 0xff55;\n  t.underscore = 0x005f;\n  t.underscoredbl = 0x2017;\n  t.underscoremonospace = 0xff3f;\n  t.underscorevertical = 0xfe33;\n  t.underscorewavy = 0xfe4f;\n  t.union = 0x222a;\n  t.universal = 0x2200;\n  t.uogonek = 0x0173;\n  t.uparen = 0x24b0;\n  t.upblock = 0x2580;\n  t.upperdothebrew = 0x05c4;\n  t.upsilon = 0x03c5;\n  t.upsilondieresis = 0x03cb;\n  t.upsilondieresistonos = 0x03b0;\n  t.upsilonlatin = 0x028a;\n  t.upsilontonos = 0x03cd;\n  t.uptackbelowcmb = 0x031d;\n  t.uptackmod = 0x02d4;\n  t.uragurmukhi = 0x0a73;\n  t.uring = 0x016f;\n  t.ushortcyrillic = 0x045e;\n  t.usmallhiragana = 0x3045;\n  t.usmallkatakana = 0x30a5;\n  t.usmallkatakanahalfwidth = 0xff69;\n  t.ustraightcyrillic = 0x04af;\n  t.ustraightstrokecyrillic = 0x04b1;\n  t.utilde = 0x0169;\n  t.utildeacute = 0x1e79;\n  t.utildebelow = 0x1e75;\n  t.uubengali = 0x098a;\n  t.uudeva = 0x090a;\n  t.uugujarati = 0x0a8a;\n  t.uugurmukhi = 0x0a0a;\n  t.uumatragurmukhi = 0x0a42;\n  t.uuvowelsignbengali = 0x09c2;\n  t.uuvowelsigndeva = 0x0942;\n  t.uuvowelsigngujarati = 0x0ac2;\n  t.uvowelsignbengali = 0x09c1;\n  t.uvowelsigndeva = 0x0941;\n  t.uvowelsigngujarati = 0x0ac1;\n  t.v = 0x0076;\n  t.vadeva = 0x0935;\n  t.vagujarati = 0x0ab5;\n  t.vagurmukhi = 0x0a35;\n  t.vakatakana = 0x30f7;\n  t.vav = 0x05d5;\n  t.vavdagesh = 0xfb35;\n  t.vavdagesh65 = 0xfb35;\n  t.vavdageshhebrew = 0xfb35;\n  t.vavhebrew = 0x05d5;\n  t.vavholam = 0xfb4b;\n  t.vavholamhebrew = 0xfb4b;\n  t.vavvavhebrew = 0x05f0;\n  t.vavyodhebrew = 0x05f1;\n  t.vcircle = 0x24e5;\n  t.vdotbelow = 0x1e7f;\n  t.vecyrillic = 0x0432;\n  t.veharabic = 0x06a4;\n  t.vehfinalarabic = 0xfb6b;\n  t.vehinitialarabic = 0xfb6c;\n  t.vehmedialarabic = 0xfb6d;\n  t.vekatakana = 0x30f9;\n  t.venus = 0x2640;\n  t.verticalbar = 0x007c;\n  t.verticallineabovecmb = 0x030d;\n  t.verticallinebelowcmb = 0x0329;\n  t.verticallinelowmod = 0x02cc;\n  t.verticallinemod = 0x02c8;\n  t.vewarmenian = 0x057e;\n  t.vhook = 0x028b;\n  t.vikatakana = 0x30f8;\n  t.viramabengali = 0x09cd;\n  t.viramadeva = 0x094d;\n  t.viramagujarati = 0x0acd;\n  t.visargabengali = 0x0983;\n  t.visargadeva = 0x0903;\n  t.visargagujarati = 0x0a83;\n  t.vmonospace = 0xff56;\n  t.voarmenian = 0x0578;\n  t.voicediterationhiragana = 0x309e;\n  t.voicediterationkatakana = 0x30fe;\n  t.voicedmarkkana = 0x309b;\n  t.voicedmarkkanahalfwidth = 0xff9e;\n  t.vokatakana = 0x30fa;\n  t.vparen = 0x24b1;\n  t.vtilde = 0x1e7d;\n  t.vturned = 0x028c;\n  t.vuhiragana = 0x3094;\n  t.vukatakana = 0x30f4;\n  t.w = 0x0077;\n  t.wacute = 0x1e83;\n  t.waekorean = 0x3159;\n  t.wahiragana = 0x308f;\n  t.wakatakana = 0x30ef;\n  t.wakatakanahalfwidth = 0xff9c;\n  t.wakorean = 0x3158;\n  t.wasmallhiragana = 0x308e;\n  t.wasmallkatakana = 0x30ee;\n  t.wattosquare = 0x3357;\n  t.wavedash = 0x301c;\n  t.wavyunderscorevertical = 0xfe34;\n  t.wawarabic = 0x0648;\n  t.wawfinalarabic = 0xfeee;\n  t.wawhamzaabovearabic = 0x0624;\n  t.wawhamzaabovefinalarabic = 0xfe86;\n  t.wbsquare = 0x33dd;\n  t.wcircle = 0x24e6;\n  t.wcircumflex = 0x0175;\n  t.wdieresis = 0x1e85;\n  t.wdotaccent = 0x1e87;\n  t.wdotbelow = 0x1e89;\n  t.wehiragana = 0x3091;\n  t.weierstrass = 0x2118;\n  t.wekatakana = 0x30f1;\n  t.wekorean = 0x315e;\n  t.weokorean = 0x315d;\n  t.wgrave = 0x1e81;\n  t.whitebullet = 0x25e6;\n  t.whitecircle = 0x25cb;\n  t.whitecircleinverse = 0x25d9;\n  t.whitecornerbracketleft = 0x300e;\n  t.whitecornerbracketleftvertical = 0xfe43;\n  t.whitecornerbracketright = 0x300f;\n  t.whitecornerbracketrightvertical = 0xfe44;\n  t.whitediamond = 0x25c7;\n  t.whitediamondcontainingblacksmalldiamond = 0x25c8;\n  t.whitedownpointingsmalltriangle = 0x25bf;\n  t.whitedownpointingtriangle = 0x25bd;\n  t.whiteleftpointingsmalltriangle = 0x25c3;\n  t.whiteleftpointingtriangle = 0x25c1;\n  t.whitelenticularbracketleft = 0x3016;\n  t.whitelenticularbracketright = 0x3017;\n  t.whiterightpointingsmalltriangle = 0x25b9;\n  t.whiterightpointingtriangle = 0x25b7;\n  t.whitesmallsquare = 0x25ab;\n  t.whitesmilingface = 0x263a;\n  t.whitesquare = 0x25a1;\n  t.whitestar = 0x2606;\n  t.whitetelephone = 0x260f;\n  t.whitetortoiseshellbracketleft = 0x3018;\n  t.whitetortoiseshellbracketright = 0x3019;\n  t.whiteuppointingsmalltriangle = 0x25b5;\n  t.whiteuppointingtriangle = 0x25b3;\n  t.wihiragana = 0x3090;\n  t.wikatakana = 0x30f0;\n  t.wikorean = 0x315f;\n  t.wmonospace = 0xff57;\n  t.wohiragana = 0x3092;\n  t.wokatakana = 0x30f2;\n  t.wokatakanahalfwidth = 0xff66;\n  t.won = 0x20a9;\n  t.wonmonospace = 0xffe6;\n  t.wowaenthai = 0x0e27;\n  t.wparen = 0x24b2;\n  t.wring = 0x1e98;\n  t.wsuperior = 0x02b7;\n  t.wturned = 0x028d;\n  t.wynn = 0x01bf;\n  t.x = 0x0078;\n  t.xabovecmb = 0x033d;\n  t.xbopomofo = 0x3112;\n  t.xcircle = 0x24e7;\n  t.xdieresis = 0x1e8d;\n  t.xdotaccent = 0x1e8b;\n  t.xeharmenian = 0x056d;\n  t.xi = 0x03be;\n  t.xmonospace = 0xff58;\n  t.xparen = 0x24b3;\n  t.xsuperior = 0x02e3;\n  t.y = 0x0079;\n  t.yaadosquare = 0x334e;\n  t.yabengali = 0x09af;\n  t.yacute = 0x00fd;\n  t.yadeva = 0x092f;\n  t.yaekorean = 0x3152;\n  t.yagujarati = 0x0aaf;\n  t.yagurmukhi = 0x0a2f;\n  t.yahiragana = 0x3084;\n  t.yakatakana = 0x30e4;\n  t.yakatakanahalfwidth = 0xff94;\n  t.yakorean = 0x3151;\n  t.yamakkanthai = 0x0e4e;\n  t.yasmallhiragana = 0x3083;\n  t.yasmallkatakana = 0x30e3;\n  t.yasmallkatakanahalfwidth = 0xff6c;\n  t.yatcyrillic = 0x0463;\n  t.ycircle = 0x24e8;\n  t.ycircumflex = 0x0177;\n  t.ydieresis = 0x00ff;\n  t.ydotaccent = 0x1e8f;\n  t.ydotbelow = 0x1ef5;\n  t.yeharabic = 0x064a;\n  t.yehbarreearabic = 0x06d2;\n  t.yehbarreefinalarabic = 0xfbaf;\n  t.yehfinalarabic = 0xfef2;\n  t.yehhamzaabovearabic = 0x0626;\n  t.yehhamzaabovefinalarabic = 0xfe8a;\n  t.yehhamzaaboveinitialarabic = 0xfe8b;\n  t.yehhamzaabovemedialarabic = 0xfe8c;\n  t.yehinitialarabic = 0xfef3;\n  t.yehmedialarabic = 0xfef4;\n  t.yehmeeminitialarabic = 0xfcdd;\n  t.yehmeemisolatedarabic = 0xfc58;\n  t.yehnoonfinalarabic = 0xfc94;\n  t.yehthreedotsbelowarabic = 0x06d1;\n  t.yekorean = 0x3156;\n  t.yen = 0x00a5;\n  t.yenmonospace = 0xffe5;\n  t.yeokorean = 0x3155;\n  t.yeorinhieuhkorean = 0x3186;\n  t.yerahbenyomohebrew = 0x05aa;\n  t.yerahbenyomolefthebrew = 0x05aa;\n  t.yericyrillic = 0x044b;\n  t.yerudieresiscyrillic = 0x04f9;\n  t.yesieungkorean = 0x3181;\n  t.yesieungpansioskorean = 0x3183;\n  t.yesieungsioskorean = 0x3182;\n  t.yetivhebrew = 0x059a;\n  t.ygrave = 0x1ef3;\n  t.yhook = 0x01b4;\n  t.yhookabove = 0x1ef7;\n  t.yiarmenian = 0x0575;\n  t.yicyrillic = 0x0457;\n  t.yikorean = 0x3162;\n  t.yinyang = 0x262f;\n  t.yiwnarmenian = 0x0582;\n  t.ymonospace = 0xff59;\n  t.yod = 0x05d9;\n  t.yoddagesh = 0xfb39;\n  t.yoddageshhebrew = 0xfb39;\n  t.yodhebrew = 0x05d9;\n  t.yodyodhebrew = 0x05f2;\n  t.yodyodpatahhebrew = 0xfb1f;\n  t.yohiragana = 0x3088;\n  t.yoikorean = 0x3189;\n  t.yokatakana = 0x30e8;\n  t.yokatakanahalfwidth = 0xff96;\n  t.yokorean = 0x315b;\n  t.yosmallhiragana = 0x3087;\n  t.yosmallkatakana = 0x30e7;\n  t.yosmallkatakanahalfwidth = 0xff6e;\n  t.yotgreek = 0x03f3;\n  t.yoyaekorean = 0x3188;\n  t.yoyakorean = 0x3187;\n  t.yoyakthai = 0x0e22;\n  t.yoyingthai = 0x0e0d;\n  t.yparen = 0x24b4;\n  t.ypogegrammeni = 0x037a;\n  t.ypogegrammenigreekcmb = 0x0345;\n  t.yr = 0x01a6;\n  t.yring = 0x1e99;\n  t.ysuperior = 0x02b8;\n  t.ytilde = 0x1ef9;\n  t.yturned = 0x028e;\n  t.yuhiragana = 0x3086;\n  t.yuikorean = 0x318c;\n  t.yukatakana = 0x30e6;\n  t.yukatakanahalfwidth = 0xff95;\n  t.yukorean = 0x3160;\n  t.yusbigcyrillic = 0x046b;\n  t.yusbigiotifiedcyrillic = 0x046d;\n  t.yuslittlecyrillic = 0x0467;\n  t.yuslittleiotifiedcyrillic = 0x0469;\n  t.yusmallhiragana = 0x3085;\n  t.yusmallkatakana = 0x30e5;\n  t.yusmallkatakanahalfwidth = 0xff6d;\n  t.yuyekorean = 0x318b;\n  t.yuyeokorean = 0x318a;\n  t.yyabengali = 0x09df;\n  t.yyadeva = 0x095f;\n  t.z = 0x007a;\n  t.zaarmenian = 0x0566;\n  t.zacute = 0x017a;\n  t.zadeva = 0x095b;\n  t.zagurmukhi = 0x0a5b;\n  t.zaharabic = 0x0638;\n  t.zahfinalarabic = 0xfec6;\n  t.zahinitialarabic = 0xfec7;\n  t.zahiragana = 0x3056;\n  t.zahmedialarabic = 0xfec8;\n  t.zainarabic = 0x0632;\n  t.zainfinalarabic = 0xfeb0;\n  t.zakatakana = 0x30b6;\n  t.zaqefgadolhebrew = 0x0595;\n  t.zaqefqatanhebrew = 0x0594;\n  t.zarqahebrew = 0x0598;\n  t.zayin = 0x05d6;\n  t.zayindagesh = 0xfb36;\n  t.zayindageshhebrew = 0xfb36;\n  t.zayinhebrew = 0x05d6;\n  t.zbopomofo = 0x3117;\n  t.zcaron = 0x017e;\n  t.zcircle = 0x24e9;\n  t.zcircumflex = 0x1e91;\n  t.zcurl = 0x0291;\n  t.zdot = 0x017c;\n  t.zdotaccent = 0x017c;\n  t.zdotbelow = 0x1e93;\n  t.zecyrillic = 0x0437;\n  t.zedescendercyrillic = 0x0499;\n  t.zedieresiscyrillic = 0x04df;\n  t.zehiragana = 0x305c;\n  t.zekatakana = 0x30bc;\n  t.zero = 0x0030;\n  t.zeroarabic = 0x0660;\n  t.zerobengali = 0x09e6;\n  t.zerodeva = 0x0966;\n  t.zerogujarati = 0x0ae6;\n  t.zerogurmukhi = 0x0a66;\n  t.zerohackarabic = 0x0660;\n  t.zeroinferior = 0x2080;\n  t.zeromonospace = 0xff10;\n  t.zerooldstyle = 0xf730;\n  t.zeropersian = 0x06f0;\n  t.zerosuperior = 0x2070;\n  t.zerothai = 0x0e50;\n  t.zerowidthjoiner = 0xfeff;\n  t.zerowidthnonjoiner = 0x200c;\n  t.zerowidthspace = 0x200b;\n  t.zeta = 0x03b6;\n  t.zhbopomofo = 0x3113;\n  t.zhearmenian = 0x056a;\n  t.zhebrevecyrillic = 0x04c2;\n  t.zhecyrillic = 0x0436;\n  t.zhedescendercyrillic = 0x0497;\n  t.zhedieresiscyrillic = 0x04dd;\n  t.zihiragana = 0x3058;\n  t.zikatakana = 0x30b8;\n  t.zinorhebrew = 0x05ae;\n  t.zlinebelow = 0x1e95;\n  t.zmonospace = 0xff5a;\n  t.zohiragana = 0x305e;\n  t.zokatakana = 0x30be;\n  t.zparen = 0x24b5;\n  t.zretroflexhook = 0x0290;\n  t.zstroke = 0x01b6;\n  t.zuhiragana = 0x305a;\n  t.zukatakana = 0x30ba;\n  t[\".notdef\"] = 0x0000;\n\n  // TeX-specific glyph names.\n  t.angbracketleftbig = 0x2329;\n  t.angbracketleftBig = 0x2329;\n  t.angbracketleftbigg = 0x2329;\n  t.angbracketleftBigg = 0x2329;\n  t.angbracketrightBig = 0x232a;\n  t.angbracketrightbig = 0x232a;\n  t.angbracketrightBigg = 0x232a;\n  t.angbracketrightbigg = 0x232a;\n  t.arrowhookleft = 0x21aa;\n  t.arrowhookright = 0x21a9;\n  t.arrowlefttophalf = 0x21bc;\n  t.arrowleftbothalf = 0x21bd;\n  t.arrownortheast = 0x2197;\n  t.arrownorthwest = 0x2196;\n  t.arrowrighttophalf = 0x21c0;\n  t.arrowrightbothalf = 0x21c1;\n  t.arrowsoutheast = 0x2198;\n  t.arrowsouthwest = 0x2199;\n  t.backslashbig = 0x2216;\n  t.backslashBig = 0x2216;\n  t.backslashBigg = 0x2216;\n  t.backslashbigg = 0x2216;\n  t.bardbl = 0x2016;\n  t.bracehtipdownleft = 0xfe37;\n  t.bracehtipdownright = 0xfe37;\n  t.bracehtipupleft = 0xfe38;\n  t.bracehtipupright = 0xfe38;\n  t.braceleftBig = 0x007b;\n  t.braceleftbig = 0x007b;\n  t.braceleftbigg = 0x007b;\n  t.braceleftBigg = 0x007b;\n  t.bracerightBig = 0x007d;\n  t.bracerightbig = 0x007d;\n  t.bracerightbigg = 0x007d;\n  t.bracerightBigg = 0x007d;\n  t.bracketleftbig = 0x005b;\n  t.bracketleftBig = 0x005b;\n  t.bracketleftbigg = 0x005b;\n  t.bracketleftBigg = 0x005b;\n  t.bracketrightBig = 0x005d;\n  t.bracketrightbig = 0x005d;\n  t.bracketrightbigg = 0x005d;\n  t.bracketrightBigg = 0x005d;\n  t.ceilingleftbig = 0x2308;\n  t.ceilingleftBig = 0x2308;\n  t.ceilingleftBigg = 0x2308;\n  t.ceilingleftbigg = 0x2308;\n  t.ceilingrightbig = 0x2309;\n  t.ceilingrightBig = 0x2309;\n  t.ceilingrightbigg = 0x2309;\n  t.ceilingrightBigg = 0x2309;\n  t.circledotdisplay = 0x2299;\n  t.circledottext = 0x2299;\n  t.circlemultiplydisplay = 0x2297;\n  t.circlemultiplytext = 0x2297;\n  t.circleplusdisplay = 0x2295;\n  t.circleplustext = 0x2295;\n  t.contintegraldisplay = 0x222e;\n  t.contintegraltext = 0x222e;\n  t.coproductdisplay = 0x2210;\n  t.coproducttext = 0x2210;\n  t.floorleftBig = 0x230a;\n  t.floorleftbig = 0x230a;\n  t.floorleftbigg = 0x230a;\n  t.floorleftBigg = 0x230a;\n  t.floorrightbig = 0x230b;\n  t.floorrightBig = 0x230b;\n  t.floorrightBigg = 0x230b;\n  t.floorrightbigg = 0x230b;\n  t.hatwide = 0x0302;\n  t.hatwider = 0x0302;\n  t.hatwidest = 0x0302;\n  t.intercal = 0x1d40;\n  t.integraldisplay = 0x222b;\n  t.integraltext = 0x222b;\n  t.intersectiondisplay = 0x22c2;\n  t.intersectiontext = 0x22c2;\n  t.logicalanddisplay = 0x2227;\n  t.logicalandtext = 0x2227;\n  t.logicalordisplay = 0x2228;\n  t.logicalortext = 0x2228;\n  t.parenleftBig = 0x0028;\n  t.parenleftbig = 0x0028;\n  t.parenleftBigg = 0x0028;\n  t.parenleftbigg = 0x0028;\n  t.parenrightBig = 0x0029;\n  t.parenrightbig = 0x0029;\n  t.parenrightBigg = 0x0029;\n  t.parenrightbigg = 0x0029;\n  t.prime = 0x2032;\n  t.productdisplay = 0x220f;\n  t.producttext = 0x220f;\n  t.radicalbig = 0x221a;\n  t.radicalBig = 0x221a;\n  t.radicalBigg = 0x221a;\n  t.radicalbigg = 0x221a;\n  t.radicalbt = 0x221a;\n  t.radicaltp = 0x221a;\n  t.radicalvertex = 0x221a;\n  t.slashbig = 0x002f;\n  t.slashBig = 0x002f;\n  t.slashBigg = 0x002f;\n  t.slashbigg = 0x002f;\n  t.summationdisplay = 0x2211;\n  t.summationtext = 0x2211;\n  t.tildewide = 0x02dc;\n  t.tildewider = 0x02dc;\n  t.tildewidest = 0x02dc;\n  t.uniondisplay = 0x22c3;\n  t.unionmultidisplay = 0x228e;\n  t.unionmultitext = 0x228e;\n  t.unionsqdisplay = 0x2294;\n  t.unionsqtext = 0x2294;\n  t.uniontext = 0x22c3;\n  t.vextenddouble = 0x2225;\n  t.vextendsingle = 0x2223;\n});\n\nconst getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {\n  t.space = 0x0020;\n  t.a1 = 0x2701;\n  t.a2 = 0x2702;\n  t.a202 = 0x2703;\n  t.a3 = 0x2704;\n  t.a4 = 0x260e;\n  t.a5 = 0x2706;\n  t.a119 = 0x2707;\n  t.a118 = 0x2708;\n  t.a117 = 0x2709;\n  t.a11 = 0x261b;\n  t.a12 = 0x261e;\n  t.a13 = 0x270c;\n  t.a14 = 0x270d;\n  t.a15 = 0x270e;\n  t.a16 = 0x270f;\n  t.a105 = 0x2710;\n  t.a17 = 0x2711;\n  t.a18 = 0x2712;\n  t.a19 = 0x2713;\n  t.a20 = 0x2714;\n  t.a21 = 0x2715;\n  t.a22 = 0x2716;\n  t.a23 = 0x2717;\n  t.a24 = 0x2718;\n  t.a25 = 0x2719;\n  t.a26 = 0x271a;\n  t.a27 = 0x271b;\n  t.a28 = 0x271c;\n  t.a6 = 0x271d;\n  t.a7 = 0x271e;\n  t.a8 = 0x271f;\n  t.a9 = 0x2720;\n  t.a10 = 0x2721;\n  t.a29 = 0x2722;\n  t.a30 = 0x2723;\n  t.a31 = 0x2724;\n  t.a32 = 0x2725;\n  t.a33 = 0x2726;\n  t.a34 = 0x2727;\n  t.a35 = 0x2605;\n  t.a36 = 0x2729;\n  t.a37 = 0x272a;\n  t.a38 = 0x272b;\n  t.a39 = 0x272c;\n  t.a40 = 0x272d;\n  t.a41 = 0x272e;\n  t.a42 = 0x272f;\n  t.a43 = 0x2730;\n  t.a44 = 0x2731;\n  t.a45 = 0x2732;\n  t.a46 = 0x2733;\n  t.a47 = 0x2734;\n  t.a48 = 0x2735;\n  t.a49 = 0x2736;\n  t.a50 = 0x2737;\n  t.a51 = 0x2738;\n  t.a52 = 0x2739;\n  t.a53 = 0x273a;\n  t.a54 = 0x273b;\n  t.a55 = 0x273c;\n  t.a56 = 0x273d;\n  t.a57 = 0x273e;\n  t.a58 = 0x273f;\n  t.a59 = 0x2740;\n  t.a60 = 0x2741;\n  t.a61 = 0x2742;\n  t.a62 = 0x2743;\n  t.a63 = 0x2744;\n  t.a64 = 0x2745;\n  t.a65 = 0x2746;\n  t.a66 = 0x2747;\n  t.a67 = 0x2748;\n  t.a68 = 0x2749;\n  t.a69 = 0x274a;\n  t.a70 = 0x274b;\n  t.a71 = 0x25cf;\n  t.a72 = 0x274d;\n  t.a73 = 0x25a0;\n  t.a74 = 0x274f;\n  t.a203 = 0x2750;\n  t.a75 = 0x2751;\n  t.a204 = 0x2752;\n  t.a76 = 0x25b2;\n  t.a77 = 0x25bc;\n  t.a78 = 0x25c6;\n  t.a79 = 0x2756;\n  t.a81 = 0x25d7;\n  t.a82 = 0x2758;\n  t.a83 = 0x2759;\n  t.a84 = 0x275a;\n  t.a97 = 0x275b;\n  t.a98 = 0x275c;\n  t.a99 = 0x275d;\n  t.a100 = 0x275e;\n  t.a101 = 0x2761;\n  t.a102 = 0x2762;\n  t.a103 = 0x2763;\n  t.a104 = 0x2764;\n  t.a106 = 0x2765;\n  t.a107 = 0x2766;\n  t.a108 = 0x2767;\n  t.a112 = 0x2663;\n  t.a111 = 0x2666;\n  t.a110 = 0x2665;\n  t.a109 = 0x2660;\n  t.a120 = 0x2460;\n  t.a121 = 0x2461;\n  t.a122 = 0x2462;\n  t.a123 = 0x2463;\n  t.a124 = 0x2464;\n  t.a125 = 0x2465;\n  t.a126 = 0x2466;\n  t.a127 = 0x2467;\n  t.a128 = 0x2468;\n  t.a129 = 0x2469;\n  t.a130 = 0x2776;\n  t.a131 = 0x2777;\n  t.a132 = 0x2778;\n  t.a133 = 0x2779;\n  t.a134 = 0x277a;\n  t.a135 = 0x277b;\n  t.a136 = 0x277c;\n  t.a137 = 0x277d;\n  t.a138 = 0x277e;\n  t.a139 = 0x277f;\n  t.a140 = 0x2780;\n  t.a141 = 0x2781;\n  t.a142 = 0x2782;\n  t.a143 = 0x2783;\n  t.a144 = 0x2784;\n  t.a145 = 0x2785;\n  t.a146 = 0x2786;\n  t.a147 = 0x2787;\n  t.a148 = 0x2788;\n  t.a149 = 0x2789;\n  t.a150 = 0x278a;\n  t.a151 = 0x278b;\n  t.a152 = 0x278c;\n  t.a153 = 0x278d;\n  t.a154 = 0x278e;\n  t.a155 = 0x278f;\n  t.a156 = 0x2790;\n  t.a157 = 0x2791;\n  t.a158 = 0x2792;\n  t.a159 = 0x2793;\n  t.a160 = 0x2794;\n  t.a161 = 0x2192;\n  t.a163 = 0x2194;\n  t.a164 = 0x2195;\n  t.a196 = 0x2798;\n  t.a165 = 0x2799;\n  t.a192 = 0x279a;\n  t.a166 = 0x279b;\n  t.a167 = 0x279c;\n  t.a168 = 0x279d;\n  t.a169 = 0x279e;\n  t.a170 = 0x279f;\n  t.a171 = 0x27a0;\n  t.a172 = 0x27a1;\n  t.a173 = 0x27a2;\n  t.a162 = 0x27a3;\n  t.a174 = 0x27a4;\n  t.a175 = 0x27a5;\n  t.a176 = 0x27a6;\n  t.a177 = 0x27a7;\n  t.a178 = 0x27a8;\n  t.a179 = 0x27a9;\n  t.a193 = 0x27aa;\n  t.a180 = 0x27ab;\n  t.a199 = 0x27ac;\n  t.a181 = 0x27ad;\n  t.a200 = 0x27ae;\n  t.a182 = 0x27af;\n  t.a201 = 0x27b1;\n  t.a183 = 0x27b2;\n  t.a184 = 0x27b3;\n  t.a197 = 0x27b4;\n  t.a185 = 0x27b5;\n  t.a194 = 0x27b6;\n  t.a198 = 0x27b7;\n  t.a186 = 0x27b8;\n  t.a195 = 0x27b9;\n  t.a187 = 0x27ba;\n  t.a188 = 0x27bb;\n  t.a189 = 0x27bc;\n  t.a190 = 0x27bd;\n  t.a191 = 0x27be;\n  t.a89 = 0x2768; // 0xF8D7\n  t.a90 = 0x2769; // 0xF8D8\n  t.a93 = 0x276a; // 0xF8D9\n  t.a94 = 0x276b; // 0xF8DA\n  t.a91 = 0x276c; // 0xF8DB\n  t.a92 = 0x276d; // 0xF8DC\n  t.a205 = 0x276e; // 0xF8DD\n  t.a85 = 0x276f; // 0xF8DE\n  t.a206 = 0x2770; // 0xF8DF\n  t.a86 = 0x2771; // 0xF8E0\n  t.a87 = 0x2772; // 0xF8E1\n  t.a88 = 0x2773; // 0xF8E2\n  t.a95 = 0x2774; // 0xF8E3\n  t.a96 = 0x2775; // 0xF8E4\n  t[\".notdef\"] = 0x0000;\n});\n\nexport { getDingbatsGlyphsUnicode, getGlyphsUnicode };\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getLookupTableFactory } from \"./core_utils.js\";\n\n// Some characters, e.g. copyrightserif, are mapped to the private use area\n// and might not be displayed using standard fonts. Mapping/hacking well-known\n// chars to the similar equivalents in the normal characters range.\nconst getSpecialPUASymbols = getLookupTableFactory(function (t) {\n  t[63721] = 0x00a9; // copyrightsans (0xF8E9) => copyright\n  t[63193] = 0x00a9; // copyrightserif (0xF6D9) => copyright\n  t[63720] = 0x00ae; // registersans (0xF8E8) => registered\n  t[63194] = 0x00ae; // registerserif (0xF6DA) => registered\n  t[63722] = 0x2122; // trademarksans (0xF8EA) => trademark\n  t[63195] = 0x2122; // trademarkserif (0xF6DB) => trademark\n  t[63729] = 0x23a7; // bracelefttp (0xF8F1)\n  t[63730] = 0x23a8; // braceleftmid (0xF8F2)\n  t[63731] = 0x23a9; // braceleftbt (0xF8F3)\n  t[63740] = 0x23ab; // bracerighttp (0xF8FC)\n  t[63741] = 0x23ac; // bracerightmid (0xF8FD)\n  t[63742] = 0x23ad; // bracerightbt (0xF8FE)\n  t[63726] = 0x23a1; // bracketlefttp (0xF8EE)\n  t[63727] = 0x23a2; // bracketleftex (0xF8EF)\n  t[63728] = 0x23a3; // bracketleftbt (0xF8F0)\n  t[63737] = 0x23a4; // bracketrighttp (0xF8F9)\n  t[63738] = 0x23a5; // bracketrightex (0xF8FA)\n  t[63739] = 0x23a6; // bracketrightbt (0xF8FB)\n  t[63723] = 0x239b; // parenlefttp (0xF8EB)\n  t[63724] = 0x239c; // parenleftex (0xF8EC)\n  t[63725] = 0x239d; // parenleftbt (0xF8ED)\n  t[63734] = 0x239e; // parenrighttp (0xF8F6)\n  t[63735] = 0x239f; // parenrightex (0xF8F7)\n  t[63736] = 0x23a0; // parenrightbt (0xF8F8)\n});\n\nfunction mapSpecialUnicodeValues(code) {\n  if (code >= 0xfff0 && code <= 0xffff) {\n    // Specials unicode block.\n    return 0;\n  } else if (code >= 0xf600 && code <= 0xf8ff) {\n    return getSpecialPUASymbols()[code] || code;\n  } else if (code === /* softhyphen = */ 0x00ad) {\n    return 0x002d; // hyphen\n  }\n  return code;\n}\n\nfunction getUnicodeForGlyph(name, glyphsUnicodeMap) {\n  let unicode = glyphsUnicodeMap[name];\n  if (unicode !== undefined) {\n    return unicode;\n  }\n  if (!name) {\n    return -1;\n  }\n  // Try to recover valid Unicode values from 'uniXXXX'/'uXXXX{XX}' glyphs.\n  if (name[0] === \"u\") {\n    const nameLen = name.length;\n    let hexStr;\n\n    if (nameLen === 7 && name[1] === \"n\" && name[2] === \"i\") {\n      // 'uniXXXX'\n      hexStr = name.substring(3);\n    } else if (nameLen >= 5 && nameLen <= 7) {\n      // 'uXXXX{XX}'\n      hexStr = name.substring(1);\n    } else {\n      return -1;\n    }\n    // Check for upper-case hexadecimal characters, to avoid false positives.\n    if (hexStr === hexStr.toUpperCase()) {\n      unicode = parseInt(hexStr, 16);\n      if (unicode >= 0) {\n        return unicode;\n      }\n    }\n  }\n  return -1;\n}\n\n// See https://learn.microsoft.com/en-us/typography/opentype/spec/os2#ulunicoderange1-bits-031ulunicoderange2-bits-3263ulunicoderange3-bits-6495ulunicoderange4-bits-96127\nconst UnicodeRanges = [\n  [0x0000, 0x007f], // 0 - Basic Latin\n  [0x0080, 0x00ff], // 1 - Latin-1 Supplement\n  [0x0100, 0x017f], // 2 - Latin Extended-A\n  [0x0180, 0x024f], // 3 - Latin Extended-B\n  [0x0250, 0x02af, 0x1d00, 0x1d7f, 0x1d80, 0x1dbf], // 4 - IPA Extensions - Phonetic Extensions - Phonetic Extensions Supplement\n  [0x02b0, 0x02ff, 0xa700, 0xa71f], // 5 - Spacing Modifier Letters - Modifier Tone Letters\n  [0x0300, 0x036f, 0x1dc0, 0x1dff], // 6 - Combining Diacritical Marks - Combining Diacritical Marks Supplement\n  [0x0370, 0x03ff], // 7 - Greek and Coptic\n  [0x2c80, 0x2cff], // 8 - Coptic\n  [0x0400, 0x04ff, 0x0500, 0x052f, 0x2de0, 0x2dff, 0xa640, 0xa69f], // 9 - Cyrillic - Cyrillic Supplement - Cyrillic Extended-A - Cyrillic Extended-B\n  [0x0530, 0x058f], // 10 - Armenian\n  [0x0590, 0x05ff], // 11 - Hebrew\n  [0xa500, 0xa63f], // 12 - Vai\n  [0x0600, 0x06ff, 0x0750, 0x077f], // 13 - Arabic - Arabic Supplement\n  [0x07c0, 0x07ff], // 14 - NKo\n  [0x0900, 0x097f], // 15 - Devanagari\n  [0x0980, 0x09ff], // 16 - Bengali\n  [0x0a00, 0x0a7f], // 17 - Gurmukhi\n  [0x0a80, 0x0aff], // 18 - Gujarati\n  [0x0b00, 0x0b7f], // 19 - Oriya\n  [0x0b80, 0x0bff], // 20 - Tamil\n  [0x0c00, 0x0c7f], // 21 - Telugu\n  [0x0c80, 0x0cff], // 22 - Kannada\n  [0x0d00, 0x0d7f], // 23 - Malayalam\n  [0x0e00, 0x0e7f], // 24 - Thai\n  [0x0e80, 0x0eff], // 25 - Lao\n  [0x10a0, 0x10ff, 0x2d00, 0x2d2f], // 26 - Georgian - Georgian Supplement\n  [0x1b00, 0x1b7f], // 27 - Balinese\n  [0x1100, 0x11ff], // 28 - Hangul Jamo\n  [0x1e00, 0x1eff, 0x2c60, 0x2c7f, 0xa720, 0xa7ff], // 29 - Latin Extended Additional - Latin Extended-C - Latin Extended-D\n  [0x1f00, 0x1fff], // 30 - Greek Extended\n  [0x2000, 0x206f, 0x2e00, 0x2e7f], // 31 - General Punctuation - Supplemental Punctuation\n  [0x2070, 0x209f], // 32 - Superscripts And Subscripts\n  [0x20a0, 0x20cf], // 33 - Currency Symbol\n  [0x20d0, 0x20ff], // 34 - Combining Diacritical Marks\n  [0x2100, 0x214f], // 35 - Letterlike Symbols\n  [0x2150, 0x218f], // 36 - Number Forms\n  [0x2190, 0x21ff, 0x27f0, 0x27ff, 0x2900, 0x297f, 0x2b00, 0x2bff], // 37 - Arrows - Supplemental Arrows-A - Supplemental Arrows-B - Miscellaneous Symbols and Arrows\n  [0x2200, 0x22ff, 0x2a00, 0x2aff, 0x27c0, 0x27ef, 0x2980, 0x29ff], // 38 - Mathematical Operators - Supplemental Mathematical Operators - Miscellaneous Mathematical Symbols-A - Miscellaneous Mathematical Symbols-B\n  [0x2300, 0x23ff], // 39 - Miscellaneous Technical\n  [0x2400, 0x243f], // 40 - Control Pictures\n  [0x2440, 0x245f], // 41 - Optical Character Recognition\n  [0x2460, 0x24ff], // 42 - Enclosed Alphanumerics\n  [0x2500, 0x257f], // 43 - Box Drawing\n  [0x2580, 0x259f], // 44 - Block Elements\n  [0x25a0, 0x25ff], // 45 - Geometric Shapes\n  [0x2600, 0x26ff], // 46 - Miscellaneous Symbols\n  [0x2700, 0x27bf], // 47 - Dingbats\n  [0x3000, 0x303f], // 48 - CJK Symbols And Punctuation\n  [0x3040, 0x309f], // 49 - Hiragana\n  [0x30a0, 0x30ff, 0x31f0, 0x31ff], // 50 - Katakana - Katakana Phonetic Extensions\n  [0x3100, 0x312f, 0x31a0, 0x31bf], // 51 - Bopomofo - Bopomofo Extended\n  [0x3130, 0x318f], // 52 - Hangul Compatibility Jamo\n  [0xa840, 0xa87f], // 53 - Phags-pa\n  [0x3200, 0x32ff], // 54 - Enclosed CJK Letters And Months\n  [0x3300, 0x33ff], // 55 - CJK Compatibility\n  [0xac00, 0xd7af], // 56 - Hangul Syllables\n  [0xd800, 0xdfff], // 57 - Non-Plane 0 *\n  [0x10900, 0x1091f], // 58 - Phoenicia\n  [\n    0x4e00, 0x9fff, 0x2e80, 0x2eff, 0x2f00, 0x2fdf, 0x2ff0, 0x2fff, 0x3400,\n    0x4dbf, 0x20000, 0x2a6df, 0x3190, 0x319f,\n  ], // 59 - CJK Unified Ideographs - CJK Radicals Supplement - Kangxi Radicals - Ideographic Description Characters - CJK Unified Ideographs Extension A - CJK Unified Ideographs Extension B - Kanbun\n  [0xe000, 0xf8ff], // 60 - Private Use Area (plane 0)\n  [0x31c0, 0x31ef, 0xf900, 0xfaff, 0x2f800, 0x2fa1f], // 61 - CJK Strokes - CJK Compatibility Ideographs - CJK Compatibility Ideographs Supplement\n  [0xfb00, 0xfb4f], // 62 - Alphabetic Presentation Forms\n  [0xfb50, 0xfdff], // 63 - Arabic Presentation Forms-A\n  [0xfe20, 0xfe2f], // 64 - Combining Half Marks\n  [0xfe10, 0xfe1f], // 65 - Vertical Forms\n  [0xfe50, 0xfe6f], // 66 - Small Form Variants\n  [0xfe70, 0xfeff], // 67 - Arabic Presentation Forms-B\n  [0xff00, 0xffef], // 68 - Halfwidth And Fullwidth Forms\n  [0xfff0, 0xffff], // 69 - Specials\n  [0x0f00, 0x0fff], // 70 - Tibetan\n  [0x0700, 0x074f], // 71 - Syriac\n  [0x0780, 0x07bf], // 72 - Thaana\n  [0x0d80, 0x0dff], // 73 - Sinhala\n  [0x1000, 0x109f], // 74 - Myanmar\n  [0x1200, 0x137f, 0x1380, 0x139f, 0x2d80, 0x2ddf], // 75 - Ethiopic - Ethiopic Supplement - Ethiopic Extended\n  [0x13a0, 0x13ff], // 76 - Cherokee\n  [0x1400, 0x167f], // 77 - Unified Canadian Aboriginal Syllabics\n  [0x1680, 0x169f], // 78 - Ogham\n  [0x16a0, 0x16ff], // 79 - Runic\n  [0x1780, 0x17ff], // 80 - Khmer\n  [0x1800, 0x18af], // 81 - Mongolian\n  [0x2800, 0x28ff], // 82 - Braille Patterns\n  [0xa000, 0xa48f], // 83 - Yi Syllables\n  [0x1700, 0x171f, 0x1720, 0x173f, 0x1740, 0x175f, 0x1760, 0x177f], // 84 - Tagalog - Hanunoo - Buhid - Tagbanwa\n  [0x10300, 0x1032f], // 85 - Old Italic\n  [0x10330, 0x1034f], // 86 - Gothic\n  [0x10400, 0x1044f], // 87 - Deseret\n  [0x1d000, 0x1d0ff, 0x1d100, 0x1d1ff, 0x1d200, 0x1d24f], // 88 - Byzantine Musical Symbols - Musical Symbols - Ancient Greek Musical Notation\n  [0x1d400, 0x1d7ff], // 89 - Mathematical Alphanumeric Symbols\n  [0xff000, 0xffffd], // 90 - Private Use (plane 15)\n  [0xfe00, 0xfe0f, 0xe0100, 0xe01ef], // 91 - Variation Selectors - Variation Selectors Supplement\n  [0xe0000, 0xe007f], // 92 - Tags\n  [0x1900, 0x194f], // 93 - Limbu\n  [0x1950, 0x197f], // 94 - Tai Le\n  [0x1980, 0x19df], // 95 - New Tai Lue\n  [0x1a00, 0x1a1f], // 96 - Buginese\n  [0x2c00, 0x2c5f], // 97 - Glagolitic\n  [0x2d30, 0x2d7f], // 98 - Tifinagh\n  [0x4dc0, 0x4dff], // 99 - Yijing Hexagram Symbols\n  [0xa800, 0xa82f], // 100 - Syloti Nagri\n  [0x10000, 0x1007f, 0x10080, 0x100ff, 0x10100, 0x1013f], // 101 - Linear B Syllabary - Linear B Ideograms - Aegean Numbers\n  [0x10140, 0x1018f], // 102 - Ancient Greek Numbers\n  [0x10380, 0x1039f], // 103 - Ugaritic\n  [0x103a0, 0x103df], // 104 - Old Persian\n  [0x10450, 0x1047f], // 105 - Shavian\n  [0x10480, 0x104af], // 106 - Osmanya\n  [0x10800, 0x1083f], // 107 - Cypriot Syllabary\n  [0x10a00, 0x10a5f], // 108 - Kharoshthi\n  [0x1d300, 0x1d35f], // 109 - Tai Xuan Jing Symbols\n  [0x12000, 0x123ff, 0x12400, 0x1247f], // 110 - Cuneiform - Cuneiform Numbers and Punctuation\n  [0x1d360, 0x1d37f], // 111 - Counting Rod Numerals\n  [0x1b80, 0x1bbf], // 112 - Sundanese\n  [0x1c00, 0x1c4f], // 113 - Lepcha\n  [0x1c50, 0x1c7f], // 114 - Ol Chiki\n  [0xa880, 0xa8df], // 115 - Saurashtra\n  [0xa900, 0xa92f], // 116 - Kayah Li\n  [0xa930, 0xa95f], // 117 - Rejang\n  [0xaa00, 0xaa5f], // 118 - Cham\n  [0x10190, 0x101cf], // 119 - Ancient Symbols\n  [0x101d0, 0x101ff], // 120 - Phaistos Disc\n  [0x102a0, 0x102df, 0x10280, 0x1029f, 0x10920, 0x1093f], // 121 - Carian - Lycian - Lydian\n  [0x1f030, 0x1f09f, 0x1f000, 0x1f02f], // 122 - Domino Tiles - Mahjong Tiles\n];\n\nfunction getUnicodeRangeFor(value, lastPosition = -1) {\n  // TODO: create a map range => position, sort the ranges and cache it.\n  // Then we can make a binary search for finding a range for a given unicode.\n  if (lastPosition !== -1) {\n    const range = UnicodeRanges[lastPosition];\n    for (let i = 0, ii = range.length; i < ii; i += 2) {\n      if (value >= range[i] && value <= range[i + 1]) {\n        return lastPosition;\n      }\n    }\n  }\n  for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) {\n    const range = UnicodeRanges[i];\n    for (let j = 0, jj = range.length; j < jj; j += 2) {\n      if (value >= range[j] && value <= range[j + 1]) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nconst SpecialCharRegExp = /^(\\s)|(\\p{Mn})|(\\p{Cf})$/u;\nconst CategoryCache = new Map();\n\nfunction getCharUnicodeCategory(char) {\n  const cachedCategory = CategoryCache.get(char);\n  if (cachedCategory) {\n    return cachedCategory;\n  }\n  const groups = char.match(SpecialCharRegExp);\n  const category = {\n    isWhitespace: !!groups?.[1],\n    isZeroWidthDiacritic: !!groups?.[2],\n    isInvisibleFormatMark: !!groups?.[3],\n  };\n  CategoryCache.set(char, category);\n  return category;\n}\n\nfunction clearUnicodeCaches() {\n  CategoryCache.clear();\n}\n\nexport {\n  clearUnicodeCaches,\n  getCharUnicodeCategory,\n  getUnicodeForGlyph,\n  getUnicodeRangeFor,\n  mapSpecialUnicodeValues,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DrawOPS, info, OPS } from \"../shared/util.js\";\nimport { getEncoding, StandardEncoding } from \"./encodings.js\";\nimport { getGlyphsUnicode } from \"./glyphlist.js\";\nimport { getLookupTableFactory } from \"./core_utils.js\";\nimport { getUnicodeForGlyph } from \"./unicode.js\";\n\n// Accented characters have issues on Windows and Linux. When this flag is\n// enabled glyphs that use seac and seac style endchar operators are truncated\n// and we instead just store the glyph id's of the base glyph and its accent to\n// be drawn individually.\n// Linux (freetype) requires that when a seac style endchar is used\n// that the charset must be a predefined one, however we build a\n// custom one. Windows just refuses to draw glyphs with seac operators.\nconst SEAC_ANALYSIS_ENABLED = true;\n\nconst FontFlags = {\n  FixedPitch: 1,\n  Serif: 2,\n  Symbolic: 4,\n  Script: 8,\n  Nonsymbolic: 32,\n  Italic: 64,\n  AllCap: 65536,\n  SmallCap: 131072,\n  ForceBold: 262144,\n};\n\n// prettier-ignore\nconst MacStandardGlyphOrdering = [\n  \".notdef\", \".null\", \"nonmarkingreturn\", \"space\", \"exclam\", \"quotedbl\",\n  \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\",\n  \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\",\n  \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\",\n  \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\",\n  \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\",\n  \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\",\n  \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\",\n  \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\",\n  \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n  \"asciitilde\", \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\",\n  \"Odieresis\", \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\",\n  \"atilde\", \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\",\n  \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\", \"ograve\",\n  \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\", \"ucircumflex\",\n  \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\", \"section\", \"bullet\",\n  \"paragraph\", \"germandbls\", \"registered\", \"copyright\", \"trademark\", \"acute\",\n  \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\", \"plusminus\", \"lessequal\",\n  \"greaterequal\", \"yen\", \"mu\", \"partialdiff\", \"summation\", \"product\", \"pi\",\n  \"integral\", \"ordfeminine\", \"ordmasculine\", \"Omega\", \"ae\", \"oslash\",\n  \"questiondown\", \"exclamdown\", \"logicalnot\", \"radical\", \"florin\",\n  \"approxequal\", \"Delta\", \"guillemotleft\", \"guillemotright\", \"ellipsis\",\n  \"nonbreakingspace\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\", \"oe\", \"endash\",\n  \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\", \"quoteright\",\n  \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\", \"currency\",\n  \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\", \"periodcentered\",\n  \"quotesinglbase\", \"quotedblbase\", \"perthousand\", \"Acircumflex\",\n  \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\",\n  \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\", \"Ograve\", \"Uacute\",\n  \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\", \"tilde\", \"macron\",\n  \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\",\n  \"Lslash\", \"lslash\", \"Scaron\", \"scaron\", \"Zcaron\", \"zcaron\", \"brokenbar\",\n  \"Eth\", \"eth\", \"Yacute\", \"yacute\", \"Thorn\", \"thorn\", \"minus\", \"multiply\",\n  \"onesuperior\", \"twosuperior\", \"threesuperior\", \"onehalf\", \"onequarter\",\n  \"threequarters\", \"franc\", \"Gbreve\", \"gbreve\", \"Idotaccent\", \"Scedilla\",\n  \"scedilla\", \"Cacute\", \"cacute\", \"Ccaron\", \"ccaron\", \"dcroat\"];\n\n// Some bad PDF generators, e.g. Scribus PDF, include glyph names\n// in a 'uniXXXX' format -- attempting to recover proper ones.\nfunction recoverGlyphName(name, glyphsUnicodeMap) {\n  if (glyphsUnicodeMap[name] !== undefined) {\n    return name;\n  }\n  // The glyph name is non-standard, trying to recover.\n  const unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);\n  if (unicode !== -1) {\n    for (const key in glyphsUnicodeMap) {\n      if (glyphsUnicodeMap[key] === unicode) {\n        return key;\n      }\n    }\n  }\n  info(\"Unable to recover a standard glyph name for: \" + name);\n  return name;\n}\n\n/**\n * Shared logic for building a char code to glyph id mapping for Type1 and\n * simple CFF fonts. See section 9.6.6.2 of the spec.\n * @param {Object} properties Font properties object.\n * @param {Object} builtInEncoding The encoding contained within the actual font\n *   data.\n * @param {Array} glyphNames Array of glyph names where the index is the\n *   glyph ID.\n * @returns {Object} A char code to glyph ID map.\n */\nfunction type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {\n  const charCodeToGlyphId = Object.create(null);\n  let glyphId, charCode, baseEncoding;\n  const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n\n  if (properties.isInternalFont) {\n    baseEncoding = builtInEncoding;\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : /* notdef = */ 0;\n    }\n  } else if (properties.baseEncodingName) {\n    // If a valid base encoding name was used, the mapping is initialized with\n    // that.\n    baseEncoding = getEncoding(properties.baseEncodingName);\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : /* notdef = */ 0;\n    }\n  } else if (isSymbolicFont) {\n    // For a symbolic font the encoding should be the fonts built-in encoding.\n    for (charCode in builtInEncoding) {\n      charCodeToGlyphId[charCode] = builtInEncoding[charCode];\n    }\n  } else {\n    // For non-symbolic fonts that don't have a base encoding the standard\n    // encoding should be used.\n    baseEncoding = StandardEncoding;\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : /* notdef = */ 0;\n    }\n  }\n\n  // Lastly, merge in the differences.\n  const differences = properties.differences;\n  let glyphsUnicodeMap;\n  if (differences) {\n    for (charCode in differences) {\n      const glyphName = differences[charCode];\n      glyphId = glyphNames.indexOf(glyphName);\n\n      if (glyphId === -1) {\n        glyphsUnicodeMap ??= getGlyphsUnicode();\n\n        const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\n        if (standardGlyphName !== glyphName) {\n          glyphId = glyphNames.indexOf(standardGlyphName);\n        }\n      }\n      charCodeToGlyphId[charCode] = glyphId >= 0 ? glyphId : /* notdef = */ 0;\n    }\n  }\n  return charCodeToGlyphId;\n}\n\nfunction normalizeFontName(name) {\n  return name.replaceAll(/[,_]/g, \"-\").replaceAll(/\\s/g, \"\");\n}\n\nconst getVerticalPresentationForm = getLookupTableFactory(t => {\n  // This table has been found at\n  // https://searchfox.org/mozilla-central/rev/cbdfa503a87597b20719aae5f6a1efccd6cb3b7b/gfx/thebes/gfxHarfBuzzShaper.cpp#251-294\n  t[0x2013] = 0xfe32; // EN DASH\n  t[0x2014] = 0xfe31; // EM DASH\n  t[0x2025] = 0xfe30; // TWO DOT LEADER\n  t[0x2026] = 0xfe19; // HORIZONTAL ELLIPSIS\n  t[0x3001] = 0xfe11; // IDEOGRAPHIC COMMA\n  t[0x3002] = 0xfe12; // IDEOGRAPHIC FULL STOP\n  t[0x3008] = 0xfe3f; // LEFT ANGLE BRACKET\n  t[0x3009] = 0xfe40; // RIGHT ANGLE BRACKET\n  t[0x300a] = 0xfe3d; // LEFT DOUBLE ANGLE BRACKET\n  t[0x300b] = 0xfe3e; // RIGHT DOUBLE ANGLE BRACKET\n  t[0x300c] = 0xfe41; // LEFT CORNER BRACKET\n  t[0x300d] = 0xfe42; // RIGHT CORNER BRACKET\n  t[0x300e] = 0xfe43; // LEFT WHITE CORNER BRACKET\n  t[0x300f] = 0xfe44; // RIGHT WHITE CORNER BRACKET\n  t[0x3010] = 0xfe3b; // LEFT BLACK LENTICULAR BRACKET\n  t[0x3011] = 0xfe3c; // RIGHT BLACK LENTICULAR BRACKET\n  t[0x3014] = 0xfe39; // LEFT TORTOISE SHELL BRACKET\n  t[0x3015] = 0xfe3a; // RIGHT TORTOISE SHELL BRACKET\n  t[0x3016] = 0xfe17; // LEFT WHITE LENTICULAR BRACKET\n  t[0x3017] = 0xfe18; // RIGHT WHITE LENTICULAR BRACKET\n  t[0xfe4f] = 0xfe34; // WAVY LOW LINE\n  t[0xff01] = 0xfe15; // FULLWIDTH EXCLAMATION MARK\n  t[0xff08] = 0xfe35; // FULLWIDTH LEFT PARENTHESIS\n  t[0xff09] = 0xfe36; // FULLWIDTH RIGHT PARENTHESIS\n  t[0xff0c] = 0xfe10; // FULLWIDTH COMMA\n  t[0xff1a] = 0xfe13; // FULLWIDTH COLON\n  t[0xff1b] = 0xfe14; // FULLWIDTH SEMICOLON\n  t[0xff1f] = 0xfe16; // FULLWIDTH QUESTION MARK\n  t[0xff3b] = 0xfe47; // FULLWIDTH LEFT SQUARE BRACKET\n  t[0xff3d] = 0xfe48; // FULLWIDTH RIGHT SQUARE BRACKET\n  t[0xff3f] = 0xfe33; // FULLWIDTH LOW LINE\n  t[0xff5b] = 0xfe37; // FULLWIDTH LEFT CURLY BRACKET\n  t[0xff5d] = 0xfe38; // FULLWIDTH RIGHT CURLY BRACKET\n});\n\n// To disable Type3 compilation, set the value to `-1`.\nconst MAX_SIZE_TO_COMPILE = 1000;\n\nfunction compileType3Glyph({ data: img, width, height }) {\n  if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {\n    return null;\n  }\n\n  const POINT_TO_PROCESS_LIMIT = 1000;\n  const POINT_TYPES = new Uint8Array([\n    0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0,\n  ]);\n\n  const width1 = width + 1;\n  const points = new Uint8Array(width1 * (height + 1));\n  let i, j, j0;\n\n  // decodes bit-packed mask data\n  const lineSize = (width + 7) & ~7;\n  const data = new Uint8Array(lineSize * height);\n  let pos = 0;\n  for (const elem of img) {\n    let mask = 128;\n    while (mask > 0) {\n      data[pos++] = elem & mask ? 0 : 255;\n      mask >>= 1;\n    }\n  }\n\n  // finding interesting points: every point is located between mask pixels,\n  // so there will be points of the (width + 1)x(height + 1) grid. Every point\n  // will have flags assigned based on neighboring mask pixels:\n  //   4 | 8\n  //   --P--\n  //   2 | 1\n  // We are interested only in points with the flags:\n  //   - outside corners: 1, 2, 4, 8;\n  //   - inside corners: 7, 11, 13, 14;\n  //   - and, intersections: 5, 10.\n  let count = 0;\n  pos = 0;\n  if (data[pos] !== 0) {\n    points[0] = 1;\n    ++count;\n  }\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j] = data[pos] ? 2 : 1;\n      ++count;\n    }\n    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j] = 2;\n    ++count;\n  }\n  for (i = 1; i < height; i++) {\n    pos = i * lineSize;\n    j0 = i * width1;\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0] = data[pos] ? 1 : 8;\n      ++count;\n    }\n    // 'sum' is the position of the current pixel configuration in the 'TYPES'\n    // array (in order 8-1-2-4, so we can use '>>2' to shift the column).\n    let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n    for (j = 1; j < width; j++) {\n      sum =\n        (sum >> 2) +\n        (data[pos + 1] ? 4 : 0) +\n        (data[pos - lineSize + 1] ? 8 : 0);\n      if (POINT_TYPES[sum]) {\n        points[j0 + j] = POINT_TYPES[sum];\n        ++count;\n      }\n      pos++;\n    }\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0 + j] = data[pos] ? 2 : 4;\n      ++count;\n    }\n\n    if (count > POINT_TO_PROCESS_LIMIT) {\n      return null;\n    }\n  }\n\n  pos = lineSize * (height - 1);\n  j0 = i * width1;\n  if (data[pos] !== 0) {\n    points[j0] = 8;\n    ++count;\n  }\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j0 + j] = data[pos] ? 4 : 8;\n      ++count;\n    }\n    pos++;\n  }\n  if (data[pos] !== 0) {\n    points[j0 + j] = 4;\n    ++count;\n  }\n  if (count > POINT_TO_PROCESS_LIMIT) {\n    return null;\n  }\n\n  // building outlines\n  const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n  const pathBuf = [];\n\n  // the path shall be painted in [0..1]x[0..1] space\n  const { a, b, c, d, e, f } = new DOMMatrix()\n    .scaleSelf(1 / width, -1 / height)\n    .translateSelf(0, -height);\n\n  for (i = 0; count && i <= height; i++) {\n    let p = i * width1;\n    const end = p + width;\n    while (p < end && !points[p]) {\n      p++;\n    }\n    if (p === end) {\n      continue;\n    }\n    let x = p % width1;\n    let y = i;\n    pathBuf.push(DrawOPS.moveTo, a * x + c * y + e, b * x + d * y + f);\n\n    const p0 = p;\n    let type = points[p];\n    do {\n      const step = steps[type];\n      do {\n        p += step;\n      } while (!points[p]);\n\n      const pp = points[p];\n      if (pp !== 5 && pp !== 10) {\n        // set new direction\n        type = pp;\n        // delete mark\n        points[p] = 0;\n      } else {\n        // type is 5 or 10, ie, a crossing\n        // set new direction\n        type = pp & ((0x33 * type) >> 4);\n        // set new type for \"future hit\"\n        points[p] &= (type >> 2) | (type << 2);\n      }\n      x = p % width1;\n      y = (p / width1) | 0;\n      pathBuf.push(DrawOPS.lineTo, a * x + c * y + e, b * x + d * y + f);\n\n      if (!points[p]) {\n        --count;\n      }\n    } while (p0 !== p);\n    --i;\n  }\n\n  return [\n    OPS.rawFillPath,\n    [new Float32Array(pathBuf)],\n    new Float32Array([0, 0, width, height]),\n  ];\n}\n\nexport {\n  compileType3Glyph,\n  FontFlags,\n  getVerticalPresentationForm,\n  MacStandardGlyphOrdering,\n  normalizeFontName,\n  recoverGlyphName,\n  SEAC_ANALYSIS_ENABLED,\n  type1FontGlyphMapping,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// prettier-ignore\nconst ISOAdobeCharset = [\n  \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n  \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n  \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\",\n  \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\",\n  \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\",\n  \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\n  \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\n  \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\",\n  \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\",\n  \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\n  \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\",\n  \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\",\n  \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\",\n  \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\",\n  \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\",\n  \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\",\n  \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\",\n  \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n  \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\",\n  \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\",\n  \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\",\n  \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\",\n  \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\",\n  \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\",\n  \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\",\n  \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\",\n  \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\",\n  \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\",\n  \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\",\n  \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\",\n  \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\",\n  \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\",\n  \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\",\n  \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\"\n];\n\n// prettier-ignore\nconst ExpertCharset = [\n  \".notdef\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\",\n  \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\",\n  \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\",\n  \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\",\n  \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\",\n  \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\",\n  \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\",\n  \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\",\n  \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\",\n  \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\",\n  \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\",\n  \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n  \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n  \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n  \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n  \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n  \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n  \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\",\n  \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\",\n  \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\",\n  \"Cedillasmall\", \"onequarter\", \"onehalf\", \"threequarters\",\n  \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n  \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\",\n  \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\",\n  \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\",\n  \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\",\n  \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\",\n  \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\",\n  \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\",\n  \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\",\n  \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n  \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n  \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n  \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n  \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n  \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n  \"Ydieresissmall\"\n];\n\n// prettier-ignore\nconst ExpertSubsetCharset = [\n  \".notdef\", \"space\", \"dollaroldstyle\", \"dollarsuperior\",\n  \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n  \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\",\n  \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\",\n  \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\",\n  \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\",\n  \"threequartersemdash\", \"periodsuperior\", \"asuperior\", \"bsuperior\",\n  \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\",\n  \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\",\n  \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\",\n  \"parenrightinferior\", \"hyphensuperior\", \"colonmonetary\", \"onefitted\",\n  \"rupiah\", \"centoldstyle\", \"figuredash\", \"hypheninferior\", \"onequarter\",\n  \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n  \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\",\n  \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\",\n  \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\",\n  \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\",\n  \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\",\n  \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\",\n  \"periodinferior\", \"commainferior\"\n];\n\nexport { ExpertCharset, ExpertSubsetCharset, ISOAdobeCharset };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from \"../shared/util.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\nclass DataBuilder {\n  #buf;\n\n  #bufLength = 1024;\n\n  #hasExactLength = false;\n\n  #pos = 0;\n\n  #view;\n\n  constructor({ exactLength = 0, minLength = 0 }) {\n    this.#hasExactLength = !!exactLength;\n    this.#initBuf(exactLength || minLength);\n  }\n\n  #initBuf(minLength) {\n    if (this.#hasExactLength) {\n      this.#bufLength = minLength;\n    } else {\n      // Compute the first power of two that is as big as the `minLength`.\n      while (this.#bufLength < minLength) {\n        this.#bufLength *= 2;\n      }\n    }\n    const newBuf = new Uint8Array(this.#bufLength);\n\n    if (this.#buf) {\n      newBuf.set(this.#buf, 0);\n    }\n    this.#buf = newBuf;\n    this.#view = new DataView(newBuf.buffer);\n  }\n\n  get data() {\n    return this.#buf.subarray(0, this.#pos);\n  }\n\n  get length() {\n    return this.#pos;\n  }\n\n  skip(n) {\n    this.#pos += n;\n  }\n\n  setArray(arr) {\n    const newPos = this.#pos + arr.length;\n\n    if (!this.#hasExactLength && newPos > this.#bufLength) {\n      this.#initBuf(newPos);\n    }\n    this.#buf.set(arr, this.#pos);\n    this.#pos = newPos;\n  }\n\n  setInt16(val) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        typeof val === \"number\" && Math.abs(val) < 2 ** 16,\n        `setInt16: Unexpected input \"${val}\".`\n      );\n    }\n    const newPos = this.#pos + 2;\n\n    if (!this.#hasExactLength && newPos > this.#bufLength) {\n      this.#initBuf(newPos);\n    }\n    this.#view.setInt16(this.#pos, val);\n    this.#pos = newPos;\n  }\n\n  setSafeInt16(val) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        typeof val === \"number\" && !Number.isNaN(val),\n        `safeString16: Unexpected input \"${val}\".`\n      );\n    }\n    const newPos = this.#pos + 2;\n\n    if (!this.#hasExactLength && newPos > this.#bufLength) {\n      this.#initBuf(newPos);\n    }\n    // clamp value to the 16-bit int range\n    this.#view.setInt16(this.#pos, MathClamp(val, -0x8000, 0x7fff));\n    this.#pos = newPos;\n  }\n\n  setInt32(val) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        typeof val === \"number\" && Math.abs(val) < 2 ** 32,\n        `setInt32: Unexpected input \"${val}\".`\n      );\n    }\n    const newPos = this.#pos + 4;\n\n    if (!this.#hasExactLength && newPos > this.#bufLength) {\n      this.#initBuf(newPos);\n    }\n    this.#view.setInt32(this.#pos, val);\n    this.#pos = newPos;\n  }\n}\n\nexport { DataBuilder };\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  bytesToString,\n  FormatError,\n  info,\n  isArrayEqual,\n  shadow,\n  stringToBytes,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  ExpertCharset,\n  ExpertSubsetCharset,\n  ISOAdobeCharset,\n} from \"./charsets.js\";\nimport { ExpertEncoding, StandardEncoding } from \"./encodings.js\";\nimport { DataBuilder } from \"./data_builder.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\n// Maximum subroutine call depth of type 2 charstrings. Matches OTS.\nconst MAX_SUBR_NESTING = 10;\n\nfunction looksLikeUnsigned16BitNegative(coord) {\n  return coord > 0x7fff && coord <= 0xffff;\n}\n\nfunction recoverSigned16BitBBox(bbox, onlyLowerLeft = false) {\n  return Util.normalizeRect(\n    bbox.map((coord, i) =>\n      (!onlyLowerLeft || i < 2) && looksLikeUnsigned16BitNegative(coord)\n        ? coord - 0x10000\n        : coord\n    )\n  );\n}\n\n/**\n * The CFF class takes a Type1 file and wrap it into a\n * 'Compact Font Format' which itself embed Type2 charstrings.\n */\n// prettier-ignore\nconst CFFStandardStrings = [\n  \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\",\n  \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\",\n  \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\",\n  \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\",\n  \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\",\n  \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\",\n  \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\",\n  \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\",\n  \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\",\n  \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\",\n  \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\",\n  \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\",\n  \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\",\n  \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\",\n  \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\",\n  \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\",\n  \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\",\n  \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\",\n  \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\",\n  \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\",\n  \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\",\n  \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\",\n  \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\",\n  \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\",\n  \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\",\n  \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\",\n  \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\",\n  \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\",\n  \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\",\n  \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\",\n  \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\",\n  \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\",\n  \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\",\n  \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n  \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n  \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n  \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n  \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n  \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n  \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\",\n  \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\",\n  \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\",\n  \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\",\n  \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\",\n  \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\",\n  \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\",\n  \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\",\n  \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\",\n  \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\",\n  \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\",\n  \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\",\n  \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\",\n  \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\",\n  \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\",\n  \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\",\n  \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\",\n  \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\",\n  \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\",\n  \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\",\n  \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\",\n  \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\",\n  \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\",\n  \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\",\n  \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\",\n  \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n\nconst NUM_STANDARD_CFF_STRINGS = 391;\n\nconst DEFAULT_BLUE_SCALE = 0.039625;\nconst DEFAULT_BLUE_SHIFT = 7;\nconst DEFAULT_BLUE_FUZZ = 1;\nconst DEFAULT_EXPANSION_FACTOR = 0.06;\n\nconst CharstringValidationData = [\n  /*  0 */ null,\n  /*  1 */ { id: \"hstem\", min: 2, stackClearing: true, stem: true },\n  /*  2 */ null,\n  /*  3 */ { id: \"vstem\", min: 2, stackClearing: true, stem: true },\n  /*  4 */ { id: \"vmoveto\", min: 1, stackClearing: true },\n  /*  5 */ { id: \"rlineto\", min: 2, resetStack: true },\n  /*  6 */ { id: \"hlineto\", min: 1, resetStack: true },\n  /*  7 */ { id: \"vlineto\", min: 1, resetStack: true },\n  /*  8 */ { id: \"rrcurveto\", min: 6, resetStack: true },\n  /*  9 */ null,\n  /* 10 */ { id: \"callsubr\", min: 1 },\n  /* 11 */ { id: \"return\", min: 0 },\n  /* 12 */ null,\n  /* 13 */ null,\n  /* 14 */ { id: \"endchar\", min: 0, stackClearing: true },\n  /* 15 */ null,\n  /* 16 */ null,\n  /* 17 */ null,\n  /* 18 */ { id: \"hstemhm\", min: 2, stackClearing: true, stem: true },\n  /* 19 */ { id: \"hintmask\", min: 0, stackClearing: true },\n  /* 20 */ { id: \"cntrmask\", min: 0, stackClearing: true },\n  /* 21 */ { id: \"rmoveto\", min: 2, stackClearing: true },\n  /* 22 */ { id: \"hmoveto\", min: 1, stackClearing: true },\n  /* 23 */ { id: \"vstemhm\", min: 2, stackClearing: true, stem: true },\n  /* 24 */ { id: \"rcurveline\", min: 8, resetStack: true },\n  /* 25 */ { id: \"rlinecurve\", min: 8, resetStack: true },\n  /* 26 */ { id: \"vvcurveto\", min: 4, resetStack: true },\n  /* 27 */ { id: \"hhcurveto\", min: 4, resetStack: true },\n  /* 28 */ null, // shortint\n  /* 29 */ { id: \"callgsubr\", min: 1 },\n  /* 30 */ { id: \"vhcurveto\", min: 4, resetStack: true },\n  /* 31 */ { id: \"hvcurveto\", min: 4, resetStack: true },\n];\n\nconst CharstringValidationData12 = [\n  null,\n  null,\n  null,\n  { id: \"and\", min: 2, stackDelta: -1 },\n  { id: \"or\", min: 2, stackDelta: -1 },\n  { id: \"not\", min: 1, stackDelta: 0 },\n  null,\n  null,\n  null,\n  { id: \"abs\", min: 1, stackDelta: 0 },\n  {\n    id: \"add\",\n    min: 2,\n    stackDelta: -1,\n    stackFn(stack, index) {\n      stack[index - 2] = stack[index - 2] + stack[index - 1];\n    },\n  },\n  {\n    id: \"sub\",\n    min: 2,\n    stackDelta: -1,\n    stackFn(stack, index) {\n      stack[index - 2] = stack[index - 2] - stack[index - 1];\n    },\n  },\n  {\n    id: \"div\",\n    min: 2,\n    stackDelta: -1,\n    stackFn(stack, index) {\n      stack[index - 2] = stack[index - 2] / stack[index - 1];\n    },\n  },\n  null,\n  {\n    id: \"neg\",\n    min: 1,\n    stackDelta: 0,\n    stackFn(stack, index) {\n      stack[index - 1] = -stack[index - 1];\n    },\n  },\n  { id: \"eq\", min: 2, stackDelta: -1 },\n  null,\n  null,\n  { id: \"drop\", min: 1, stackDelta: -1 },\n  null,\n  { id: \"put\", min: 2, stackDelta: -2 },\n  { id: \"get\", min: 1, stackDelta: 0 },\n  { id: \"ifelse\", min: 4, stackDelta: -3 },\n  { id: \"random\", min: 0, stackDelta: 1 },\n  {\n    id: \"mul\",\n    min: 2,\n    stackDelta: -1,\n    stackFn(stack, index) {\n      stack[index - 2] = stack[index - 2] * stack[index - 1];\n    },\n  },\n  null,\n  { id: \"sqrt\", min: 1, stackDelta: 0 },\n  { id: \"dup\", min: 1, stackDelta: 1 },\n  { id: \"exch\", min: 2, stackDelta: 0 },\n  { id: \"index\", min: 2, stackDelta: 0 },\n  { id: \"roll\", min: 3, stackDelta: -2 },\n  null,\n  null,\n  null,\n  { id: \"hflex\", min: 7, resetStack: true },\n  { id: \"flex\", min: 13, resetStack: true },\n  { id: \"hflex1\", min: 9, resetStack: true },\n  { id: \"flex1\", min: 11, resetStack: true },\n];\n\nclass CFFParser {\n  constructor(file, properties, seacAnalysisEnabled) {\n    this.bytes = file.getBytes();\n    this.properties = properties;\n    this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n  }\n\n  parse() {\n    const properties = this.properties;\n    const cff = new CFF(this.bytes.length);\n    this.cff = cff;\n\n    // The first five sections must be in order, all the others are reached\n    // via offsets contained in one of the below.\n    const header = this.parseHeader();\n    const nameIndex = this.parseIndex(header.endPos);\n    const topDictIndex = this.parseIndex(nameIndex.endPos);\n    const stringIndex = this.parseIndex(topDictIndex.endPos);\n    const globalSubrIndex = this.parseIndex(stringIndex.endPos);\n\n    const topDictParsed = this.parseDict(topDictIndex.obj.get(0));\n    const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);\n\n    cff.header = header.obj;\n    cff.names = this.parseNameIndex(nameIndex.obj);\n    cff.strings = this.parseStringIndex(stringIndex.obj);\n    cff.topDict = topDict;\n    cff.globalSubrIndex = globalSubrIndex.obj;\n\n    this.parsePrivateDict(cff.topDict);\n\n    cff.isCIDFont = topDict.hasName(\"ROS\");\n\n    const charStringOffset = topDict.getByName(\"CharStrings\");\n    const charStringIndex = this.parseIndex(charStringOffset).obj;\n\n    cff.charStringCount = charStringIndex.count;\n\n    const fontMatrix = topDict.getByName(\"FontMatrix\");\n    if (fontMatrix) {\n      properties.fontMatrix = fontMatrix;\n    }\n\n    let fontBBox = topDict.getByName(\"FontBBox\");\n    const descriptorBBox = properties.bbox?.some(coord => coord !== 0)\n      ? recoverSigned16BitBBox(properties.bbox)\n      : null;\n    const cffBBoxHasUnsignedLowerLeft = fontBBox\n      ?.slice(0, 2)\n      .some(looksLikeUnsigned16BitNegative);\n    const cffBBoxHasUnsignedCoords = fontBBox?.some(\n      looksLikeUnsigned16BitNegative\n    );\n    if (fontBBox?.every(coord => coord === 0) && descriptorBBox) {\n      // The CFF FontBBox is empty, hence fall back to the FontDescriptor bbox.\n      fontBBox = descriptorBBox;\n      topDict.setByName(\"FontBBox\", fontBBox);\n    } else if (cffBBoxHasUnsignedCoords) {\n      const recoveredFontBBox = recoverSigned16BitBBox(fontBBox);\n      const descriptorCorroborates =\n        descriptorBBox &&\n        properties.bbox.some(coord => coord < 0) &&\n        !properties.bbox.some(looksLikeUnsigned16BitNegative) &&\n        isArrayEqual(recoveredFontBBox, descriptorBBox);\n\n      if (descriptorCorroborates || cffBBoxHasUnsignedLowerLeft) {\n        // Some Ghostscript-generated CFF fonts encode negative lower-left\n        // coordinates as unsigned 16-bit values. Preserve large upper-right\n        // coordinates unless the descriptor independently confirms the repair.\n        fontBBox = descriptorCorroborates\n          ? recoveredFontBBox\n          : recoverSigned16BitBBox(fontBBox, /* onlyLowerLeft = */ true);\n        topDict.setByName(\"FontBBox\", fontBBox);\n      }\n    }\n    if (fontBBox?.some(coord => coord !== 0)) {\n      // adjusting ascent/descent\n      properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n      properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n      properties.ascentScaled = true;\n    }\n\n    let charset, encoding;\n    if (cff.isCIDFont) {\n      const fdArrayIndex = this.parseIndex(topDict.getByName(\"FDArray\")).obj;\n      for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) {\n        const dictRaw = fdArrayIndex.get(i);\n        const fontDict = this.createDict(\n          CFFTopDict,\n          this.parseDict(dictRaw),\n          cff.strings\n        );\n        this.parsePrivateDict(fontDict);\n        cff.fdArray.push(fontDict);\n      }\n      // cid fonts don't have an encoding\n      encoding = null;\n      charset = this.parseCharsets(\n        topDict.getByName(\"charset\"),\n        charStringIndex.count,\n        cff.strings,\n        true\n      );\n      cff.fdSelect = this.parseFDSelect(\n        topDict.getByName(\"FDSelect\"),\n        charStringIndex.count\n      );\n    } else {\n      charset = this.parseCharsets(\n        topDict.getByName(\"charset\"),\n        charStringIndex.count,\n        cff.strings,\n        false\n      );\n      encoding = this.parseEncoding(\n        topDict.getByName(\"Encoding\"),\n        properties,\n        cff.strings,\n        charset.charset\n      );\n    }\n\n    cff.charset = charset;\n    cff.encoding = encoding;\n\n    const charStringsAndSeacs = this.parseCharStrings({\n      charStrings: charStringIndex,\n      localSubrIndex: topDict.privateDict.subrsIndex,\n      globalSubrIndex: globalSubrIndex.obj,\n      fdSelect: cff.fdSelect,\n      fdArray: cff.fdArray,\n      privateDict: topDict.privateDict,\n    });\n    cff.charStrings = charStringsAndSeacs.charStrings;\n    cff.seacs = charStringsAndSeacs.seacs;\n    cff.widths = charStringsAndSeacs.widths;\n\n    return cff;\n  }\n\n  parseHeader() {\n    let bytes = this.bytes;\n    const bytesLength = bytes.length;\n    let offset = 0;\n\n    // Prevent an infinite loop, by checking that the offset is within the\n    // bounds of the bytes array. Necessary in empty, or invalid, font files.\n    while (offset < bytesLength && bytes[offset] !== 1) {\n      ++offset;\n    }\n    if (offset >= bytesLength) {\n      throw new FormatError(\"Invalid CFF header\");\n    }\n    if (offset !== 0) {\n      info(\"cff data is shifted\");\n      bytes = bytes.subarray(offset);\n      this.bytes = bytes;\n    }\n    const major = bytes[0];\n    const minor = bytes[1];\n    const hdrSize = bytes[2];\n    const offSize = bytes[3];\n    const header = new CFFHeader(major, minor, hdrSize, offSize);\n    return { obj: header, endPos: hdrSize };\n  }\n\n  parseDict(dict) {\n    const view = new DataView(dict.buffer, dict.byteOffset, dict.bytesLength);\n    let pos = 0;\n\n    function parseOperand() {\n      let value = dict[pos++];\n      if (value === 30) {\n        return parseFloatOperand();\n      } else if (value === 28) {\n        value = view.getInt16(pos);\n        pos += 2;\n        return value;\n      } else if (value === 29) {\n        value = view.getInt32(pos);\n        pos += 4;\n        return value;\n      } else if (value >= 32 && value <= 246) {\n        return value - 139;\n      } else if (value >= 247 && value <= 250) {\n        return (value - 247) * 256 + dict[pos++] + 108;\n      } else if (value >= 251 && value <= 254) {\n        return -((value - 251) * 256) - dict[pos++] - 108;\n      }\n      warn(`CFFParser.parseDict: \"${value}\" is a reserved command.`);\n      return NaN;\n    }\n\n    function parseFloatOperand() {\n      let str = \"\";\n      const eof = 15;\n      // prettier-ignore\n      const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\",\n                      \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n      const length = dict.length;\n      while (pos < length) {\n        const b = dict[pos++];\n        const b1 = b >> 4;\n        const b2 = b & 15;\n\n        if (b1 === eof) {\n          break;\n        }\n        str += lookup[b1];\n\n        if (b2 === eof) {\n          break;\n        }\n        str += lookup[b2];\n      }\n      return parseFloat(str);\n    }\n\n    let operands = [];\n    const entries = [];\n\n    pos = 0;\n    const end = dict.length;\n    while (pos < end) {\n      let b = dict[pos];\n      if (b <= 21) {\n        if (b === 12) {\n          b = (b << 8) | dict[++pos];\n        }\n        entries.push([b, operands]);\n        operands = [];\n        ++pos;\n      } else {\n        operands.push(parseOperand());\n      }\n    }\n    return entries;\n  }\n\n  parseIndex(pos) {\n    const cffIndex = new CFFIndex();\n    const bytes = this.bytes;\n    const count = (bytes[pos++] << 8) | bytes[pos++];\n    const offsets = [];\n    let end = pos;\n    let i, ii;\n\n    if (count !== 0) {\n      const offsetSize = bytes[pos++];\n      // add 1 for offset to determine size of last object\n      const startPos = pos + (count + 1) * offsetSize - 1;\n\n      for (i = 0, ii = count + 1; i < ii; ++i) {\n        let offset = 0;\n        for (let j = 0; j < offsetSize; ++j) {\n          offset <<= 8;\n          offset += bytes[pos++];\n        }\n        offsets.push(startPos + offset);\n      }\n      end = offsets[count];\n    }\n    for (i = 0, ii = offsets.length - 1; i < ii; ++i) {\n      const offsetStart = offsets[i];\n      const offsetEnd = offsets[i + 1];\n      cffIndex.add(bytes.subarray(offsetStart, offsetEnd));\n    }\n    return { obj: cffIndex, endPos: end };\n  }\n\n  parseNameIndex(index) {\n    const names = [];\n    for (let i = 0, ii = index.count; i < ii; ++i) {\n      const name = index.get(i);\n      names.push(bytesToString(name));\n    }\n    return names;\n  }\n\n  parseStringIndex(index) {\n    const strings = new CFFStrings();\n    for (let i = 0, ii = index.count; i < ii; ++i) {\n      const data = index.get(i);\n      strings.add(bytesToString(data));\n    }\n    return strings;\n  }\n\n  createDict(Type, dict, strings) {\n    const cffDict = new Type(strings);\n    for (const [key, value] of dict) {\n      cffDict.setByKey(key, value);\n    }\n    return cffDict;\n  }\n\n  parseCharString(state, data, localSubrIndex, globalSubrIndex) {\n    if (!data || state.callDepth > MAX_SUBR_NESTING) {\n      return false;\n    }\n    const view = new DataView(data.buffer, data.byteOffset, data.bytesLength);\n    let stackSize = state.stackSize;\n    const stack = state.stack;\n\n    let length = data.length;\n\n    for (let j = 0; j < length;) {\n      const value = data[j++];\n      let validationCommand = null;\n      if (value === 12) {\n        const q = data[j++];\n        if (q === 0) {\n          // The CFF specification state that the 'dotsection' command\n          // (12, 0) is deprecated and treated as a no-op, but all Type2\n          // charstrings processors should support them. Unfortunately\n          // the font sanitizer don't. As a workaround the sequence (12, 0)\n          // is replaced by a useless (0, hmoveto).\n          data[j - 2] = 139;\n          data[j - 1] = 22;\n          stackSize = 0;\n        } else {\n          validationCommand = CharstringValidationData12[q];\n        }\n      } else if (value === 28) {\n        // number (16 bit)\n        stack[stackSize] = view.getInt16(j);\n        j += 2;\n        stackSize++;\n      } else if (value === 14) {\n        if (stackSize >= 4) {\n          stackSize -= 4;\n          if (this.seacAnalysisEnabled) {\n            state.seac = stack.slice(stackSize, stackSize + 4);\n            return false;\n          }\n        }\n        validationCommand = CharstringValidationData[value];\n      } else if (value >= 32 && value <= 246) {\n        // number\n        stack[stackSize] = value - 139;\n        stackSize++;\n      } else if (value >= 247 && value <= 254) {\n        // number (+1 bytes)\n        stack[stackSize] =\n          value < 251\n            ? ((value - 247) << 8) + data[j] + 108\n            : -((value - 251) << 8) - data[j] - 108;\n        j++;\n        stackSize++;\n      } else if (value === 255) {\n        // number (32 bit)\n        stack[stackSize] = view.getInt32(j) / 65536;\n        j += 4;\n        stackSize++;\n      } else if (value === 19 || value === 20) {\n        state.hints += stackSize >> 1;\n        if (state.hints === 0) {\n          // Not a valid value (see bug 1529502): just remove it.\n          data.copyWithin(j - 1, j, -1);\n          j -= 1;\n          length -= 1;\n          continue;\n        }\n        // skipping right amount of hints flag data\n        j += (state.hints + 7) >> 3;\n        stackSize %= 2;\n        validationCommand = CharstringValidationData[value];\n      } else if (value === 10 || value === 29) {\n        const subrsIndex = value === 10 ? localSubrIndex : globalSubrIndex;\n        if (!subrsIndex) {\n          validationCommand = CharstringValidationData[value];\n          warn(\"Missing subrsIndex for \" + validationCommand.id);\n          return false;\n        }\n        let bias = 32768;\n        if (subrsIndex.count < 1240) {\n          bias = 107;\n        } else if (subrsIndex.count < 33900) {\n          bias = 1131;\n        }\n        const subrNumber = stack[--stackSize] + bias;\n        if (\n          subrNumber < 0 ||\n          subrNumber >= subrsIndex.count ||\n          isNaN(subrNumber)\n        ) {\n          validationCommand = CharstringValidationData[value];\n          warn(\"Out of bounds subrIndex for \" + validationCommand.id);\n          return false;\n        }\n        state.stackSize = stackSize;\n        state.callDepth++;\n        const valid = this.parseCharString(\n          state,\n          subrsIndex.get(subrNumber),\n          localSubrIndex,\n          globalSubrIndex\n        );\n        if (!valid) {\n          return false;\n        }\n        state.callDepth--;\n        stackSize = state.stackSize;\n        continue;\n      } else if (value === 11) {\n        state.stackSize = stackSize;\n        return true;\n      } else if (value === 0 && j === data.length) {\n        // Operator 0 is not used according to the current spec and\n        // it's the last char and consequently it's likely a terminator.\n        // So just replace it by endchar command to make OTS happy.\n        data[j - 1] = 14;\n        validationCommand = CharstringValidationData[14];\n      } else if (value === 9) {\n        // Not a valid value.\n        data.copyWithin(j - 1, j, -1);\n        j -= 1;\n        length -= 1;\n        continue;\n      } else {\n        validationCommand = CharstringValidationData[value];\n      }\n      if (validationCommand) {\n        if (validationCommand.stem) {\n          state.hints += stackSize >> 1;\n          if (value === 3 || value === 23) {\n            // vstem or vstemhm.\n            state.hasVStems = true;\n          } else if (state.hasVStems && (value === 1 || value === 18)) {\n            // Some browsers don't draw glyphs that specify vstems before\n            // hstems. As a workaround, replace hstem (1) and hstemhm (18)\n            // with a pointless vstem (3) or vstemhm (23).\n            warn(\"CFF stem hints are in wrong order\");\n            data[j - 1] = value === 1 ? 3 : 23;\n          }\n        }\n        if (stackSize < validationCommand.min) {\n          warn(\n            \"Not enough parameters for \" +\n              validationCommand.id +\n              \"; actual: \" +\n              stackSize +\n              \", expected: \" +\n              validationCommand.min\n          );\n\n          if (stackSize === 0) {\n            // Just \"fix\" the outline in replacing command by a endchar:\n            // it could lead to wrong rendering of some glyphs or not.\n            // For example, the pdf in #6132 is well-rendered.\n            data[j - 1] = 14;\n            return true;\n          }\n          return false;\n        }\n        if (state.firstStackClearing && validationCommand.stackClearing) {\n          state.firstStackClearing = false;\n          // the optional character width can be found before the first\n          // stack-clearing command arguments\n          stackSize -= validationCommand.min;\n          if (stackSize >= 2 && validationCommand.stem) {\n            // there are even amount of arguments for stem commands\n            stackSize %= 2;\n          } else if (stackSize > 1) {\n            warn(\"Found too many parameters for stack-clearing command\");\n          }\n          if (stackSize > 0) {\n            // Width can be any number since its the difference\n            // from nominalWidthX.\n            state.width = stack[stackSize - 1];\n          }\n        }\n        if (\"stackDelta\" in validationCommand) {\n          if (\"stackFn\" in validationCommand) {\n            validationCommand.stackFn(stack, stackSize);\n          }\n          stackSize += validationCommand.stackDelta;\n        } else if (\n          validationCommand.stackClearing ||\n          validationCommand.resetStack\n        ) {\n          stackSize = 0;\n        }\n      }\n    }\n    if (length < data.length) {\n      data.fill(/* endchar = */ 14, length);\n    }\n    state.stackSize = stackSize;\n    return true;\n  }\n\n  parseCharStrings({\n    charStrings,\n    localSubrIndex,\n    globalSubrIndex,\n    fdSelect,\n    fdArray,\n    privateDict,\n  }) {\n    const seacs = [];\n    const widths = [];\n    const count = charStrings.count;\n    for (let i = 0; i < count; i++) {\n      const charstring = charStrings.get(i);\n      const state = {\n        callDepth: 0,\n        stackSize: 0,\n        stack: [],\n        hints: 0,\n        firstStackClearing: true,\n        seac: null,\n        width: null,\n        hasVStems: false,\n      };\n      let valid = true;\n      let localSubrToUse = null;\n      let privateDictToUse = privateDict;\n      if (fdSelect && fdArray.length) {\n        const fdIndex = fdSelect.getFDIndex(i);\n        if (fdIndex === -1) {\n          warn(\"Glyph index is not in fd select.\");\n          valid = false;\n        }\n        if (fdIndex >= fdArray.length) {\n          warn(\"Invalid fd index for glyph index.\");\n          valid = false;\n        }\n        if (valid) {\n          privateDictToUse = fdArray[fdIndex].privateDict;\n          localSubrToUse = privateDictToUse.subrsIndex;\n        }\n      } else if (localSubrIndex) {\n        localSubrToUse = localSubrIndex;\n      }\n      valid &&= this.parseCharString(\n        state,\n        charstring,\n        localSubrToUse,\n        globalSubrIndex\n      );\n      if (state.width !== null) {\n        const nominalWidth = privateDictToUse.getByName(\"nominalWidthX\");\n        widths[i] = nominalWidth + state.width;\n      } else {\n        const defaultWidth = privateDictToUse.getByName(\"defaultWidthX\");\n        widths[i] = defaultWidth;\n      }\n      if (state.seac !== null) {\n        seacs[i] = state.seac;\n      }\n      if (!valid) {\n        // resetting invalid charstring to single 'endchar'\n        charStrings.set(i, new Uint8Array([14]));\n      }\n    }\n    return { charStrings, seacs, widths };\n  }\n\n  emptyPrivateDictionary(parentDict) {\n    const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);\n    parentDict.setByKey(18, [0, 0]);\n    parentDict.privateDict = privateDict;\n  }\n\n  parsePrivateDict(parentDict) {\n    // no private dict, do nothing\n    if (!parentDict.hasName(\"Private\")) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    const privateOffset = parentDict.getByName(\"Private\");\n    // make sure the params are formatted correctly\n    if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {\n      parentDict.removeByName(\"Private\");\n      return;\n    }\n    const size = privateOffset[0];\n    const offset = privateOffset[1];\n    // remove empty dicts or ones that refer to invalid location\n    if (size === 0 || offset >= this.bytes.length) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    // The Private DICT extends past the end of the font data, which means\n    // the embedded font is truncated; abort so the caller can substitute a\n    // system font instead of rendering blank glyphs (issue 7625).\n    if (offset + size > this.bytes.length) {\n      throw new FormatError(\"CFF Private DICT extends past end of font\");\n    }\n\n    const privateDictEnd = offset + size;\n    const dictData = this.bytes.subarray(offset, privateDictEnd);\n    const dict = this.parseDict(dictData);\n    const privateDict = this.createDict(\n      CFFPrivateDict,\n      dict,\n      parentDict.strings\n    );\n    parentDict.privateDict = privateDict;\n\n    const blueScale = privateDict.getByName(\"BlueScale\");\n    const blueShift = privateDict.getByName(\"BlueShift\");\n    const blueFuzz = privateDict.getByName(\"BlueFuzz\");\n    const expansionFactor = privateDict.getByName(\"ExpansionFactor\");\n    if (\n      blueScale === 0 &&\n      blueShift === 0 &&\n      blueFuzz === 0 &&\n      expansionFactor === 0\n    ) {\n      // Ghostscript can fail to initialize Private DICT defaults before\n      // writing them, which leaves omitted blue zone values as explicit\n      // zeroes. This has been seen in FDArray entries.\n      privateDict.setByName(\"BlueScale\", DEFAULT_BLUE_SCALE);\n      privateDict.setByName(\"BlueShift\", DEFAULT_BLUE_SHIFT);\n      privateDict.setByName(\"BlueFuzz\", DEFAULT_BLUE_FUZZ);\n    }\n\n    if (expansionFactor === 0) {\n      // Firefox doesn't render correctly such a font on Windows (see issue\n      // 15289), hence we just reset it to its default value.\n      privateDict.setByName(\"ExpansionFactor\", DEFAULT_EXPANSION_FACTOR);\n    }\n    if (blueScale > 0) {\n      // Adobe's font validator (AFDKO, see `absfont.cpp`) flags BlueScale as\n      // out-of-range when `BlueScale * maxZoneHeight` is below 0.5 or above 1.\n      // The Type 2 hinting engine in coretype/FreeType disables the lower\n      // clamp at render time because library fonts with small zones and a\n      // default BlueScale (0.039625) trip the threshold even though they\n      // render correctly. To avoid changing those fonts here, only apply\n      // the lower clamp when BlueScale is also smaller than the default,\n      // i.e. when the font genuinely deviates from the standard value.\n      // The upper clamp matches what FreeType already enforces (psblues.c)\n      // and is safe to apply unconditionally.\n      let maxZoneHeight = 0;\n      for (const zones of [\n        privateDict.getByName(\"BlueValues\"),\n        privateDict.getByName(\"OtherBlues\"),\n      ]) {\n        if (!zones) {\n          continue;\n        }\n        // BlueValues/OtherBlues are stored as deltas where the odd-indexed\n        // entries are the heights of each zone.\n        for (let i = 1; i < zones.length; i += 2) {\n          if (zones[i] > maxZoneHeight) {\n            maxZoneHeight = zones[i];\n          }\n        }\n      }\n      if (maxZoneHeight > 0) {\n        // The lower bound of AFDKO's valid window is `0.5 / maxZoneHeight`.\n        // When that bound is itself above the default BlueScale the font simply\n        // has small zones (e.g. Eurostile LT Std, or the SofiaPro fonts shipped\n        // with a near-default 0.037): even the default 0.039625 would be\n        // flagged as out-of-range, so this is the rendered intent and forcing\n        // BlueScale up only misaligns/collapses overshooting glyphs (notably\n        // with macOS's Core Text rasterizer). Only apply the lower clamp when\n        // its target does not exceed the default.\n        // Round the bound in order to avoid too long operand (issue 21466).\n        const PRECISION = 1e5;\n        const lowerBound = 0.5 / maxZoneHeight;\n        const minBlueScale =\n          lowerBound <= DEFAULT_BLUE_SCALE\n            ? Math.ceil(lowerBound * PRECISION) / PRECISION\n            : -Infinity;\n        const maxBlueScale = Math.floor(PRECISION / maxZoneHeight) / PRECISION;\n        const clamped = MathClamp(blueScale, minBlueScale, maxBlueScale);\n        if (clamped !== blueScale) {\n          privateDict.setByName(\"BlueScale\", clamped);\n        }\n      }\n    }\n\n    // Parse the Subrs index also since it's relative to the private dict.\n    if (!privateDict.getByName(\"Subrs\")) {\n      return;\n    }\n    const subrsOffset = privateDict.getByName(\"Subrs\");\n    const relativeOffset = offset + subrsOffset;\n    // Validate the offset.\n    if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {\n      this.emptyPrivateDictionary(parentDict);\n      return;\n    }\n    const subrsIndex = this.parseIndex(relativeOffset);\n    privateDict.subrsIndex = subrsIndex.obj;\n  }\n\n  parseCharsets(pos, length, strings, cid) {\n    if (pos === 0) {\n      return new CFFCharset(\n        true,\n        CFFCharsetPredefinedTypes.ISO_ADOBE,\n        ISOAdobeCharset\n      );\n    } else if (pos === 1) {\n      return new CFFCharset(\n        true,\n        CFFCharsetPredefinedTypes.EXPERT,\n        ExpertCharset\n      );\n    } else if (pos === 2) {\n      return new CFFCharset(\n        true,\n        CFFCharsetPredefinedTypes.EXPERT_SUBSET,\n        ExpertSubsetCharset\n      );\n    }\n\n    const { bytes } = this;\n    const format = bytes[pos++];\n    const charset = [cid ? 0 : \".notdef\"];\n    let id, count, i;\n\n    // subtract 1 for the .notdef glyph\n    length -= 1;\n\n    switch (format) {\n      case 0:\n        for (i = 0; i < length; i++) {\n          id = (bytes[pos++] << 8) | bytes[pos++];\n          charset.push(cid ? id : strings.get(id));\n        }\n        break;\n      case 1:\n        while (charset.length <= length) {\n          id = (bytes[pos++] << 8) | bytes[pos++];\n          count = bytes[pos++];\n          for (i = 0; i <= count; i++) {\n            charset.push(cid ? id++ : strings.get(id++));\n          }\n        }\n        break;\n      case 2:\n        while (charset.length <= length) {\n          id = (bytes[pos++] << 8) | bytes[pos++];\n          count = (bytes[pos++] << 8) | bytes[pos++];\n          for (i = 0; i <= count; i++) {\n            charset.push(cid ? id++ : strings.get(id++));\n          }\n        }\n        break;\n      default:\n        throw new FormatError(\"Unknown charset format\");\n    }\n\n    return new CFFCharset(false, format, charset);\n  }\n\n  parseEncoding(pos, properties, strings, charset) {\n    const encoding = Object.create(null);\n    const bytes = this.bytes;\n    let predefined = false;\n    let format, i, ii;\n    let raw = null;\n\n    function readSupplement() {\n      const supplementsCount = bytes[pos++];\n      for (i = 0; i < supplementsCount; i++) {\n        const code = bytes[pos++];\n        const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);\n        encoding[code] = charset.indexOf(strings.get(sid));\n      }\n    }\n\n    if (pos === 0 || pos === 1) {\n      predefined = true;\n      format = pos;\n      const baseEncoding = pos ? ExpertEncoding : StandardEncoding;\n      for (i = 0, ii = charset.length; i < ii; i++) {\n        const index = baseEncoding.indexOf(charset[i]);\n        if (index !== -1) {\n          encoding[index] = i;\n        }\n      }\n    } else {\n      const dataStart = pos;\n      format = bytes[pos++];\n      switch (format & 0x7f) {\n        case 0:\n          const glyphsCount = bytes[pos++];\n          for (i = 1; i <= glyphsCount; i++) {\n            encoding[bytes[pos++]] = i;\n          }\n          break;\n\n        case 1:\n          const rangesCount = bytes[pos++];\n          let gid = 1;\n          for (i = 0; i < rangesCount; i++) {\n            const start = bytes[pos++];\n            const left = bytes[pos++];\n            for (let j = start; j <= start + left; j++) {\n              encoding[j] = gid++;\n            }\n          }\n          break;\n\n        default:\n          throw new FormatError(`Unknown encoding format: ${format} in CFF`);\n      }\n      const dataEnd = pos;\n      if (format & 0x80) {\n        // hasSupplement\n        // The font sanitizer does not support CFF encoding with a\n        // supplement, since the encoding is not really used to map\n        // between gid to glyph, let's overwrite what is declared in\n        // the top dictionary to let the sanitizer think the font use\n        // StandardEncoding, that's a lie but that's ok.\n        bytes[dataStart] &= 0x7f;\n        readSupplement();\n      }\n      raw = bytes.subarray(dataStart, dataEnd);\n    }\n    format &= 0x7f;\n    return new CFFEncoding(predefined, format, encoding, raw);\n  }\n\n  parseFDSelect(pos, length) {\n    const bytes = this.bytes;\n    const format = bytes[pos++];\n    const fdSelect = [];\n    let i;\n\n    switch (format) {\n      case 0:\n        for (i = 0; i < length; ++i) {\n          const id = bytes[pos++];\n          fdSelect.push(id);\n        }\n        break;\n      case 3:\n        const rangesCount = (bytes[pos++] << 8) | bytes[pos++];\n        for (i = 0; i < rangesCount; ++i) {\n          let first = (bytes[pos++] << 8) | bytes[pos++];\n          if (i === 0 && first !== 0) {\n            warn(\n              \"parseFDSelect: The first range must have a first GID of 0\" +\n                \" -- trying to recover.\"\n            );\n            first = 0;\n          }\n          const fdIndex = bytes[pos++];\n          const next = (bytes[pos] << 8) | bytes[pos + 1];\n          for (let j = first; j < next; ++j) {\n            fdSelect.push(fdIndex);\n          }\n        }\n        // Advance past the sentinel(next).\n        pos += 2;\n        break;\n      default:\n        throw new FormatError(`parseFDSelect: Unknown format \"${format}\".`);\n    }\n    if (fdSelect.length !== length) {\n      throw new FormatError(\"parseFDSelect: Invalid font data.\");\n    }\n\n    return new CFFFDSelect(format, fdSelect);\n  }\n}\n\n// Compact Font Format\nclass CFF {\n  header = null;\n\n  names = [];\n\n  topDict = null;\n\n  strings = new CFFStrings();\n\n  globalSubrIndex = null;\n\n  // The following could really be per font, but since we only have one font\n  // store them here.\n  encoding = null;\n\n  charset = null;\n\n  charStrings = null;\n\n  fdArray = [];\n\n  fdSelect = null;\n\n  isCIDFont = false;\n\n  charStringCount = 0;\n\n  constructor(rawFileLength = 0) {\n    this.rawFileLength = rawFileLength;\n  }\n\n  duplicateFirstGlyph() {\n    // Browsers will not display a glyph at position 0. Typically glyph 0 is\n    // notdef, but a number of fonts put a valid glyph there so it must be\n    // duplicated and appended.\n    if (this.charStrings.count >= 65535) {\n      warn(\"Not enough space in charstrings to duplicate first glyph.\");\n      return;\n    }\n    const glyphZero = this.charStrings.get(0);\n    this.charStrings.add(glyphZero);\n    if (this.isCIDFont) {\n      this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);\n    }\n  }\n\n  hasGlyphId(id) {\n    if (id < 0 || id >= this.charStrings.count) {\n      return false;\n    }\n    const glyph = this.charStrings.get(id);\n    return glyph.length > 0;\n  }\n}\n\nclass CFFHeader {\n  constructor(major, minor, hdrSize, offSize) {\n    this.major = major;\n    this.minor = minor;\n    this.hdrSize = hdrSize;\n    this.offSize = offSize;\n  }\n}\n\nclass CFFStrings {\n  strings = [];\n\n  get(index) {\n    if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {\n      return CFFStandardStrings[index];\n    }\n    if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {\n      return this.strings[index - NUM_STANDARD_CFF_STRINGS];\n    }\n    return CFFStandardStrings[0];\n  }\n\n  getSID(str) {\n    let index = CFFStandardStrings.indexOf(str);\n    if (index !== -1) {\n      return index;\n    }\n    index = this.strings.indexOf(str);\n    if (index !== -1) {\n      return index + NUM_STANDARD_CFF_STRINGS;\n    }\n    return -1;\n  }\n\n  add(value) {\n    this.strings.push(value);\n  }\n\n  get count() {\n    return this.strings.length;\n  }\n}\n\nclass CFFIndex {\n  objects = [];\n\n  length = 0;\n\n  add(data) {\n    this.length += data.length;\n    this.objects.push(data);\n  }\n\n  set(index, data) {\n    this.length += data.length - this.objects[index].length;\n    this.objects[index] = data;\n  }\n\n  get(index) {\n    return this.objects[index];\n  }\n\n  get count() {\n    return this.objects.length;\n  }\n}\n\nclass CFFDict {\n  constructor(tables, strings) {\n    this.keyToNameMap = tables.keyToNameMap;\n    this.nameToKeyMap = tables.nameToKeyMap;\n    this.defaults = tables.defaults;\n    this.types = tables.types;\n    this.opcodes = tables.opcodes;\n    this.order = tables.order;\n    this.strings = strings;\n    this.values = Object.create(null);\n  }\n\n  // value should always be an array\n  setByKey(key, value) {\n    if (!(key in this.keyToNameMap)) {\n      return false;\n    }\n    // ignore empty values\n    if (value.length === 0) {\n      return true;\n    }\n    // Ignore invalid values (fixes bug1068432.pdf and bug1308536.pdf).\n    for (const val of value) {\n      if (isNaN(val)) {\n        warn(`Invalid CFFDict value: \"${value}\" for key \"${key}\".`);\n        return true;\n      }\n    }\n    const type = this.types[key];\n    // remove the array wrapping these types of values\n    if (type === \"num\" || type === \"sid\" || type === \"offset\") {\n      value = value[0];\n    }\n    this.values[key] = value;\n    return true;\n  }\n\n  setByName(name, value) {\n    if (!(name in this.nameToKeyMap)) {\n      throw new FormatError(`Invalid dictionary name \"${name}\"`);\n    }\n    this.values[this.nameToKeyMap[name]] = value;\n  }\n\n  hasName(name) {\n    return this.nameToKeyMap[name] in this.values;\n  }\n\n  getByName(name) {\n    if (!(name in this.nameToKeyMap)) {\n      throw new FormatError(`Invalid dictionary name ${name}\"`);\n    }\n    const key = this.nameToKeyMap[name];\n    if (!(key in this.values)) {\n      return this.defaults[key];\n    }\n    return this.values[key];\n  }\n\n  removeByName(name) {\n    delete this.values[this.nameToKeyMap[name]];\n  }\n\n  static createTables(layout) {\n    const tables = {\n      keyToNameMap: {},\n      nameToKeyMap: {},\n      defaults: {},\n      types: {},\n      opcodes: {},\n      order: [],\n    };\n    for (const entry of layout) {\n      const key = Array.isArray(entry[0])\n        ? (entry[0][0] << 8) + entry[0][1]\n        : entry[0];\n      tables.keyToNameMap[key] = entry[1];\n      tables.nameToKeyMap[entry[1]] = key;\n      tables.types[key] = entry[2];\n      tables.defaults[key] = entry[3];\n      tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];\n      tables.order.push(key);\n    }\n    return tables;\n  }\n}\n\nconst CFFTopDictLayout = [\n  [[12, 30], \"ROS\", [\"sid\", \"sid\", \"num\"], null],\n  [[12, 20], \"SyntheticBase\", \"num\", null],\n  [0, \"version\", \"sid\", null],\n  [1, \"Notice\", \"sid\", null],\n  [[12, 0], \"Copyright\", \"sid\", null],\n  [2, \"FullName\", \"sid\", null],\n  [3, \"FamilyName\", \"sid\", null],\n  [4, \"Weight\", \"sid\", null],\n  [[12, 1], \"isFixedPitch\", \"num\", 0],\n  [[12, 2], \"ItalicAngle\", \"num\", 0],\n  [[12, 3], \"UnderlinePosition\", \"num\", -100],\n  [[12, 4], \"UnderlineThickness\", \"num\", 50],\n  [[12, 5], \"PaintType\", \"num\", 0],\n  [[12, 6], \"CharstringType\", \"num\", 2],\n  // prettier-ignore\n  [[12, 7], \"FontMatrix\", [\"num\", \"num\", \"num\", \"num\", \"num\", \"num\"],\n                          [0.001, 0, 0, 0.001, 0, 0]],\n  [13, \"UniqueID\", \"num\", null],\n  [5, \"FontBBox\", [\"num\", \"num\", \"num\", \"num\"], [0, 0, 0, 0]],\n  [[12, 8], \"StrokeWidth\", \"num\", 0],\n  [14, \"XUID\", \"array\", null],\n  [15, \"charset\", \"offset\", 0],\n  [16, \"Encoding\", \"offset\", 0],\n  [17, \"CharStrings\", \"offset\", 0],\n  [18, \"Private\", [\"offset\", \"offset\"], null],\n  [[12, 21], \"PostScript\", \"sid\", null],\n  [[12, 22], \"BaseFontName\", \"sid\", null],\n  [[12, 23], \"BaseFontBlend\", \"delta\", null],\n  [[12, 31], \"CIDFontVersion\", \"num\", 0],\n  [[12, 32], \"CIDFontRevision\", \"num\", 0],\n  [[12, 33], \"CIDFontType\", \"num\", 0],\n  [[12, 34], \"CIDCount\", \"num\", 8720],\n  [[12, 35], \"UIDBase\", \"num\", null],\n  // XXX: CID Fonts on DirectWrite 6.1 only seem to work if FDSelect comes\n  // before FDArray.\n  [[12, 37], \"FDSelect\", \"offset\", null],\n  [[12, 36], \"FDArray\", \"offset\", null],\n  [[12, 38], \"FontName\", \"sid\", null],\n];\n\nclass CFFTopDict extends CFFDict {\n  static get tables() {\n    return shadow(this, \"tables\", this.createTables(CFFTopDictLayout));\n  }\n\n  constructor(strings) {\n    super(CFFTopDict.tables, strings);\n    this.privateDict = null;\n  }\n}\n\nconst CFFPrivateDictLayout = [\n  [6, \"BlueValues\", \"delta\", null],\n  [7, \"OtherBlues\", \"delta\", null],\n  [8, \"FamilyBlues\", \"delta\", null],\n  [9, \"FamilyOtherBlues\", \"delta\", null],\n  [[12, 9], \"BlueScale\", \"num\", DEFAULT_BLUE_SCALE],\n  [[12, 10], \"BlueShift\", \"num\", DEFAULT_BLUE_SHIFT],\n  [[12, 11], \"BlueFuzz\", \"num\", DEFAULT_BLUE_FUZZ],\n  [10, \"StdHW\", \"num\", null],\n  [11, \"StdVW\", \"num\", null],\n  [[12, 12], \"StemSnapH\", \"delta\", null],\n  [[12, 13], \"StemSnapV\", \"delta\", null],\n  [[12, 14], \"ForceBold\", \"num\", 0],\n  [[12, 17], \"LanguageGroup\", \"num\", 0],\n  [[12, 18], \"ExpansionFactor\", \"num\", DEFAULT_EXPANSION_FACTOR],\n  [[12, 19], \"initialRandomSeed\", \"num\", 0],\n  [20, \"defaultWidthX\", \"num\", 0],\n  [21, \"nominalWidthX\", \"num\", 0],\n  [19, \"Subrs\", \"offset\", null],\n];\n\nclass CFFPrivateDict extends CFFDict {\n  static get tables() {\n    return shadow(this, \"tables\", this.createTables(CFFPrivateDictLayout));\n  }\n\n  constructor(strings) {\n    super(CFFPrivateDict.tables, strings);\n    this.subrsIndex = null;\n  }\n}\n\nconst CFFCharsetPredefinedTypes = {\n  ISO_ADOBE: 0,\n  EXPERT: 1,\n  EXPERT_SUBSET: 2,\n};\n\nclass CFFCharset {\n  constructor(predefined, format, charset) {\n    this.predefined = predefined;\n    this.format = format;\n    this.charset = charset;\n  }\n}\n\nclass CFFEncoding {\n  constructor(predefined, format, encoding, raw) {\n    this.predefined = predefined;\n    this.format = format;\n    this.encoding = encoding;\n    this.raw = raw;\n  }\n}\n\nclass CFFFDSelect {\n  constructor(format, fdSelect) {\n    this.format = format;\n    this.fdSelect = fdSelect;\n  }\n\n  getFDIndex(glyphIndex) {\n    if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {\n      return -1;\n    }\n    return this.fdSelect[glyphIndex];\n  }\n}\n\n// Helper class to keep track of where an offset is within the data and helps\n// filling in that offset once it's known.\nclass CFFOffsetTracker {\n  offsets = Object.create(null);\n\n  isTracking(key) {\n    return key in this.offsets;\n  }\n\n  track(key, location) {\n    if (key in this.offsets) {\n      throw new FormatError(`Already tracking location of ${key}`);\n    }\n    this.offsets[key] = location;\n  }\n\n  offset(value) {\n    for (const key in this.offsets) {\n      this.offsets[key] += value;\n    }\n  }\n\n  setEntryLocation(key, values, output) {\n    if (!(key in this.offsets)) {\n      throw new FormatError(`Not tracking location of ${key}`);\n    }\n    const data = output.data;\n    const dataOffset = this.offsets[key];\n    const size = 5;\n    for (let i = 0, ii = values.length; i < ii; ++i) {\n      const offset0 = i * size + dataOffset;\n      const offset1 = offset0 + 1;\n      const offset2 = offset0 + 2;\n      const offset3 = offset0 + 3;\n      const offset4 = offset0 + 4;\n      // It's easy to screw up offsets so perform this sanity check.\n      if (\n        data[offset0] !== 0x1d ||\n        data[offset1] !== 0 ||\n        data[offset2] !== 0 ||\n        data[offset3] !== 0 ||\n        data[offset4] !== 0\n      ) {\n        throw new FormatError(\"writing to an offset that is not empty\");\n      }\n      const value = values[i];\n      data[offset0] = 0x1d;\n      data[offset1] = (value >> 24) & 0xff;\n      data[offset2] = (value >> 16) & 0xff;\n      data[offset3] = (value >> 8) & 0xff;\n      data[offset4] = value & 0xff;\n    }\n  }\n}\n\n// Takes a CFF and converts it to the binary representation.\nclass CFFCompiler {\n  constructor(cff) {\n    this.cff = cff;\n  }\n\n  compile() {\n    const cff = this.cff;\n    const output = new DataBuilder({ minLength: cff.rawFileLength });\n\n    // Compile the five entries that must be in order.\n    const header = this.compileHeader(cff.header);\n    output.setArray(header);\n\n    const nameIndex = this.compileNameIndex(cff.names);\n    output.setArray(nameIndex);\n\n    if (cff.isCIDFont) {\n      // The spec is unclear on how font matrices should relate to each other\n      // when there is one in the main top dict and the sub top dicts.\n      // Windows handles this differently than linux and osx so we have to\n      // normalize to work on all.\n      // Rules based off of some mailing list discussions:\n      // - If main font has a matrix and subfont doesn't, use the main matrix.\n      // - If no main font matrix and there is a subfont matrix, use the\n      //   subfont matrix.\n      // - If both have matrices, concat together.\n      // - If neither have matrices, use default.\n      // To make this work on all platforms we move the top matrix into each\n      // sub top dict and concat if necessary.\n      if (cff.topDict.hasName(\"FontMatrix\")) {\n        const base = cff.topDict.getByName(\"FontMatrix\");\n        cff.topDict.removeByName(\"FontMatrix\");\n        for (const subDict of cff.fdArray) {\n          let matrix = base.slice(0);\n          if (subDict.hasName(\"FontMatrix\")) {\n            matrix = Util.transform(matrix, subDict.getByName(\"FontMatrix\"));\n          }\n          subDict.setByName(\"FontMatrix\", matrix);\n        }\n      }\n    }\n\n    const xuid = cff.topDict.getByName(\"XUID\");\n    if (xuid?.length > 16) {\n      // Length of XUID array must not be greater than 16 (issue #12399).\n      cff.topDict.removeByName(\"XUID\");\n    }\n\n    cff.topDict.setByName(\"charset\", 0);\n    let compiled = this.compileTopDicts(\n      [cff.topDict],\n      output.length,\n      cff.isCIDFont\n    );\n    output.setArray(compiled.output);\n    const topDictTracker = compiled.trackers[0];\n\n    const stringIndex = this.compileStringIndex(cff.strings.strings);\n    output.setArray(stringIndex);\n\n    const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);\n    output.setArray(globalSubrIndex);\n\n    // Now start on the other entries that have no specific order.\n    if (cff.encoding && cff.topDict.hasName(\"Encoding\")) {\n      if (cff.encoding.predefined) {\n        topDictTracker.setEntryLocation(\n          \"Encoding\",\n          [cff.encoding.format],\n          output\n        );\n      } else {\n        const encoding = this.compileEncoding(cff.encoding);\n        topDictTracker.setEntryLocation(\"Encoding\", [output.length], output);\n        output.setArray(encoding);\n      }\n    }\n    const charset = this.compileCharset(\n      cff.charset,\n      cff.charStrings.count,\n      cff.strings,\n      cff.isCIDFont\n    );\n    topDictTracker.setEntryLocation(\"charset\", [output.length], output);\n    output.setArray(charset);\n\n    const charStrings = this.compileCharStrings(cff.charStrings);\n    topDictTracker.setEntryLocation(\"CharStrings\", [output.length], output);\n    output.setArray(charStrings);\n\n    if (cff.isCIDFont) {\n      // For some reason FDSelect must be in front of FDArray on windows. OSX\n      // and linux don't seem to care.\n      topDictTracker.setEntryLocation(\"FDSelect\", [output.length], output);\n      const fdSelect = this.compileFDSelect(cff.fdSelect);\n      output.setArray(fdSelect);\n      // It is unclear if the sub font dictionary can have CID related\n      // dictionary keys, but the sanitizer doesn't like them so remove them.\n      compiled = this.compileTopDicts(cff.fdArray, output.length, true);\n      topDictTracker.setEntryLocation(\"FDArray\", [output.length], output);\n      output.setArray(compiled.output);\n      const fontDictTrackers = compiled.trackers;\n\n      this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);\n    }\n\n    this.compilePrivateDicts([cff.topDict], [topDictTracker], output);\n\n    // If the font data ends with INDEX whose object data is zero-length,\n    // the sanitizer will bail out. Add a dummy byte to avoid that.\n    output.setArray([0]);\n\n    return output.data;\n  }\n\n  encodeNumber(value) {\n    if (Number.isInteger(value)) {\n      return this.encodeInteger(value);\n    }\n    return this.encodeFloat(value);\n  }\n\n  static get EncodeFloatRegExp() {\n    return shadow(\n      this,\n      \"EncodeFloatRegExp\",\n      /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/\n    );\n  }\n\n  encodeFloat(num) {\n    let value = num.toString();\n\n    // Rounding inaccurate doubles.\n    const m = CFFCompiler.EncodeFloatRegExp.exec(value);\n    if (m) {\n      const epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n      value = (Math.round(num * epsilon) / epsilon).toString();\n    }\n\n    let nibbles = \"\";\n    let i, ii;\n    for (i = 0, ii = value.length; i < ii; ++i) {\n      const a = value[i];\n      if (a === \"e\") {\n        nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n      } else if (a === \".\") {\n        nibbles += \"a\";\n      } else if (a === \"-\") {\n        nibbles += \"e\";\n      } else {\n        nibbles += a;\n      }\n    }\n    nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n    const out = [30];\n    for (i = 0, ii = nibbles.length; i < ii; i += 2) {\n      out.push(parseInt(nibbles.substring(i, i + 2), 16));\n    }\n    return out;\n  }\n\n  encodeInteger(value) {\n    let code;\n    if (value >= -107 && value <= 107) {\n      code = [value + 139];\n    } else if (value >= 108 && value <= 1131) {\n      value -= 108;\n      code = [(value >> 8) + 247, value & 0xff];\n    } else if (value >= -1131 && value <= -108) {\n      value = -value - 108;\n      code = [(value >> 8) + 251, value & 0xff];\n    } else if (value >= -32768 && value <= 32767) {\n      code = [0x1c, (value >> 8) & 0xff, value & 0xff];\n    } else {\n      code = [\n        0x1d,\n        (value >> 24) & 0xff,\n        (value >> 16) & 0xff,\n        (value >> 8) & 0xff,\n        value & 0xff,\n      ];\n    }\n    return code;\n  }\n\n  compileHeader(header) {\n    // `header.hdrSize` can be any value but we only write 4 values\n    // so header size is 4 (prevents OTS from rejecting the font).\n    return [header.major, header.minor, 4, header.offSize];\n  }\n\n  compileNameIndex(names) {\n    const nameIndex = new CFFIndex();\n    for (const name of names) {\n      // OTS doesn't allow names to be over 127 characters.\n      const length = Math.min(name.length, 127);\n      let sanitizedName = new Array(length);\n      for (let j = 0; j < length; j++) {\n        // OTS requires chars to be between a range and not certain other\n        // chars.\n        let char = name[j];\n        if (\n          char < \"!\" ||\n          char > \"~\" ||\n          char === \"[\" ||\n          char === \"]\" ||\n          char === \"(\" ||\n          char === \")\" ||\n          char === \"{\" ||\n          char === \"}\" ||\n          char === \"<\" ||\n          char === \">\" ||\n          char === \"/\" ||\n          char === \"%\"\n        ) {\n          char = \"_\";\n        }\n        sanitizedName[j] = char;\n      }\n      sanitizedName = sanitizedName.join(\"\");\n\n      if (sanitizedName === \"\") {\n        sanitizedName = \"Bad_Font_Name\";\n      }\n      nameIndex.add(stringToBytes(sanitizedName));\n    }\n    return this.compileIndex(nameIndex);\n  }\n\n  compileTopDicts(dicts, length, removeCidKeys) {\n    const fontDictTrackers = [];\n    let fdArrayIndex = new CFFIndex();\n    for (const fontDict of dicts) {\n      if (removeCidKeys) {\n        fontDict.removeByName(\"CIDFontVersion\");\n        fontDict.removeByName(\"CIDFontRevision\");\n        fontDict.removeByName(\"CIDFontType\");\n        fontDict.removeByName(\"CIDCount\");\n        fontDict.removeByName(\"UIDBase\");\n      }\n      const fontDictTracker = new CFFOffsetTracker();\n      const fontDictData = this.compileDict(fontDict, fontDictTracker);\n      fontDictTrackers.push(fontDictTracker);\n      fdArrayIndex.add(fontDictData);\n      fontDictTracker.offset(length);\n    }\n    fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);\n    return {\n      trackers: fontDictTrackers,\n      output: fdArrayIndex,\n    };\n  }\n\n  compilePrivateDicts(dicts, trackers, output) {\n    for (let i = 0, ii = dicts.length; i < ii; ++i) {\n      const fontDict = dicts[i];\n      const privateDict = fontDict.privateDict;\n      if (!privateDict || !fontDict.hasName(\"Private\")) {\n        throw new FormatError(\"There must be a private dictionary.\");\n      }\n      const privateDictTracker = new CFFOffsetTracker();\n      const privateDictData = this.compileDict(privateDict, privateDictTracker);\n\n      let outputLength = output.length;\n      privateDictTracker.offset(outputLength);\n      if (!privateDictData.length) {\n        // The private dictionary was empty, set the output length to zero to\n        // ensure the offset length isn't out of bounds in the eyes of the\n        // sanitizer.\n        outputLength = 0;\n      }\n\n      trackers[i].setEntryLocation(\n        \"Private\",\n        [privateDictData.length, outputLength],\n        output\n      );\n      output.setArray(privateDictData);\n\n      if (privateDict.subrsIndex && privateDict.hasName(\"Subrs\")) {\n        const subrs = this.compileIndex(privateDict.subrsIndex);\n        privateDictTracker.setEntryLocation(\n          \"Subrs\",\n          [privateDictData.length],\n          output\n        );\n        output.setArray(subrs);\n      }\n    }\n  }\n\n  compileDict(dict, offsetTracker) {\n    const out = [];\n    // The dictionary keys must be in a certain order.\n    for (const key of dict.order) {\n      if (!(key in dict.values)) {\n        continue;\n      }\n      let values = dict.values[key];\n      let types = dict.types[key];\n      if (!Array.isArray(types)) {\n        types = [types];\n      }\n      if (!Array.isArray(values)) {\n        values = [values];\n      }\n\n      // Remove any empty dict values.\n      if (values.length === 0) {\n        continue;\n      }\n\n      for (let j = 0, jj = types.length; j < jj; ++j) {\n        const type = types[j];\n        const value = values[j];\n        switch (type) {\n          case \"num\":\n          case \"sid\":\n            out.push(...this.encodeNumber(value));\n            break;\n          case \"offset\":\n            // For offsets we just insert a 32bit integer so we don't have to\n            // deal with figuring out the length of the offset when it gets\n            // replaced later on by the compiler.\n            const name = dict.keyToNameMap[key];\n            // Some offsets have the offset and the length, so just record the\n            // position of the first one.\n            if (!offsetTracker.isTracking(name)) {\n              offsetTracker.track(name, out.length);\n            }\n            out.push(0x1d, 0, 0, 0, 0);\n            break;\n          case \"array\":\n          case \"delta\":\n            out.push(...this.encodeNumber(value));\n            for (let k = 1, kk = values.length; k < kk; ++k) {\n              out.push(...this.encodeNumber(values[k]));\n            }\n            break;\n          default:\n            throw new FormatError(`Unknown data type of ${type}`);\n        }\n      }\n      out.push(...dict.opcodes[key]);\n    }\n    return out;\n  }\n\n  compileStringIndex(strings) {\n    const stringIndex = new CFFIndex();\n    for (const string of strings) {\n      stringIndex.add(stringToBytes(string));\n    }\n    return this.compileIndex(stringIndex);\n  }\n\n  compileCharStrings(charStrings) {\n    const charStringsIndex = new CFFIndex();\n    for (let i = 0; i < charStrings.count; i++) {\n      const glyph = charStrings.get(i);\n      // If the CharString outline is empty, replace it with .notdef to\n      // prevent OTS from rejecting the font (fixes bug1252420.pdf).\n      if (glyph.length === 0) {\n        charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));\n        continue;\n      }\n      charStringsIndex.add(glyph);\n    }\n    return this.compileIndex(charStringsIndex);\n  }\n\n  compileCharset(charset, numGlyphs, strings, isCIDFont) {\n    // Freetype requires the number of charset strings be correct and MacOS\n    // requires a valid mapping for printing.\n    let out;\n    const numGlyphsLessNotDef = numGlyphs - 1;\n    if (isCIDFont) {\n      // In a CID font, the charset is a mapping of CIDs not SIDs so just\n      // create an identity mapping.\n      // nLeft: Glyphs left in range (excluding first) (see the CFF specs).\n      // The first CID must be 1 in order to avoid a print issue on mac (see\n      // https://bugzilla.mozilla.org/1961423).\n      const nLeft = numGlyphsLessNotDef - 1;\n      out = new Uint8Array([\n        2, // format\n        0, // first CID upper byte\n        1, // first CID lower byte\n        (nLeft >> 8) & 0xff,\n        nLeft & 0xff,\n      ]);\n    } else {\n      const length = 1 + numGlyphsLessNotDef * 2;\n      out = new Uint8Array(length);\n      // format 0, skip redundant `out[0] = 0;` assignment.\n      let charsetIndex = 0;\n      const numCharsets = charset.charset.length;\n      let warned = false;\n      for (let i = 1; i < out.length; i += 2) {\n        let sid = 0;\n        if (charsetIndex < numCharsets) {\n          const name = charset.charset[charsetIndex++];\n          sid = strings.getSID(name);\n          if (sid === -1) {\n            sid = 0;\n            if (!warned) {\n              warned = true;\n              warn(`Couldn't find ${name} in CFF strings`);\n            }\n          }\n        }\n        out[i] = (sid >> 8) & 0xff;\n        out[i + 1] = sid & 0xff;\n      }\n    }\n    return out;\n  }\n\n  compileEncoding(encoding) {\n    return encoding.raw;\n  }\n\n  compileFDSelect(fdSelect) {\n    const format = fdSelect.format;\n    let out, i;\n    switch (format) {\n      case 0:\n        out = new Uint8Array(1 + fdSelect.fdSelect.length);\n        out[0] = format;\n        out.set(fdSelect.fdSelect, 1);\n        break;\n      case 3:\n        const start = 0;\n        let lastFD = fdSelect.fdSelect[0];\n        const ranges = [\n          format,\n          0, // nRanges place holder\n          0, // nRanges place holder\n          (start >> 8) & 0xff,\n          start & 0xff,\n          lastFD,\n        ];\n        for (i = 1; i < fdSelect.fdSelect.length; i++) {\n          const currentFD = fdSelect.fdSelect[i];\n          if (currentFD !== lastFD) {\n            ranges.push((i >> 8) & 0xff, i & 0xff, currentFD);\n            lastFD = currentFD;\n          }\n        }\n        // 3 bytes are pushed for every range and there are 3 header bytes.\n        const numRanges = (ranges.length - 3) / 3;\n        ranges[1] = (numRanges >> 8) & 0xff;\n        ranges[2] = numRanges & 0xff;\n        // sentinel\n        ranges.push((i >> 8) & 0xff, i & 0xff);\n        out = new Uint8Array(ranges);\n        break;\n    }\n    return out;\n  }\n\n  compileIndex(index, trackers = []) {\n    const objects = index.objects;\n    // First 2 bytes contains the number of objects contained into this index\n    const count = objects.length;\n\n    // If there is no object, just create an index.\n    if (count === 0) {\n      return new Uint8Array(2);\n    }\n\n    let lastOffset = 1,\n      i;\n    for (i = 0; i < count; ++i) {\n      lastOffset += objects[i].length;\n    }\n\n    let offsetSize;\n    if (lastOffset < 0x100) {\n      offsetSize = 1;\n    } else if (lastOffset < 0x10000) {\n      offsetSize = 2;\n    } else if (lastOffset < 0x1000000) {\n      offsetSize = 3;\n    } else {\n      offsetSize = 4;\n    }\n\n    const data = new Uint8Array(2 + offsetSize * (count + 1) + lastOffset);\n    let pos = 0;\n\n    data[pos++] = (count >> 8) & 0xff;\n    data[pos++] = count & 0xff;\n\n    // Next byte contains the offset size use to reference object in the file\n    data[pos++] = offsetSize;\n\n    // Add another offset after this one because we need a new offset\n    let relativeOffset = 1;\n    for (i = 0; i < count + 1; i++) {\n      if (offsetSize === 1) {\n        data[pos++] = relativeOffset & 0xff;\n      } else if (offsetSize === 2) {\n        data[pos++] = (relativeOffset >> 8) & 0xff;\n        data[pos++] = relativeOffset & 0xff;\n      } else if (offsetSize === 3) {\n        data[pos++] = (relativeOffset >> 16) & 0xff;\n        data[pos++] = (relativeOffset >> 8) & 0xff;\n        data[pos++] = relativeOffset & 0xff;\n      } else {\n        data[pos++] = (relativeOffset >>> 24) & 0xff;\n        data[pos++] = (relativeOffset >> 16) & 0xff;\n        data[pos++] = (relativeOffset >> 8) & 0xff;\n        data[pos++] = relativeOffset & 0xff;\n      }\n\n      if (objects[i]) {\n        relativeOffset += objects[i].length;\n      }\n    }\n\n    for (i = 0; i < count; i++) {\n      // Notify the tracker where the object will be offset in the data.\n      trackers[i]?.offset(pos);\n\n      data.set(objects[i], pos);\n      pos += objects[i].length;\n    }\n    return data;\n  }\n}\n\nexport {\n  CFF,\n  CFFCharset,\n  CFFCompiler,\n  CFFFDSelect,\n  CFFHeader,\n  CFFIndex,\n  CFFParser,\n  CFFPrivateDict,\n  CFFStandardStrings,\n  CFFStrings,\n  CFFTopDict,\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getLookupTableFactory } from \"./core_utils.js\";\nimport { normalizeFontName } from \"./fonts_utils.js\";\n\n/**\n * Hold a map of decoded fonts and of the standard fourteen Type1\n * fonts and their acronyms.\n */\nconst getStdFontMap = getLookupTableFactory(function (t) {\n  // The standard 14 fonts:\n  t[\"Times-Roman\"] = \"Times-Roman\";\n  t.Helvetica = \"Helvetica\";\n  t.Courier = \"Courier\";\n  t.Symbol = \"Symbol\";\n  t[\"Times-Bold\"] = \"Times-Bold\";\n  t[\"Helvetica-Bold\"] = \"Helvetica-Bold\";\n  t[\"Courier-Bold\"] = \"Courier-Bold\";\n  t.ZapfDingbats = \"ZapfDingbats\";\n  t[\"Times-Italic\"] = \"Times-Italic\";\n  t[\"Helvetica-Oblique\"] = \"Helvetica-Oblique\";\n  t[\"Courier-Oblique\"] = \"Courier-Oblique\";\n  t[\"Times-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"Helvetica-BoldOblique\"] = \"Helvetica-BoldOblique\";\n  t[\"Courier-BoldOblique\"] = \"Courier-BoldOblique\";\n\n  // Extra mappings\n  t.ArialNarrow = \"Helvetica\";\n  t[\"ArialNarrow-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialNarrow-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialNarrow-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialBlack = \"Helvetica\";\n  t[\"ArialBlack-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialBlack-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialBlack-Italic\"] = \"Helvetica-Oblique\";\n  t[\"Arial-Black\"] = \"Helvetica\";\n  t[\"Arial-Black-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-Black-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-Black-Italic\"] = \"Helvetica-Oblique\";\n  t.Arial = \"Helvetica\";\n  t[\"Arial-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialMT = \"Helvetica\";\n  t[\"Arial-BoldItalicMT\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-BoldMT\"] = \"Helvetica-Bold\";\n  t[\"Arial-ItalicMT\"] = \"Helvetica-Oblique\";\n  t[\"Arial-BoldItalicMT-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Arial-BoldMT-Bold\"] = \"Helvetica-Bold\";\n  t[\"Arial-ItalicMT-Italic\"] = \"Helvetica-Oblique\";\n  t.ArialUnicodeMS = \"Helvetica\";\n  t[\"ArialUnicodeMS-Bold\"] = \"Helvetica-Bold\";\n  t[\"ArialUnicodeMS-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ArialUnicodeMS-Italic\"] = \"Helvetica-Oblique\";\n  t[\"Courier-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"Courier-Italic\"] = \"Courier-Oblique\";\n  t.CourierNew = \"Courier\";\n  t[\"CourierNew-Bold\"] = \"Courier-Bold\";\n  t[\"CourierNew-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"CourierNew-Italic\"] = \"Courier-Oblique\";\n  t[\"CourierNewPS-BoldItalicMT\"] = \"Courier-BoldOblique\";\n  t[\"CourierNewPS-BoldMT\"] = \"Courier-Bold\";\n  t[\"CourierNewPS-ItalicMT\"] = \"Courier-Oblique\";\n  t.CourierNewPSMT = \"Courier\";\n  t[\"Helvetica-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Helvetica-Italic\"] = \"Helvetica-Oblique\";\n  t[\"HelveticaLTStd-Bold\"] = \"Helvetica-Bold\";\n  t[\"Symbol-Bold\"] = \"Symbol\";\n  t[\"Symbol-BoldItalic\"] = \"Symbol\";\n  t[\"Symbol-Italic\"] = \"Symbol\";\n  t.TimesNewRoman = \"Times-Roman\";\n  t[\"TimesNewRoman-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRoman-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRoman-Italic\"] = \"Times-Italic\";\n  t.TimesNewRomanPS = \"Times-Roman\";\n  t[\"TimesNewRomanPS-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPS-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPS-BoldItalicMT\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPS-BoldMT\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPS-Italic\"] = \"Times-Italic\";\n  t[\"TimesNewRomanPS-ItalicMT\"] = \"Times-Italic\";\n  t.TimesNewRomanPSMT = \"Times-Roman\";\n  t[\"TimesNewRomanPSMT-Bold\"] = \"Times-Bold\";\n  t[\"TimesNewRomanPSMT-BoldItalic\"] = \"Times-BoldItalic\";\n  t[\"TimesNewRomanPSMT-Italic\"] = \"Times-Italic\";\n});\n\n// Contains mapping for standard fonts and xfa fonts.\nconst getFontNameToFileMap = getLookupTableFactory(function (t) {\n  t.Courier = \"FoxitFixed.pfb\";\n  t[\"Courier-Bold\"] = \"FoxitFixedBold.pfb\";\n  t[\"Courier-BoldOblique\"] = \"FoxitFixedBoldItalic.pfb\";\n  t[\"Courier-Oblique\"] = \"FoxitFixedItalic.pfb\";\n  t.Helvetica = \"LiberationSans-Regular.ttf\";\n  t[\"Helvetica-Bold\"] = \"LiberationSans-Bold.ttf\";\n  t[\"Helvetica-BoldOblique\"] = \"LiberationSans-BoldItalic.ttf\";\n  t[\"Helvetica-Oblique\"] = \"LiberationSans-Italic.ttf\";\n  t[\"Times-Roman\"] = \"FoxitSerif.pfb\";\n  t[\"Times-Bold\"] = \"FoxitSerifBold.pfb\";\n  t[\"Times-BoldItalic\"] = \"FoxitSerifBoldItalic.pfb\";\n  t[\"Times-Italic\"] = \"FoxitSerifItalic.pfb\";\n  t.Symbol = \"FoxitSymbol.pfb\";\n  t.ZapfDingbats = \"FoxitDingbats.pfb\";\n  t[\"LiberationSans-Regular\"] = \"LiberationSans-Regular.ttf\";\n  t[\"LiberationSans-Bold\"] = \"LiberationSans-Bold.ttf\";\n  t[\"LiberationSans-Italic\"] = \"LiberationSans-Italic.ttf\";\n  t[\"LiberationSans-BoldItalic\"] = \"LiberationSans-BoldItalic.ttf\";\n});\n\n/**\n * Holds the map of the non-standard fonts that might be included as\n * a standard fonts without glyph data.\n */\nconst getNonStdFontMap = getLookupTableFactory(function (t) {\n  t.Calibri = \"Helvetica\";\n  t[\"Calibri-Bold\"] = \"Helvetica-Bold\";\n  t[\"Calibri-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"Calibri-Italic\"] = \"Helvetica-Oblique\";\n  t.CenturyGothic = \"Helvetica\";\n  t[\"CenturyGothic-Bold\"] = \"Helvetica-Bold\";\n  t[\"CenturyGothic-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"CenturyGothic-Italic\"] = \"Helvetica-Oblique\";\n  t.ComicSansMS = \"Comic Sans MS\";\n  t[\"ComicSansMS-Bold\"] = \"Comic Sans MS-Bold\";\n  t[\"ComicSansMS-BoldItalic\"] = \"Comic Sans MS-BoldItalic\";\n  t[\"ComicSansMS-Italic\"] = \"Comic Sans MS-Italic\";\n  t.GillSansMT = \"Helvetica\";\n  t[\"GillSansMT-Bold\"] = \"Helvetica-Bold\";\n  t[\"GillSansMT-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"GillSansMT-Italic\"] = \"Helvetica-Oblique\";\n  t.Impact = \"Helvetica\";\n  t[\"ItcSymbol-Bold\"] = \"Helvetica-Bold\";\n  t[\"ItcSymbol-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"ItcSymbol-Book\"] = \"Helvetica\";\n  t[\"ItcSymbol-BookItalic\"] = \"Helvetica-Oblique\";\n  t[\"ItcSymbol-Medium\"] = \"Helvetica\";\n  t[\"ItcSymbol-MediumItalic\"] = \"Helvetica-Oblique\";\n  t.LucidaConsole = \"Courier\";\n  t[\"LucidaConsole-Bold\"] = \"Courier-Bold\";\n  t[\"LucidaConsole-BoldItalic\"] = \"Courier-BoldOblique\";\n  t[\"LucidaConsole-Italic\"] = \"Courier-Oblique\";\n  t[\"LucidaSans-Demi\"] = \"Helvetica-Bold\";\n  t[\"MS-Gothic\"] = \"MS Gothic\";\n  t[\"MS-Gothic-Bold\"] = \"MS Gothic-Bold\";\n  t[\"MS-Gothic-BoldItalic\"] = \"MS Gothic-BoldItalic\";\n  t[\"MS-Gothic-Italic\"] = \"MS Gothic-Italic\";\n  t[\"MS-Mincho\"] = \"MS Mincho\";\n  t[\"MS-Mincho-Bold\"] = \"MS Mincho-Bold\";\n  t[\"MS-Mincho-BoldItalic\"] = \"MS Mincho-BoldItalic\";\n  t[\"MS-Mincho-Italic\"] = \"MS Mincho-Italic\";\n  t[\"MS-PGothic\"] = \"MS PGothic\";\n  t[\"MS-PGothic-Bold\"] = \"MS PGothic-Bold\";\n  t[\"MS-PGothic-BoldItalic\"] = \"MS PGothic-BoldItalic\";\n  t[\"MS-PGothic-Italic\"] = \"MS PGothic-Italic\";\n  t[\"MS-PMincho\"] = \"MS PMincho\";\n  t[\"MS-PMincho-Bold\"] = \"MS PMincho-Bold\";\n  t[\"MS-PMincho-BoldItalic\"] = \"MS PMincho-BoldItalic\";\n  t[\"MS-PMincho-Italic\"] = \"MS PMincho-Italic\";\n  t.NuptialScript = \"Times-Italic\";\n  t.SegoeUISymbol = \"Helvetica\";\n  t.TrebuchetMS = \"Helvetica\";\n  t[\"TrebuchetMS-Bold\"] = \"Helvetica-Bold\";\n  t[\"TrebuchetMS-BoldItalic\"] = \"Helvetica-BoldOblique\";\n  t[\"TrebuchetMS-Italic\"] = \"Helvetica-Oblique\";\n});\n\nconst getSerifFonts = getLookupTableFactory(function (t) {\n  t[\"Adobe Jenson\"] = true;\n  t[\"Adobe Text\"] = true;\n  t.Albertus = true;\n  t.Aldus = true;\n  t.Alexandria = true;\n  t.Algerian = true;\n  t[\"American Typewriter\"] = true;\n  t.Antiqua = true;\n  t.Apex = true;\n  t.Arno = true;\n  t.Aster = true;\n  t.Aurora = true;\n  t.Baskerville = true;\n  t.Bell = true;\n  t.Bembo = true;\n  t[\"Bembo Schoolbook\"] = true;\n  t.Benguiat = true;\n  t[\"Berkeley Old Style\"] = true;\n  t[\"Bernhard Modern\"] = true;\n  t[\"Berthold City\"] = true;\n  t.Bodoni = true;\n  t[\"Bauer Bodoni\"] = true;\n  t[\"Book Antiqua\"] = true;\n  t.Bookman = true;\n  t[\"Bordeaux Roman\"] = true;\n  t[\"Californian FB\"] = true;\n  t.Calisto = true;\n  t.Calvert = true;\n  t.Capitals = true;\n  t.Cambria = true;\n  t.Cartier = true;\n  t.Caslon = true;\n  t.Catull = true;\n  t.Centaur = true;\n  t[\"Century Old Style\"] = true;\n  t[\"Century Schoolbook\"] = true;\n  t.Chaparral = true;\n  t[\"Charis SIL\"] = true;\n  t.Cheltenham = true;\n  t[\"Cholla Slab\"] = true;\n  t.Clarendon = true;\n  t.Clearface = true;\n  t.Cochin = true;\n  t.Colonna = true;\n  t[\"Computer Modern\"] = true;\n  t[\"Concrete Roman\"] = true;\n  t.Constantia = true;\n  t[\"Cooper Black\"] = true;\n  t.Corona = true;\n  t.Ecotype = true;\n  t.Egyptienne = true;\n  t.Elephant = true;\n  t.Excelsior = true;\n  t.Fairfield = true;\n  t[\"FF Scala\"] = true;\n  t.Folkard = true;\n  t.Footlight = true;\n  t.FreeSerif = true;\n  t[\"Friz Quadrata\"] = true;\n  t.Garamond = true;\n  t.Gentium = true;\n  t.Georgia = true;\n  t.Gloucester = true;\n  t[\"Goudy Old Style\"] = true;\n  t[\"Goudy Schoolbook\"] = true;\n  t[\"Goudy Pro Font\"] = true;\n  t.Granjon = true;\n  t[\"Guardian Egyptian\"] = true;\n  t.Heather = true;\n  t.Hercules = true;\n  t[\"High Tower Text\"] = true;\n  t.Hiroshige = true;\n  t[\"Hoefler Text\"] = true;\n  t[\"Humana Serif\"] = true;\n  t.Imprint = true;\n  t[\"Ionic No. 5\"] = true;\n  t.Janson = true;\n  t.Joanna = true;\n  t.Korinna = true;\n  t.Lexicon = true;\n  t.LiberationSerif = true;\n  t[\"Liberation Serif\"] = true;\n  t[\"Linux Libertine\"] = true;\n  t.Literaturnaya = true;\n  t.Lucida = true;\n  t[\"Lucida Bright\"] = true;\n  t.Melior = true;\n  t.Memphis = true;\n  t.Miller = true;\n  t.Minion = true;\n  t.Modern = true;\n  t[\"Mona Lisa\"] = true;\n  t[\"Mrs Eaves\"] = true;\n  t[\"MS Serif\"] = true;\n  t[\"Museo Slab\"] = true;\n  t[\"New York\"] = true;\n  t[\"Nimbus Roman\"] = true;\n  t[\"NPS Rawlinson Roadway\"] = true;\n  t.NuptialScript = true;\n  t.Palatino = true;\n  t.Perpetua = true;\n  t.Plantin = true;\n  t[\"Plantin Schoolbook\"] = true;\n  t.Playbill = true;\n  t[\"Poor Richard\"] = true;\n  t[\"Rawlinson Roadway\"] = true;\n  t.Renault = true;\n  t.Requiem = true;\n  t.Rockwell = true;\n  t.Roman = true;\n  t[\"Rotis Serif\"] = true;\n  t.Sabon = true;\n  t.Scala = true;\n  t.Seagull = true;\n  t.Sistina = true;\n  t.Souvenir = true;\n  t.STIX = true;\n  t[\"Stone Informal\"] = true;\n  t[\"Stone Serif\"] = true;\n  t.Sylfaen = true;\n  t.Times = true;\n  t.Trajan = true;\n  t[\"Trinité\"] = true;\n  t[\"Trump Mediaeval\"] = true;\n  t.Utopia = true;\n  t[\"Vale Type\"] = true;\n  t[\"Bitstream Vera\"] = true;\n  t[\"Vera Serif\"] = true;\n  t.Versailles = true;\n  t.Wanted = true;\n  t.Weiss = true;\n  t[\"Wide Latin\"] = true;\n  t.Windsor = true;\n  t.XITS = true;\n});\n\nconst getSymbolsFonts = getLookupTableFactory(function (t) {\n  t.Dingbats = true;\n  t.Symbol = true;\n  t.ZapfDingbats = true;\n  t.Wingdings = true;\n  t[\"Wingdings-Bold\"] = true;\n  t[\"Wingdings-Regular\"] = true;\n});\n\n// Glyph map for well-known standard fonts. Sometimes Ghostscript uses CID\n// fonts, but does not embed the CID to GID mapping. The mapping is incomplete\n// for all glyphs, but common for some set of the standard fonts.\nconst getGlyphMapForStandardFonts = getLookupTableFactory(function (t) {\n  t[2] = 10;\n  t[3] = 32;\n  t[4] = 33;\n  t[5] = 34;\n  t[6] = 35;\n  t[7] = 36;\n  t[8] = 37;\n  t[9] = 38;\n  t[10] = 39;\n  t[11] = 40;\n  t[12] = 41;\n  t[13] = 42;\n  t[14] = 43;\n  t[15] = 44;\n  t[16] = 45;\n  t[17] = 46;\n  t[18] = 47;\n  t[19] = 48;\n  t[20] = 49;\n  t[21] = 50;\n  t[22] = 51;\n  t[23] = 52;\n  t[24] = 53;\n  t[25] = 54;\n  t[26] = 55;\n  t[27] = 56;\n  t[28] = 57;\n  t[29] = 58;\n  t[30] = 894;\n  t[31] = 60;\n  t[32] = 61;\n  t[33] = 62;\n  t[34] = 63;\n  t[35] = 64;\n  t[36] = 65;\n  t[37] = 66;\n  t[38] = 67;\n  t[39] = 68;\n  t[40] = 69;\n  t[41] = 70;\n  t[42] = 71;\n  t[43] = 72;\n  t[44] = 73;\n  t[45] = 74;\n  t[46] = 75;\n  t[47] = 76;\n  t[48] = 77;\n  t[49] = 78;\n  t[50] = 79;\n  t[51] = 80;\n  t[52] = 81;\n  t[53] = 82;\n  t[54] = 83;\n  t[55] = 84;\n  t[56] = 85;\n  t[57] = 86;\n  t[58] = 87;\n  t[59] = 88;\n  t[60] = 89;\n  t[61] = 90;\n  t[62] = 91;\n  t[63] = 92;\n  t[64] = 93;\n  t[65] = 94;\n  t[66] = 95;\n  t[67] = 96;\n  t[68] = 97;\n  t[69] = 98;\n  t[70] = 99;\n  t[71] = 100;\n  t[72] = 101;\n  t[73] = 102;\n  t[74] = 103;\n  t[75] = 104;\n  t[76] = 105;\n  t[77] = 106;\n  t[78] = 107;\n  t[79] = 108;\n  t[80] = 109;\n  t[81] = 110;\n  t[82] = 111;\n  t[83] = 112;\n  t[84] = 113;\n  t[85] = 114;\n  t[86] = 115;\n  t[87] = 116;\n  t[88] = 117;\n  t[89] = 118;\n  t[90] = 119;\n  t[91] = 120;\n  t[92] = 121;\n  t[93] = 122;\n  t[94] = 123;\n  t[95] = 124;\n  t[96] = 125;\n  t[97] = 126;\n  t[98] = 196;\n  t[99] = 197;\n  t[100] = 199;\n  t[101] = 201;\n  t[102] = 209;\n  t[103] = 214;\n  t[104] = 220;\n  t[105] = 225;\n  t[106] = 224;\n  t[107] = 226;\n  t[108] = 228;\n  t[109] = 227;\n  t[110] = 229;\n  t[111] = 231;\n  t[112] = 233;\n  t[113] = 232;\n  t[114] = 234;\n  t[115] = 235;\n  t[116] = 237;\n  t[117] = 236;\n  t[118] = 238;\n  t[119] = 239;\n  t[120] = 241;\n  t[121] = 243;\n  t[122] = 242;\n  t[123] = 244;\n  t[124] = 246;\n  t[125] = 245;\n  t[126] = 250;\n  t[127] = 249;\n  t[128] = 251;\n  t[129] = 252;\n  t[130] = 8224;\n  t[131] = 176;\n  t[132] = 162;\n  t[133] = 163;\n  t[134] = 167;\n  t[135] = 8226;\n  t[136] = 182;\n  t[137] = 223;\n  t[138] = 174;\n  t[139] = 169;\n  t[140] = 8482;\n  t[141] = 180;\n  t[142] = 168;\n  t[143] = 8800;\n  t[144] = 198;\n  t[145] = 216;\n  t[146] = 8734;\n  t[147] = 177;\n  t[148] = 8804;\n  t[149] = 8805;\n  t[150] = 165;\n  t[151] = 181;\n  t[152] = 8706;\n  t[153] = 8721;\n  t[154] = 8719;\n  t[156] = 8747;\n  t[157] = 170;\n  t[158] = 186;\n  t[159] = 8486;\n  t[160] = 230;\n  t[161] = 248;\n  t[162] = 191;\n  t[163] = 161;\n  t[164] = 172;\n  t[165] = 8730;\n  t[166] = 402;\n  t[167] = 8776;\n  t[168] = 8710;\n  t[169] = 171;\n  t[170] = 187;\n  t[171] = 8230;\n  t[179] = 8220;\n  t[180] = 8221;\n  t[181] = 8216;\n  t[182] = 8217;\n  t[200] = 193;\n  t[203] = 205;\n  t[207] = 211;\n  t[210] = 218;\n  t[223] = 711;\n  t[224] = 321;\n  t[225] = 322;\n  t[226] = 352;\n  t[227] = 353;\n  t[228] = 381;\n  t[229] = 382;\n  t[233] = 221;\n  t[234] = 253;\n  t[252] = 263;\n  t[253] = 268;\n  t[254] = 269;\n  t[258] = 258;\n  t[260] = 260;\n  t[261] = 261;\n  t[265] = 280;\n  t[266] = 281;\n  t[267] = 282;\n  t[268] = 283;\n  t[269] = 313;\n  t[275] = 323;\n  t[276] = 324;\n  t[278] = 328;\n  t[283] = 344;\n  t[284] = 345;\n  t[285] = 346;\n  t[286] = 347;\n  t[292] = 367;\n  t[295] = 377;\n  t[296] = 378;\n  t[298] = 380;\n  t[305] = 963;\n  t[306] = 964;\n  t[307] = 966;\n  t[308] = 8215;\n  t[309] = 8252;\n  t[310] = 8319;\n  t[311] = 8359;\n  t[312] = 8592;\n  t[313] = 8593;\n  t[337] = 9552;\n  t[493] = 1039;\n  t[494] = 1040;\n  t[570] = 1040;\n  t[571] = 1041;\n  t[572] = 1042;\n  t[573] = 1043;\n  t[574] = 1044;\n  t[575] = 1045;\n  t[576] = 1046;\n  t[577] = 1047;\n  t[578] = 1048;\n  t[579] = 1049;\n  t[580] = 1050;\n  t[581] = 1051;\n  t[582] = 1052;\n  t[583] = 1053;\n  t[584] = 1054;\n  t[585] = 1055;\n  t[586] = 1056;\n  t[587] = 1057;\n  t[588] = 1058;\n  t[589] = 1059;\n  t[590] = 1060;\n  t[591] = 1061;\n  t[592] = 1062;\n  t[593] = 1063;\n  t[594] = 1064;\n  t[595] = 1065;\n  t[596] = 1066;\n  t[597] = 1067;\n  t[598] = 1068;\n  t[599] = 1069;\n  t[600] = 1070;\n  t[601] = 1071;\n  t[602] = 1072;\n  t[603] = 1073;\n  t[604] = 1074;\n  t[605] = 1075;\n  t[606] = 1076;\n  t[607] = 1077;\n  t[608] = 1078;\n  t[609] = 1079;\n  t[610] = 1080;\n  t[611] = 1081;\n  t[612] = 1082;\n  t[613] = 1083;\n  t[614] = 1084;\n  t[615] = 1085;\n  t[616] = 1086;\n  t[617] = 1087;\n  t[618] = 1088;\n  t[619] = 1089;\n  t[620] = 1090;\n  t[621] = 1091;\n  t[622] = 1092;\n  t[623] = 1093;\n  t[624] = 1094;\n  t[625] = 1095;\n  t[626] = 1096;\n  t[627] = 1097;\n  t[628] = 1098;\n  t[629] = 1099;\n  t[630] = 1100;\n  t[631] = 1101;\n  t[632] = 1102;\n  t[633] = 1103;\n  t[672] = 1488;\n  t[673] = 1489;\n  t[674] = 1490;\n  t[675] = 1491;\n  t[676] = 1492;\n  t[677] = 1493;\n  t[678] = 1494;\n  t[679] = 1495;\n  t[680] = 1496;\n  t[681] = 1497;\n  t[682] = 1498;\n  t[683] = 1499;\n  t[684] = 1500;\n  t[685] = 1501;\n  t[686] = 1502;\n  t[687] = 1503;\n  t[688] = 1504;\n  t[689] = 1505;\n  t[690] = 1506;\n  t[691] = 1507;\n  t[692] = 1508;\n  t[693] = 1509;\n  t[694] = 1510;\n  t[695] = 1511;\n  t[696] = 1512;\n  t[697] = 1513;\n  t[698] = 1514;\n  t[705] = 1524;\n  t[706] = 8362;\n  t[710] = 64288;\n  t[711] = 64298;\n  t[759] = 1617;\n  t[761] = 1776;\n  t[763] = 1778;\n  t[775] = 1652;\n  t[777] = 1764;\n  t[778] = 1780;\n  t[779] = 1781;\n  t[780] = 1782;\n  t[782] = 771;\n  t[783] = 64726;\n  t[786] = 8363;\n  t[788] = 8532;\n  t[790] = 768;\n  t[791] = 769;\n  t[792] = 768;\n  t[795] = 803;\n  t[797] = 64336;\n  t[798] = 64337;\n  t[799] = 64342;\n  t[800] = 64343;\n  t[801] = 64344;\n  t[802] = 64345;\n  t[803] = 64362;\n  t[804] = 64363;\n  t[805] = 64364;\n  t[2424] = 7821;\n  t[2425] = 7822;\n  t[2426] = 7823;\n  t[2427] = 7824;\n  t[2428] = 7825;\n  t[2429] = 7826;\n  t[2430] = 7827;\n  t[2433] = 7682;\n  t[2678] = 8045;\n  t[2679] = 8046;\n  t[2830] = 1552;\n  t[2838] = 686;\n  t[2840] = 751;\n  t[2842] = 753;\n  t[2843] = 754;\n  t[2844] = 755;\n  t[2846] = 757;\n  t[2856] = 767;\n  t[2857] = 848;\n  t[2858] = 849;\n  t[2862] = 853;\n  t[2863] = 854;\n  t[2864] = 855;\n  t[2865] = 861;\n  t[2866] = 862;\n  t[2906] = 7460;\n  t[2908] = 7462;\n  t[2909] = 7463;\n  t[2910] = 7464;\n  t[2912] = 7466;\n  t[2913] = 7467;\n  t[2914] = 7468;\n  t[2916] = 7470;\n  t[2917] = 7471;\n  t[2918] = 7472;\n  t[2920] = 7474;\n  t[2921] = 7475;\n  t[2922] = 7476;\n  t[2924] = 7478;\n  t[2925] = 7479;\n  t[2926] = 7480;\n  t[2928] = 7482;\n  t[2929] = 7483;\n  t[2930] = 7484;\n  t[2932] = 7486;\n  t[2933] = 7487;\n  t[2934] = 7488;\n  t[2936] = 7490;\n  t[2937] = 7491;\n  t[2938] = 7492;\n  t[2940] = 7494;\n  t[2941] = 7495;\n  t[2942] = 7496;\n  t[2944] = 7498;\n  t[2946] = 7500;\n  t[2948] = 7502;\n  t[2950] = 7504;\n  t[2951] = 7505;\n  t[2952] = 7506;\n  t[2954] = 7508;\n  t[2955] = 7509;\n  t[2956] = 7510;\n  t[2958] = 7512;\n  t[2959] = 7513;\n  t[2960] = 7514;\n  t[2962] = 7516;\n  t[2963] = 7517;\n  t[2964] = 7518;\n  t[2966] = 7520;\n  t[2967] = 7521;\n  t[2968] = 7522;\n  t[2970] = 7524;\n  t[2971] = 7525;\n  t[2972] = 7526;\n  t[2974] = 7528;\n  t[2975] = 7529;\n  t[2976] = 7530;\n  t[2978] = 1537;\n  t[2979] = 1538;\n  t[2980] = 1539;\n  t[2982] = 1549;\n  t[2983] = 1551;\n  t[2984] = 1552;\n  t[2986] = 1554;\n  t[2987] = 1555;\n  t[2988] = 1556;\n  t[2990] = 1623;\n  t[2991] = 1624;\n  t[2995] = 1775;\n  t[2999] = 1791;\n  t[3002] = 64290;\n  t[3003] = 64291;\n  t[3004] = 64292;\n  t[3006] = 64294;\n  t[3007] = 64295;\n  t[3008] = 64296;\n  t[3011] = 1900;\n  t[3014] = 8223;\n  t[3015] = 8244;\n  t[3017] = 7532;\n  t[3018] = 7533;\n  t[3019] = 7534;\n  t[3075] = 7590;\n  t[3076] = 7591;\n  t[3079] = 7594;\n  t[3080] = 7595;\n  t[3083] = 7598;\n  t[3084] = 7599;\n  t[3087] = 7602;\n  t[3088] = 7603;\n  t[3091] = 7606;\n  t[3092] = 7607;\n  t[3095] = 7610;\n  t[3096] = 7611;\n  t[3099] = 7614;\n  t[3100] = 7615;\n  t[3103] = 7618;\n  t[3104] = 7619;\n  t[3107] = 8337;\n  t[3108] = 8338;\n  t[3116] = 1884;\n  t[3119] = 1885;\n  t[3120] = 1885;\n  t[3123] = 1886;\n  t[3124] = 1886;\n  t[3127] = 1887;\n  t[3128] = 1887;\n  t[3131] = 1888;\n  t[3132] = 1888;\n  t[3135] = 1889;\n  t[3136] = 1889;\n  t[3139] = 1890;\n  t[3140] = 1890;\n  t[3143] = 1891;\n  t[3144] = 1891;\n  t[3147] = 1892;\n  t[3148] = 1892;\n  t[3153] = 580;\n  t[3154] = 581;\n  t[3157] = 584;\n  t[3158] = 585;\n  t[3161] = 588;\n  t[3162] = 589;\n  t[3165] = 891;\n  t[3166] = 892;\n  t[3169] = 1274;\n  t[3170] = 1275;\n  t[3173] = 1278;\n  t[3174] = 1279;\n  t[3181] = 7622;\n  t[3182] = 7623;\n  t[3282] = 11799;\n  t[3316] = 578;\n  t[3379] = 42785;\n  t[3393] = 1159;\n  t[3416] = 8377;\n});\n\n// The glyph map for ArialBlack differs slightly from the glyph map used for\n// other well-known standard fonts. Hence we use this (incomplete) CID to GID\n// mapping to adjust the glyph map for non-embedded ArialBlack fonts.\nconst getSupplementalGlyphMapForArialBlack = getLookupTableFactory(\n  function (t) {\n    t[227] = 322;\n    t[264] = 261;\n    t[291] = 346;\n  }\n);\n\n// The glyph map for Calibri (a Windows font) differs from the glyph map used\n// in the standard fonts. Hence we use this (incomplete) CID to GID mapping to\n// adjust the glyph map for non-embedded Calibri fonts.\nconst getSupplementalGlyphMapForCalibri = getLookupTableFactory(function (t) {\n  t[1] = 32;\n  t[4] = 65;\n  t[5] = 192;\n  t[6] = 193;\n  t[9] = 196;\n  t[17] = 66;\n  t[18] = 67;\n  t[21] = 268;\n  t[24] = 68;\n  t[28] = 69;\n  t[29] = 200;\n  t[30] = 201;\n  t[32] = 282;\n  t[38] = 70;\n  t[39] = 71;\n  t[44] = 72;\n  t[47] = 73;\n  t[48] = 204;\n  t[49] = 205;\n  t[58] = 74;\n  t[60] = 75;\n  t[62] = 76;\n  t[68] = 77;\n  t[69] = 78;\n  t[75] = 79;\n  t[76] = 210;\n  t[80] = 214;\n  t[87] = 80;\n  t[89] = 81;\n  t[90] = 82;\n  t[92] = 344;\n  t[94] = 83;\n  t[97] = 352;\n  t[100] = 84;\n  t[104] = 85;\n  t[109] = 220;\n  t[115] = 86;\n  t[116] = 87;\n  t[121] = 88;\n  t[122] = 89;\n  t[124] = 221;\n  t[127] = 90;\n  t[129] = 381;\n  t[258] = 97;\n  t[259] = 224;\n  t[260] = 225;\n  t[263] = 228;\n  t[268] = 261;\n  t[271] = 98;\n  t[272] = 99;\n  t[273] = 263;\n  t[275] = 269;\n  t[282] = 100;\n  t[286] = 101;\n  t[287] = 232;\n  t[288] = 233;\n  t[290] = 283;\n  t[295] = 281;\n  t[296] = 102;\n  t[336] = 103;\n  t[346] = 104;\n  t[349] = 105;\n  t[350] = 236;\n  t[351] = 237;\n  t[361] = 106;\n  t[364] = 107;\n  t[367] = 108;\n  t[371] = 322;\n  t[373] = 109;\n  t[374] = 110;\n  t[381] = 111;\n  t[382] = 242;\n  t[383] = 243;\n  t[386] = 246;\n  t[393] = 112;\n  t[395] = 113;\n  t[396] = 114;\n  t[398] = 345;\n  t[400] = 115;\n  t[401] = 347;\n  t[403] = 353;\n  t[410] = 116;\n  t[437] = 117;\n  t[442] = 252;\n  t[448] = 118;\n  t[449] = 119;\n  t[454] = 120;\n  t[455] = 121;\n  t[457] = 253;\n  t[460] = 122;\n  t[462] = 382;\n  t[463] = 380;\n  t[853] = 44;\n  t[855] = 58;\n  t[856] = 46;\n  t[876] = 47;\n  t[878] = 45;\n  t[882] = 45;\n  t[894] = 40;\n  t[895] = 41;\n  t[896] = 91;\n  t[897] = 93;\n  t[923] = 64;\n  t[940] = 163;\n  t[1004] = 48;\n  t[1005] = 49;\n  t[1006] = 50;\n  t[1007] = 51;\n  t[1008] = 52;\n  t[1009] = 53;\n  t[1010] = 54;\n  t[1011] = 55;\n  t[1012] = 56;\n  t[1013] = 57;\n  t[1081] = 37;\n  t[1085] = 43;\n  t[1086] = 45;\n});\n\nfunction getStandardFontName(name) {\n  const fontName = normalizeFontName(name);\n  const stdFontMap = getStdFontMap();\n  return stdFontMap[fontName];\n}\n\nfunction isKnownFontName(name) {\n  const fontName = normalizeFontName(name);\n  return !!(\n    getStdFontMap()[fontName] ||\n    getNonStdFontMap()[fontName] ||\n    getSerifFonts()[fontName] ||\n    getSymbolsFonts()[fontName]\n  );\n}\n\nexport {\n  getFontNameToFileMap,\n  getGlyphMapForStandardFonts,\n  getNonStdFontMap,\n  getSerifFonts,\n  getStandardFontName,\n  getStdFontMap,\n  getSupplementalGlyphMapForArialBlack,\n  getSupplementalGlyphMapForCalibri,\n  getSymbolsFonts,\n  isKnownFontName,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeSet } from \"../shared/util.js\";\n\nconst ON_CURVE_POINT = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT_FLAG = 1 << 3;\nconst X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4;\nconst Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5;\nconst OVERLAP_SIMPLE = 1 << 6;\n\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\n// const ROUND_XY_TO_GRID = 1 << 2;\nconst WE_HAVE_A_SCALE = 1 << 3;\nconst MORE_COMPONENTS = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\n// const USE_MY_METRICS = 1 << 9;\n// const OVERLAP_COMPOUND = 1 << 10;\n// const SCALED_COMPONENT_OFFSET = 1 << 11;\n// const UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\nconst GLYPH_HEADER_SIZE = 10;\n\n/**\n * GlyfTable object represents a glyf table containing glyph information:\n *  - glyph header (xMin, yMin, xMax, yMax);\n *  - contours if any;\n *  - components if the glyph is a composite.\n *\n * It's possible to re-scale each glyph in order to have a new font which\n * exactly fits an other one: the goal is to be able to build some substitution\n * font for well-known fonts (Myriad, Arial, ...).\n *\n * A full description of glyf table can be found here\n * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html\n */\nclass GlyfTable {\n  constructor({ glyfTable, isGlyphLocationsLong, locaTable, numGlyphs }) {\n    this.glyphs = [];\n    const loca = new DataView(\n      locaTable.buffer,\n      locaTable.byteOffset,\n      locaTable.byteLength\n    );\n    const glyf = new DataView(\n      glyfTable.buffer,\n      glyfTable.byteOffset,\n      glyfTable.byteLength\n    );\n    const offsetSize = isGlyphLocationsLong ? 4 : 2;\n    let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0);\n    let pos = 0;\n    for (let i = 0; i < numGlyphs; i++) {\n      pos += offsetSize;\n      const next = isGlyphLocationsLong\n        ? loca.getUint32(pos)\n        : 2 * loca.getUint16(pos);\n      if (next === prev) {\n        this.glyphs.push(new Glyph({}));\n        continue;\n      }\n\n      const glyph = Glyph.parse(prev, glyf);\n      this.glyphs.push(glyph);\n\n      prev = next;\n    }\n  }\n\n  getSize() {\n    return Math.sumPrecise(\n      // Round to next multiple of 4 if needed.\n      this.glyphs.map(g => (g.getSize() + 3) & ~3)\n    );\n  }\n\n  write() {\n    const totalSize = this.getSize();\n    const glyfTable = new DataView(new ArrayBuffer(totalSize));\n    const isLocationLong = totalSize > /* 0xffff * 2 */ 0x1fffe;\n    const offsetSize = isLocationLong ? 4 : 2;\n    const locaTable = new DataView(\n      new ArrayBuffer((this.glyphs.length + 1) * offsetSize)\n    );\n\n    if (isLocationLong) {\n      locaTable.setUint32(0, 0);\n    } else {\n      locaTable.setUint16(0, 0);\n    }\n\n    let pos = 0;\n    let locaIndex = 0;\n    for (const glyph of this.glyphs) {\n      pos += glyph.write(pos, glyfTable);\n      // Round to next multiple of 4 if needed.\n      pos = (pos + 3) & ~3;\n\n      locaIndex += offsetSize;\n      if (isLocationLong) {\n        locaTable.setUint32(locaIndex, pos);\n      } else {\n        locaTable.setUint16(locaIndex, pos >> 1);\n      }\n    }\n\n    return {\n      isLocationLong,\n      loca: new Uint8Array(locaTable.buffer),\n      glyf: new Uint8Array(glyfTable.buffer),\n    };\n  }\n\n  scale(factors) {\n    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {\n      this.glyphs[i].scale(factors[i]);\n    }\n  }\n}\n\nclass Glyph {\n  constructor({ header = null, simple = null, composites = null }) {\n    this.header = header;\n    this.simple = simple;\n    this.composites = composites;\n  }\n\n  static parse(pos, glyf) {\n    const [read, header] = GlyphHeader.parse(pos, glyf);\n    pos += read;\n\n    if (header.numberOfContours < 0) {\n      // Composite glyph.\n      const composites = [];\n      while (true) {\n        const [n, composite] = CompositeGlyph.parse(pos, glyf);\n        pos += n;\n        composites.push(composite);\n        if (!(composite.flags & MORE_COMPONENTS)) {\n          break;\n        }\n      }\n\n      return new Glyph({ header, composites });\n    }\n\n    const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours);\n\n    return new Glyph({ header, simple });\n  }\n\n  getSize() {\n    if (!this.header) {\n      return 0;\n    }\n    const size = this.simple\n      ? this.simple.getSize()\n      : Math.sumPrecise(this.composites.map(c => c.getSize()));\n    return this.header.getSize() + size;\n  }\n\n  write(pos, buf) {\n    if (!this.header) {\n      return 0;\n    }\n\n    const spos = pos;\n    pos += this.header.write(pos, buf);\n    if (this.simple) {\n      pos += this.simple.write(pos, buf);\n    } else {\n      for (const composite of this.composites) {\n        pos += composite.write(pos, buf);\n      }\n    }\n\n    return pos - spos;\n  }\n\n  scale(factor) {\n    if (!this.header) {\n      return;\n    }\n\n    const xMiddle = (this.header.xMin + this.header.xMax) / 2;\n    this.header.scale(xMiddle, factor);\n    if (this.simple) {\n      this.simple.scale(xMiddle, factor);\n    } else {\n      for (const composite of this.composites) {\n        composite.scale(xMiddle, factor);\n      }\n    }\n  }\n}\n\nclass GlyphHeader {\n  constructor({ numberOfContours, xMin, yMin, xMax, yMax }) {\n    this.numberOfContours = numberOfContours;\n    this.xMin = xMin;\n    this.yMin = yMin;\n    this.xMax = xMax;\n    this.yMax = yMax;\n  }\n\n  static parse(pos, glyf) {\n    return [\n      GLYPH_HEADER_SIZE,\n      new GlyphHeader({\n        numberOfContours: glyf.getInt16(pos),\n        xMin: glyf.getInt16(pos + 2),\n        yMin: glyf.getInt16(pos + 4),\n        xMax: glyf.getInt16(pos + 6),\n        yMax: glyf.getInt16(pos + 8),\n      }),\n    ];\n  }\n\n  getSize() {\n    return GLYPH_HEADER_SIZE;\n  }\n\n  write(pos, buf) {\n    buf.setInt16(pos, this.numberOfContours);\n    buf.setInt16(pos + 2, this.xMin);\n    buf.setInt16(pos + 4, this.yMin);\n    buf.setInt16(pos + 6, this.xMax);\n    buf.setInt16(pos + 8, this.yMax);\n\n    return GLYPH_HEADER_SIZE;\n  }\n\n  scale(x, factor) {\n    this.xMin = Math.round(x + (this.xMin - x) * factor);\n    this.xMax = Math.round(x + (this.xMax - x) * factor);\n  }\n}\n\nclass Contour {\n  constructor({ flags, xCoordinates, yCoordinates }) {\n    this.xCoordinates = xCoordinates;\n    this.yCoordinates = yCoordinates;\n    this.flags = flags;\n  }\n}\n\nclass SimpleGlyph {\n  constructor({ contours, instructions }) {\n    this.contours = contours;\n    this.instructions = instructions;\n  }\n\n  static parse(pos, glyf, numberOfContours) {\n    const endPtsOfContours = [];\n    for (let i = 0; i < numberOfContours; i++) {\n      const endPt = glyf.getUint16(pos);\n      pos += 2;\n      endPtsOfContours.push(endPt);\n    }\n    const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1;\n    const instructionLength = glyf.getUint16(pos);\n    pos += 2;\n    const instructions = new Uint8Array(glyf).slice(\n      pos,\n      pos + instructionLength\n    );\n    pos += instructionLength;\n\n    const flags = [];\n    for (let i = 0; i < numberOfPt; pos++, i++) {\n      let flag = glyf.getUint8(pos);\n      flags.push(flag);\n      if (flag & REPEAT_FLAG) {\n        const count = glyf.getUint8(++pos);\n        flag ^= REPEAT_FLAG;\n        for (let m = 0; m < count; m++) {\n          flags.push(flag);\n        }\n        i += count;\n      }\n    }\n\n    const allXCoordinates = [];\n    let xCoordinates = [];\n    let yCoordinates = [];\n    let pointFlags = [];\n    const contours = [];\n    let endPtsOfContoursIndex = 0;\n    let lastCoordinate = 0;\n\n    // Get x coordinates.\n    for (let i = 0; i < numberOfPt; i++) {\n      const flag = flags[i];\n      if (flag & X_SHORT_VECTOR) {\n        // 8-bits unsigned value.\n        const x = glyf.getUint8(pos++);\n        lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x;\n        xCoordinates.push(lastCoordinate);\n      } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) {\n        // IS_SAME.\n        xCoordinates.push(lastCoordinate);\n      } else {\n        lastCoordinate += glyf.getInt16(pos);\n        pos += 2;\n        xCoordinates.push(lastCoordinate);\n      }\n\n      if (endPtsOfContours[endPtsOfContoursIndex] === i) {\n        // Next entry is the first one of a new contour.\n        endPtsOfContoursIndex++;\n        allXCoordinates.push(xCoordinates);\n        xCoordinates = [];\n      }\n    }\n\n    lastCoordinate = 0;\n    endPtsOfContoursIndex = 0;\n    for (let i = 0; i < numberOfPt; i++) {\n      const flag = flags[i];\n      if (flag & Y_SHORT_VECTOR) {\n        // 8-bits unsigned value.\n        const y = glyf.getUint8(pos++);\n        lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y;\n        yCoordinates.push(lastCoordinate);\n      } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) {\n        // IS_SAME.\n        yCoordinates.push(lastCoordinate);\n      } else {\n        lastCoordinate += glyf.getInt16(pos);\n        pos += 2;\n        yCoordinates.push(lastCoordinate);\n      }\n\n      pointFlags.push((flag & ON_CURVE_POINT) | (flag & OVERLAP_SIMPLE));\n\n      if (endPtsOfContours[endPtsOfContoursIndex] === i) {\n        // Next entry is the first one of a new contour.\n        xCoordinates = allXCoordinates[endPtsOfContoursIndex];\n        endPtsOfContoursIndex++;\n        contours.push(\n          new Contour({\n            flags: pointFlags,\n            xCoordinates,\n            yCoordinates,\n          })\n        );\n        yCoordinates = [];\n        pointFlags = [];\n      }\n    }\n\n    return new SimpleGlyph({\n      contours,\n      instructions,\n    });\n  }\n\n  getSize() {\n    let size = this.contours.length * 2 + 2 + this.instructions.length;\n    let lastX = 0;\n    let lastY = 0;\n    for (const contour of this.contours) {\n      size += contour.flags.length;\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        const x = contour.xCoordinates[i];\n        const y = contour.yCoordinates[i];\n        let abs = Math.abs(x - lastX);\n        if (abs > 255) {\n          size += 2;\n        } else if (abs > 0) {\n          size += 1;\n        }\n        lastX = x;\n\n        abs = Math.abs(y - lastY);\n        if (abs > 255) {\n          size += 2;\n        } else if (abs > 0) {\n          size += 1;\n        }\n        lastY = y;\n      }\n    }\n    return size;\n  }\n\n  write(pos, buf) {\n    const spos = pos;\n    const xCoordinates = [];\n    const yCoordinates = [];\n    const flags = [];\n    let lastX = 0;\n    let lastY = 0;\n\n    for (const contour of this.contours) {\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        let flag = contour.flags[i];\n        const x = contour.xCoordinates[i];\n        let delta = x - lastX;\n        if (delta === 0) {\n          flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR;\n          xCoordinates.push(0);\n        } else {\n          const abs = Math.abs(delta);\n          if (abs <= 255) {\n            flag |=\n              delta >= 0\n                ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR\n                : X_SHORT_VECTOR;\n            xCoordinates.push(abs);\n          } else {\n            xCoordinates.push(delta);\n          }\n        }\n        lastX = x;\n\n        const y = contour.yCoordinates[i];\n        delta = y - lastY;\n        if (delta === 0) {\n          flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR;\n          yCoordinates.push(0);\n        } else {\n          const abs = Math.abs(delta);\n          if (abs <= 255) {\n            flag |=\n              delta >= 0\n                ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR\n                : Y_SHORT_VECTOR;\n            yCoordinates.push(abs);\n          } else {\n            yCoordinates.push(delta);\n          }\n        }\n        lastY = y;\n\n        flags.push(flag);\n      }\n\n      // Write endPtsOfContours entry.\n      buf.setUint16(pos, xCoordinates.length - 1);\n      pos += 2;\n    }\n\n    // Write instructionLength.\n    buf.setUint16(pos, this.instructions.length);\n    pos += 2;\n    if (this.instructions.length) {\n      // Write instructions.\n      new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(\n        this.instructions,\n        pos\n      );\n      pos += this.instructions.length;\n    }\n\n    // Write flags.\n    for (const flag of flags) {\n      buf.setUint8(pos++, flag);\n    }\n\n    // Write xCoordinates.\n    for (let i = 0, ii = xCoordinates.length; i < ii; i++) {\n      const x = xCoordinates[i];\n      const flag = flags[i];\n      if (flag & X_SHORT_VECTOR) {\n        buf.setUint8(pos++, x);\n      } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) {\n        buf.setInt16(pos, x);\n        pos += 2;\n      }\n    }\n\n    // Write yCoordinates.\n    for (let i = 0, ii = yCoordinates.length; i < ii; i++) {\n      const y = yCoordinates[i];\n      const flag = flags[i];\n      if (flag & Y_SHORT_VECTOR) {\n        buf.setUint8(pos++, y);\n      } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) {\n        buf.setInt16(pos, y);\n        pos += 2;\n      }\n    }\n\n    return pos - spos;\n  }\n\n  scale(x, factor) {\n    for (const contour of this.contours) {\n      if (contour.xCoordinates.length === 0) {\n        continue;\n      }\n\n      for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {\n        contour.xCoordinates[i] = Math.round(\n          x + (contour.xCoordinates[i] - x) * factor\n        );\n      }\n    }\n  }\n}\n\nclass CompositeGlyph {\n  constructor({\n    flags,\n    glyphIndex,\n    argument1,\n    argument2,\n    transf,\n    instructions,\n  }) {\n    this.flags = flags;\n    this.glyphIndex = glyphIndex;\n    this.argument1 = argument1;\n    this.argument2 = argument2;\n    this.transf = transf;\n    this.instructions = instructions;\n  }\n\n  static parse(pos, glyf) {\n    const spos = pos;\n    const transf = [];\n    let flags = glyf.getUint16(pos);\n    const glyphIndex = glyf.getUint16(pos + 2);\n    pos += 4;\n\n    let argument1, argument2;\n    if (flags & ARG_1_AND_2_ARE_WORDS) {\n      if (flags & ARGS_ARE_XY_VALUES) {\n        argument1 = glyf.getInt16(pos);\n        argument2 = glyf.getInt16(pos + 2);\n      } else {\n        argument1 = glyf.getUint16(pos);\n        argument2 = glyf.getUint16(pos + 2);\n      }\n      pos += 4;\n      flags ^= ARG_1_AND_2_ARE_WORDS;\n    } else {\n      if (flags & ARGS_ARE_XY_VALUES) {\n        argument1 = glyf.getInt8(pos);\n        argument2 = glyf.getInt8(pos + 1);\n      } else {\n        argument1 = glyf.getUint8(pos);\n        argument2 = glyf.getUint8(pos + 1);\n      }\n      pos += 2;\n    }\n\n    if (flags & WE_HAVE_A_SCALE) {\n      // Single F2.14.\n      transf.push(glyf.getUint16(pos));\n      pos += 2;\n    } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n      // Two F2.14.\n      transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2));\n      pos += 4;\n    } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n      // Four F2.14.\n      transf.push(\n        glyf.getUint16(pos),\n        glyf.getUint16(pos + 2),\n        glyf.getUint16(pos + 4),\n        glyf.getUint16(pos + 6)\n      );\n      pos += 8;\n    }\n\n    let instructions = null;\n    if (flags & WE_HAVE_INSTRUCTIONS) {\n      const instructionLength = glyf.getUint16(pos);\n      pos += 2;\n      instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);\n      pos += instructionLength;\n    }\n\n    return [\n      pos - spos,\n      new CompositeGlyph({\n        flags,\n        glyphIndex,\n        argument1,\n        argument2,\n        transf,\n        instructions,\n      }),\n    ];\n  }\n\n  getSize() {\n    let size = 2 + 2 + this.transf.length * 2;\n    if (this.flags & WE_HAVE_INSTRUCTIONS) {\n      size += 2 + this.instructions.length;\n    }\n\n    size += 2;\n    if (this.flags & 2) {\n      // Arguments are signed.\n      if (!(\n        this.argument1 >= -128 &&\n        this.argument1 <= 127 &&\n        this.argument2 >= -128 &&\n        this.argument2 <= 127\n      )) {\n        size += 2;\n      }\n    } else if (!(\n      this.argument1 >= 0 &&\n      this.argument1 <= 255 &&\n      this.argument2 >= 0 &&\n      this.argument2 <= 255\n    )) {\n      size += 2;\n    }\n\n    return size;\n  }\n\n  write(pos, buf) {\n    const spos = pos;\n\n    if (this.flags & ARGS_ARE_XY_VALUES) {\n      // Arguments are signed.\n      if (!(\n        this.argument1 >= -128 &&\n        this.argument1 <= 127 &&\n        this.argument2 >= -128 &&\n        this.argument2 <= 127\n      )) {\n        this.flags |= ARG_1_AND_2_ARE_WORDS;\n      }\n    } else if (!(\n      this.argument1 >= 0 &&\n      this.argument1 <= 255 &&\n      this.argument2 >= 0 &&\n      this.argument2 <= 255\n    )) {\n      this.flags |= ARG_1_AND_2_ARE_WORDS;\n    }\n\n    buf.setUint16(pos, this.flags);\n    buf.setUint16(pos + 2, this.glyphIndex);\n    pos += 4;\n\n    if (this.flags & ARG_1_AND_2_ARE_WORDS) {\n      if (this.flags & ARGS_ARE_XY_VALUES) {\n        buf.setInt16(pos, this.argument1);\n        buf.setInt16(pos + 2, this.argument2);\n      } else {\n        buf.setUint16(pos, this.argument1);\n        buf.setUint16(pos + 2, this.argument2);\n      }\n      pos += 4;\n    } else {\n      buf.setUint8(pos, this.argument1);\n      buf.setUint8(pos + 1, this.argument2);\n      pos += 2;\n    }\n\n    if (this.flags & WE_HAVE_INSTRUCTIONS) {\n      buf.setUint16(pos, this.instructions.length);\n      pos += 2;\n      // Write instructions.\n      if (this.instructions.length) {\n        new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(\n          this.instructions,\n          pos\n        );\n        pos += this.instructions.length;\n      }\n    }\n\n    return pos - spos;\n  }\n\n  scale(x, factor) {}\n}\n\nfunction pruneCompositeGlyphCycles(glyfTable, locaEntries, numGlyphs) {\n  const glyf = new DataView(\n    glyfTable.buffer,\n    glyfTable.byteOffset,\n    glyfTable.byteLength\n  );\n  const components = new Array(numGlyphs);\n  for (let i = 0; i < numGlyphs; i++) {\n    const offset = locaEntries[i].offset;\n    const endOffset = Math.min(locaEntries[i].endOffset, glyf.byteLength);\n    if (endOffset - offset <= GLYPH_HEADER_SIZE || glyf.getInt16(offset) >= 0) {\n      continue;\n    }\n    const comps = [];\n    let p = offset + GLYPH_HEADER_SIZE;\n    while (p + 4 <= endOffset) {\n      const flags = glyf.getUint16(p);\n      const gid = glyf.getUint16(p + 2);\n      let size = 4 + (flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n      if (flags & WE_HAVE_A_SCALE) {\n        size += 2;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        size += 4;\n      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        size += 8;\n      }\n      comps.push({ gid, offset: p, size, flags });\n      p += size;\n      if (!(flags & MORE_COMPONENTS)) {\n        break;\n      }\n    }\n    if (comps.length) {\n      components[i] = comps;\n    }\n  }\n\n  const WHITE = 0,\n    GRAY = 1,\n    BLACK = 2;\n  const state = new Uint8Array(numGlyphs);\n  const backEdges = new Map();\n  for (let start = 0; start < numGlyphs; start++) {\n    if (state[start] !== WHITE || !components[start]) {\n      continue;\n    }\n    const stack = [{ node: start, idx: 0 }];\n    state[start] = GRAY;\n    while (stack.length > 0) {\n      const top = stack.at(-1);\n      const comps = components[top.node];\n      if (!comps || top.idx >= comps.length) {\n        state[top.node] = BLACK;\n        stack.pop();\n        continue;\n      }\n      const compIdx = top.idx++;\n      const next = comps[compIdx].gid;\n      if (next >= numGlyphs || state[next] === BLACK) {\n        continue;\n      }\n      if (state[next] === WHITE) {\n        state[next] = GRAY;\n        stack.push({ node: next, idx: 0 });\n        continue;\n      }\n      backEdges.getOrInsertComputed(top.node, makeSet).add(compIdx);\n    }\n  }\n\n  const droppedGlyphs = new Set();\n  for (const [gIdx, removeSet] of backEdges) {\n    const comps = components[gIdx];\n    const remaining = [];\n    for (let ci = 0; ci < comps.length; ci++) {\n      if (!removeSet.has(ci)) {\n        remaining.push(comps[ci]);\n      }\n    }\n    if (remaining.length === 0) {\n      droppedGlyphs.add(gIdx);\n      continue;\n    }\n    const start = locaEntries[gIdx].offset;\n    const endOffset = Math.min(locaEntries[gIdx].endOffset, glyf.byteLength);\n    let writePos = start + GLYPH_HEADER_SIZE;\n    for (let ci = 0; ci < remaining.length; ci++) {\n      const c = remaining[ci];\n      const isLast = ci === remaining.length - 1;\n      let newFlags = c.flags & ~WE_HAVE_INSTRUCTIONS;\n      newFlags = isLast\n        ? newFlags & ~MORE_COMPONENTS\n        : newFlags | MORE_COMPONENTS;\n      if (writePos !== c.offset) {\n        glyfTable.copyWithin(writePos, c.offset, c.offset + c.size);\n      }\n      glyf.setUint16(writePos, newFlags);\n      writePos += c.size;\n    }\n    if (writePos < endOffset) {\n      glyfTable.fill(0, writePos, endOffset);\n    }\n  }\n  return droppedGlyphs;\n}\n\nexport { GlyfTable, pruneCompositeGlyphCycles };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../shared/util.js\";\n\nclass ToUnicodeMap {\n  constructor(cmap = []) {\n    // The elements of this._map can be integers or strings, depending on how\n    // `cmap` was created.\n    this._map = cmap;\n  }\n\n  get length() {\n    return this._map.length;\n  }\n\n  forEach(callback) {\n    for (const charCode in this._map) {\n      callback(charCode, this._map[charCode].codePointAt(0));\n    }\n  }\n\n  has(i) {\n    return this._map[i] !== undefined;\n  }\n\n  get(i) {\n    return this._map[i];\n  }\n\n  charCodeOf(value) {\n    // `Array.prototype.indexOf` is *extremely* inefficient for arrays which\n    // are both very sparse and very large (see issue8372.pdf).\n    const map = this._map;\n    if (map.length <= 0x10000) {\n      return map.indexOf(value);\n    }\n    for (const charCode in map) {\n      if (map[charCode] === value) {\n        return charCode | 0;\n      }\n    }\n    return -1;\n  }\n\n  amend(map) {\n    for (const charCode in map) {\n      this._map[charCode] = map[charCode];\n    }\n  }\n}\n\nclass IdentityToUnicodeMap {\n  constructor(firstChar, lastChar) {\n    this.firstChar = firstChar;\n    this.lastChar = lastChar;\n  }\n\n  get length() {\n    return this.lastChar + 1 - this.firstChar;\n  }\n\n  forEach(callback) {\n    for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {\n      callback(i, i);\n    }\n  }\n\n  has(i) {\n    return this.firstChar <= i && i <= this.lastChar;\n  }\n\n  get(i) {\n    if (this.firstChar <= i && i <= this.lastChar) {\n      return String.fromCharCode(i);\n    }\n    return undefined;\n  }\n\n  charCodeOf(v) {\n    return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar\n      ? v\n      : -1;\n  }\n\n  amend(map) {\n    unreachable(\"Should not call amend()\");\n  }\n}\n\nexport { IdentityToUnicodeMap, ToUnicodeMap };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CFFCompiler, CFFParser } from \"./cff_parser.js\";\nimport { SEAC_ANALYSIS_ENABLED, type1FontGlyphMapping } from \"./fonts_utils.js\";\nimport { warn } from \"../shared/util.js\";\n\nclass CFFFont {\n  constructor(file, properties) {\n    this.properties = properties;\n\n    const parser = new CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);\n    this.cff = parser.parse();\n    this.cff.duplicateFirstGlyph();\n    const compiler = new CFFCompiler(this.cff);\n    this.seacs = this.cff.seacs;\n    try {\n      this.data = compiler.compile();\n    } catch (ex) {\n      warn(`Failed to compile font \"${properties.loadedName}\": \"${ex}\".`);\n      // There may have just been an issue with the compiler, set the data\n      // anyway and hope the font loaded.\n      file.reset();\n      this.data = file.getBytes();\n    }\n    this._createBuiltInEncoding();\n  }\n\n  get numGlyphs() {\n    return this.cff.charStrings.count;\n  }\n\n  getCharset() {\n    return this.cff.charset.charset;\n  }\n\n  getGlyphMapping() {\n    const cff = this.cff;\n    const properties = this.properties;\n    const { cidToGidMap, cMap } = properties;\n    const charsets = cff.charset.charset;\n    let charCodeToGlyphId;\n    let glyphId;\n\n    if (properties.composite) {\n      let invCidToGidMap;\n      if (cidToGidMap?.length > 0) {\n        invCidToGidMap = Object.create(null);\n        for (let i = 0, ii = cidToGidMap.length; i < ii; i++) {\n          const gid = cidToGidMap[i];\n          if (gid !== undefined) {\n            invCidToGidMap[gid] = i;\n          }\n        }\n      }\n\n      charCodeToGlyphId = Object.create(null);\n      let charCode;\n      if (cff.isCIDFont) {\n        // If the font is actually a CID font then we should use the charset\n        // to map CIDs to GIDs.\n        for (glyphId = 0; glyphId < charsets.length; glyphId++) {\n          const cid = charsets[glyphId];\n          charCode = cMap.charCodeOf(cid);\n\n          if (invCidToGidMap?.[charCode] !== undefined) {\n            // According to the PDF specification, see Table 117, it's not clear\n            // that a /CIDToGIDMap should be used with any non-TrueType fonts,\n            // however it's necessary to do so in order to fix issue 15559.\n            //\n            // It seems, in the CFF-case, that the /CIDToGIDMap needs to be used\n            // \"inverted\" compared to the TrueType-case. Here it thus seem to be\n            // a charCode mapping, rather than the normal CID to GID mapping.\n            charCode = invCidToGidMap[charCode];\n          }\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      } else {\n        // If it is NOT actually a CID font then CIDs should be mapped\n        // directly to GIDs.\n        for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {\n          charCode = cMap.charCodeOf(glyphId);\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      }\n      return charCodeToGlyphId;\n    }\n\n    let encoding = cff.encoding ? cff.encoding.encoding : null;\n    if (properties.isInternalFont) {\n      encoding = properties.defaultEncoding;\n    }\n    charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);\n    return charCodeToGlyphId;\n  }\n\n  hasGlyphId(id) {\n    return this.cff.hasGlyphId(id);\n  }\n\n  /**\n   * @private\n   */\n  _createBuiltInEncoding() {\n    const { charset, encoding } = this.cff;\n    if (!charset || !encoding) {\n      return;\n    }\n    const charsets = charset.charset,\n      encodings = encoding.encoding;\n    const map = [];\n\n    for (const charCode in encodings) {\n      const glyphId = encodings[charCode];\n      if (glyphId >= 0) {\n        const glyphName = charsets[glyphId];\n        if (glyphName) {\n          map[charCode] = glyphName;\n        }\n      }\n    }\n    if (map.length > 0) {\n      this.properties.builtInEncoding = map;\n    }\n  }\n}\n\nexport { CFFFont };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass CSS_FONT_INFO {\n  static strings = [\"fontFamily\", \"fontWeight\", \"italicAngle\"];\n}\n\nclass SYSTEM_FONT_INFO {\n  static strings = [\"css\", \"loadedName\", \"baseFontName\", \"src\"];\n}\n\nclass FONT_INFO {\n  static bools = [\n    \"black\",\n    \"bold\",\n    \"disableFontFace\",\n    \"fontExtraProperties\",\n    \"isInvalidPDFjsFont\",\n    \"isType3Font\",\n    \"italic\",\n    \"missingFile\",\n    \"remeasure\",\n    \"vertical\",\n  ];\n\n  static numbers = [\"ascent\", \"defaultWidth\", \"descent\"];\n\n  static strings = [\"fallbackName\", \"loadedName\", \"mimetype\", \"name\"];\n\n  static OFFSET_NUMBERS = Math.ceil((this.bools.length * 2) / 8);\n\n  static OFFSET_BBOX = this.OFFSET_NUMBERS + this.numbers.length * 8;\n\n  static OFFSET_FONT_MATRIX = this.OFFSET_BBOX + 1 + 2 * 4;\n\n  static OFFSET_DEFAULT_VMETRICS = this.OFFSET_FONT_MATRIX + 1 + 8 * 6;\n\n  static OFFSET_STRINGS = this.OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3;\n}\n\nclass PATTERN_INFO {\n  static KIND = 0; // 1=axial, 2=radial, 3=mesh\n\n  static HAS_BBOX = 1; // 0/1\n\n  static HAS_BACKGROUND = 2; // 0/1 (background for mesh patterns)\n\n  static SHADING_TYPE = 3; // shadingType (only for mesh patterns)\n\n  static N_COORD = 4; // number of coordinate pairs\n\n  static N_COLOR = 8; // number of RGBA-stride color entries\n\n  static N_STOP = 12; // number of gradient stops\n\n  static N_FIGURES = 16; // number of figures\n}\n\nexport { CSS_FONT_INFO, FONT_INFO, PATTERN_INFO, SYSTEM_FONT_INFO };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, FeatureTest } from \"../shared/util.js\";\nimport {\n  CSS_FONT_INFO,\n  FONT_INFO,\n  PATTERN_INFO,\n  SYSTEM_FONT_INFO,\n} from \"../shared/obj_bin_transform_utils.js\";\n\nfunction compileCssFontInfo(info) {\n  const encoder = new TextEncoder();\n  const encodedStrings = {};\n  let stringsLength = 0;\n  for (const prop of CSS_FONT_INFO.strings) {\n    const encoded = encoder.encode(info[prop]);\n    encodedStrings[prop] = encoded;\n    stringsLength += 4 + encoded.length;\n  }\n\n  const buffer = new ArrayBuffer(stringsLength);\n  const data = new Uint8Array(buffer);\n  const view = new DataView(buffer);\n  let offset = 0;\n\n  for (const prop of CSS_FONT_INFO.strings) {\n    const encoded = encodedStrings[prop];\n    const length = encoded.length;\n    view.setUint32(offset, length);\n    data.set(encoded, offset + 4);\n    offset += 4 + length;\n  }\n  assert(offset === buffer.byteLength, \"compileCssFontInfo: Buffer overflow\");\n  return buffer;\n}\n\nfunction compileSystemFontInfo(info) {\n  const encoder = new TextEncoder();\n  const encodedStrings = {};\n  let stringsLength = 0;\n  for (const prop of SYSTEM_FONT_INFO.strings) {\n    const encoded = encoder.encode(info[prop]);\n    encodedStrings[prop] = encoded;\n    stringsLength += 4 + encoded.length;\n  }\n  stringsLength += 4;\n  let encodedStyleStyle,\n    encodedStyleWeight,\n    lengthEstimate = 1 + stringsLength;\n  if (info.style) {\n    encodedStyleStyle = encoder.encode(info.style.style);\n    encodedStyleWeight = encoder.encode(info.style.weight);\n    lengthEstimate +=\n      4 + encodedStyleStyle.length + 4 + encodedStyleWeight.length;\n  }\n\n  const buffer = new ArrayBuffer(lengthEstimate);\n  const data = new Uint8Array(buffer);\n  const view = new DataView(buffer);\n  let offset = 0;\n\n  view.setUint8(offset++, info.guessFallback ? 1 : 0);\n  view.setUint32(offset, 0);\n  offset += 4;\n  stringsLength = 0;\n  for (const prop of SYSTEM_FONT_INFO.strings) {\n    const encoded = encodedStrings[prop];\n    const length = encoded.length;\n    stringsLength += 4 + length;\n    view.setUint32(offset, length);\n    data.set(encoded, offset + 4);\n    offset += 4 + length;\n  }\n  view.setUint32(offset - stringsLength - 4, stringsLength);\n\n  if (info.style) {\n    view.setUint32(offset, encodedStyleStyle.length);\n    data.set(encodedStyleStyle, offset + 4);\n    offset += 4 + encodedStyleStyle.length;\n    view.setUint32(offset, encodedStyleWeight.length);\n    data.set(encodedStyleWeight, offset + 4);\n    offset += 4 + encodedStyleWeight.length;\n  }\n  assert(offset <= buffer.byteLength, \"compileSystemFontInfo: Buffer overflow\");\n  return buffer.transferToFixedLength(offset);\n}\n\nfunction compileFontInfo(font) {\n  const systemFontInfoBuffer = font.systemFontInfo\n    ? compileSystemFontInfo(font.systemFontInfo)\n    : null;\n  const cssFontInfoBuffer = font.cssFontInfo\n    ? compileCssFontInfo(font.cssFontInfo)\n    : null;\n\n  const encoder = new TextEncoder();\n  const encodedStrings = {};\n  let stringsLength = 0;\n  for (const prop of FONT_INFO.strings) {\n    encodedStrings[prop] = encoder.encode(font[prop]);\n    stringsLength += 4 + encodedStrings[prop].length;\n  }\n\n  const lengthEstimate =\n    FONT_INFO.OFFSET_STRINGS +\n    4 +\n    stringsLength +\n    4 +\n    (systemFontInfoBuffer?.byteLength ?? 0) +\n    4 +\n    (cssFontInfoBuffer?.byteLength ?? 0) +\n    4 +\n    (font.data?.length ?? 0);\n\n  const buffer = new ArrayBuffer(lengthEstimate);\n  const data = new Uint8Array(buffer);\n  const view = new DataView(buffer);\n  let offset = 0;\n\n  const numBools = FONT_INFO.bools.length;\n  let boolByte = 0,\n    boolBit = 0;\n  for (let i = 0; i < numBools; i++) {\n    const value = font[FONT_INFO.bools[i]];\n    // eslint-disable-next-line no-nested-ternary\n    const bits = value === undefined ? 0x00 : value ? 0x02 : 0x01;\n    boolByte |= bits << boolBit;\n    boolBit += 2;\n    if (boolBit === 8 || i === numBools - 1) {\n      view.setUint8(offset++, boolByte);\n      boolByte = 0;\n      boolBit = 0;\n    }\n  }\n  assert(\n    offset === FONT_INFO.OFFSET_NUMBERS,\n    \"compileFontInfo: Boolean properties offset mismatch\"\n  );\n\n  for (const prop of FONT_INFO.numbers) {\n    view.setFloat64(offset, font[prop]);\n    offset += 8;\n  }\n  assert(\n    offset === FONT_INFO.OFFSET_BBOX,\n    \"compileFontInfo: Number properties offset mismatch\"\n  );\n\n  if (font.bbox) {\n    view.setUint8(offset++, 4);\n    for (const coord of font.bbox) {\n      view.setInt16(offset, coord, true);\n      offset += 2;\n    }\n  } else {\n    view.setUint8(offset++, 0);\n    offset += 2 * 4; // TODO: optimize this padding away\n  }\n  assert(\n    offset === FONT_INFO.OFFSET_FONT_MATRIX,\n    \"compileFontInfo: BBox properties offset mismatch\"\n  );\n\n  if (font.fontMatrix) {\n    view.setUint8(offset++, 6);\n    for (const point of font.fontMatrix) {\n      view.setFloat64(offset, point, true);\n      offset += 8;\n    }\n  } else {\n    view.setUint8(offset++, 0);\n    offset += 8 * 6; // TODO: optimize this padding away\n  }\n  assert(\n    offset === FONT_INFO.OFFSET_DEFAULT_VMETRICS,\n    \"compileFontInfo: FontMatrix properties offset mismatch\"\n  );\n\n  if (font.defaultVMetrics) {\n    view.setUint8(offset++, 3);\n    for (const metric of font.defaultVMetrics) {\n      view.setInt16(offset, metric, true);\n      offset += 2;\n    }\n  } else {\n    view.setUint8(offset++, 0);\n    offset += 3 * 2; // TODO: optimize this padding away\n  }\n  assert(\n    offset === FONT_INFO.OFFSET_STRINGS,\n    \"compileFontInfo: DefaultVMetrics properties offset mismatch\"\n  );\n\n  view.setUint32(FONT_INFO.OFFSET_STRINGS, 0);\n  offset += 4;\n  for (const prop of FONT_INFO.strings) {\n    const encoded = encodedStrings[prop];\n    const length = encoded.length;\n    view.setUint32(offset, length);\n    data.set(encoded, offset + 4);\n    offset += 4 + length;\n  }\n  view.setUint32(\n    FONT_INFO.OFFSET_STRINGS,\n    offset - FONT_INFO.OFFSET_STRINGS - 4\n  );\n\n  if (!systemFontInfoBuffer) {\n    view.setUint32(offset, 0);\n    offset += 4;\n  } else {\n    const length = systemFontInfoBuffer.byteLength;\n    view.setUint32(offset, length);\n    assert(\n      offset + 4 + length <= buffer.byteLength,\n      \"compileFontInfo: Buffer overflow at systemFontInfo\"\n    );\n    data.set(new Uint8Array(systemFontInfoBuffer), offset + 4);\n    offset += 4 + length;\n  }\n\n  if (!cssFontInfoBuffer) {\n    view.setUint32(offset, 0);\n    offset += 4;\n  } else {\n    const length = cssFontInfoBuffer.byteLength;\n    view.setUint32(offset, length);\n    assert(\n      offset + 4 + length <= buffer.byteLength,\n      \"compileFontInfo: Buffer overflow at cssFontInfo\"\n    );\n    data.set(new Uint8Array(cssFontInfoBuffer), offset + 4);\n    offset += 4 + length;\n  }\n\n  if (font.data === undefined) {\n    view.setUint32(offset, 0);\n    offset += 4;\n  } else {\n    view.setUint32(offset, font.data.length);\n    data.set(font.data, offset + 4);\n    offset += 4 + font.data.length;\n  }\n\n  assert(offset <= buffer.byteLength, \"compileFontInfo: Buffer overflow\");\n  return buffer.transferToFixedLength(offset);\n}\n\nfunction compilePatternInfo(ir) {\n  let kind,\n    bbox = null,\n    coords = [],\n    colors = [],\n    colorStops = [],\n    shadingType = null, // only needed for mesh patterns\n    background = null; // background for mesh patterns\n\n  switch (ir[0]) {\n    case \"RadialAxial\":\n      kind = ir[1] === \"axial\" ? 1 : 2;\n      bbox = ir[2];\n      colorStops = ir[3];\n      if (kind === 1) {\n        coords.push(...ir[4], ...ir[5]);\n      } else {\n        coords.push(ir[4][0], ir[4][1], ir[6], ir[5][0], ir[5][1], ir[7]);\n      }\n      break;\n    case \"Mesh\":\n      kind = 3;\n      shadingType = ir[1];\n      coords = ir[2];\n      colors = ir[3];\n      bbox = ir[6];\n      background = ir[7];\n      break;\n    default:\n      throw new Error(`Unsupported pattern type: ${ir[0]}`);\n  }\n\n  const nCoord = Math.floor(coords.length / 2);\n  const nColor = Math.floor(colors.length / 4);\n  const nStop = colorStops.length;\n\n  const byteLen =\n    20 +\n    nCoord * 8 +\n    nColor * 4 +\n    nStop * 8 +\n    (bbox ? 16 : 0) +\n    (background ? 3 : 0);\n  const buffer = new ArrayBuffer(byteLen);\n  const dataView = new DataView(buffer);\n  const u8data = new Uint8Array(buffer);\n\n  dataView.setUint8(PATTERN_INFO.KIND, kind);\n  dataView.setUint8(PATTERN_INFO.HAS_BBOX, bbox ? 1 : 0);\n  dataView.setUint8(PATTERN_INFO.HAS_BACKGROUND, background ? 1 : 0);\n  dataView.setUint8(PATTERN_INFO.SHADING_TYPE, shadingType); // Only for mesh pattern, null otherwise\n  dataView.setUint32(PATTERN_INFO.N_COORD, nCoord, true);\n  dataView.setUint32(PATTERN_INFO.N_COLOR, nColor, true);\n  dataView.setUint32(PATTERN_INFO.N_STOP, nStop, true);\n  dataView.setUint32(PATTERN_INFO.N_FIGURES, 0, true);\n\n  let offset = 20;\n  const coordsView = new Float32Array(buffer, offset, nCoord * 2);\n  coordsView.set(coords);\n  offset += nCoord * 8;\n\n  u8data.set(colors, offset);\n  offset += nColor * 4;\n\n  for (const [pos, hex] of colorStops) {\n    dataView.setFloat32(offset, pos, true);\n    offset += 4;\n    dataView.setUint32(offset, parseInt(hex.slice(1), 16), true);\n    offset += 4;\n  }\n  if (bbox) {\n    for (const v of bbox) {\n      dataView.setFloat32(offset, v, true);\n      offset += 4;\n    }\n  }\n\n  if (background) {\n    u8data.set(background, offset);\n  }\n  return buffer;\n}\n\nfunction compileFontPathInfo(path) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      FeatureTest.isFloat16ArraySupported\n        ? path instanceof Float16Array\n        : path instanceof Float32Array,\n      \"compileFontPathInfo: Unexpected path format.\"\n    );\n  }\n  return path.slice().buffer;\n}\n\nexport {\n  compileCssFontInfo,\n  compileFontInfo,\n  compileFontPathInfo,\n  compilePatternInfo,\n  compileSystemFontInfo,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  bytesToString,\n  DrawOPS,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  shadow,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { CFFParser } from \"./cff_parser.js\";\nimport { compileFontPathInfo } from \"./obj_bin_transform_core.js\";\nimport { getGlyphsUnicode } from \"./glyphlist.js\";\nimport { isNumberArray } from \"./core_utils.js\";\nimport { StandardEncoding } from \"./encodings.js\";\nimport { Stream } from \"./stream.js\";\n\nfunction getFloat214(view, offset) {\n  return view.getInt16(offset) / 16384;\n}\n\nfunction getSubroutineBias(subrs) {\n  const numSubrs = subrs.length;\n  if (numSubrs >= 33900) {\n    return 32768;\n  }\n  return numSubrs < 1240 ? 107 : 1131;\n}\n\nfunction parseCmap(data, start, end) {\n  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n  const offset =\n    view.getUint16(start + 2) === 1\n      ? view.getUint32(start + 8)\n      : view.getUint32(start + 16);\n  const format = view.getUint16(start + offset);\n  let ranges, p, i;\n  if (format === 4) {\n    // Skip length, at `start + offset + 2`.\n    const segCount = view.getUint16(start + offset + 6) >> 1;\n    p = start + offset + 14;\n    ranges = [];\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i] = { end: view.getUint16(p) };\n    }\n    p += 2;\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i].start = view.getUint16(p);\n    }\n    for (i = 0; i < segCount; i++, p += 2) {\n      ranges[i].idDelta = view.getUint16(p);\n    }\n    for (i = 0; i < segCount; i++, p += 2) {\n      let idOffset = view.getUint16(p);\n      if (idOffset === 0) {\n        continue;\n      }\n      ranges[i].ids = [];\n      for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {\n        ranges[i].ids[j] = view.getUint16(p + idOffset);\n        idOffset += 2;\n      }\n    }\n    return ranges;\n  } else if (format === 12) {\n    const groups = view.getUint32(start + offset + 12);\n    p = start + offset + 16;\n    ranges = [];\n    for (i = 0; i < groups; i++) {\n      start = view.getUint32(p);\n      ranges.push({\n        start,\n        end: view.getUint32(p + 4),\n        idDelta: view.getUint32(p + 8) - start,\n      });\n      p += 12;\n    }\n    return ranges;\n  }\n  throw new FormatError(`unsupported cmap: ${format}`);\n}\n\nfunction parseCff(data, start, end, seacAnalysisEnabled) {\n  const properties = {};\n  const parser = new CFFParser(\n    new Stream(data, start, end - start),\n    properties,\n    seacAnalysisEnabled\n  );\n  const cff = parser.parse();\n  return {\n    glyphs: cff.charStrings.objects,\n    subrs: cff.topDict.privateDict?.subrsIndex?.objects,\n    gsubrs: cff.globalSubrIndex?.objects,\n    isCFFCIDFont: cff.isCIDFont,\n    fdSelect: cff.fdSelect,\n    fdArray: cff.fdArray,\n  };\n}\n\nfunction parseGlyfTable(glyf, loca, isGlyphLocationsLong) {\n  const view = new DataView(loca.buffer, loca.byteOffset, loca.byteLength);\n  let itemSize, itemDecode;\n  if (isGlyphLocationsLong) {\n    itemSize = 4;\n    itemDecode = (dv, offset) => dv.getUint32(offset);\n  } else {\n    itemSize = 2;\n    itemDecode = (dv, offset) => 2 * dv.getUint16(offset);\n  }\n  const glyphs = [];\n  let startOffset = itemDecode(view, 0);\n  for (let j = itemSize; j < loca.length; j += itemSize) {\n    const endOffset = itemDecode(view, j);\n    glyphs.push(glyf.subarray(startOffset, endOffset));\n    startOffset = endOffset;\n  }\n  return glyphs;\n}\n\nfunction lookupCmap(ranges, unicode) {\n  const code = unicode.codePointAt(0);\n  let gid = 0,\n    l = 0,\n    r = ranges.length - 1;\n  while (l < r) {\n    const c = (l + r + 1) >> 1;\n    if (code < ranges[c].start) {\n      r = c - 1;\n    } else {\n      l = c;\n    }\n  }\n  if (ranges[l].start <= code && code <= ranges[l].end) {\n    gid =\n      (ranges[l].idDelta +\n        (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code)) &\n      0xffff;\n  }\n  return {\n    charCode: code,\n    glyphId: gid,\n  };\n}\n\nfunction compileGlyf(code, cmds, font, visitedGlyphs = new Set()) {\n  if (!code?.length) {\n    return;\n  }\n  if (visitedGlyphs.has(code)) {\n    warn(\"compileGlyf: skipping recursive composite glyph reference.\");\n    return;\n  }\n  visitedGlyphs.add(code);\n\n  function moveTo(x, y) {\n    if (firstPoint) {\n      // Close the current subpath in adding a straight line to the first point.\n      cmds.add(DrawOPS.lineTo, firstPoint);\n    }\n    firstPoint = [x, y];\n    cmds.add(DrawOPS.moveTo, [x, y]);\n  }\n  function lineTo(x, y) {\n    cmds.add(DrawOPS.lineTo, [x, y]);\n  }\n  function quadraticCurveTo(xa, ya, x, y) {\n    cmds.add(DrawOPS.quadraticCurveTo, [xa, ya, x, y]);\n  }\n\n  const view = new DataView(code.buffer, code.byteOffset, code.byteLength);\n  let i = 0;\n  const numberOfContours = view.getInt16(i);\n  let flags;\n  let firstPoint = null;\n  let x = 0,\n    y = 0;\n  i += 10;\n  if (numberOfContours < 0) {\n    // composite glyph\n    do {\n      flags = view.getUint16(i);\n      const glyphIndex = view.getUint16(i + 2);\n      i += 4;\n      let arg1, arg2;\n      if (flags & 0x01) {\n        if (flags & 0x02) {\n          arg1 = view.getInt16(i);\n          arg2 = view.getInt16(i + 2);\n        } else {\n          arg1 = view.getUint16(i);\n          arg2 = view.getUint16(i + 2);\n        }\n        i += 4;\n      } else if (flags & 0x02) {\n        arg1 = view.getInt8(i++);\n        arg2 = view.getInt8(i++);\n      } else {\n        arg1 = code[i++];\n        arg2 = code[i++];\n      }\n      if (flags & 0x02) {\n        x = arg1;\n        y = arg2;\n      } else {\n        x = 0;\n        y = 0;\n      }\n      let scaleX = 1,\n        scaleY = 1,\n        scale01 = 0,\n        scale10 = 0;\n      if (flags & 0x08) {\n        scaleX = scaleY = getFloat214(view, i);\n        i += 2;\n      } else if (flags & 0x40) {\n        scaleX = getFloat214(view, i);\n        scaleY = getFloat214(view, i + 2);\n        i += 4;\n      } else if (flags & 0x80) {\n        scaleX = getFloat214(view, i);\n        scale01 = getFloat214(view, i + 2);\n        scale10 = getFloat214(view, i + 4);\n        scaleY = getFloat214(view, i + 6);\n        i += 8;\n      }\n      const subglyph = font.glyphs[glyphIndex];\n      if (subglyph) {\n        // TODO: the transform should be applied only if there is a scale:\n        // https://github.com/freetype/freetype/blob/edd4fedc5427cf1cf1f4b045e53ff91eb282e9d4/src/truetype/ttgload.c#L1205\n        cmds.save();\n        cmds.transform([scaleX, scale01, scale10, scaleY, x, y]);\n\n        if (!(flags & 0x02)) {\n          // TODO: we must use arg1 and arg2 to make something similar to:\n          // https://github.com/freetype/freetype/blob/edd4fedc5427cf1cf1f4b045e53ff91eb282e9d4/src/truetype/ttgload.c#L1209\n        }\n        compileGlyf(subglyph, cmds, font, visitedGlyphs);\n        cmds.restore();\n      }\n    } while (flags & 0x20);\n  } else {\n    // simple glyph\n    const endPtsOfContours = [];\n    let j, jj;\n    for (j = 0; j < numberOfContours; j++) {\n      endPtsOfContours.push(view.getUint16(i));\n      i += 2;\n    }\n    const instructionLength = view.getUint16(i);\n    i += 2 + instructionLength; // skipping the instructions\n    const numberOfPoints = endPtsOfContours.at(-1) + 1;\n    const points = [];\n    while (points.length < numberOfPoints) {\n      flags = code[i++];\n      let repeat = 1;\n      if (flags & 0x08) {\n        repeat += code[i++];\n      }\n      while (repeat-- > 0) {\n        points.push({ flags });\n      }\n    }\n    for (j = 0; j < numberOfPoints; j++) {\n      switch (points[j].flags & 0x12) {\n        case 0x00:\n          x += view.getInt16(i);\n          i += 2;\n          break;\n        case 0x02:\n          x -= code[i++];\n          break;\n        case 0x12:\n          x += code[i++];\n          break;\n      }\n      points[j].x = x;\n    }\n    for (j = 0; j < numberOfPoints; j++) {\n      switch (points[j].flags & 0x24) {\n        case 0x00:\n          y += view.getInt16(i);\n          i += 2;\n          break;\n        case 0x04:\n          y -= code[i++];\n          break;\n        case 0x24:\n          y += code[i++];\n          break;\n      }\n      points[j].y = y;\n    }\n\n    let startPoint = 0;\n    for (i = 0; i < numberOfContours; i++) {\n      const endPoint = endPtsOfContours[i];\n      // contours might have implicit points, which is located in the middle\n      // between two neighboring off-curve points\n      const contour = points.slice(startPoint, endPoint + 1);\n      if (contour[0].flags & 1) {\n        contour.push(contour[0]); // using start point at the contour end\n      } else if (contour.at(-1).flags & 1) {\n        // first is off-curve point, trying to use one from the end\n        contour.unshift(contour.at(-1));\n      } else {\n        // start and end are off-curve points, creating implicit one\n        const p = {\n          flags: 1,\n          x: (contour[0].x + contour.at(-1).x) / 2,\n          y: (contour[0].y + contour.at(-1).y) / 2,\n        };\n        contour.unshift(p);\n        contour.push(p);\n      }\n      moveTo(contour[0].x, contour[0].y);\n      for (j = 1, jj = contour.length; j < jj; j++) {\n        if (contour[j].flags & 1) {\n          lineTo(contour[j].x, contour[j].y);\n        } else if (contour[j + 1].flags & 1) {\n          quadraticCurveTo(\n            contour[j].x,\n            contour[j].y,\n            contour[j + 1].x,\n            contour[j + 1].y\n          );\n          j++;\n        } else {\n          quadraticCurveTo(\n            contour[j].x,\n            contour[j].y,\n            (contour[j].x + contour[j + 1].x) / 2,\n            (contour[j].y + contour[j + 1].y) / 2\n          );\n        }\n      }\n      startPoint = endPoint + 1;\n    }\n  }\n  visitedGlyphs.delete(code);\n}\n\nfunction compileCharString(charStringCode, cmds, font, glyphId) {\n  function moveTo(x, y) {\n    if (firstPoint) {\n      // Close the current subpath in adding a straight line to the first point.\n      cmds.add(DrawOPS.lineTo, firstPoint);\n    }\n    firstPoint = [x, y];\n    cmds.add(DrawOPS.moveTo, [x, y]);\n  }\n  function lineTo(x, y) {\n    cmds.add(DrawOPS.lineTo, [x, y]);\n  }\n  function bezierCurveTo(x1, y1, x2, y2, x, y) {\n    cmds.add(DrawOPS.curveTo, [x1, y1, x2, y2, x, y]);\n  }\n\n  const stack = [];\n  let x = 0,\n    y = 0;\n  let stems = 0;\n  let firstPoint = null;\n\n  function parse(code) {\n    const view = new DataView(code.buffer, code.byteOffset, code.byteLength);\n    let i = 0;\n    while (i < code.length) {\n      let stackClean = false;\n      let v = code[i++];\n      let xa, xb, ya, yb, y1, y2, y3, n, subrCode;\n      switch (v) {\n        case 1: // hstem\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 3: // vstem\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 4: // vmoveto\n          y += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 5: // rlineto\n          while (stack.length > 0) {\n            x += stack.shift();\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 6: // hlineto\n          while (stack.length > 0) {\n            x += stack.shift();\n            lineTo(x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 7: // vlineto\n          while (stack.length > 0) {\n            y += stack.shift();\n            lineTo(x, y);\n            if (stack.length === 0) {\n              break;\n            }\n            x += stack.shift();\n            lineTo(x, y);\n          }\n          break;\n        case 8: // rrcurveto\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 10: // callsubr\n          n = stack.pop();\n          subrCode = null;\n          if (font.isCFFCIDFont) {\n            const fdIndex = font.fdSelect.getFDIndex(glyphId);\n            if (fdIndex >= 0 && fdIndex < font.fdArray.length) {\n              const fontDict = font.fdArray[fdIndex];\n              let subrs;\n              if (fontDict.privateDict?.subrsIndex) {\n                subrs = fontDict.privateDict.subrsIndex.objects;\n              }\n              if (subrs) {\n                // Add subroutine bias.\n                n += getSubroutineBias(subrs);\n                subrCode = subrs[n];\n              }\n            } else {\n              warn(\"Invalid fd index for glyph index.\");\n            }\n          } else {\n            subrCode = font.subrs[n + font.subrsBias];\n          }\n          if (subrCode) {\n            parse(subrCode);\n          }\n          break;\n        case 11: // return\n          return;\n        case 12:\n          v = code[i++];\n          switch (v) {\n            case 34: // flex\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              y1 = y + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y, xb, y1, x, y1);\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y1, xb, y, x, y);\n              break;\n            case 35: // flex\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              stack.pop(); // fd\n              break;\n            case 36: // hflex1\n              xa = x + stack.shift();\n              y1 = y + stack.shift();\n              xb = xa + stack.shift();\n              y2 = y1 + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y1, xb, y2, x, y2);\n              xa = x + stack.shift();\n              xb = xa + stack.shift();\n              y3 = y2 + stack.shift();\n              x = xb + stack.shift();\n              bezierCurveTo(xa, y2, xb, y3, x, y);\n              break;\n            case 37: // flex1\n              const x0 = x,\n                y0 = y;\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb + stack.shift();\n              y = yb + stack.shift();\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              xa = x + stack.shift();\n              ya = y + stack.shift();\n              xb = xa + stack.shift();\n              yb = ya + stack.shift();\n              x = xb;\n              y = yb;\n              if (Math.abs(x - x0) > Math.abs(y - y0)) {\n                x += stack.shift();\n              } else {\n                y += stack.shift();\n              }\n              bezierCurveTo(xa, ya, xb, yb, x, y);\n              break;\n            default:\n              throw new FormatError(`unknown operator: 12 ${v}`);\n          }\n          break;\n        case 14: // endchar\n          if (stack.length >= 4) {\n            const achar = stack.pop();\n            const bchar = stack.pop();\n            y = stack.pop();\n            x = stack.pop();\n            cmds.save();\n            cmds.translate(x, y);\n            let cmap = lookupCmap(\n              font.cmap,\n              String.fromCharCode(font.glyphNameMap[StandardEncoding[achar]])\n            );\n            compileCharString(\n              font.glyphs[cmap.glyphId],\n              cmds,\n              font,\n              cmap.glyphId\n            );\n            cmds.restore();\n\n            cmap = lookupCmap(\n              font.cmap,\n              String.fromCharCode(font.glyphNameMap[StandardEncoding[bchar]])\n            );\n            compileCharString(\n              font.glyphs[cmap.glyphId],\n              cmds,\n              font,\n              cmap.glyphId\n            );\n          }\n          return;\n        case 18: // hstemhm\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 19: // hintmask\n          stems += stack.length >> 1;\n          i += (stems + 7) >> 3;\n          stackClean = true;\n          break;\n        case 20: // cntrmask\n          stems += stack.length >> 1;\n          i += (stems + 7) >> 3;\n          stackClean = true;\n          break;\n        case 21: // rmoveto\n          y += stack.pop();\n          x += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 22: // hmoveto\n          x += stack.pop();\n          moveTo(x, y);\n          stackClean = true;\n          break;\n        case 23: // vstemhm\n          stems += stack.length >> 1;\n          stackClean = true;\n          break;\n        case 24: // rcurveline\n          while (stack.length > 2) {\n            xa = x + stack.shift();\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          x += stack.shift();\n          y += stack.shift();\n          lineTo(x, y);\n          break;\n        case 25: // rlinecurve\n          while (stack.length > 6) {\n            x += stack.shift();\n            y += stack.shift();\n            lineTo(x, y);\n          }\n          xa = x + stack.shift();\n          ya = y + stack.shift();\n          xb = xa + stack.shift();\n          yb = ya + stack.shift();\n          x = xb + stack.shift();\n          y = yb + stack.shift();\n          bezierCurveTo(xa, ya, xb, yb, x, y);\n          break;\n        case 26: // vvcurveto\n          if (stack.length % 2) {\n            x += stack.shift();\n          }\n          while (stack.length > 0) {\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb;\n            y = yb + stack.shift();\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 27: // hhcurveto\n          if (stack.length % 2) {\n            y += stack.shift();\n          }\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb;\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 28:\n          stack.push(view.getInt16(i));\n          i += 2;\n          break;\n        case 29: // callgsubr\n          n = stack.pop() + font.gsubrsBias;\n          subrCode = font.gsubrs[n];\n          if (subrCode) {\n            parse(subrCode);\n          }\n          break;\n        case 30: // vhcurveto\n          while (stack.length > 0) {\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n            if (stack.length === 0) {\n              break;\n            }\n\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            y = yb + stack.shift();\n            x = xb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        case 31: // hvcurveto\n          while (stack.length > 0) {\n            xa = x + stack.shift();\n            ya = y;\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            y = yb + stack.shift();\n            x = xb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n            if (stack.length === 0) {\n              break;\n            }\n\n            xa = x;\n            ya = y + stack.shift();\n            xb = xa + stack.shift();\n            yb = ya + stack.shift();\n            x = xb + stack.shift();\n            y = yb + (stack.length === 1 ? stack.shift() : 0);\n            bezierCurveTo(xa, ya, xb, yb, x, y);\n          }\n          break;\n        default:\n          if (v < 32) {\n            throw new FormatError(`unknown operator: ${v}`);\n          }\n          if (v < 247) {\n            stack.push(v - 139);\n          } else if (v < 251) {\n            stack.push((v - 247) * 256 + code[i++] + 108);\n          } else if (v < 255) {\n            stack.push(-(v - 251) * 256 - code[i++] - 108);\n          } else {\n            stack.push(view.getInt32(i) / 65536);\n            i += 4;\n          }\n          break;\n      }\n      if (stackClean) {\n        stack.length = 0;\n      }\n    }\n  }\n  parse(charStringCode);\n}\n\nclass Commands {\n  cmds = [];\n\n  transformStack = [];\n\n  currentTransform = [1, 0, 0, 1, 0, 0];\n\n  add(cmd, args) {\n    if (args) {\n      const { currentTransform } = this;\n      for (let i = 0, ii = args.length; i < ii; i += 2) {\n        Util.applyTransform(args, currentTransform, i);\n      }\n      this.cmds.push(cmd, ...args);\n    } else {\n      this.cmds.push(cmd);\n    }\n  }\n\n  transform(transf) {\n    this.currentTransform = Util.transform(this.currentTransform, transf);\n  }\n\n  translate(x, y) {\n    this.transform([1, 0, 0, 1, x, y]);\n  }\n\n  save() {\n    this.transformStack.push(this.currentTransform.slice());\n  }\n\n  restore() {\n    this.currentTransform = this.transformStack.pop() || [1, 0, 0, 1, 0, 0];\n  }\n\n  getPath() {\n    if (\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      FeatureTest.isFloat16ArraySupported\n    ) {\n      return new Float16Array(this.cmds);\n    }\n    return new Float32Array(this.cmds);\n  }\n}\n\nclass CompiledFont {\n  #compiledCharCodes = new Set();\n\n  #compiledGlyphs = new Map();\n\n  constructor(fontMatrix) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === CompiledFont\n    ) {\n      unreachable(\"Cannot initialize CompiledFont.\");\n    }\n    this.fontMatrix = fontMatrix;\n  }\n\n  static get NOOP() {\n    return shadow(\n      this,\n      \"NOOP\",\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        FeatureTest.isFloat16ArraySupported\n        ? new Float16Array(0)\n        : new Float32Array(0)\n    );\n  }\n\n  getPath(unicode) {\n    const { charCode, glyphId } = lookupCmap(this.cmap, unicode);\n\n    if (\n      this.#compiledGlyphs.has(glyphId) &&\n      this.#compiledCharCodes.has(charCode)\n    ) {\n      return null; // Previously compiled.\n    }\n\n    const path = this.#compiledGlyphs.getOrInsertComputed(glyphId, () => {\n      try {\n        return this.compileGlyph(this.glyphs[glyphId], glyphId);\n      } catch (ex) {\n        return ex; // Avoid attempting to re-compile a corrupt glyph.\n      }\n    });\n    this.#compiledCharCodes.add(charCode);\n\n    if (path instanceof Error) {\n      throw path;\n    }\n    return compileFontPathInfo(path);\n  }\n\n  compileGlyph(code, glyphId) {\n    if (!code?.length || code[0] === 14) {\n      return CompiledFont.NOOP;\n    }\n\n    let fontMatrix = this.fontMatrix;\n    if (this.isCFFCIDFont) {\n      // Top DICT's FontMatrix can be ignored because CFFCompiler always\n      // removes it and copies to FDArray DICTs.\n      const fdIndex = this.fdSelect.getFDIndex(glyphId);\n      if (fdIndex >= 0 && fdIndex < this.fdArray.length) {\n        const fontDict = this.fdArray[fdIndex];\n        fontMatrix = fontDict.getByName(\"FontMatrix\") || FONT_IDENTITY_MATRIX;\n      } else {\n        warn(\"Invalid fd index for glyph index.\");\n      }\n    }\n    assert(isNumberArray(fontMatrix, 6), \"Expected a valid fontMatrix.\");\n\n    const cmds = new Commands();\n    cmds.transform(fontMatrix.slice());\n    this.compileGlyphImpl(code, cmds, glyphId);\n    cmds.add(DrawOPS.closePath);\n\n    return cmds.getPath();\n  }\n\n  compileGlyphImpl() {\n    unreachable(\"Children classes should implement this.\");\n  }\n}\n\nclass TrueTypeCompiled extends CompiledFont {\n  constructor(glyphs, cmap, fontMatrix) {\n    super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);\n\n    this.glyphs = glyphs;\n    this.cmap = cmap;\n  }\n\n  compileGlyphImpl(code, cmds) {\n    compileGlyf(code, cmds, this);\n  }\n}\n\nclass Type2Compiled extends CompiledFont {\n  constructor(cffInfo, cmap, fontMatrix) {\n    super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);\n\n    this.glyphs = cffInfo.glyphs;\n    this.gsubrs = cffInfo.gsubrs || [];\n    this.subrs = cffInfo.subrs || [];\n    this.cmap = cmap;\n    this.glyphNameMap = getGlyphsUnicode();\n\n    this.gsubrsBias = getSubroutineBias(this.gsubrs);\n    this.subrsBias = getSubroutineBias(this.subrs);\n\n    this.isCFFCIDFont = cffInfo.isCFFCIDFont;\n    this.fdSelect = cffInfo.fdSelect;\n    this.fdArray = cffInfo.fdArray;\n  }\n\n  compileGlyphImpl(code, cmds, glyphId) {\n    compileCharString(code, cmds, this, glyphId);\n  }\n}\n\nclass FontRendererFactory {\n  static create(font, seacAnalysisEnabled) {\n    const data = new Uint8Array(font.data),\n      view = new DataView(data.buffer);\n    let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;\n    const numTables = view.getUint16(4);\n    for (let i = 0, p = 12; i < numTables; i++, p += 16) {\n      const tag = bytesToString(data.subarray(p, p + 4));\n      const offset = view.getUint32(p + 8);\n      const length = view.getUint32(p + 12);\n      switch (tag) {\n        case \"cmap\":\n          cmap = parseCmap(data, offset, offset + length);\n          break;\n        case \"glyf\":\n          glyf = data.subarray(offset, offset + length);\n          break;\n        case \"loca\":\n          loca = data.subarray(offset, offset + length);\n          break;\n        case \"head\":\n          unitsPerEm = view.getUint16(offset + 18);\n          indexToLocFormat = view.getUint16(offset + 50);\n          break;\n        case \"CFF \":\n          cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);\n          break;\n      }\n    }\n\n    if (glyf) {\n      const fontMatrix = !unitsPerEm\n        ? font.fontMatrix\n        : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];\n      return new TrueTypeCompiled(\n        parseGlyfTable(glyf, loca, indexToLocFormat),\n        cmap,\n        fontMatrix\n      );\n    }\n    return new Type2Compiled(cff, cmap, font.fontMatrix);\n  }\n}\n\nexport { FontRendererFactory };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getLookupTableFactory } from \"./core_utils.js\";\n\n// The Metrics object contains glyph widths (in glyph space units).\n// As per PDF spec, for most fonts (Type 3 being an exception) a glyph\n// space unit corresponds to 1/1000th of text space unit.\nconst getMetrics = getLookupTableFactory(function (t) {\n  t.Courier = 600;\n  t[\"Courier-Bold\"] = 600;\n  t[\"Courier-BoldOblique\"] = 600;\n  t[\"Courier-Oblique\"] = 600;\n  // eslint-disable-next-line no-shadow\n  t.Helvetica = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 278;\n    t.quotedbl = 355;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 667;\n    t.quoteright = 222;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 556;\n    t.at = 1015;\n    t.A = 667;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 500;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 278;\n    t.backslash = 278;\n    t.bracketright = 278;\n    t.asciicircum = 469;\n    t.underscore = 556;\n    t.quoteleft = 222;\n    t.a = 556;\n    t.b = 556;\n    t.c = 500;\n    t.d = 556;\n    t.e = 556;\n    t.f = 278;\n    t.g = 556;\n    t.h = 556;\n    t.i = 222;\n    t.j = 222;\n    t.k = 500;\n    t.l = 222;\n    t.m = 833;\n    t.n = 556;\n    t.o = 556;\n    t.p = 556;\n    t.q = 556;\n    t.r = 333;\n    t.s = 500;\n    t.t = 278;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 500;\n    t.braceleft = 334;\n    t.bar = 260;\n    t.braceright = 334;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 191;\n    t.quotedblleft = 333;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 537;\n    t.bullet = 350;\n    t.quotesinglbase = 222;\n    t.quotedblbase = 333;\n    t.quotedblright = 333;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 556;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 222;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 556;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 667;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 500;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 500;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 222;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 500;\n    t.scedilla = 500;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 556;\n    t.Amacron = 667;\n    t.rcaron = 333;\n    t.ccedilla = 500;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 643;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 584;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 500;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 260;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 333;\n    t.omacron = 556;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 222;\n    t.tcaron = 317;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 222;\n    t.Oacute = 778;\n    t.oacute = 556;\n    t.amacron = 556;\n    t.sacute = 500;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 556;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 299;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 556;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 556;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 556;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 556;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 556;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 556;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 500;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 584;\n    t.odieresis = 556;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 556;\n    t.eth = 556;\n    t.zcaron = 500;\n    t.ncommaaccent = 556;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Helvetica-Bold\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 333;\n    t.quotedbl = 474;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 722;\n    t.quoteright = 278;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 611;\n    t.at = 975;\n    t.A = 722;\n    t.B = 722;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 556;\n    t.K = 722;\n    t.L = 611;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 584;\n    t.underscore = 556;\n    t.quoteleft = 278;\n    t.a = 556;\n    t.b = 611;\n    t.c = 556;\n    t.d = 611;\n    t.e = 556;\n    t.f = 333;\n    t.g = 611;\n    t.h = 611;\n    t.i = 278;\n    t.j = 278;\n    t.k = 556;\n    t.l = 278;\n    t.m = 889;\n    t.n = 611;\n    t.o = 611;\n    t.p = 611;\n    t.q = 611;\n    t.r = 389;\n    t.s = 556;\n    t.t = 333;\n    t.u = 611;\n    t.v = 556;\n    t.w = 778;\n    t.x = 556;\n    t.y = 556;\n    t.z = 500;\n    t.braceleft = 389;\n    t.bar = 280;\n    t.braceright = 389;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 238;\n    t.quotedblleft = 500;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 611;\n    t.fl = 611;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 556;\n    t.bullet = 350;\n    t.quotesinglbase = 278;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 611;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 611;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 722;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 556;\n    t.scommaaccent = 556;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 611;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 556;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 556;\n    t.scedilla = 556;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 611;\n    t.acircumflex = 556;\n    t.Amacron = 722;\n    t.rcaron = 389;\n    t.ccedilla = 556;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 743;\n    t.Umacron = 722;\n    t.uring = 611;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 584;\n    t.uacute = 611;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 556;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 556;\n    t.nacute = 611;\n    t.umacron = 611;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 280;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 611;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 389;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 611;\n    t.amacron = 556;\n    t.sacute = 556;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 611;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 611;\n    t.igrave = 278;\n    t.ohungarumlaut = 611;\n    t.Eogonek = 667;\n    t.dcroat = 611;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 400;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 611;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 611;\n    t.ntilde = 611;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 611;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 611;\n    t.Ccaron = 722;\n    t.ugrave = 611;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 611;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 556;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 611;\n    t.tcommaaccent = 333;\n    t.logicalnot = 584;\n    t.odieresis = 611;\n    t.udieresis = 611;\n    t.notequal = 549;\n    t.gcommaaccent = 611;\n    t.eth = 611;\n    t.zcaron = 500;\n    t.ncommaaccent = 611;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Helvetica-BoldOblique\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 333;\n    t.quotedbl = 474;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 722;\n    t.quoteright = 278;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 611;\n    t.at = 975;\n    t.A = 722;\n    t.B = 722;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 556;\n    t.K = 722;\n    t.L = 611;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 584;\n    t.underscore = 556;\n    t.quoteleft = 278;\n    t.a = 556;\n    t.b = 611;\n    t.c = 556;\n    t.d = 611;\n    t.e = 556;\n    t.f = 333;\n    t.g = 611;\n    t.h = 611;\n    t.i = 278;\n    t.j = 278;\n    t.k = 556;\n    t.l = 278;\n    t.m = 889;\n    t.n = 611;\n    t.o = 611;\n    t.p = 611;\n    t.q = 611;\n    t.r = 389;\n    t.s = 556;\n    t.t = 333;\n    t.u = 611;\n    t.v = 556;\n    t.w = 778;\n    t.x = 556;\n    t.y = 556;\n    t.z = 500;\n    t.braceleft = 389;\n    t.bar = 280;\n    t.braceright = 389;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 238;\n    t.quotedblleft = 500;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 611;\n    t.fl = 611;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 556;\n    t.bullet = 350;\n    t.quotesinglbase = 278;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 611;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 611;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 722;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 556;\n    t.scommaaccent = 556;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 611;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 556;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 556;\n    t.scedilla = 556;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 611;\n    t.acircumflex = 556;\n    t.Amacron = 722;\n    t.rcaron = 389;\n    t.ccedilla = 556;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 743;\n    t.Umacron = 722;\n    t.uring = 611;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 584;\n    t.uacute = 611;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 556;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 556;\n    t.nacute = 611;\n    t.umacron = 611;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 280;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 611;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 389;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 611;\n    t.amacron = 556;\n    t.sacute = 556;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 611;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 611;\n    t.igrave = 278;\n    t.ohungarumlaut = 611;\n    t.Eogonek = 667;\n    t.dcroat = 611;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 400;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 611;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 611;\n    t.ntilde = 611;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 611;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 611;\n    t.Ccaron = 722;\n    t.ugrave = 611;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 611;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 556;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 611;\n    t.tcommaaccent = 333;\n    t.logicalnot = 584;\n    t.odieresis = 611;\n    t.udieresis = 611;\n    t.notequal = 549;\n    t.gcommaaccent = 611;\n    t.eth = 611;\n    t.zcaron = 500;\n    t.ncommaaccent = 611;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Helvetica-Oblique\"] = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.exclam = 278;\n    t.quotedbl = 355;\n    t.numbersign = 556;\n    t.dollar = 556;\n    t.percent = 889;\n    t.ampersand = 667;\n    t.quoteright = 222;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 389;\n    t.plus = 584;\n    t.comma = 278;\n    t.hyphen = 333;\n    t.period = 278;\n    t.slash = 278;\n    t.zero = 556;\n    t.one = 556;\n    t.two = 556;\n    t.three = 556;\n    t.four = 556;\n    t.five = 556;\n    t.six = 556;\n    t.seven = 556;\n    t.eight = 556;\n    t.nine = 556;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 584;\n    t.equal = 584;\n    t.greater = 584;\n    t.question = 556;\n    t.at = 1015;\n    t.A = 667;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 722;\n    t.I = 278;\n    t.J = 500;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 722;\n    t.O = 778;\n    t.P = 667;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 667;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 944;\n    t.X = 667;\n    t.Y = 667;\n    t.Z = 611;\n    t.bracketleft = 278;\n    t.backslash = 278;\n    t.bracketright = 278;\n    t.asciicircum = 469;\n    t.underscore = 556;\n    t.quoteleft = 222;\n    t.a = 556;\n    t.b = 556;\n    t.c = 500;\n    t.d = 556;\n    t.e = 556;\n    t.f = 278;\n    t.g = 556;\n    t.h = 556;\n    t.i = 222;\n    t.j = 222;\n    t.k = 500;\n    t.l = 222;\n    t.m = 833;\n    t.n = 556;\n    t.o = 556;\n    t.p = 556;\n    t.q = 556;\n    t.r = 333;\n    t.s = 500;\n    t.t = 278;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 500;\n    t.braceleft = 334;\n    t.bar = 260;\n    t.braceright = 334;\n    t.asciitilde = 584;\n    t.exclamdown = 333;\n    t.cent = 556;\n    t.sterling = 556;\n    t.fraction = 167;\n    t.yen = 556;\n    t.florin = 556;\n    t.section = 556;\n    t.currency = 556;\n    t.quotesingle = 191;\n    t.quotedblleft = 333;\n    t.guillemotleft = 556;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 556;\n    t.dagger = 556;\n    t.daggerdbl = 556;\n    t.periodcentered = 278;\n    t.paragraph = 537;\n    t.bullet = 350;\n    t.quotesinglbase = 222;\n    t.quotedblbase = 333;\n    t.quotedblright = 333;\n    t.guillemotright = 556;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 611;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 370;\n    t.Lslash = 556;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 365;\n    t.ae = 889;\n    t.dotlessi = 278;\n    t.lslash = 222;\n    t.oslash = 611;\n    t.oe = 944;\n    t.germandbls = 611;\n    t.Idieresis = 278;\n    t.eacute = 556;\n    t.abreve = 556;\n    t.uhungarumlaut = 556;\n    t.ecaron = 556;\n    t.Ydieresis = 667;\n    t.divide = 584;\n    t.Yacute = 667;\n    t.Acircumflex = 667;\n    t.aacute = 556;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 500;\n    t.ecircumflex = 556;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 556;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 737;\n    t.Emacron = 667;\n    t.ccaron = 500;\n    t.aring = 556;\n    t.Ncommaaccent = 722;\n    t.lacute = 222;\n    t.agrave = 556;\n    t.Tcommaaccent = 611;\n    t.Cacute = 722;\n    t.atilde = 556;\n    t.Edotaccent = 667;\n    t.scaron = 500;\n    t.scedilla = 500;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 556;\n    t.Amacron = 667;\n    t.rcaron = 333;\n    t.ccedilla = 500;\n    t.Zdotaccent = 611;\n    t.Thorn = 667;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 667;\n    t.dcaron = 643;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 333;\n    t.Ograve = 778;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 584;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 556;\n    t.edieresis = 556;\n    t.cacute = 500;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 278;\n    t.plusminus = 584;\n    t.brokenbar = 260;\n    t.registered = 737;\n    t.Gbreve = 778;\n    t.Idotaccent = 278;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 333;\n    t.omacron = 556;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 222;\n    t.tcaron = 317;\n    t.eogonek = 556;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 556;\n    t.zacute = 500;\n    t.iogonek = 222;\n    t.Oacute = 778;\n    t.oacute = 556;\n    t.amacron = 556;\n    t.sacute = 500;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 333;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 556;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 834;\n    t.Scedilla = 667;\n    t.lcaron = 299;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 1000;\n    t.edotaccent = 556;\n    t.Igrave = 278;\n    t.Imacron = 278;\n    t.Lcaron = 556;\n    t.onehalf = 834;\n    t.lessequal = 549;\n    t.ocircumflex = 556;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 556;\n    t.gbreve = 556;\n    t.onequarter = 834;\n    t.Scaron = 667;\n    t.Scommaaccent = 667;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 556;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 556;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 556;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 778;\n    t.zdotaccent = 500;\n    t.Ecaron = 667;\n    t.Iogonek = 278;\n    t.kcommaaccent = 500;\n    t.minus = 584;\n    t.Icircumflex = 278;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 584;\n    t.odieresis = 556;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 556;\n    t.eth = 556;\n    t.zcaron = 500;\n    t.ncommaaccent = 556;\n    t.onesuperior = 333;\n    t.imacron = 278;\n    t.Euro = 556;\n  });\n  // eslint-disable-next-line no-shadow\n  t.Symbol = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.universal = 713;\n    t.numbersign = 500;\n    t.existential = 549;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.suchthat = 439;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asteriskmath = 500;\n    t.plus = 549;\n    t.comma = 250;\n    t.minus = 549;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 549;\n    t.equal = 549;\n    t.greater = 549;\n    t.question = 444;\n    t.congruent = 549;\n    t.Alpha = 722;\n    t.Beta = 667;\n    t.Chi = 722;\n    t.Delta = 612;\n    t.Epsilon = 611;\n    t.Phi = 763;\n    t.Gamma = 603;\n    t.Eta = 722;\n    t.Iota = 333;\n    t.theta1 = 631;\n    t.Kappa = 722;\n    t.Lambda = 686;\n    t.Mu = 889;\n    t.Nu = 722;\n    t.Omicron = 722;\n    t.Pi = 768;\n    t.Theta = 741;\n    t.Rho = 556;\n    t.Sigma = 592;\n    t.Tau = 611;\n    t.Upsilon = 690;\n    t.sigma1 = 439;\n    t.Omega = 768;\n    t.Xi = 645;\n    t.Psi = 795;\n    t.Zeta = 611;\n    t.bracketleft = 333;\n    t.therefore = 863;\n    t.bracketright = 333;\n    t.perpendicular = 658;\n    t.underscore = 500;\n    t.radicalex = 500;\n    t.alpha = 631;\n    t.beta = 549;\n    t.chi = 549;\n    t.delta = 494;\n    t.epsilon = 439;\n    t.phi = 521;\n    t.gamma = 411;\n    t.eta = 603;\n    t.iota = 329;\n    t.phi1 = 603;\n    t.kappa = 549;\n    t.lambda = 549;\n    t.mu = 576;\n    t.nu = 521;\n    t.omicron = 549;\n    t.pi = 549;\n    t.theta = 521;\n    t.rho = 549;\n    t.sigma = 603;\n    t.tau = 439;\n    t.upsilon = 576;\n    t.omega1 = 713;\n    t.omega = 686;\n    t.xi = 493;\n    t.psi = 686;\n    t.zeta = 494;\n    t.braceleft = 480;\n    t.bar = 200;\n    t.braceright = 480;\n    t.similar = 549;\n    t.Euro = 750;\n    t.Upsilon1 = 620;\n    t.minute = 247;\n    t.lessequal = 549;\n    t.fraction = 167;\n    t.infinity = 713;\n    t.florin = 500;\n    t.club = 753;\n    t.diamond = 753;\n    t.heart = 753;\n    t.spade = 753;\n    t.arrowboth = 1042;\n    t.arrowleft = 987;\n    t.arrowup = 603;\n    t.arrowright = 987;\n    t.arrowdown = 603;\n    t.degree = 400;\n    t.plusminus = 549;\n    t.second = 411;\n    t.greaterequal = 549;\n    t.multiply = 549;\n    t.proportional = 713;\n    t.partialdiff = 494;\n    t.bullet = 460;\n    t.divide = 549;\n    t.notequal = 549;\n    t.equivalence = 549;\n    t.approxequal = 549;\n    t.ellipsis = 1000;\n    t.arrowvertex = 603;\n    t.arrowhorizex = 1000;\n    t.carriagereturn = 658;\n    t.aleph = 823;\n    t.Ifraktur = 686;\n    t.Rfraktur = 795;\n    t.weierstrass = 987;\n    t.circlemultiply = 768;\n    t.circleplus = 768;\n    t.emptyset = 823;\n    t.intersection = 768;\n    t.union = 768;\n    t.propersuperset = 713;\n    t.reflexsuperset = 713;\n    t.notsubset = 713;\n    t.propersubset = 713;\n    t.reflexsubset = 713;\n    t.element = 713;\n    t.notelement = 713;\n    t.angle = 768;\n    t.gradient = 713;\n    t.registerserif = 790;\n    t.copyrightserif = 790;\n    t.trademarkserif = 890;\n    t.product = 823;\n    t.radical = 549;\n    t.dotmath = 250;\n    t.logicalnot = 713;\n    t.logicaland = 603;\n    t.logicalor = 603;\n    t.arrowdblboth = 1042;\n    t.arrowdblleft = 987;\n    t.arrowdblup = 603;\n    t.arrowdblright = 987;\n    t.arrowdbldown = 603;\n    t.lozenge = 494;\n    t.angleleft = 329;\n    t.registersans = 790;\n    t.copyrightsans = 790;\n    t.trademarksans = 786;\n    t.summation = 713;\n    t.parenlefttp = 384;\n    t.parenleftex = 384;\n    t.parenleftbt = 384;\n    t.bracketlefttp = 384;\n    t.bracketleftex = 384;\n    t.bracketleftbt = 384;\n    t.bracelefttp = 494;\n    t.braceleftmid = 494;\n    t.braceleftbt = 494;\n    t.braceex = 494;\n    t.angleright = 329;\n    t.integral = 274;\n    t.integraltp = 686;\n    t.integralex = 686;\n    t.integralbt = 686;\n    t.parenrighttp = 384;\n    t.parenrightex = 384;\n    t.parenrightbt = 384;\n    t.bracketrighttp = 384;\n    t.bracketrightex = 384;\n    t.bracketrightbt = 384;\n    t.bracerighttp = 494;\n    t.bracerightmid = 494;\n    t.bracerightbt = 494;\n    t.apple = 790;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Times-Roman\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 408;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 564;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 278;\n    t.semicolon = 278;\n    t.less = 564;\n    t.equal = 564;\n    t.greater = 564;\n    t.question = 444;\n    t.at = 921;\n    t.A = 722;\n    t.B = 667;\n    t.C = 667;\n    t.D = 722;\n    t.E = 611;\n    t.F = 556;\n    t.G = 722;\n    t.H = 722;\n    t.I = 333;\n    t.J = 389;\n    t.K = 722;\n    t.L = 611;\n    t.M = 889;\n    t.N = 722;\n    t.O = 722;\n    t.P = 556;\n    t.Q = 722;\n    t.R = 667;\n    t.S = 556;\n    t.T = 611;\n    t.U = 722;\n    t.V = 722;\n    t.W = 944;\n    t.X = 722;\n    t.Y = 722;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 469;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 444;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 500;\n    t.i = 278;\n    t.j = 278;\n    t.k = 500;\n    t.l = 278;\n    t.m = 778;\n    t.n = 500;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 333;\n    t.s = 389;\n    t.t = 278;\n    t.u = 500;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 444;\n    t.braceleft = 480;\n    t.bar = 200;\n    t.braceright = 480;\n    t.asciitilde = 541;\n    t.exclamdown = 333;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 180;\n    t.quotedblleft = 444;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 453;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 444;\n    t.quotedblright = 444;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 444;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 889;\n    t.ordfeminine = 276;\n    t.Lslash = 611;\n    t.Oslash = 722;\n    t.OE = 889;\n    t.ordmasculine = 310;\n    t.ae = 667;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 500;\n    t.Idieresis = 333;\n    t.eacute = 444;\n    t.abreve = 444;\n    t.uhungarumlaut = 500;\n    t.ecaron = 444;\n    t.Ydieresis = 722;\n    t.divide = 564;\n    t.Yacute = 722;\n    t.Acircumflex = 722;\n    t.aacute = 444;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 444;\n    t.Uacute = 722;\n    t.uogonek = 500;\n    t.Edieresis = 611;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 760;\n    t.Emacron = 611;\n    t.ccaron = 444;\n    t.aring = 444;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 444;\n    t.Tcommaaccent = 611;\n    t.Cacute = 667;\n    t.atilde = 444;\n    t.Edotaccent = 611;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 667;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 500;\n    t.acircumflex = 444;\n    t.Amacron = 722;\n    t.rcaron = 333;\n    t.ccedilla = 444;\n    t.Zdotaccent = 611;\n    t.Thorn = 556;\n    t.Omacron = 722;\n    t.Racute = 667;\n    t.Sacute = 556;\n    t.dcaron = 588;\n    t.Umacron = 722;\n    t.uring = 500;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 564;\n    t.uacute = 500;\n    t.Tcaron = 611;\n    t.partialdiff = 476;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 611;\n    t.adieresis = 444;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 500;\n    t.umacron = 500;\n    t.Ncaron = 722;\n    t.Iacute = 333;\n    t.plusminus = 564;\n    t.brokenbar = 200;\n    t.registered = 760;\n    t.Gbreve = 722;\n    t.Idotaccent = 333;\n    t.summation = 600;\n    t.Egrave = 611;\n    t.racute = 333;\n    t.omacron = 500;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 326;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 444;\n    t.zacute = 444;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 444;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 500;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 611;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 344;\n    t.Kcommaaccent = 722;\n    t.Lacute = 611;\n    t.trademark = 980;\n    t.edotaccent = 444;\n    t.Igrave = 333;\n    t.Imacron = 333;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 500;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 611;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 500;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 333;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 667;\n    t.Lcommaaccent = 611;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 722;\n    t.zdotaccent = 444;\n    t.Ecaron = 611;\n    t.Iogonek = 333;\n    t.kcommaaccent = 500;\n    t.minus = 564;\n    t.Icircumflex = 333;\n    t.ncaron = 500;\n    t.tcommaaccent = 278;\n    t.logicalnot = 564;\n    t.odieresis = 500;\n    t.udieresis = 500;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 444;\n    t.ncommaaccent = 500;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Times-Bold\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 555;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 1000;\n    t.ampersand = 833;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 570;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 570;\n    t.equal = 570;\n    t.greater = 570;\n    t.question = 500;\n    t.at = 930;\n    t.A = 722;\n    t.B = 667;\n    t.C = 722;\n    t.D = 722;\n    t.E = 667;\n    t.F = 611;\n    t.G = 778;\n    t.H = 778;\n    t.I = 389;\n    t.J = 500;\n    t.K = 778;\n    t.L = 667;\n    t.M = 944;\n    t.N = 722;\n    t.O = 778;\n    t.P = 611;\n    t.Q = 778;\n    t.R = 722;\n    t.S = 556;\n    t.T = 667;\n    t.U = 722;\n    t.V = 722;\n    t.W = 1000;\n    t.X = 722;\n    t.Y = 722;\n    t.Z = 667;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 581;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 556;\n    t.c = 444;\n    t.d = 556;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 556;\n    t.i = 278;\n    t.j = 333;\n    t.k = 556;\n    t.l = 278;\n    t.m = 833;\n    t.n = 556;\n    t.o = 500;\n    t.p = 556;\n    t.q = 556;\n    t.r = 444;\n    t.s = 389;\n    t.t = 333;\n    t.u = 556;\n    t.v = 500;\n    t.w = 722;\n    t.x = 500;\n    t.y = 500;\n    t.z = 444;\n    t.braceleft = 394;\n    t.bar = 220;\n    t.braceright = 394;\n    t.asciitilde = 520;\n    t.exclamdown = 333;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 278;\n    t.quotedblleft = 500;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 540;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 1000;\n    t.ordfeminine = 300;\n    t.Lslash = 667;\n    t.Oslash = 778;\n    t.OE = 1000;\n    t.ordmasculine = 330;\n    t.ae = 722;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 556;\n    t.Idieresis = 389;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 556;\n    t.ecaron = 444;\n    t.Ydieresis = 722;\n    t.divide = 570;\n    t.Yacute = 722;\n    t.Acircumflex = 722;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 500;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 747;\n    t.Emacron = 667;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 667;\n    t.Cacute = 722;\n    t.atilde = 500;\n    t.Edotaccent = 667;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 722;\n    t.Gcommaaccent = 778;\n    t.ucircumflex = 556;\n    t.acircumflex = 500;\n    t.Amacron = 722;\n    t.rcaron = 444;\n    t.ccedilla = 444;\n    t.Zdotaccent = 667;\n    t.Thorn = 611;\n    t.Omacron = 778;\n    t.Racute = 722;\n    t.Sacute = 556;\n    t.dcaron = 672;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 300;\n    t.Ograve = 778;\n    t.Agrave = 722;\n    t.Abreve = 722;\n    t.multiply = 570;\n    t.uacute = 556;\n    t.Tcaron = 667;\n    t.partialdiff = 494;\n    t.ydieresis = 500;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 389;\n    t.plusminus = 570;\n    t.brokenbar = 220;\n    t.registered = 747;\n    t.Gbreve = 778;\n    t.Idotaccent = 389;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 444;\n    t.omacron = 500;\n    t.Zacute = 667;\n    t.Zcaron = 667;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 722;\n    t.lcommaaccent = 278;\n    t.tcaron = 416;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 722;\n    t.Adieresis = 722;\n    t.egrave = 444;\n    t.zacute = 444;\n    t.iogonek = 278;\n    t.Oacute = 778;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 778;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 556;\n    t.twosuperior = 300;\n    t.Odieresis = 778;\n    t.mu = 556;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 667;\n    t.dcroat = 556;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 394;\n    t.Kcommaaccent = 778;\n    t.Lacute = 667;\n    t.trademark = 1000;\n    t.edotaccent = 444;\n    t.Igrave = 389;\n    t.Imacron = 389;\n    t.Lcaron = 667;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 778;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 722;\n    t.ugrave = 556;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 444;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 722;\n    t.Lcommaaccent = 667;\n    t.Atilde = 722;\n    t.Aogonek = 722;\n    t.Aring = 722;\n    t.Otilde = 778;\n    t.zdotaccent = 444;\n    t.Ecaron = 667;\n    t.Iogonek = 389;\n    t.kcommaaccent = 556;\n    t.minus = 570;\n    t.Icircumflex = 389;\n    t.ncaron = 556;\n    t.tcommaaccent = 333;\n    t.logicalnot = 570;\n    t.odieresis = 500;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 444;\n    t.ncommaaccent = 556;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Times-BoldItalic\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 389;\n    t.quotedbl = 555;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 570;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 570;\n    t.equal = 570;\n    t.greater = 570;\n    t.question = 500;\n    t.at = 832;\n    t.A = 667;\n    t.B = 667;\n    t.C = 667;\n    t.D = 722;\n    t.E = 667;\n    t.F = 667;\n    t.G = 722;\n    t.H = 778;\n    t.I = 389;\n    t.J = 500;\n    t.K = 667;\n    t.L = 611;\n    t.M = 889;\n    t.N = 722;\n    t.O = 722;\n    t.P = 611;\n    t.Q = 722;\n    t.R = 667;\n    t.S = 556;\n    t.T = 611;\n    t.U = 722;\n    t.V = 667;\n    t.W = 889;\n    t.X = 667;\n    t.Y = 611;\n    t.Z = 611;\n    t.bracketleft = 333;\n    t.backslash = 278;\n    t.bracketright = 333;\n    t.asciicircum = 570;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 333;\n    t.g = 500;\n    t.h = 556;\n    t.i = 278;\n    t.j = 278;\n    t.k = 500;\n    t.l = 278;\n    t.m = 778;\n    t.n = 556;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 389;\n    t.s = 389;\n    t.t = 278;\n    t.u = 556;\n    t.v = 444;\n    t.w = 667;\n    t.x = 500;\n    t.y = 444;\n    t.z = 389;\n    t.braceleft = 348;\n    t.bar = 220;\n    t.braceright = 348;\n    t.asciitilde = 570;\n    t.exclamdown = 389;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 278;\n    t.quotedblleft = 500;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 556;\n    t.fl = 556;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 500;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 500;\n    t.quotedblright = 500;\n    t.guillemotright = 500;\n    t.ellipsis = 1000;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 1000;\n    t.AE = 944;\n    t.ordfeminine = 266;\n    t.Lslash = 611;\n    t.Oslash = 722;\n    t.OE = 944;\n    t.ordmasculine = 300;\n    t.ae = 722;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 722;\n    t.germandbls = 500;\n    t.Idieresis = 389;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 556;\n    t.ecaron = 444;\n    t.Ydieresis = 611;\n    t.divide = 570;\n    t.Yacute = 611;\n    t.Acircumflex = 667;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 444;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 556;\n    t.Edieresis = 667;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 747;\n    t.Emacron = 667;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 722;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 611;\n    t.Cacute = 667;\n    t.atilde = 500;\n    t.Edotaccent = 667;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 494;\n    t.Rcaron = 667;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 556;\n    t.acircumflex = 500;\n    t.Amacron = 667;\n    t.rcaron = 389;\n    t.ccedilla = 444;\n    t.Zdotaccent = 611;\n    t.Thorn = 611;\n    t.Omacron = 722;\n    t.Racute = 667;\n    t.Sacute = 556;\n    t.dcaron = 608;\n    t.Umacron = 722;\n    t.uring = 556;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 667;\n    t.Abreve = 667;\n    t.multiply = 570;\n    t.uacute = 556;\n    t.Tcaron = 611;\n    t.partialdiff = 494;\n    t.ydieresis = 444;\n    t.Nacute = 722;\n    t.icircumflex = 278;\n    t.Ecircumflex = 667;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 556;\n    t.umacron = 556;\n    t.Ncaron = 722;\n    t.Iacute = 389;\n    t.plusminus = 570;\n    t.brokenbar = 220;\n    t.registered = 747;\n    t.Gbreve = 722;\n    t.Idotaccent = 389;\n    t.summation = 600;\n    t.Egrave = 667;\n    t.racute = 389;\n    t.omacron = 500;\n    t.Zacute = 611;\n    t.Zcaron = 611;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 366;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 667;\n    t.Adieresis = 667;\n    t.egrave = 444;\n    t.zacute = 389;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 576;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 667;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 556;\n    t.lcaron = 382;\n    t.Kcommaaccent = 667;\n    t.Lacute = 611;\n    t.trademark = 1000;\n    t.edotaccent = 444;\n    t.Igrave = 389;\n    t.Imacron = 389;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 556;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 667;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 556;\n    t.Scommaaccent = 556;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 556;\n    t.radical = 549;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 722;\n    t.otilde = 500;\n    t.Rcommaaccent = 667;\n    t.Lcommaaccent = 611;\n    t.Atilde = 667;\n    t.Aogonek = 667;\n    t.Aring = 667;\n    t.Otilde = 722;\n    t.zdotaccent = 389;\n    t.Ecaron = 667;\n    t.Iogonek = 389;\n    t.kcommaaccent = 500;\n    t.minus = 606;\n    t.Icircumflex = 389;\n    t.ncaron = 556;\n    t.tcommaaccent = 278;\n    t.logicalnot = 606;\n    t.odieresis = 500;\n    t.udieresis = 556;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 389;\n    t.ncommaaccent = 556;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  // eslint-disable-next-line no-shadow\n  t[\"Times-Italic\"] = getLookupTableFactory(function (t) {\n    t.space = 250;\n    t.exclam = 333;\n    t.quotedbl = 420;\n    t.numbersign = 500;\n    t.dollar = 500;\n    t.percent = 833;\n    t.ampersand = 778;\n    t.quoteright = 333;\n    t.parenleft = 333;\n    t.parenright = 333;\n    t.asterisk = 500;\n    t.plus = 675;\n    t.comma = 250;\n    t.hyphen = 333;\n    t.period = 250;\n    t.slash = 278;\n    t.zero = 500;\n    t.one = 500;\n    t.two = 500;\n    t.three = 500;\n    t.four = 500;\n    t.five = 500;\n    t.six = 500;\n    t.seven = 500;\n    t.eight = 500;\n    t.nine = 500;\n    t.colon = 333;\n    t.semicolon = 333;\n    t.less = 675;\n    t.equal = 675;\n    t.greater = 675;\n    t.question = 500;\n    t.at = 920;\n    t.A = 611;\n    t.B = 611;\n    t.C = 667;\n    t.D = 722;\n    t.E = 611;\n    t.F = 611;\n    t.G = 722;\n    t.H = 722;\n    t.I = 333;\n    t.J = 444;\n    t.K = 667;\n    t.L = 556;\n    t.M = 833;\n    t.N = 667;\n    t.O = 722;\n    t.P = 611;\n    t.Q = 722;\n    t.R = 611;\n    t.S = 500;\n    t.T = 556;\n    t.U = 722;\n    t.V = 611;\n    t.W = 833;\n    t.X = 611;\n    t.Y = 556;\n    t.Z = 556;\n    t.bracketleft = 389;\n    t.backslash = 278;\n    t.bracketright = 389;\n    t.asciicircum = 422;\n    t.underscore = 500;\n    t.quoteleft = 333;\n    t.a = 500;\n    t.b = 500;\n    t.c = 444;\n    t.d = 500;\n    t.e = 444;\n    t.f = 278;\n    t.g = 500;\n    t.h = 500;\n    t.i = 278;\n    t.j = 278;\n    t.k = 444;\n    t.l = 278;\n    t.m = 722;\n    t.n = 500;\n    t.o = 500;\n    t.p = 500;\n    t.q = 500;\n    t.r = 389;\n    t.s = 389;\n    t.t = 278;\n    t.u = 500;\n    t.v = 444;\n    t.w = 667;\n    t.x = 444;\n    t.y = 444;\n    t.z = 389;\n    t.braceleft = 400;\n    t.bar = 275;\n    t.braceright = 400;\n    t.asciitilde = 541;\n    t.exclamdown = 389;\n    t.cent = 500;\n    t.sterling = 500;\n    t.fraction = 167;\n    t.yen = 500;\n    t.florin = 500;\n    t.section = 500;\n    t.currency = 500;\n    t.quotesingle = 214;\n    t.quotedblleft = 556;\n    t.guillemotleft = 500;\n    t.guilsinglleft = 333;\n    t.guilsinglright = 333;\n    t.fi = 500;\n    t.fl = 500;\n    t.endash = 500;\n    t.dagger = 500;\n    t.daggerdbl = 500;\n    t.periodcentered = 250;\n    t.paragraph = 523;\n    t.bullet = 350;\n    t.quotesinglbase = 333;\n    t.quotedblbase = 556;\n    t.quotedblright = 556;\n    t.guillemotright = 500;\n    t.ellipsis = 889;\n    t.perthousand = 1000;\n    t.questiondown = 500;\n    t.grave = 333;\n    t.acute = 333;\n    t.circumflex = 333;\n    t.tilde = 333;\n    t.macron = 333;\n    t.breve = 333;\n    t.dotaccent = 333;\n    t.dieresis = 333;\n    t.ring = 333;\n    t.cedilla = 333;\n    t.hungarumlaut = 333;\n    t.ogonek = 333;\n    t.caron = 333;\n    t.emdash = 889;\n    t.AE = 889;\n    t.ordfeminine = 276;\n    t.Lslash = 556;\n    t.Oslash = 722;\n    t.OE = 944;\n    t.ordmasculine = 310;\n    t.ae = 667;\n    t.dotlessi = 278;\n    t.lslash = 278;\n    t.oslash = 500;\n    t.oe = 667;\n    t.germandbls = 500;\n    t.Idieresis = 333;\n    t.eacute = 444;\n    t.abreve = 500;\n    t.uhungarumlaut = 500;\n    t.ecaron = 444;\n    t.Ydieresis = 556;\n    t.divide = 675;\n    t.Yacute = 556;\n    t.Acircumflex = 611;\n    t.aacute = 500;\n    t.Ucircumflex = 722;\n    t.yacute = 444;\n    t.scommaaccent = 389;\n    t.ecircumflex = 444;\n    t.Uring = 722;\n    t.Udieresis = 722;\n    t.aogonek = 500;\n    t.Uacute = 722;\n    t.uogonek = 500;\n    t.Edieresis = 611;\n    t.Dcroat = 722;\n    t.commaaccent = 250;\n    t.copyright = 760;\n    t.Emacron = 611;\n    t.ccaron = 444;\n    t.aring = 500;\n    t.Ncommaaccent = 667;\n    t.lacute = 278;\n    t.agrave = 500;\n    t.Tcommaaccent = 556;\n    t.Cacute = 667;\n    t.atilde = 500;\n    t.Edotaccent = 611;\n    t.scaron = 389;\n    t.scedilla = 389;\n    t.iacute = 278;\n    t.lozenge = 471;\n    t.Rcaron = 611;\n    t.Gcommaaccent = 722;\n    t.ucircumflex = 500;\n    t.acircumflex = 500;\n    t.Amacron = 611;\n    t.rcaron = 389;\n    t.ccedilla = 444;\n    t.Zdotaccent = 556;\n    t.Thorn = 611;\n    t.Omacron = 722;\n    t.Racute = 611;\n    t.Sacute = 500;\n    t.dcaron = 544;\n    t.Umacron = 722;\n    t.uring = 500;\n    t.threesuperior = 300;\n    t.Ograve = 722;\n    t.Agrave = 611;\n    t.Abreve = 611;\n    t.multiply = 675;\n    t.uacute = 500;\n    t.Tcaron = 556;\n    t.partialdiff = 476;\n    t.ydieresis = 444;\n    t.Nacute = 667;\n    t.icircumflex = 278;\n    t.Ecircumflex = 611;\n    t.adieresis = 500;\n    t.edieresis = 444;\n    t.cacute = 444;\n    t.nacute = 500;\n    t.umacron = 500;\n    t.Ncaron = 667;\n    t.Iacute = 333;\n    t.plusminus = 675;\n    t.brokenbar = 275;\n    t.registered = 760;\n    t.Gbreve = 722;\n    t.Idotaccent = 333;\n    t.summation = 600;\n    t.Egrave = 611;\n    t.racute = 389;\n    t.omacron = 500;\n    t.Zacute = 556;\n    t.Zcaron = 556;\n    t.greaterequal = 549;\n    t.Eth = 722;\n    t.Ccedilla = 667;\n    t.lcommaaccent = 278;\n    t.tcaron = 300;\n    t.eogonek = 444;\n    t.Uogonek = 722;\n    t.Aacute = 611;\n    t.Adieresis = 611;\n    t.egrave = 444;\n    t.zacute = 389;\n    t.iogonek = 278;\n    t.Oacute = 722;\n    t.oacute = 500;\n    t.amacron = 500;\n    t.sacute = 389;\n    t.idieresis = 278;\n    t.Ocircumflex = 722;\n    t.Ugrave = 722;\n    t.Delta = 612;\n    t.thorn = 500;\n    t.twosuperior = 300;\n    t.Odieresis = 722;\n    t.mu = 500;\n    t.igrave = 278;\n    t.ohungarumlaut = 500;\n    t.Eogonek = 611;\n    t.dcroat = 500;\n    t.threequarters = 750;\n    t.Scedilla = 500;\n    t.lcaron = 300;\n    t.Kcommaaccent = 667;\n    t.Lacute = 556;\n    t.trademark = 980;\n    t.edotaccent = 444;\n    t.Igrave = 333;\n    t.Imacron = 333;\n    t.Lcaron = 611;\n    t.onehalf = 750;\n    t.lessequal = 549;\n    t.ocircumflex = 500;\n    t.ntilde = 500;\n    t.Uhungarumlaut = 722;\n    t.Eacute = 611;\n    t.emacron = 444;\n    t.gbreve = 500;\n    t.onequarter = 750;\n    t.Scaron = 500;\n    t.Scommaaccent = 500;\n    t.Ohungarumlaut = 722;\n    t.degree = 400;\n    t.ograve = 500;\n    t.Ccaron = 667;\n    t.ugrave = 500;\n    t.radical = 453;\n    t.Dcaron = 722;\n    t.rcommaaccent = 389;\n    t.Ntilde = 667;\n    t.otilde = 500;\n    t.Rcommaaccent = 611;\n    t.Lcommaaccent = 556;\n    t.Atilde = 611;\n    t.Aogonek = 611;\n    t.Aring = 611;\n    t.Otilde = 722;\n    t.zdotaccent = 389;\n    t.Ecaron = 611;\n    t.Iogonek = 333;\n    t.kcommaaccent = 444;\n    t.minus = 675;\n    t.Icircumflex = 333;\n    t.ncaron = 500;\n    t.tcommaaccent = 278;\n    t.logicalnot = 675;\n    t.odieresis = 500;\n    t.udieresis = 500;\n    t.notequal = 549;\n    t.gcommaaccent = 500;\n    t.eth = 500;\n    t.zcaron = 389;\n    t.ncommaaccent = 500;\n    t.onesuperior = 300;\n    t.imacron = 278;\n    t.Euro = 500;\n  });\n  // eslint-disable-next-line no-shadow\n  t.ZapfDingbats = getLookupTableFactory(function (t) {\n    t.space = 278;\n    t.a1 = 974;\n    t.a2 = 961;\n    t.a202 = 974;\n    t.a3 = 980;\n    t.a4 = 719;\n    t.a5 = 789;\n    t.a119 = 790;\n    t.a118 = 791;\n    t.a117 = 690;\n    t.a11 = 960;\n    t.a12 = 939;\n    t.a13 = 549;\n    t.a14 = 855;\n    t.a15 = 911;\n    t.a16 = 933;\n    t.a105 = 911;\n    t.a17 = 945;\n    t.a18 = 974;\n    t.a19 = 755;\n    t.a20 = 846;\n    t.a21 = 762;\n    t.a22 = 761;\n    t.a23 = 571;\n    t.a24 = 677;\n    t.a25 = 763;\n    t.a26 = 760;\n    t.a27 = 759;\n    t.a28 = 754;\n    t.a6 = 494;\n    t.a7 = 552;\n    t.a8 = 537;\n    t.a9 = 577;\n    t.a10 = 692;\n    t.a29 = 786;\n    t.a30 = 788;\n    t.a31 = 788;\n    t.a32 = 790;\n    t.a33 = 793;\n    t.a34 = 794;\n    t.a35 = 816;\n    t.a36 = 823;\n    t.a37 = 789;\n    t.a38 = 841;\n    t.a39 = 823;\n    t.a40 = 833;\n    t.a41 = 816;\n    t.a42 = 831;\n    t.a43 = 923;\n    t.a44 = 744;\n    t.a45 = 723;\n    t.a46 = 749;\n    t.a47 = 790;\n    t.a48 = 792;\n    t.a49 = 695;\n    t.a50 = 776;\n    t.a51 = 768;\n    t.a52 = 792;\n    t.a53 = 759;\n    t.a54 = 707;\n    t.a55 = 708;\n    t.a56 = 682;\n    t.a57 = 701;\n    t.a58 = 826;\n    t.a59 = 815;\n    t.a60 = 789;\n    t.a61 = 789;\n    t.a62 = 707;\n    t.a63 = 687;\n    t.a64 = 696;\n    t.a65 = 689;\n    t.a66 = 786;\n    t.a67 = 787;\n    t.a68 = 713;\n    t.a69 = 791;\n    t.a70 = 785;\n    t.a71 = 791;\n    t.a72 = 873;\n    t.a73 = 761;\n    t.a74 = 762;\n    t.a203 = 762;\n    t.a75 = 759;\n    t.a204 = 759;\n    t.a76 = 892;\n    t.a77 = 892;\n    t.a78 = 788;\n    t.a79 = 784;\n    t.a81 = 438;\n    t.a82 = 138;\n    t.a83 = 277;\n    t.a84 = 415;\n    t.a97 = 392;\n    t.a98 = 392;\n    t.a99 = 668;\n    t.a100 = 668;\n    t.a89 = 390;\n    t.a90 = 390;\n    t.a93 = 317;\n    t.a94 = 317;\n    t.a91 = 276;\n    t.a92 = 276;\n    t.a205 = 509;\n    t.a85 = 509;\n    t.a206 = 410;\n    t.a86 = 410;\n    t.a87 = 234;\n    t.a88 = 234;\n    t.a95 = 334;\n    t.a96 = 334;\n    t.a101 = 732;\n    t.a102 = 544;\n    t.a103 = 544;\n    t.a104 = 910;\n    t.a106 = 667;\n    t.a107 = 760;\n    t.a108 = 760;\n    t.a112 = 776;\n    t.a111 = 595;\n    t.a110 = 694;\n    t.a109 = 626;\n    t.a120 = 788;\n    t.a121 = 788;\n    t.a122 = 788;\n    t.a123 = 788;\n    t.a124 = 788;\n    t.a125 = 788;\n    t.a126 = 788;\n    t.a127 = 788;\n    t.a128 = 788;\n    t.a129 = 788;\n    t.a130 = 788;\n    t.a131 = 788;\n    t.a132 = 788;\n    t.a133 = 788;\n    t.a134 = 788;\n    t.a135 = 788;\n    t.a136 = 788;\n    t.a137 = 788;\n    t.a138 = 788;\n    t.a139 = 788;\n    t.a140 = 788;\n    t.a141 = 788;\n    t.a142 = 788;\n    t.a143 = 788;\n    t.a144 = 788;\n    t.a145 = 788;\n    t.a146 = 788;\n    t.a147 = 788;\n    t.a148 = 788;\n    t.a149 = 788;\n    t.a150 = 788;\n    t.a151 = 788;\n    t.a152 = 788;\n    t.a153 = 788;\n    t.a154 = 788;\n    t.a155 = 788;\n    t.a156 = 788;\n    t.a157 = 788;\n    t.a158 = 788;\n    t.a159 = 788;\n    t.a160 = 894;\n    t.a161 = 838;\n    t.a163 = 1016;\n    t.a164 = 458;\n    t.a196 = 748;\n    t.a165 = 924;\n    t.a192 = 748;\n    t.a166 = 918;\n    t.a167 = 927;\n    t.a168 = 928;\n    t.a169 = 928;\n    t.a170 = 834;\n    t.a171 = 873;\n    t.a172 = 828;\n    t.a173 = 924;\n    t.a162 = 924;\n    t.a174 = 917;\n    t.a175 = 930;\n    t.a176 = 931;\n    t.a177 = 463;\n    t.a178 = 883;\n    t.a179 = 836;\n    t.a193 = 836;\n    t.a180 = 867;\n    t.a199 = 867;\n    t.a181 = 696;\n    t.a200 = 696;\n    t.a182 = 874;\n    t.a201 = 874;\n    t.a183 = 760;\n    t.a184 = 946;\n    t.a197 = 771;\n    t.a185 = 865;\n    t.a194 = 771;\n    t.a198 = 888;\n    t.a186 = 967;\n    t.a195 = 888;\n    t.a187 = 831;\n    t.a188 = 873;\n    t.a189 = 927;\n    t.a190 = 970;\n    t.a191 = 918;\n  });\n});\n\nconst getFontBasicMetrics = getLookupTableFactory(function (t) {\n  t.Courier = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: -426,\n  };\n  t[\"Courier-Bold\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 439,\n  };\n  t[\"Courier-Oblique\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 426,\n  };\n  t[\"Courier-BoldOblique\"] = {\n    ascent: 629,\n    descent: -157,\n    capHeight: 562,\n    xHeight: 426,\n  };\n  t.Helvetica = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 523,\n  };\n  t[\"Helvetica-Bold\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 532,\n  };\n  t[\"Helvetica-Oblique\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 523,\n  };\n  t[\"Helvetica-BoldOblique\"] = {\n    ascent: 718,\n    descent: -207,\n    capHeight: 718,\n    xHeight: 532,\n  };\n  t[\"Times-Roman\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 662,\n    xHeight: 450,\n  };\n  t[\"Times-Bold\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 676,\n    xHeight: 461,\n  };\n  t[\"Times-Italic\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 653,\n    xHeight: 441,\n  };\n  t[\"Times-BoldItalic\"] = {\n    ascent: 683,\n    descent: -217,\n    capHeight: 669,\n    xHeight: 462,\n  };\n  t.Symbol = {\n    ascent: Math.NaN,\n    descent: Math.NaN,\n    capHeight: Math.NaN,\n    xHeight: Math.NaN,\n  };\n  t.ZapfDingbats = {\n    ascent: Math.NaN,\n    descent: Math.NaN,\n    capHeight: Math.NaN,\n    xHeight: Math.NaN,\n  };\n});\n\nexport { getFontBasicMetrics, getMetrics };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes } from \"../shared/util.js\";\n\nconst OTF_HEADER_SIZE = 12;\nconst OTF_TABLE_ENTRY_SIZE = 16;\n\nclass OpenTypeFileBuilder {\n  #tables = new Map();\n\n  constructor(sfnt) {\n    this.sfnt = sfnt;\n  }\n\n  static getSearchParams(entriesCount, entrySize) {\n    let maxPower2 = 1,\n      log2 = 0;\n    while ((maxPower2 ^ entriesCount) > maxPower2) {\n      maxPower2 <<= 1;\n      log2++;\n    }\n    const searchRange = maxPower2 * entrySize;\n    return {\n      range: searchRange,\n      entry: log2,\n      rangeShift: entrySize * entriesCount - searchRange,\n    };\n  }\n\n  toArray() {\n    let sfnt = this.sfnt;\n\n    // Tables needs to be written by ascendant alphabetic order\n    const tables = this.#tables;\n    const tablesNames = [...tables.keys()].sort();\n    const numTables = tablesNames.length;\n\n    // layout the tables data\n    let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;\n    const tableOffsets = [offset];\n    for (let i = 0; i < numTables; i++) {\n      const table = tables.get(tablesNames[i]);\n      const paddedLength = ((table.length + 3) & ~3) >>> 0;\n      offset += paddedLength;\n      tableOffsets.push(offset);\n    }\n\n    const file = new Uint8Array(offset),\n      view = new DataView(file.buffer);\n    // write the table data first (mostly for checksum)\n    for (let i = 0; i < numTables; i++) {\n      const table = tables.get(tablesNames[i]);\n      file.set(table, tableOffsets[i]);\n    }\n\n    // sfnt version (4 bytes)\n    if (sfnt === \"true\") {\n      // Windows hates the Mac TrueType sfnt version number\n      sfnt = \"\\x00\\x01\\x00\\x00\";\n    }\n    file.set(stringToBytes(sfnt), 0);\n\n    // numTables (2 bytes)\n    view.setInt16(4, numTables);\n\n    const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);\n\n    // searchRange (2 bytes)\n    view.setInt16(6, searchParams.range);\n    // entrySelector (2 bytes)\n    view.setInt16(8, searchParams.entry);\n    // rangeShift (2 bytes)\n    view.setInt16(10, searchParams.rangeShift);\n\n    offset = OTF_HEADER_SIZE;\n    // writing table entries\n    for (let i = 0; i < numTables; i++) {\n      const tableName = tablesNames[i];\n      file.set(stringToBytes(tableName), offset);\n\n      // checksum\n      let checksum = 0;\n      for (let j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {\n        const quad = view.getUint32(j);\n        checksum = (checksum + quad) >>> 0;\n      }\n      view.setInt32(offset + 4, checksum);\n\n      // offset\n      view.setInt32(offset + 8, tableOffsets[i]);\n      // length\n      view.setInt32(offset + 12, tables.get(tableName).length);\n\n      offset += OTF_TABLE_ENTRY_SIZE;\n    }\n\n    this.#tables.clear();\n    return file;\n  }\n\n  addTable(tag, data) {\n    if (this.#tables.has(tag)) {\n      throw new Error(`Table ${tag} already exists`);\n    }\n    this.#tables.set(tag, data);\n  }\n}\n\nexport { OpenTypeFileBuilder };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getEncoding } from \"./encodings.js\";\nimport { isWhiteSpace } from \"./core_utils.js\";\nimport { Stream } from \"./stream.js\";\nimport { warn } from \"../shared/util.js\";\n\n// Hinting is currently disabled due to unknown problems on windows\n// in tracemonkey and various other pdfs with type1 fonts.\nconst HINTING_ENABLED = false;\n\nconst COMMAND_MAP = {\n  hstem: [1],\n  vstem: [3],\n  vmoveto: [4],\n  rlineto: [5],\n  hlineto: [6],\n  vlineto: [7],\n  rrcurveto: [8],\n  callsubr: [10],\n  flex: [12, 35],\n  drop: [12, 18],\n  endchar: [14],\n  rmoveto: [21],\n  hmoveto: [22],\n  vhcurveto: [30],\n  hvcurveto: [31],\n};\n\n/**\n * CharStrings are encoded following the CharString Encoding sequence\n * describe in Chapter 6 of the \"Adobe Type1 Font Format\" specification.\n * The value in a byte indicates a command, a number, or subsequent bytes\n * that are to be interpreted in a special way.\n *\n * CharString Number Encoding:\n *  A CharString byte containing the values from 32 through 255 inclusive\n *  indicate an integer. These values are decoded in four ranges.\n *\n * 1. A CharString byte containing a value, v, between 32 and 246 inclusive,\n * indicate the integer v - 139. Thus, the integer values from -107 through\n * 107 inclusive may be encoded in single byte.\n *\n * 2. A CharString byte containing a value, v, between 247 and 250 inclusive,\n * indicates an integer involving the next byte, w, according to the formula:\n * [(v - 247) x 256] + w + 108\n *\n * 3. A CharString byte containing a value, v, between 251 and 254 inclusive,\n * indicates an integer involving the next byte, w, according to the formula:\n * -[(v - 251) * 256] - w - 108\n *\n * 4. A CharString containing the value 255 indicates that the next 4 bytes\n * are a two complement signed integer. The first of these bytes contains the\n * highest order bits, the second byte contains the next higher order bits\n * and the fourth byte contain the lowest order bits.\n *\n *\n * CharString Command Encoding:\n *  CharStrings commands are encoded in 1 or 2 bytes.\n *\n *  Single byte commands are encoded in 1 byte that contains a value between\n *  0 and 31 inclusive.\n *  If a command byte contains the value 12, then the value in the next byte\n *  indicates a command. This \"escape\" mechanism allows many extra commands\n *  to be encoded and this encoding technique helps to minimize the length of\n *  the charStrings.\n */\nclass Type1CharString {\n  width = 0;\n\n  lsb = 0;\n\n  flexing = false;\n\n  output = [];\n\n  stack = [];\n\n  convert(encoded, subrs, seacAnalysisEnabled) {\n    const count = encoded.length;\n    let error = false;\n    let wx, sbx, subrNumber;\n    for (let i = 0; i < count; i++) {\n      let value = encoded[i];\n      if (value < 32) {\n        if (value === 12) {\n          value = (value << 8) + encoded[++i];\n        }\n        switch (value) {\n          case 1: // hstem\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.hstem);\n            break;\n          case 3: // vstem\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.vstem);\n            break;\n          case 4: // vmoveto\n            if (this.flexing) {\n              if (this.stack.length < 1) {\n                error = true;\n                break;\n              }\n              // Add the dx for flex and but also swap the values so they are\n              // the right order.\n              const dy = this.stack.pop();\n              this.stack.push(0, dy);\n              break;\n            }\n            error = this.executeCommand(1, COMMAND_MAP.vmoveto);\n            break;\n          case 5: // rlineto\n            error = this.executeCommand(2, COMMAND_MAP.rlineto);\n            break;\n          case 6: // hlineto\n            error = this.executeCommand(1, COMMAND_MAP.hlineto);\n            break;\n          case 7: // vlineto\n            error = this.executeCommand(1, COMMAND_MAP.vlineto);\n            break;\n          case 8: // rrcurveto\n            error = this.executeCommand(6, COMMAND_MAP.rrcurveto);\n            break;\n          case 9: // closepath\n            // closepath is a Type1 command that does not take argument and is\n            // useless in Type2 and it can simply be ignored.\n            this.stack = [];\n            break;\n          case 10: // callsubr\n            if (this.stack.length < 1) {\n              error = true;\n              break;\n            }\n            subrNumber = this.stack.pop();\n            if (!subrs[subrNumber]) {\n              error = true;\n              break;\n            }\n            error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);\n            break;\n          case 11: // return\n            return error;\n          case 13: // hsbw\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            // To convert to type2 we have to move the width value to the\n            // first part of the charstring and then use hmoveto with lsb.\n            wx = this.stack.pop();\n            sbx = this.stack.pop();\n            this.lsb = sbx;\n            this.width = wx;\n            this.stack.push(wx, sbx);\n            error = this.executeCommand(2, COMMAND_MAP.hmoveto);\n            break;\n          case 14: // endchar\n            this.output.push(COMMAND_MAP.endchar[0]);\n            break;\n          case 21: // rmoveto\n            if (this.flexing) {\n              break;\n            }\n            error = this.executeCommand(2, COMMAND_MAP.rmoveto);\n            break;\n          case 22: // hmoveto\n            if (this.flexing) {\n              // Add the dy for flex.\n              this.stack.push(0);\n              break;\n            }\n            error = this.executeCommand(1, COMMAND_MAP.hmoveto);\n            break;\n          case 30: // vhcurveto\n            error = this.executeCommand(4, COMMAND_MAP.vhcurveto);\n            break;\n          case 31: // hvcurveto\n            error = this.executeCommand(4, COMMAND_MAP.hvcurveto);\n            break;\n          case (12 << 8) + 0: // dotsection\n            // dotsection is a Type1 command to specify some hinting feature\n            // for dots that do not take a parameter and it can safely be\n            // ignored for Type2.\n            this.stack = [];\n            break;\n          case (12 << 8) + 1: // vstem3\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            // [vh]stem3 are Type1 only and Type2 supports [vh]stem with\n            // multiple parameters, so instead of returning [vh]stem3 take a\n            // shortcut and return [vhstem] instead.\n            error = this.executeCommand(2, COMMAND_MAP.vstem);\n            break;\n          case (12 << 8) + 2: // hstem3\n            if (!HINTING_ENABLED) {\n              this.stack = [];\n              break;\n            }\n            // See vstem3.\n            error = this.executeCommand(2, COMMAND_MAP.hstem);\n            break;\n          case (12 << 8) + 6: // seac\n            // seac is like type 2's special endchar but it doesn't use the\n            // first argument asb, so remove it.\n            if (seacAnalysisEnabled) {\n              const asb = this.stack.at(-5);\n              this.seac = this.stack.splice(-4, 4);\n              this.seac[0] += this.lsb - asb;\n              error = this.executeCommand(0, COMMAND_MAP.endchar);\n            } else {\n              error = this.executeCommand(4, COMMAND_MAP.endchar);\n            }\n            break;\n          case (12 << 8) + 7: // sbw\n            if (this.stack.length < 4) {\n              error = true;\n              break;\n            }\n            // To convert to type2 we have to move the width value to the\n            // first part of the charstring and then use rmoveto with\n            // (dx, dy). The height argument will not be used for vmtx and\n            // vhea tables reconstruction -- ignoring it.\n            this.stack.pop(); // wy\n            wx = this.stack.pop();\n            const sby = this.stack.pop();\n            sbx = this.stack.pop();\n            this.lsb = sbx;\n            this.width = wx;\n            this.stack.push(wx, sbx, sby);\n            error = this.executeCommand(3, COMMAND_MAP.rmoveto);\n            break;\n          case (12 << 8) + 12: // div\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            const num2 = this.stack.pop();\n            const num1 = this.stack.pop();\n            this.stack.push(num1 / num2);\n            break;\n          case (12 << 8) + 16: // callothersubr\n            if (this.stack.length < 2) {\n              error = true;\n              break;\n            }\n            subrNumber = this.stack.pop();\n            const numArgs = this.stack.pop();\n            if (subrNumber === 0 && numArgs === 3) {\n              const flexArgs = this.stack.splice(-17, 17);\n              this.stack.push(\n                flexArgs[2] + flexArgs[0], // bcp1x + rpx\n                flexArgs[3] + flexArgs[1], // bcp1y + rpy\n                flexArgs[4], // bcp2x\n                flexArgs[5], // bcp2y\n                flexArgs[6], // p2x\n                flexArgs[7], // p2y\n                flexArgs[8], // bcp3x\n                flexArgs[9], // bcp3y\n                flexArgs[10], // bcp4x\n                flexArgs[11], // bcp4y\n                flexArgs[12], // p3x\n                flexArgs[13], // p3y\n                flexArgs[14] // flexDepth\n                // 15 = finalx unused by flex\n                // 16 = finaly unused by flex\n              );\n              error = this.executeCommand(13, COMMAND_MAP.flex, true);\n              this.flexing = false;\n              this.stack.push(flexArgs[15], flexArgs[16]);\n            } else if (subrNumber === 1 && numArgs === 0) {\n              this.flexing = true;\n            }\n            break;\n          case (12 << 8) + 17: // pop\n            // Ignore this since it is only used with othersubr.\n            break;\n          case (12 << 8) + 33: // setcurrentpoint\n            // Ignore for now.\n            this.stack = [];\n            break;\n          default:\n            warn('Unknown type 1 charstring command of \"' + value + '\"');\n            break;\n        }\n        if (error) {\n          break;\n        }\n        continue;\n      } else if (value <= 246) {\n        value -= 139;\n      } else if (value <= 250) {\n        value = (value - 247) * 256 + encoded[++i] + 108;\n      } else if (value <= 254) {\n        value = -((value - 251) * 256) - encoded[++i] - 108;\n      } else {\n        value =\n          ((encoded[++i] & 0xff) << 24) |\n          ((encoded[++i] & 0xff) << 16) |\n          ((encoded[++i] & 0xff) << 8) |\n          ((encoded[++i] & 0xff) << 0);\n      }\n      this.stack.push(value);\n    }\n    return error;\n  }\n\n  executeCommand(howManyArgs, command, keepStack) {\n    const stackLength = this.stack.length;\n    if (howManyArgs > stackLength) {\n      return true;\n    }\n    const start = stackLength - howManyArgs;\n    for (let i = start; i < stackLength; i++) {\n      let value = this.stack[i];\n      if (Number.isInteger(value)) {\n        this.output.push(28, (value >> 8) & 0xff, value & 0xff);\n      } else {\n        // fixed point\n        value = (65536 * value) | 0;\n        this.output.push(\n          255,\n          (value >> 24) & 0xff,\n          (value >> 16) & 0xff,\n          (value >> 8) & 0xff,\n          value & 0xff\n        );\n      }\n    }\n    this.output.push(...command);\n    if (keepStack) {\n      this.stack.splice(start, howManyArgs);\n    } else {\n      this.stack.length = 0;\n    }\n    return false;\n  }\n}\n\n/**\n * Decrypt a Sequence of Ciphertext Bytes to Produce the Original Sequence\n * of Plaintext Bytes. The function takes a key as a parameter which can be\n * for decrypting the eexec block or for decoding charStrings.\n */\nconst EEXEC_ENCRYPT_KEY = 55665;\nconst CHAR_STRS_ENCRYPT_KEY = 4330;\n\nfunction isHexDigit(code) {\n  return (\n    (code >= 48 && code <= 57) || // '0'-'9'\n    (code >= 65 && code <= 70) || // 'A'-'F'\n    (code >= 97 && code <= 102) // 'a'-'f'\n  );\n}\n\nfunction decrypt(data, key, discardNumber) {\n  if (discardNumber >= data.length) {\n    return new Uint8Array(0);\n  }\n  const c1 = 52845,\n    c2 = 22719;\n  let r = key | 0,\n    i,\n    j;\n  for (i = 0; i < discardNumber; i++) {\n    r = ((data[i] + r) * c1 + c2) & ((1 << 16) - 1);\n  }\n  const count = data.length - discardNumber;\n  const decrypted = new Uint8Array(count);\n  for (i = discardNumber, j = 0; j < count; i++, j++) {\n    const value = data[i];\n    decrypted[j] = value ^ (r >> 8);\n    r = ((value + r) * c1 + c2) & ((1 << 16) - 1);\n  }\n  return decrypted;\n}\n\nfunction decryptAscii(data, key, discardNumber) {\n  const c1 = 52845,\n    c2 = 22719;\n  let r = key | 0;\n  const count = data.length,\n    maybeLength = count >>> 1;\n  const decrypted = new Uint8Array(maybeLength);\n  let i, j;\n  for (i = 0, j = 0; i < count; i++) {\n    const digit1 = data[i];\n    if (!isHexDigit(digit1)) {\n      continue;\n    }\n    i++;\n    let digit2;\n    while (i < count && !isHexDigit((digit2 = data[i]))) {\n      i++;\n    }\n    if (i < count) {\n      const value = parseInt(String.fromCharCode(digit1, digit2), 16);\n      decrypted[j++] = value ^ (r >> 8);\n      r = ((value + r) * c1 + c2) & ((1 << 16) - 1);\n    }\n  }\n  return decrypted.slice(discardNumber, j);\n}\n\nfunction isSpecial(c) {\n  return (\n    c === /* '/' = */ 0x2f ||\n    c === /* '[' = */ 0x5b ||\n    c === /* ']' = */ 0x5d ||\n    c === /* '{' = */ 0x7b ||\n    c === /* '}' = */ 0x7d ||\n    c === /* '(' = */ 0x28 ||\n    c === /* ')' = */ 0x29\n  );\n}\n\n/**\n * Type1Parser encapsulate the needed code for parsing a Type1 font program.\n * Some of its logic depends on the Type2 charstrings structure.\n * NOTE: This doesn't really parse the font since that would require evaluation\n *       of PostScript, but it is possible in most cases to extract what we need\n *       without a full parse.\n */\nclass Type1Parser {\n  constructor(stream, encrypted, seacAnalysisEnabled) {\n    if (encrypted) {\n      const data = stream.getBytes();\n      const isBinary = !(\n        (isHexDigit(data[0]) || isWhiteSpace(data[0])) &&\n        isHexDigit(data[1]) &&\n        isHexDigit(data[2]) &&\n        isHexDigit(data[3]) &&\n        isHexDigit(data[4]) &&\n        isHexDigit(data[5]) &&\n        isHexDigit(data[6]) &&\n        isHexDigit(data[7])\n      );\n      stream = new Stream(\n        isBinary\n          ? decrypt(data, EEXEC_ENCRYPT_KEY, 4)\n          : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)\n      );\n    }\n    this.seacAnalysisEnabled = !!seacAnalysisEnabled;\n\n    this.stream = stream;\n    this.nextChar();\n  }\n\n  readNumberArray() {\n    this.getToken(); // read '[' or '{' (arrays can start with either)\n    const array = [];\n    while (true) {\n      const token = this.getToken();\n      if (token === null || token === \"]\" || token === \"}\") {\n        break;\n      }\n      array.push(parseFloat(token || 0));\n    }\n    return array;\n  }\n\n  readNumber() {\n    const token = this.getToken();\n    return parseFloat(token || 0);\n  }\n\n  readInt() {\n    // Use '| 0' to prevent setting a double into length such as the double\n    // does not flow into the loop variable.\n    const token = this.getToken();\n    return parseInt(token || 0, 10) | 0;\n  }\n\n  readBoolean() {\n    const token = this.getToken();\n    // Use 1 and 0 since that's what type2 charstrings use.\n    return token === \"true\" ? 1 : 0;\n  }\n\n  nextChar() {\n    return (this.currentChar = this.stream.getByte());\n  }\n\n  prevChar() {\n    this.stream.skip(-2);\n    return (this.currentChar = this.stream.getByte());\n  }\n\n  getToken() {\n    // Eat whitespace and comments.\n    let comment = false;\n    let ch = this.currentChar;\n    while (true) {\n      if (ch === -1) {\n        return null;\n      }\n\n      if (comment) {\n        if (ch === 0x0a || ch === 0x0d) {\n          comment = false;\n        }\n      } else if (ch === /* '%' = */ 0x25) {\n        comment = true;\n      } else if (!isWhiteSpace(ch)) {\n        break;\n      }\n      ch = this.nextChar();\n    }\n    if (isSpecial(ch)) {\n      this.nextChar();\n      return String.fromCharCode(ch);\n    }\n    let token = \"\";\n    do {\n      token += String.fromCharCode(ch);\n      ch = this.nextChar();\n    } while (ch >= 0 && !isWhiteSpace(ch) && !isSpecial(ch));\n    return token;\n  }\n\n  readCharStrings(bytes, lenIV) {\n    if (lenIV === -1) {\n      // This isn't in the spec, but Adobe's tx program handles -1\n      // as plain text.\n      return bytes;\n    }\n    return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);\n  }\n\n  /*\n   * Returns an object containing a Subrs array and a CharStrings\n   * array extracted from and eexec encrypted block of data\n   */\n  extractFontProgram(properties) {\n    const stream = this.stream;\n\n    const subrs = [],\n      charstrings = [];\n    const privateData = new Map([[\"lenIV\", 4]]);\n    const program = {\n      subrs: [],\n      charstrings: [],\n      properties: {\n        privateData,\n      },\n    };\n    let token, length, data;\n    // Some fonts (e.g. those embedded in issue18548.pdf) define a second\n    // `/Subrs` and `/CharStrings` block that the PostScript runtime selects\n    // conditionally (e.g. high-resolution variants). Testing with other\n    // viewers shows that none of them actually use these conditional blocks,\n    // so we can \"safely\" ignore them.\n    let subrsParsed = false;\n    let charStringsParsed = false;\n    while ((token = this.getToken()) !== null) {\n      if (token !== \"/\") {\n        continue;\n      }\n      token = this.getToken();\n      switch (token) {\n        case \"CharStrings\":\n          if (charStringsParsed) {\n            break;\n          }\n          charStringsParsed = true;\n          // The number immediately following CharStrings must be greater or\n          // equal to the number of CharStrings.\n          this.getToken();\n          this.getToken(); // read in 'dict'\n          this.getToken(); // read in 'dup'\n          this.getToken(); // read in 'begin'\n          while (true) {\n            token = this.getToken();\n            if (token === null || token === \"end\") {\n              break;\n            }\n\n            if (token !== \"/\") {\n              continue;\n            }\n            const glyph = this.getToken();\n            length = this.readInt();\n            this.getToken(); // read in 'RD' or '-|'\n            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n            const encoded = this.readCharStrings(\n              data,\n              privateData.get(\"lenIV\")\n            );\n            this.nextChar();\n            token = this.getToken(); // read in 'ND' or '|-'\n            if (token === \"noaccess\") {\n              this.getToken(); // read in 'def'\n            } else if (token === \"/\") {\n              // The expected 'ND' or '|-' token is missing, avoid swallowing\n              // the start of the next glyph (fixes issue14462_reduced.pdf).\n              this.prevChar();\n            }\n            charstrings.push({\n              glyph,\n              encoded,\n            });\n          }\n          break;\n        case \"Subrs\":\n          if (subrsParsed) {\n            break;\n          }\n          subrsParsed = true;\n          this.readInt(); // num\n          this.getToken(); // read in 'array'\n          while (this.getToken() === \"dup\") {\n            const index = this.readInt();\n            length = this.readInt();\n            this.getToken(); // read in 'RD' or '-|'\n            data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\n            const encoded = this.readCharStrings(\n              data,\n              privateData.get(\"lenIV\")\n            );\n            this.nextChar();\n            token = this.getToken(); // read in 'NP' or '|'\n            if (token === \"noaccess\") {\n              this.getToken(); // read in 'put'\n            }\n            subrs[index] = encoded;\n          }\n          break;\n        case \"BlueValues\":\n        case \"OtherBlues\":\n        case \"FamilyBlues\":\n        case \"FamilyOtherBlues\":\n          const blueArray = this.readNumberArray();\n          // *Blue* values may contain invalid data: disables reading of\n          // those values when hinting is disabled.\n          if (\n            HINTING_ENABLED &&\n            blueArray.length > 0 &&\n            blueArray.length % 2 === 0\n          ) {\n            privateData.set(token, blueArray);\n          }\n          break;\n        case \"StemSnapH\":\n        case \"StemSnapV\":\n          privateData.set(token, this.readNumberArray());\n          break;\n        case \"StdHW\":\n        case \"StdVW\":\n          privateData.set(token, this.readNumberArray()[0]);\n          break;\n        case \"BlueShift\":\n        case \"lenIV\":\n        case \"BlueFuzz\":\n        case \"BlueScale\":\n        case \"LanguageGroup\":\n          privateData.set(token, this.readNumber());\n          break;\n        case \"ExpansionFactor\":\n          // Firefox doesn't render correctly a font with a null factor on\n          // Windows (see issue 15289), hence we just reset it to its default\n          // value (0.06).\n          privateData.set(token, this.readNumber() || 0.06);\n          break;\n        case \"ForceBold\":\n          privateData.set(token, this.readBoolean());\n          break;\n      }\n    }\n\n    for (const { encoded, glyph } of charstrings) {\n      const charString = new Type1CharString();\n      const error = charString.convert(\n        encoded,\n        subrs,\n        this.seacAnalysisEnabled\n      );\n      // It seems when FreeType encounters an error while evaluating a glyph\n      // that it completely ignores the glyph so we'll mimic that behaviour\n      // here and put an endchar to make the validator happy.\n      const output = !error ? charString.output : [14];\n      const charStringObject = {\n        glyphName: glyph,\n        charstring: output,\n        width: charString.width,\n        lsb: charString.lsb,\n        seac: charString.seac,\n      };\n      if (glyph === \".notdef\") {\n        // Make sure .notdef is at index zero (issue #11477).\n        program.charstrings.unshift(charStringObject);\n      } else {\n        program.charstrings.push(charStringObject);\n      }\n\n      // Attempt to replace missing widths, from the font dictionary /Widths\n      // entry, with ones from the font data (fixes issue11150_reduced.pdf).\n      if (properties.builtInEncoding) {\n        const index = properties.builtInEncoding.indexOf(glyph);\n        if (\n          index > -1 &&\n          properties.widths[index] === undefined &&\n          index >= properties.firstChar &&\n          index <= properties.lastChar\n        ) {\n          properties.widths[index] = charString.width;\n        }\n      }\n    }\n\n    return program;\n  }\n\n  /*\n   * Returns an object containing a Subrs array and a CharStrings array\n   * extracted from a CID-keyed Type 1 font program (Adobe TechNote 5014,\n   * CIDFontType 0). The stream must start at the PostScript header.\n   *\n   * The binary section that follows the \"StartData\" marker contains:\n   *  - CIDMap at CIDMapOffset, with (CIDCount + 1) entries; each entry is\n   *    FDBytes (FD-index) + GDBytes (glyph data offset) bytes.\n   *  - SubrMap at SubrMapOffset, with (SubrCount + 1) entries of SDBytes\n   *    each, holding subr data offsets.\n   *  - The charstring/subr data, each encrypted with the Type 1 charstring\n   *    cipher and prefixed by `lenIV` random bytes.\n   *\n   * Only single-FDArray fonts are supported.\n   */\n  extractCidKeyedFontProgram(properties) {\n    const stream = this.stream;\n    const privateData = new Map([[\"lenIV\", 4]]);\n    const program = {\n      subrs: [],\n      charstrings: [],\n      properties: { privateData },\n    };\n\n    let cidCount = 0;\n    let cidMapOffset = -1;\n    let fdBytes = 1;\n    let gdBytes = 0;\n    let subrMapOffset = -1;\n    let sdBytes = 0;\n    let subrCount = 0;\n    let startDataLength = 0;\n    let startDataIsHex = false;\n    let foundStartData = false;\n    const previousTokens = [];\n\n    function rememberToken(value) {\n      previousTokens.push(value);\n      if (previousTokens.length > 4) {\n        previousTokens.shift();\n      }\n    }\n\n    let token;\n    while ((token = this.getToken()) !== null) {\n      if (token === \"StartData\") {\n        const dataType = previousTokens.at(-3);\n        const dataLength = previousTokens.at(-1);\n        if (\n          previousTokens.at(-4) !== \"(\" ||\n          previousTokens.at(-2) !== \")\" ||\n          (dataType !== \"Binary\" && dataType !== \"Hex\") ||\n          !/^\\d+$/.test(dataLength)\n        ) {\n          return null;\n        }\n        startDataLength = parseInt(dataLength, 10);\n        if (startDataLength <= 0) {\n          return null;\n        }\n        startDataIsHex = dataType === \"Hex\";\n        foundStartData = true;\n        break;\n      }\n      rememberToken(token);\n      if (token !== \"/\") {\n        continue;\n      }\n      token = this.getToken();\n      rememberToken(token);\n      switch (token) {\n        case \"FontMatrix\":\n          properties.fontMatrix = this.readNumberArray();\n          break;\n        case \"FontBBox\":\n          const fontBBox = this.readNumberArray();\n          properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n          properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n          properties.ascentScaled = true;\n          break;\n        case \"CIDCount\":\n          cidCount = this.readInt();\n          break;\n        case \"CIDMapOffset\":\n          cidMapOffset = this.readInt();\n          break;\n        case \"FDBytes\":\n          fdBytes = this.readInt();\n          break;\n        case \"GDBytes\":\n          gdBytes = this.readInt();\n          break;\n        case \"SubrMapOffset\":\n          subrMapOffset = this.readInt();\n          break;\n        case \"SDBytes\":\n          sdBytes = this.readInt();\n          break;\n        case \"SubrCount\":\n          subrCount = this.readInt();\n          break;\n        case \"BlueValues\":\n        case \"OtherBlues\":\n        case \"FamilyBlues\":\n        case \"FamilyOtherBlues\":\n          // *Blue* values are skipped while hinting is disabled.\n          this.readNumberArray();\n          break;\n        case \"StemSnapH\":\n        case \"StemSnapV\":\n          privateData.set(token, this.readNumberArray());\n          break;\n        case \"StdHW\":\n        case \"StdVW\":\n          privateData.set(token, this.readNumberArray()[0]);\n          break;\n        case \"BlueShift\":\n        case \"lenIV\":\n        case \"BlueFuzz\":\n        case \"BlueScale\":\n        case \"LanguageGroup\":\n          privateData.set(token, this.readNumber());\n          break;\n        case \"ExpansionFactor\":\n          privateData.set(token, this.readNumber() || 0.06);\n          break;\n        case \"ForceBold\":\n          privateData.set(token, this.readBoolean());\n          break;\n      }\n    }\n\n    if (\n      !foundStartData ||\n      cidCount <= 0 ||\n      cidMapOffset < 0 ||\n      fdBytes < 0 ||\n      fdBytes > 4 ||\n      gdBytes < 1 ||\n      gdBytes > 4\n    ) {\n      return null;\n    }\n\n    // After \"StartData\", currentChar is the single separator byte (typically\n    // a space); the next byte starts the binary block. `startDataLength` is\n    // only an upper bound: some generators (see issue 15292) write a wrong\n    // value, and the buffer is also untrusted PostScript input -- cap to the\n    // stream's remaining bytes before allocating.\n    const maxLength = stream.end - stream.pos;\n    if (startDataLength > maxLength) {\n      if (!startDataIsHex) {\n        startDataLength = maxLength;\n      } else if (startDataLength > 2 * maxLength) {\n        // Hex needs ~2 chars per output byte; anything larger is impossible.\n        return null;\n      }\n    }\n    let binary = stream.getBytes(startDataIsHex ? undefined : startDataLength);\n    if (startDataIsHex) {\n      const decoded = new Uint8Array(startDataLength);\n      let digit1 = -1,\n        j = 0;\n      for (let i = 0, ii = binary.length; i < ii && j < startDataLength; i++) {\n        const digit = binary[i];\n        if (!isHexDigit(digit)) {\n          continue;\n        }\n        if (digit1 < 0) {\n          digit1 = digit;\n          continue;\n        }\n        decoded[j++] = parseInt(String.fromCharCode(digit1, digit), 16);\n        digit1 = -1;\n      }\n      if (j !== startDataLength) {\n        return null;\n      }\n      binary = decoded;\n    }\n    const lenIV = privateData.get(\"lenIV\");\n    const cidEntrySize = fdBytes + gdBytes;\n    const subrs = [];\n\n    function readUint(offset, byteCount) {\n      let n = 0;\n      for (let i = 0; i < byteCount; i++) {\n        n = (n << 8) | binary[offset + i];\n      }\n      return n >>> 0;\n    }\n\n    if (\n      cidMapOffset + (cidCount + 1) * cidEntrySize > binary.length ||\n      (subrCount > 0 &&\n        (subrMapOffset < 0 ||\n          sdBytes < 1 ||\n          sdBytes > 4 ||\n          subrMapOffset + (subrCount + 1) * sdBytes > binary.length))\n    ) {\n      return null;\n    }\n\n    if (fdBytes > 0) {\n      // Only single-FDArray fonts are supported here. Reject CID-keyed fonts\n      // that actually select multiple font dictionaries, since each FD can\n      // define different private data and subroutines.\n      for (let cid = 0; cid < cidCount; cid++) {\n        if (readUint(cidMapOffset + cid * cidEntrySize, fdBytes) !== 0) {\n          return null;\n        }\n      }\n    }\n\n    if (subrCount > 0) {\n      const subrOffsets = new Array(subrCount + 1);\n      for (let i = 0; i <= subrCount; i++) {\n        subrOffsets[i] = readUint(subrMapOffset + i * sdBytes, sdBytes);\n      }\n      for (let i = 0; i < subrCount; i++) {\n        const start = subrOffsets[i];\n        const end = subrOffsets[i + 1];\n        if (end > binary.length || end < start) {\n          subrs[i] = new Uint8Array(0);\n          continue;\n        }\n        subrs[i] = this.readCharStrings(binary.subarray(start, end), lenIV);\n      }\n    }\n\n    const charstrings = [];\n    let prevOffset = readUint(cidMapOffset + fdBytes, gdBytes);\n    for (let cid = 0; cid < cidCount; cid++) {\n      const nextOffset = readUint(\n        cidMapOffset + (cid + 1) * cidEntrySize + fdBytes,\n        gdBytes\n      );\n      const glyphName = cid === 0 ? \".notdef\" : `cid${cid}`;\n      if (nextOffset > prevOffset && nextOffset <= binary.length) {\n        const encoded = this.readCharStrings(\n          binary.subarray(prevOffset, nextOffset),\n          lenIV\n        );\n        const charString = new Type1CharString();\n        const error = charString.convert(\n          encoded,\n          subrs,\n          this.seacAnalysisEnabled\n        );\n        charstrings.push({\n          glyphName,\n          charstring: error ? [14] : charString.output,\n          width: charString.width,\n          lsb: charString.lsb,\n          seac: charString.seac,\n        });\n      } else {\n        // Empty intervals should select CID 0's notdef glyph, while still\n        // keeping the slot so the CID-to-GID mapping stays aligned.\n        const notDef = charstrings[0];\n        charstrings.push({\n          glyphName,\n          charstring: notDef?.charstring.slice() || [0x8b, 0x0e], // 0 endchar\n          width: notDef?.width || 0,\n          lsb: notDef?.lsb || 0,\n        });\n      }\n      prevOffset = nextOffset;\n    }\n    program.subrs = subrs;\n    program.charstrings = charstrings;\n    return program;\n  }\n\n  extractFontHeader(properties) {\n    let token;\n    while ((token = this.getToken()) !== null) {\n      if (token !== \"/\") {\n        continue;\n      }\n      token = this.getToken();\n      switch (token) {\n        case \"FontMatrix\":\n          const matrix = this.readNumberArray();\n          properties.fontMatrix = matrix;\n          break;\n        case \"Encoding\":\n          const encodingArg = this.getToken();\n          let encoding;\n          if (!/^\\d+$/.test(encodingArg)) {\n            // encoding name is specified\n            encoding = getEncoding(encodingArg);\n          } else {\n            encoding = [];\n            const size = parseInt(encodingArg, 10) | 0;\n            this.getToken(); // read in 'array'\n\n            for (let j = 0; j < size; j++) {\n              token = this.getToken();\n              // skipping till first dup or def (e.g. ignoring for statement)\n              while (token !== \"dup\" && token !== \"def\") {\n                token = this.getToken();\n                if (token === null) {\n                  return; // invalid header\n                }\n              }\n              if (token === \"def\") {\n                break; // read all array data\n              }\n              const index = this.readInt();\n              this.getToken(); // read in '/'\n              const glyph = this.getToken();\n              encoding[index] = glyph;\n              this.getToken(); // read the in 'put'\n            }\n          }\n          properties.builtInEncoding = encoding;\n          break;\n        case \"FontBBox\":\n          const fontBBox = this.readNumberArray();\n          // adjusting ascent/descent\n          properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\n          properties.descent = Math.min(fontBBox[1], fontBBox[3]);\n          properties.ascentScaled = true;\n          break;\n      }\n    }\n  }\n}\n\nexport { Type1Parser };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bytesToString, FormatError, warn } from \"../shared/util.js\";\nimport {\n  CFF,\n  CFFCharset,\n  CFFCompiler,\n  CFFHeader,\n  CFFIndex,\n  CFFPrivateDict,\n  CFFStandardStrings,\n  CFFStrings,\n  CFFTopDict,\n} from \"./cff_parser.js\";\nimport { SEAC_ANALYSIS_ENABLED, type1FontGlyphMapping } from \"./fonts_utils.js\";\nimport { isWhiteSpace } from \"./core_utils.js\";\nimport { Stream } from \"./stream.js\";\nimport { Type1Parser } from \"./type1_parser.js\";\n\nfunction findBlock(streamBytes, signature, startIndex) {\n  const streamBytesLength = streamBytes.length;\n  const signatureLength = signature.length;\n  const scanLength = streamBytesLength - signatureLength;\n\n  let i = startIndex,\n    found = false;\n  while (i < scanLength) {\n    let j = 0;\n    while (j < signatureLength && streamBytes[i + j] === signature[j]) {\n      j++;\n    }\n    if (j >= signatureLength) {\n      // `signature` found, skip over whitespace.\n      i += j;\n      while (i < streamBytesLength && isWhiteSpace(streamBytes[i])) {\n        i++;\n      }\n      found = true;\n      break;\n    }\n    i++;\n  }\n  return {\n    found,\n    length: i,\n  };\n}\n\nfunction getHeaderBlock(stream, suggestedLength) {\n  const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];\n\n  const streamStartPos = stream.pos; // Save the initial stream position.\n  let headerBytes, headerBytesLength, block;\n  try {\n    headerBytes = stream.getBytes(suggestedLength);\n    headerBytesLength = headerBytes.length;\n  } catch {\n    // Ignore errors if the `suggestedLength` is huge enough that a Uint8Array\n    // cannot hold the result of `getBytes`, and fallback to simply checking\n    // the entire stream (fixes issue3928.pdf).\n  }\n\n  if (headerBytesLength === suggestedLength) {\n    // Most of the time `suggestedLength` is correct, so to speed things up we\n    // initially only check the last few bytes to see if the header was found.\n    // Otherwise we (potentially) check the entire stream to prevent errors in\n    // `Type1Parser` (fixes issue5686.pdf).\n    block = findBlock(\n      headerBytes,\n      EEXEC_SIGNATURE,\n      suggestedLength - 2 * EEXEC_SIGNATURE.length\n    );\n\n    if (block.found && block.length === suggestedLength) {\n      return {\n        stream: new Stream(headerBytes),\n        length: suggestedLength,\n      };\n    }\n  }\n  warn('Invalid \"Length1\" property in Type1 font -- trying to recover.');\n  stream.pos = streamStartPos; // Reset the stream position.\n\n  const SCAN_BLOCK_LENGTH = 2048;\n  let actualLength;\n  while (true) {\n    const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\n    block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);\n\n    if (block.length === 0) {\n      break;\n    }\n    stream.pos += block.length; // Update the stream position.\n\n    if (block.found) {\n      actualLength = stream.pos - streamStartPos;\n      break;\n    }\n  }\n  stream.pos = streamStartPos; // Reset the stream position.\n\n  if (actualLength) {\n    return {\n      stream: new Stream(stream.getBytes(actualLength)),\n      length: actualLength,\n    };\n  }\n  warn('Unable to recover \"Length1\" property in Type1 font -- using as is.');\n  return {\n    stream: new Stream(stream.getBytes(suggestedLength)),\n    length: suggestedLength,\n  };\n}\n\nfunction getEexecBlock(stream, suggestedLength) {\n  // We should ideally parse the eexec block to ensure that `suggestedLength`\n  // is correct, so we don't truncate the block data if it's too small.\n  // However, this would also require checking if the fixed-content portion\n  // exists (using the 'Length3' property), and ensuring that it's valid.\n  //\n  // Given that `suggestedLength` almost always is correct, all the validation\n  // would require a great deal of unnecessary parsing for most fonts.\n  // To save time, we always fetch the entire stream instead, which also avoid\n  // issues if `suggestedLength` is huge (see comment in `getHeaderBlock`).\n  //\n  // NOTE: This means that the function can include the fixed-content portion\n  // in the returned eexec block. In practice this does *not* seem to matter,\n  // since `Type1Parser_extractFontProgram` will skip over any non-commands.\n  const eexecBytes = stream.getBytes();\n  if (eexecBytes.length === 0) {\n    throw new FormatError(\"getEexecBlock - no font program found.\");\n  }\n  return {\n    stream: new Stream(eexecBytes),\n    length: eexecBytes.length,\n  };\n}\n\n// Detects the CID-keyed Type 1 format (Adobe TechNote 5014, CIDFontType 0).\n// Caller must additionally check `properties.composite`, since only composite\n// fonts are wrapped as CIDFontType0 in PDF.\nfunction isCidKeyedType1File(file) {\n  const sample = file.peekBytes(2048);\n  if (sample.length < 2 || sample[0] !== 0x25 || sample[1] !== 0x21) {\n    return false;\n  }\n  const text = bytesToString(sample);\n  return text.includes(\"Resource-CIDFont\") || /\\/CIDFontType\\s+0\\b/.test(text);\n}\n\n/**\n * Type1Font is also a CIDFontType0.\n */\nclass Type1Font {\n  #rawFileLength;\n\n  constructor(name, file, properties) {\n    let data;\n    if (properties.composite && isCidKeyedType1File(file)) {\n      data = this.#parseCidKeyedType1(file, properties);\n    }\n    data ||= this.#parseType1(file, properties);\n    for (const key in data.properties) {\n      properties[key] = data.properties[key];\n    }\n\n    const charstrings = data.charstrings;\n    const type2Charstrings = this.getType2Charstrings(charstrings);\n    const subrs = this.getType2Subrs(data.subrs);\n\n    this.charstrings = charstrings;\n    this.data = this.wrap(\n      name,\n      type2Charstrings,\n      this.charstrings,\n      subrs,\n      properties\n    );\n    this.seacs = this.getSeacs(data.charstrings);\n  }\n\n  #parseType1(file, properties) {\n    // Some bad generators embed pfb file as is, we have to strip 6-byte header.\n    // Also, length1 and length2 might be off by 6 bytes as well.\n    // http://www.math.ubc.ca/~cass/piscript/type1.pdf\n    const PFB_HEADER_SIZE = 6;\n    let headerBlockLength = properties.length1;\n    let eexecBlockLength = properties.length2;\n    let pfbHeader = file.peekBytes(PFB_HEADER_SIZE);\n    const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;\n    if (pfbHeaderPresent) {\n      file.skip(PFB_HEADER_SIZE);\n      headerBlockLength =\n        (pfbHeader[5] << 24) |\n        (pfbHeader[4] << 16) |\n        (pfbHeader[3] << 8) |\n        pfbHeader[2];\n    }\n\n    const headerBlock = getHeaderBlock(file, headerBlockLength);\n    const headerBlockParser = new Type1Parser(\n      headerBlock.stream,\n      false,\n      SEAC_ANALYSIS_ENABLED\n    );\n    headerBlockParser.extractFontHeader(properties);\n\n    if (pfbHeaderPresent) {\n      pfbHeader = file.getBytes(PFB_HEADER_SIZE);\n      eexecBlockLength =\n        (pfbHeader[5] << 24) |\n        (pfbHeader[4] << 16) |\n        (pfbHeader[3] << 8) |\n        pfbHeader[2];\n    }\n\n    const eexecBlock = getEexecBlock(file, eexecBlockLength);\n    const eexecBlockParser = new Type1Parser(\n      eexecBlock.stream,\n      true,\n      SEAC_ANALYSIS_ENABLED\n    );\n    const data = eexecBlockParser.extractFontProgram(properties);\n    this.#rawFileLength = headerBlock.length + eexecBlock.length;\n    return data;\n  }\n\n  #parseCidKeyedType1(file, properties) {\n    const fileStart = file.pos;\n    const length = file.end - fileStart;\n    const parser = new Type1Parser(file, false, SEAC_ANALYSIS_ENABLED);\n    const data = parser.extractCidKeyedFontProgram(properties);\n    if (!data) {\n      // Reset the stream so the regular Type 1 path can re-try.\n      file.pos = fileStart;\n      warn(\"Type1Font: unable to parse CID-keyed Type 1 font.\");\n      return null;\n    }\n    this.#rawFileLength = length;\n    return data;\n  }\n\n  get numGlyphs() {\n    return this.charstrings.length + 1;\n  }\n\n  getCharset() {\n    const charset = [\".notdef\"];\n    for (const { glyphName } of this.charstrings) {\n      charset.push(glyphName);\n    }\n    return charset;\n  }\n\n  getGlyphMapping(properties) {\n    const charstrings = this.charstrings;\n\n    if (properties.composite) {\n      const charCodeToGlyphId = Object.create(null);\n      // Map CIDs directly to GIDs.\n      for (\n        let glyphId = 0, charstringsLen = charstrings.length;\n        glyphId < charstringsLen;\n        glyphId++\n      ) {\n        const charCode = properties.cMap.charCodeOf(glyphId);\n        // Add 1 because glyph 0 is duplicated.\n        charCodeToGlyphId[charCode] = glyphId + 1;\n      }\n      return charCodeToGlyphId;\n    }\n\n    const glyphNames = [\".notdef\"];\n    let builtInEncoding, glyphId;\n    for (glyphId = 0; glyphId < charstrings.length; glyphId++) {\n      glyphNames.push(charstrings[glyphId].glyphName);\n    }\n    const encoding = properties.builtInEncoding;\n    if (encoding) {\n      builtInEncoding = Object.create(null);\n      for (const charCode in encoding) {\n        glyphId = glyphNames.indexOf(encoding[charCode]);\n        if (glyphId >= 0) {\n          builtInEncoding[charCode] = glyphId;\n        }\n      }\n    }\n\n    return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);\n  }\n\n  hasGlyphId(id) {\n    if (id < 0 || id >= this.numGlyphs) {\n      return false;\n    }\n    if (id === 0) {\n      // notdef is always defined.\n      return true;\n    }\n    const glyph = this.charstrings[id - 1];\n    return glyph.charstring.length > 0;\n  }\n\n  getSeacs(charstrings) {\n    const seacMap = [];\n    for (let i = 0, ii = charstrings.length; i < ii; i++) {\n      const charstring = charstrings[i];\n      if (charstring.seac) {\n        // Offset by 1 for .notdef\n        seacMap[i + 1] = charstring.seac;\n      }\n    }\n    return seacMap;\n  }\n\n  getType2Charstrings(type1Charstrings) {\n    const type2Charstrings = [];\n    for (const type1Charstring of type1Charstrings) {\n      type2Charstrings.push(type1Charstring.charstring);\n    }\n    return type2Charstrings;\n  }\n\n  getType2Subrs(type1Subrs) {\n    let bias = 0;\n    const count = type1Subrs.length;\n    if (count < 1133) {\n      bias = 107;\n    } else if (count < 33769) {\n      bias = 1131;\n    } else {\n      bias = 32768;\n    }\n\n    // Add a bunch of empty subrs to deal with the Type2 bias\n    const type2Subrs = [];\n    let i;\n    for (i = 0; i < bias; i++) {\n      type2Subrs.push([0x0b]);\n    }\n\n    for (i = 0; i < count; i++) {\n      type2Subrs.push(type1Subrs[i]);\n    }\n\n    return type2Subrs;\n  }\n\n  wrap(name, glyphs, charstrings, subrs, properties) {\n    const cff = new CFF(this.#rawFileLength);\n    cff.header = new CFFHeader(1, 0, 4, 4);\n\n    cff.names = [name];\n\n    const topDict = new CFFTopDict();\n    // CFF strings IDs 0...390 are predefined names, so refering\n    // to entries in our own String INDEX starts at SID 391.\n    topDict.setByName(\"version\", 391);\n    topDict.setByName(\"Notice\", 392);\n    topDict.setByName(\"FullName\", 393);\n    topDict.setByName(\"FamilyName\", 394);\n    topDict.setByName(\"Weight\", 395);\n    topDict.setByName(\"Encoding\", null); // placeholder\n    topDict.setByName(\"FontMatrix\", properties.fontMatrix);\n    topDict.setByName(\"FontBBox\", properties.bbox);\n    topDict.setByName(\"charset\", null); // placeholder\n    topDict.setByName(\"CharStrings\", null); // placeholder\n    topDict.setByName(\"Private\", null); // placeholder\n    cff.topDict = topDict;\n\n    const strings = new CFFStrings();\n    strings.add(\"Version 0.11\"); // Version\n    strings.add(\"See original notice\"); // Notice\n    strings.add(name); // FullName\n    strings.add(name); // FamilyName\n    strings.add(\"Medium\"); // Weight\n    cff.strings = strings;\n\n    cff.globalSubrIndex = new CFFIndex();\n\n    const count = glyphs.length;\n    const charsetArray = [\".notdef\"];\n    for (let i = 0; i < count; i++) {\n      const { glyphName } = charstrings[i];\n      const index = CFFStandardStrings.indexOf(glyphName);\n      if (index === -1) {\n        strings.add(glyphName);\n      }\n      charsetArray.push(glyphName);\n    }\n    cff.charset = new CFFCharset(false, 0, charsetArray);\n\n    const charStringsIndex = new CFFIndex();\n    charStringsIndex.add([0x8b, 0x0e]); // .notdef\n    for (let i = 0; i < count; i++) {\n      charStringsIndex.add(glyphs[i]);\n    }\n    cff.charStrings = charStringsIndex;\n\n    const privateDict = new CFFPrivateDict();\n    privateDict.setByName(\"Subrs\", null); // placeholder\n    const fields = [\n      \"BlueValues\",\n      \"OtherBlues\",\n      \"FamilyBlues\",\n      \"FamilyOtherBlues\",\n      \"StemSnapH\",\n      \"StemSnapV\",\n      \"BlueShift\",\n      \"BlueFuzz\",\n      \"BlueScale\",\n      \"LanguageGroup\",\n      \"ExpansionFactor\",\n      \"ForceBold\",\n      \"StdHW\",\n      \"StdVW\",\n    ];\n    for (const field of fields) {\n      if (!properties.privateData.has(field)) {\n        continue;\n      }\n      const value = properties.privateData.get(field);\n      if (Array.isArray(value)) {\n        // All of the private dictionary array data in CFF must be stored as\n        // \"delta-encoded\" numbers.\n        for (let j = value.length - 1; j > 0; j--) {\n          value[j] -= value[j - 1]; // ... difference from previous value\n        }\n      }\n      privateDict.setByName(field, value);\n    }\n    cff.topDict.privateDict = privateDict;\n\n    const subrIndex = new CFFIndex();\n    for (const subr of subrs) {\n      subrIndex.add(subr);\n    }\n    privateDict.subrsIndex = subrIndex;\n\n    const compiler = new CFFCompiler(cff);\n    return compiler.compile();\n  }\n}\n\nexport { Type1Font };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  bytesToString,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  info,\n  shadow,\n  stringToBytes,\n  warn,\n} from \"../shared/util.js\";\nimport { CFFCompiler, CFFParser } from \"./cff_parser.js\";\nimport {\n  FontFlags,\n  getVerticalPresentationForm,\n  MacStandardGlyphOrdering,\n  normalizeFontName,\n  recoverGlyphName,\n  SEAC_ANALYSIS_ENABLED,\n} from \"./fonts_utils.js\";\nimport {\n  getCharUnicodeCategory,\n  getUnicodeForGlyph,\n  getUnicodeRangeFor,\n  mapSpecialUnicodeValues,\n} from \"./unicode.js\";\nimport { getDingbatsGlyphsUnicode, getGlyphsUnicode } from \"./glyphlist.js\";\nimport {\n  getEncoding,\n  MacRomanEncoding,\n  StandardEncoding,\n  SymbolSetEncoding,\n  WinAnsiEncoding,\n  ZapfDingbatsEncoding,\n} from \"./encodings.js\";\nimport {\n  getGlyphMapForStandardFonts,\n  getNonStdFontMap,\n  getSerifFonts,\n  getStdFontMap,\n  getSupplementalGlyphMapForArialBlack,\n  getSupplementalGlyphMapForCalibri,\n} from \"./standard_fonts.js\";\nimport { GlyfTable, pruneCompositeGlyphCycles } from \"./glyf.js\";\nimport { IdentityToUnicodeMap, ToUnicodeMap } from \"./to_unicode_map.js\";\nimport { CFFFont } from \"./cff_font.js\";\nimport { compileFontInfo } from \"./obj_bin_transform_core.js\";\nimport { DataBuilder } from \"./data_builder.js\";\nimport { FontRendererFactory } from \"./font_renderer.js\";\nimport { getFontBasicMetrics } from \"./metrics.js\";\nimport { OpenTypeFileBuilder } from \"./opentype_file_builder.js\";\nimport { Stream } from \"./stream.js\";\nimport { Type1Font } from \"./type1_font.js\";\n\n// Unicode Private Use Areas:\nconst PRIVATE_USE_AREAS = [\n  [0xe000, 0xf8ff], // BMP (0)\n  [0x100000, 0x10fffd], // PUP (16)\n];\n\n// PDF Glyph Space Units are one Thousandth of a TextSpace Unit\n// except for Type 3 fonts\nconst PDF_GLYPH_SPACE_UNITS = 1000;\n\nconst EXPORT_DATA_PROPERTIES = [\n  \"ascent\",\n  \"bbox\",\n  \"black\",\n  \"bold\",\n  // \"charProcOperatorList\" is handled separately, since it's not compiled.\n  \"cssFontInfo\",\n  \"data\",\n  \"defaultVMetrics\",\n  \"defaultWidth\",\n  \"descent\",\n  \"disableFontFace\",\n  \"fallbackName\",\n  \"fontExtraProperties\",\n  \"fontMatrix\",\n  \"isInvalidPDFjsFont\",\n  \"isType3Font\",\n  \"italic\",\n  \"loadedName\",\n  \"mimetype\",\n  \"missingFile\",\n  \"name\",\n  \"remeasure\",\n  \"systemFontInfo\",\n  \"vertical\",\n];\n\nconst EXPORT_DATA_EXTRA_PROPERTIES = [\n  \"cMap\",\n  \"composite\",\n  \"defaultEncoding\",\n  \"differences\",\n  \"isMonospace\",\n  \"isSerifFont\",\n  \"isSymbolicFont\",\n  \"seacMap\",\n  \"subtype\",\n  \"toFontChar\",\n  \"toUnicode\",\n  \"type\",\n  \"vmetrics\",\n  \"widths\",\n];\n\nfunction adjustWidths(properties) {\n  if (!properties.fontMatrix) {\n    return;\n  }\n  if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {\n    return;\n  }\n  // adjusting width to fontMatrix scale\n  const scale = 0.001 / properties.fontMatrix[0];\n  const glyphsWidths = properties.widths;\n  for (const glyph in glyphsWidths) {\n    glyphsWidths[glyph] *= scale;\n  }\n  properties.defaultWidth *= scale;\n}\n\nfunction adjustTrueTypeToUnicode(properties, isSymbolicFont, nameRecords) {\n  if (properties.isInternalFont) {\n    return;\n  }\n  if (properties.hasIncludedToUnicodeMap) {\n    return; // The font dictionary has a `ToUnicode` entry.\n  }\n  if (properties.hasEncoding) {\n    return; // The font dictionary has an `Encoding` entry.\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  if (!isSymbolicFont) {\n    return; // A non-symbolic font should default to `StandardEncoding`.\n  }\n  if (nameRecords.length === 0) {\n    return;\n  }\n\n  // Try to infer if the fallback encoding should really be `WinAnsiEncoding`.\n  if (properties.defaultEncoding === WinAnsiEncoding) {\n    return;\n  }\n  for (const r of nameRecords) {\n    if (!isWinNameRecord(r)) {\n      return; // Not Windows, hence `WinAnsiEncoding` wouldn't make sense.\n    }\n  }\n  const encoding = WinAnsiEncoding;\n\n  const toUnicode = [],\n    glyphsUnicodeMap = getGlyphsUnicode();\n  for (const charCode in encoding) {\n    const glyphName = encoding[charCode];\n    if (glyphName === \"\") {\n      continue;\n    }\n    const unicode = glyphsUnicodeMap[glyphName];\n    if (unicode === undefined) {\n      continue;\n    }\n    toUnicode[charCode] = String.fromCharCode(unicode);\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\n\nfunction adjustType1ToUnicode(properties, builtInEncoding) {\n  if (properties.isInternalFont) {\n    return;\n  }\n  if (properties.hasIncludedToUnicodeMap) {\n    return; // The font dictionary has a `ToUnicode` entry.\n  }\n  if (builtInEncoding === properties.defaultEncoding) {\n    return; // No point in trying to adjust `toUnicode` if the encodings match.\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  const toUnicode = [],\n    glyphsUnicodeMap = getGlyphsUnicode();\n  for (const charCode in builtInEncoding) {\n    if (properties.hasEncoding) {\n      if (\n        properties.baseEncodingName ||\n        properties.differences[charCode] !== undefined\n      ) {\n        continue; // The font dictionary has an `Encoding`/`Differences` entry.\n      }\n    }\n    const glyphName = builtInEncoding[charCode];\n    const unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toUnicode[charCode] = String.fromCharCode(unicode);\n    }\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\n\n/**\n * NOTE: This function should only be called at the *end* of font-parsing,\n *       after e.g. `adjustType1ToUnicode` has run, to prevent any issues.\n */\nfunction amendFallbackToUnicode(properties) {\n  if (!properties.fallbackToUnicode) {\n    return;\n  }\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\n    return;\n  }\n  const toUnicode = [];\n  for (const charCode in properties.fallbackToUnicode) {\n    if (properties.toUnicode.has(charCode)) {\n      continue; // The font dictionary has a `ToUnicode` entry.\n    }\n    toUnicode[charCode] = properties.fallbackToUnicode[charCode];\n  }\n  if (toUnicode.length > 0) {\n    properties.toUnicode.amend(toUnicode);\n  }\n}\n\nclass Glyph {\n  constructor(\n    originalCharCode,\n    fontChar,\n    unicode,\n    accent,\n    width,\n    vmetric,\n    operatorListId,\n    isSpace,\n    isInFont\n  ) {\n    this.originalCharCode = originalCharCode;\n    this.fontChar = fontChar;\n    this.unicode = unicode;\n    this.accent = accent;\n    this.width = width;\n    this.vmetric = vmetric;\n    this.operatorListId = operatorListId;\n    this.isSpace = isSpace;\n    this.isInFont = isInFont;\n  }\n\n  /**\n   * This property, which is only used by `PartialEvaluator.getTextContent`,\n   * is purposely made non-serializable.\n   * @type {Object}\n   */\n  get category() {\n    return shadow(\n      this,\n      \"category\",\n      getCharUnicodeCategory(this.unicode),\n      /* nonSerializable = */ true\n    );\n  }\n}\n\nfunction int16(b0, b1) {\n  return (b0 << 8) + b1;\n}\n\nfunction writeSignedInt16(bytes, index, value) {\n  bytes[index + 1] = value;\n  bytes[index] = value >>> 8;\n}\n\nfunction signedInt16(b0, b1) {\n  const value = (b0 << 8) + b1;\n  return value & (1 << 15) ? value - 0x10000 : value;\n}\n\nfunction writeUint32(bytes, index, value) {\n  bytes[index + 3] = value & 0xff;\n  bytes[index + 2] = value >>> 8;\n  bytes[index + 1] = value >>> 16;\n  bytes[index] = value >>> 24;\n}\n\nfunction isTrueTypeFile(file) {\n  const header = file.peekBytes(4),\n    str = bytesToString(header);\n  return str === \"\\x00\\x01\\x00\\x00\" || str === \"true\";\n}\n\nfunction isTrueTypeCollectionFile(file) {\n  const header = file.peekBytes(4);\n  return bytesToString(header) === \"ttcf\";\n}\n\nfunction isOpenTypeFile(file) {\n  const header = file.peekBytes(4);\n  return bytesToString(header) === \"OTTO\";\n}\n\nfunction isType1File(file) {\n  const header = file.peekBytes(2);\n  // All Type1 font programs must begin with the comment '%!' (0x25 + 0x21).\n  if (header[0] === 0x25 && header[1] === 0x21) {\n    return true;\n  }\n  // ... obviously some fonts violate that part of the specification,\n  // please refer to the comment in |Type1Font| below (pfb file header).\n  if (header[0] === 0x80 && header[1] === 0x01) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Compared to other font formats, the header in CFF files is not constant\n * but contains version numbers. To reduce the possibility of misclassifying\n * font files as CFF, it's recommended to check for other font formats first.\n */\nfunction isCFFFile(file) {\n  const header = file.peekBytes(4);\n  if (\n    /* major version, [1, 255] */ header[0] >= 1 &&\n    /* minor version, [0, 255]; header[1] */\n    /* header size, [0, 255]; header[2] */\n    /* offset(0) size, [1, 4] */ header[3] >= 1 &&\n    header[3] <= 4\n  ) {\n    return true;\n  }\n  return false;\n}\n\nfunction getFontFileType(file, { type, subtype, composite }) {\n  let fileType, fileSubtype;\n\n  if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {\n    fileType = composite ? \"CIDFontType2\" : \"TrueType\";\n  } else if (isOpenTypeFile(file)) {\n    fileType = composite ? \"CIDFontType2\" : \"OpenType\";\n  } else if (isType1File(file)) {\n    if (composite) {\n      fileType = \"CIDFontType0\";\n    } else {\n      fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n    }\n  } else if (isCFFFile(file)) {\n    if (composite) {\n      fileType = \"CIDFontType0\";\n      fileSubtype = \"CIDFontType0C\";\n    } else {\n      fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\n      fileSubtype = \"Type1C\";\n    }\n  } else {\n    warn(\"getFontFileType: Unable to detect correct font file Type/Subtype.\");\n    fileType = type;\n    fileSubtype = subtype;\n  }\n\n  return [fileType, fileSubtype];\n}\n\nfunction applyStandardFontGlyphMap(map, glyphMap) {\n  for (const charCode in glyphMap) {\n    map[+charCode] = glyphMap[charCode];\n  }\n}\n\nfunction buildToFontChar(encoding, glyphsUnicodeMap, differences) {\n  const toFontChar = [];\n  let unicode;\n  for (let i = 0, ii = encoding.length; i < ii; i++) {\n    unicode = getUnicodeForGlyph(encoding[i], glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toFontChar[i] = unicode;\n    }\n  }\n  for (const charCode in differences) {\n    unicode = getUnicodeForGlyph(differences[charCode], glyphsUnicodeMap);\n    if (unicode !== -1) {\n      toFontChar[+charCode] = unicode;\n    }\n  }\n  return toFontChar;\n}\n\n// Please refer to:\n//  - https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html\nfunction isMacNameRecord(r) {\n  return r.platform === 1 && r.encoding === 0 && r.language === 0;\n}\n\n// Please refer to:\n//  - https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html\n//  - https://learn.microsoft.com/en-us/typography/opentype/spec/name#windows-language-ids\nfunction isWinNameRecord(r) {\n  return r.platform === 3 && r.encoding === 1 && r.language === 0x409;\n}\n\nfunction convertCidString(charCode, cid, shouldThrow = false) {\n  switch (cid.length) {\n    case 1:\n      return cid.charCodeAt(0);\n    case 2:\n      return (cid.charCodeAt(0) << 8) | cid.charCodeAt(1);\n  }\n  const msg = `Unsupported CID string (charCode ${charCode}): \"${cid}\".`;\n  if (shouldThrow) {\n    throw new FormatError(msg);\n  }\n  warn(msg);\n  return cid;\n}\n\n/**\n * Rebuilds the char code to glyph ID map by moving all char codes to the\n * private use area. This is done to avoid issues with various problematic\n * unicode areas where either a glyph won't be drawn or is deformed by a\n * shaper.\n * @returns {Object} Two properties:\n * 'toFontChar' - maps original char codes(the value that will be read\n * from commands such as show text) to the char codes that will be used in the\n * font that we build\n * 'charCodeToGlyphId' - maps the new font char codes to glyph ids\n */\nfunction adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) {\n  const newMap = Object.create(null);\n  const toUnicodeExtraMap = new Map();\n  const toFontChar = [];\n  const usedGlyphIds = new Set();\n  let privateUseAreaIndex = 0;\n  const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n  let nextAvailableFontCharCode = privateUseOffetStart;\n  let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n  const isInPrivateArea = code =>\n    (PRIVATE_USE_AREAS[0][0] <= code && code <= PRIVATE_USE_AREAS[0][1]) ||\n    (PRIVATE_USE_AREAS[1][0] <= code && code <= PRIVATE_USE_AREAS[1][1]);\n  let LIGATURE_TO_UNICODE = null;\n\n  for (const originalCharCode in charCodeToGlyphId) {\n    let glyphId = charCodeToGlyphId[originalCharCode];\n    // For missing glyphs don't create the mappings so the glyph isn't\n    // drawn.\n    if (!hasGlyph(glyphId)) {\n      continue;\n    }\n    if (nextAvailableFontCharCode > privateUseOffetEnd) {\n      privateUseAreaIndex++;\n      if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {\n        warn(\"Ran out of space in font private use area.\");\n        break;\n      }\n      nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\n      privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\n    }\n    const fontCharCode = nextAvailableFontCharCode++;\n    if (glyphId === 0) {\n      glyphId = newGlyphZeroId;\n    }\n\n    // Fix for bug 1778484:\n    // The charcodes are moved into a private use area to fix some rendering\n    // issues (https://github.com/mozilla/pdf.js/pull/9340) but when printing\n    // to PDF the generated font will contain wrong chars. We can avoid that by\n    // adding the unicode to the cmap and the print backend will then map the\n    // glyph ids to the correct unicode.\n    let unicode = toUnicode.get(originalCharCode);\n    if (typeof unicode === \"string\") {\n      if (unicode.length === 1) {\n        unicode = unicode.codePointAt(0);\n      } else {\n        if (!LIGATURE_TO_UNICODE) {\n          LIGATURE_TO_UNICODE = new Map();\n          // The code range [0xfb00, 0xfb4f] contains some ligature characters\n          // but not all.\n          // See https://www.compart.com/en/unicode/block/U+FB00.\n          for (let i = 0xfb00; i <= 0xfb4f; i++) {\n            const normalized = String.fromCharCode(i).normalize(\"NFKD\");\n            if (normalized.length > 1) {\n              LIGATURE_TO_UNICODE.set(normalized, i);\n            }\n          }\n        }\n        unicode = LIGATURE_TO_UNICODE.get(unicode) || unicode.codePointAt(0);\n      }\n    }\n    if (unicode && !isInPrivateArea(unicode) && !usedGlyphIds.has(glyphId)) {\n      toUnicodeExtraMap.set(unicode, glyphId);\n      usedGlyphIds.add(glyphId);\n    }\n\n    newMap[fontCharCode] = glyphId;\n    toFontChar[originalCharCode] = fontCharCode;\n  }\n  return {\n    toFontChar,\n    charCodeToGlyphId: newMap,\n    toUnicodeExtraMap,\n    nextAvailableFontCharCode,\n  };\n}\n\nfunction getRanges(glyphs, toUnicodeExtraMap, numGlyphs) {\n  // Array.sort() sorts by characters, not numerically, so convert to an\n  // array of characters.\n  const codes = [];\n  for (const charCode in glyphs) {\n    // Remove an invalid glyph ID mappings to make OTS happy.\n    if (glyphs[charCode] >= numGlyphs) {\n      continue;\n    }\n    codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });\n  }\n  if (toUnicodeExtraMap) {\n    for (const [unicode, glyphId] of toUnicodeExtraMap) {\n      if (glyphId >= numGlyphs) {\n        continue;\n      }\n      codes.push({ fontCharCode: unicode, glyphId });\n    }\n  }\n  // Some fonts have zero glyphs and are used only for text selection, but\n  // there needs to be at least one to build a valid cmap table.\n  if (codes.length === 0) {\n    codes.push({ fontCharCode: 0, glyphId: 0 });\n  }\n  codes.sort((a, b) => a.fontCharCode - b.fontCharCode);\n\n  // Split the sorted codes into ranges.\n  const ranges = [];\n  const length = codes.length;\n  for (let n = 0; n < length;) {\n    const start = codes[n].fontCharCode;\n    const codeIndices = [codes[n].glyphId];\n    ++n;\n    let end = start;\n    while (n < length && end + 1 === codes[n].fontCharCode) {\n      codeIndices.push(codes[n].glyphId);\n      ++end;\n      ++n;\n      if (end === 0xffff) {\n        break;\n      }\n    }\n    ranges.push([start, end, codeIndices]);\n  }\n\n  return ranges;\n}\n\nfunction createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) {\n  const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs);\n  const hasNonBmp = ranges.at(-1)[1] > 0xffff;\n\n  let i, ii, j, jj;\n  for (i = ranges.length - 1; i >= 0; --i) {\n    if (ranges[i][0] <= 0xffff) {\n      break;\n    }\n  }\n  const bmpLength = i + 1;\n\n  if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {\n    ranges[i][1] = 0xfffe;\n  }\n  const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;\n  const segCount = bmpLength + trailingRangesCount;\n  const searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);\n\n  // Fill up the 4 parallel arrays describing the segments.\n  const segmentsLength = bmpLength * 2 + trailingRangesCount * 2;\n  const startCount = new DataBuilder({ exactLength: segmentsLength }),\n    endCount = new DataBuilder({ exactLength: segmentsLength }),\n    idDeltas = new DataBuilder({ exactLength: segmentsLength }),\n    idRangeOffsets = new DataBuilder({ exactLength: segmentsLength }),\n    glyphsIds = new DataBuilder({});\n  let bias = 0;\n  // The \"length\" and \"idRangeOffset\" fields of a format 4 sub-table are\n  // 16-bit, hence fonts with a large/sparse glyph mapping cannot be encoded\n  // that way; when that happens we rely on the format 12 sub-table instead\n  // (see below) and skip the format 4 one altogether.\n  let format4Overflow = false;\n\n  for (i = 0, ii = bmpLength; i < ii; i++) {\n    const [start, end, codes] = ranges[i];\n    startCount.setInt16(start);\n    endCount.setInt16(end);\n    let contiguous = true;\n    for (j = 1, jj = codes.length; j < jj; ++j) {\n      if (codes[j] !== codes[j - 1] + 1) {\n        contiguous = false;\n        break;\n      }\n    }\n    if (!contiguous) {\n      const offset = (segCount - i) * 2 + bias * 2;\n      bias += end - start + 1;\n\n      idDeltas.skip(2); // Skip redundant \"\\x00\\x00\"\n      if (offset > 0xffff) {\n        // The sub-table is discarded below, so just write a placeholder that\n        // fits in the 16-bit \"idRangeOffset\" field.\n        format4Overflow = true;\n        idRangeOffsets.skip(2);\n      } else {\n        idRangeOffsets.setInt16(offset);\n      }\n\n      for (j = 0, jj = codes.length; j < jj; ++j) {\n        glyphsIds.setInt16(codes[j]);\n      }\n    } else {\n      const startCode = codes[0];\n\n      idDeltas.setInt16((startCode - start) & 0xffff);\n      idRangeOffsets.skip(2); // Skip redundant \"\\x00\\x00\"\n    }\n  }\n\n  if (trailingRangesCount > 0) {\n    endCount.setArray([0xff, 0xff]);\n    startCount.setArray([0xff, 0xff]);\n    idDeltas.setArray([0x00, 0x01]);\n    idRangeOffsets.skip(2); // Skip redundant \"\\x00\\x00\"\n  }\n\n  const format314 = new DataBuilder({\n    exactLength:\n      12 +\n      startCount.length +\n      endCount.length +\n      idDeltas.length +\n      idRangeOffsets.length +\n      glyphsIds.length,\n  });\n  format314.skip(2); // language, skip redundant \"\\x00\\x00\"\n  format314.setInt16(2 * segCount);\n  format314.setInt16(searchParams.range);\n  format314.setInt16(searchParams.entry);\n  format314.setInt16(searchParams.rangeShift);\n  format314.setArray(endCount.data);\n  format314.skip(2); // Skip redundant \"\\x00\\x00\"\n  format314.setArray(startCount.data);\n  format314.setArray(idDeltas.data);\n  format314.setArray(idRangeOffsets.data);\n  format314.setArray(glyphsIds.data);\n\n  // The format 4 (3, 1) sub-table can only be used when it fits within its\n  // 16-bit \"length\"/\"idRangeOffset\" fields. A format 12 (3, 10) sub-table is\n  // required for characters outside the BMP, and also acts as a fallback when\n  // the format 4 one overflows (note that format 12 covers the whole mapping,\n  // so dropping the redundant format 4 sub-table is fine).\n  const useFormat4 = !format4Overflow && format314.length + 4 <= 0xffff;\n  const useFormat12 = hasNonBmp || !useFormat4;\n  const numTables = (useFormat4 ? 1 : 0) + (useFormat12 ? 1 : 0);\n\n  let format31012 = null,\n    header31012 = null;\n  if (useFormat12) {\n    format31012 = new DataBuilder({});\n    for (const range of ranges) {\n      let start = range[0];\n      const codes = range[2];\n      let code = codes[0];\n      for (j = 1, jj = codes.length; j < jj; ++j) {\n        if (codes[j] !== codes[j - 1] + 1) {\n          const end = range[0] + j - 1;\n          format31012.setInt32(start); // startCharCode\n          format31012.setInt32(end); // endCharCode\n          format31012.setInt32(code); // startGlyphID\n          start = end + 1;\n          code = codes[j];\n        }\n      }\n      format31012.setInt32(start); // startCharCode\n      format31012.setInt32(range[1]); // endCharCode\n      format31012.setInt32(code); // startGlyphID\n    }\n\n    header31012 = new DataBuilder({ exactLength: 16 });\n    header31012.setArray([0x00, 0x0c]); // format\n    header31012.skip(2); // reserved, skip redundant \"\\x00\\x00\"\n    header31012.setInt32(format31012.length + 16); // length\n    header31012.skip(4); // language, skip redundant \"\\x00\\x00\\x00\\x00\"\n    header31012.setInt32(format31012.length / 12); // nGroups\n  }\n\n  // Header (\"version\" + \"numTables\") followed by one encoding record per\n  // sub-table; the sub-tables themselves are appended afterwards.\n  const headerLength = 4 + numTables * 8;\n  const format4Length = useFormat4 ? 4 + format314.length : 0;\n\n  const cmap = new DataBuilder({ exactLength: headerLength });\n  cmap.skip(2); // version, skip redundant \"\\x00\\x00\"\n  cmap.setInt16(numTables); // numTables\n  let tableOffset = headerLength;\n  if (useFormat4) {\n    cmap.setArray([0x00, 0x03]); // platformID\n    cmap.setArray([0x00, 0x01]); // encodingID\n    cmap.setInt32(tableOffset); // start of the (3, 1) sub-table\n    tableOffset += format4Length;\n  }\n  if (useFormat12) {\n    cmap.setArray([0x00, 0x03]); // platformID\n    cmap.setArray([0x00, 0x0a]); // encodingID\n    cmap.setInt32(tableOffset); // start of the (3, 10) sub-table\n  }\n\n  const table = new DataBuilder({\n    exactLength:\n      cmap.length +\n      format4Length +\n      (header31012?.length ?? 0) +\n      (format31012?.length ?? 0),\n  });\n  table.setArray(cmap.data);\n  if (useFormat4) {\n    table.setArray([0x00, 0x04]); // format\n    table.setInt16(format314.length + 4); // length\n    table.setArray(format314.data);\n  }\n  if (useFormat12) {\n    table.setArray(header31012.data);\n    table.setArray(format31012.data);\n  }\n  return table.data;\n}\n\nfunction validateOS2Table(os2, file) {\n  file.pos = (file.start || 0) + os2.offset;\n  const version = file.getUint16();\n  // https://learn.microsoft.com/en-us/typography/opentype/spec/os2\n  const minLength = [78, 86, 96, 96, 96, 100][version];\n  if (minLength === undefined || os2.length < minLength) {\n    return false;\n  }\n  // TODO verify all OS/2 tables fields, but currently we validate only those\n  // that give us issues\n  file.skip(60); // skipping type, misc sizes, panose, unicode ranges\n  const selection = file.getUint16();\n  if (version < 4 && selection & 0x0300) {\n    return false;\n  }\n  const firstChar = file.getUint16();\n  const lastChar = file.getUint16();\n  if (firstChar > lastChar) {\n    return false;\n  }\n  file.skip(6); // skipping sTypoAscender/Descender/LineGap\n  const usWinAscent = file.getUint16();\n  if (usWinAscent === 0) {\n    // makes font unreadable by windows\n    return false;\n  }\n\n  // OS/2 appears to be valid, resetting some fields\n  os2.data[8] = os2.data[9] = 0; // IE rejects fonts if fsType != 0\n  return true;\n}\n\nfunction createOS2Table(properties, charstrings, override) {\n  override ||= {\n    unitsPerEm: 0,\n    yMax: 0,\n    yMin: 0,\n    ascent: 0,\n    descent: 0,\n  };\n\n  let ulUnicodeRange1 = 0;\n  let ulUnicodeRange2 = 0;\n  let ulUnicodeRange3 = 0;\n  let ulUnicodeRange4 = 0;\n\n  let firstCharIndex = null;\n  let lastCharIndex = 0;\n  let position = -1;\n\n  if (charstrings) {\n    for (let code in charstrings) {\n      code |= 0;\n      if (firstCharIndex > code || !firstCharIndex) {\n        firstCharIndex = code;\n      }\n      if (lastCharIndex < code) {\n        lastCharIndex = code;\n      }\n\n      position = getUnicodeRangeFor(code, position);\n      if (position < 32) {\n        ulUnicodeRange1 |= 1 << position;\n      } else if (position < 64) {\n        ulUnicodeRange2 |= 1 << (position - 32);\n      } else if (position < 96) {\n        ulUnicodeRange3 |= 1 << (position - 64);\n      } else if (position < 123) {\n        ulUnicodeRange4 |= 1 << (position - 96);\n      } else {\n        throw new FormatError(\n          \"Unicode ranges Bits > 123 are reserved for internal usage\"\n        );\n      }\n    }\n    if (lastCharIndex > 0xffff) {\n      // OS2 only supports a 16 bit int. The spec says if supplementary\n      // characters are used the field should just be set to 0xFFFF.\n      lastCharIndex = 0xffff;\n    }\n  } else {\n    // TODO\n    firstCharIndex = 0;\n    lastCharIndex = 255;\n  }\n\n  const bbox = properties.bbox || [0, 0, 0, 0];\n  const unitsPerEm =\n    override.unitsPerEm ||\n    (properties.fontMatrix\n      ? 1 / Math.max(...properties.fontMatrix.slice(0, 4).map(Math.abs))\n      : 1000);\n\n  // if the font units differ to the PDF glyph space units\n  // then scale up the values\n  const scale = properties.ascentScaled\n    ? 1.0\n    : unitsPerEm / PDF_GLYPH_SPACE_UNITS;\n\n  const typoAscent =\n    override.ascent || Math.round(scale * (properties.ascent || bbox[3]));\n  let typoDescent =\n    override.descent || Math.round(scale * (properties.descent || bbox[1]));\n  if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {\n    typoDescent = -typoDescent; // fixing incorrect descent\n  }\n  const winAscent = override.yMax || typoAscent;\n  const winDescent = -override.yMin || -typoDescent;\n\n  const os2 = new DataBuilder({ exactLength: 96 });\n  os2.setArray([0x00, 0x03]); // version\n  os2.setArray([0x02, 0x24]); // xAvgCharWidth\n  os2.setArray([0x01, 0xf4]); // usWeightClass\n  os2.setArray([0x00, 0x05]); // usWidthClass\n  os2.skip(2); // fstype (0 to improve browser compatibility), skip redundant \"\\x00\\x00\"\n  os2.setArray([0x02, 0x8a]); // ySubscriptXSize\n  os2.setArray([0x02, 0xbb]); // ySubscriptYSize\n  os2.skip(2); // ySubscriptXOffset, skip redundant \"\\x00\\x00\"\n  os2.setArray([0x00, 0x8c]); // ySubscriptYOffset\n  os2.setArray([0x02, 0x8a]); // ySuperScriptXSize\n  os2.setArray([0x02, 0xbb]); // ySuperScriptYSize\n  os2.skip(2); // ySuperScriptXOffset, skip redundant \"\\x00\\x00\"\n  os2.setArray([0x01, 0xdf]); // ySuperScriptYOffset\n  os2.setArray([0x00, 0x31]); // yStrikeOutSize\n  os2.setArray([0x01, 0x02]); // yStrikeOutPosition\n  os2.skip(2); // sFamilyClass, skip redundant \"\\x00\\x00\"\n  os2.setArray([\n    0x00,\n    0x00,\n    0x06,\n    properties.fixedPitch ? 0x09 : 0x00,\n    0x00,\n    0x00,\n    0x00,\n    0x00,\n    0x00,\n    0x00,\n  ]); // Panose\n  os2.setInt32(ulUnicodeRange1); // ulUnicodeRange1 (Bits 0-31)\n  os2.setInt32(ulUnicodeRange2); // ulUnicodeRange2 (Bits 32-63)\n  os2.setInt32(ulUnicodeRange3); // ulUnicodeRange3 (Bits 64-95)\n  os2.setInt32(ulUnicodeRange4); // ulUnicodeRange4 (Bits 96-127)\n  os2.setArray([0x2a, 0x32, 0x31, 0x2a]); // achVendID\n  os2.setInt16(properties.italicAngle ? 1 : 0); // fsSelection\n  os2.setInt16(firstCharIndex || properties.firstChar); // usFirstCharIndex\n  os2.setInt16(lastCharIndex || properties.lastChar); // usLastCharIndex\n  os2.setInt16(typoAscent); // sTypoAscender\n  os2.setInt16(typoDescent); // sTypoDescender\n  os2.setArray([0x00, 0x64]); // sTypoLineGap (7%-10% of the unitsPerEM value)\n  os2.setInt16(winAscent); // usWinAscent\n  os2.setInt16(winDescent); // usWinDescent\n  os2.skip(\n    4 + // ulCodePageRange1 (Bits 0-31), skip redundant \"\\x00\\x00\\x00\\x00\"\n      4 // ulCodePageRange2 (Bits 32-63), skip redundant \"\\x00\\x00\\x00\\x00\"\n  );\n  os2.setInt16(properties.xHeight); // sxHeight\n  os2.setInt16(properties.capHeight); // sCapHeight\n  os2.skip(2); // usDefaultChar, skip redundant \"\\x00\\x00\"\n  os2.setInt16(firstCharIndex || properties.firstChar); // usBreakChar\n  os2.setArray([0x00, 0x03]); // usMaxContext\n  return os2.data;\n}\n\nfunction createPostTable(properties) {\n  const post = new DataBuilder({ exactLength: 32 });\n  post.setArray([0x00, 0x03, 0x00, 0x00]); // Version number\n  post.setInt32(Math.floor(properties.italicAngle * 2 ** 16)); // italicAngle\n  post.skip(\n    2 + // underlinePosition, skip redundant \"\\x00\\x00\"\n      2 // underlineThickness, skip redundant \"\\x00\\x00\"\n  );\n  post.setInt32(properties.fixedPitch ? 1 : 0); // isFixedPitch\n  post.skip(\n    4 + // minMemType42, skip redundant \"\\x00\\x00\\x00\\x00\"\n      4 + // maxMemType42, skip redundant \"\\x00\\x00\\x00\\x00\"\n      4 + // minMemType1, skip redundant \"\\x00\\x00\\x00\\x00\"\n      4 // maxMemType1, skip redundant \"\\x00\\x00\\x00\\x00\"\n  );\n  return post.data;\n}\n\nfunction createPostscriptName(name) {\n  // See https://docs.microsoft.com/en-us/typography/opentype/spec/recom#name.\n  return name.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g, \"\").slice(0, 63);\n}\n\nfunction createNameTable(name, proto) {\n  proto ||= [[], []]; // no strings and unicode strings\n\n  const strings = [\n    proto[0][0] || \"Original licence\", // 0.Copyright\n    proto[0][1] || name, // 1.Font family\n    proto[0][2] || \"Unknown\", // 2.Font subfamily (font weight)\n    proto[0][3] || \"uniqueID\", // 3.Unique ID\n    proto[0][4] || name, // 4.Full font name\n    proto[0][5] || \"Version 0.11\", // 5.Version\n    proto[0][6] || createPostscriptName(name), // 6.Postscript name\n    proto[0][7] || \"Unknown\", // 7.Trademark\n    proto[0][8] || \"Unknown\", // 8.Manufacturer\n    proto[0][9] || \"Unknown\", // 9.Designer\n  ];\n  const stringsBytes = strings.map(s => stringToBytes(s));\n\n  // Mac want 1-byte per character strings while Windows want\n  // 2-bytes per character, so duplicate the names table\n  const stringsUnicodeBytes = new Array(strings.length);\n  let i, ii, j, jj, str;\n  for (i = 0, ii = strings.length; i < ii; i++) {\n    str = proto[1][i] || strings[i];\n\n    const strUnicode = new DataBuilder({\n      exactLength: str.length * 2,\n    });\n    for (j = 0, jj = str.length; j < jj; j++) {\n      strUnicode.setInt16(str.charCodeAt(j));\n    }\n    stringsUnicodeBytes[i] = strUnicode.data;\n  }\n\n  const namesBytes = [stringsBytes, stringsUnicodeBytes];\n  const platformsBytes = [\n    [0x00, 0x01],\n    [0x00, 0x03],\n  ];\n  const encodingsBytes = [\n    [0x00, 0x00],\n    [0x00, 0x01],\n  ];\n  const languagesBytes = [\n    [0x00, 0x00],\n    [0x04, 0x09],\n  ];\n\n  // Build the name records field\n  const nameRecords = [];\n  let strOffset = 0;\n  for (i = 0, ii = platformsBytes.length; i < ii; i++) {\n    const strs = namesBytes[i];\n    for (j = 0, jj = strs.length; j < jj; j++) {\n      str = strs[j];\n      const nameRecord = new DataBuilder({\n        exactLength:\n          6 +\n          platformsBytes[i].length +\n          encodingsBytes[i].length +\n          languagesBytes[i].length,\n      });\n      nameRecord.setArray(platformsBytes[i]); // platform ID\n      nameRecord.setArray(encodingsBytes[i]); // encoding ID\n      nameRecord.setArray(languagesBytes[i]); // language ID\n      nameRecord.setInt16(j); // name ID\n      nameRecord.setInt16(str.length);\n      nameRecord.setInt16(strOffset);\n\n      nameRecords.push(nameRecord.data);\n      strOffset += str.length;\n    }\n  }\n\n  const namesRecordCount = stringsBytes.length * platformsBytes.length;\n  const nameTable = new DataBuilder({\n    exactLength:\n      6 +\n      Math.sumPrecise(nameRecords.map(arr => arr.length)) +\n      Math.sumPrecise(stringsBytes.map(arr => arr.length)) +\n      Math.sumPrecise(stringsUnicodeBytes.map(arr => arr.length)),\n  });\n  nameTable.skip(2); // format, skip redundant \"\\x00\\x00\"\n  nameTable.setInt16(namesRecordCount); // Number of names Record\n  nameTable.setInt16(namesRecordCount * 12 + 6); // Storage\n  for (const arr of nameRecords) {\n    nameTable.setArray(arr);\n  }\n  for (const arr of stringsBytes) {\n    nameTable.setArray(arr);\n  }\n  for (const arr of stringsUnicodeBytes) {\n    nameTable.setArray(arr);\n  }\n  return nameTable.data;\n}\n\n/**\n * 'Font' is the class the outside world should use, it encapsulate all the font\n * decoding logics whatever type it is (assuming the font type is supported).\n */\nclass Font {\n  #charsCache = new Map();\n\n  #glyphCache = new Map();\n\n  charProcOperatorList;\n\n  constructor(name, file, properties, evaluatorOptions) {\n    this.name = name;\n    this.psName = null;\n    this.mimetype = null;\n    this.disableFontFace = evaluatorOptions.disableFontFace;\n    this.fontExtraProperties = evaluatorOptions.fontExtraProperties;\n\n    this.loadedName = properties.loadedName;\n    this.isType3Font = properties.isType3Font;\n    this.missingFile = false;\n    this.cssFontInfo = properties.cssFontInfo;\n\n    let isSerifFont = !!(properties.flags & FontFlags.Serif);\n    // Fallback to checking the font name, in order to improve text-selection,\n    // since the /Flags-entry is often wrong (fixes issue13845.pdf).\n    if (!isSerifFont && !properties.isSimulatedFlags) {\n      const stdFontMap = getStdFontMap(),\n        nonStdFontMap = getNonStdFontMap(),\n        serifFonts = getSerifFonts();\n      for (const namePart of name.split(\"+\")) {\n        let fontName = normalizeFontName(namePart);\n        fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\n        fontName = fontName.split(\"-\", 1)[0];\n        if (serifFonts[fontName]) {\n          isSerifFont = true;\n          break;\n        }\n      }\n    }\n    this.isSerifFont = isSerifFont;\n\n    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);\n\n    let { type, subtype } = properties;\n    this.type = type;\n    this.subtype = subtype;\n    this.systemFontInfo = properties.systemFontInfo;\n\n    const matches = name.match(/^InvalidPDFjsFont_(.*)_\\d+$/);\n    this.isInvalidPDFjsFont = !!matches;\n    if (this.isInvalidPDFjsFont) {\n      this.fallbackName = matches[1];\n    } else if (this.isMonospace) {\n      this.fallbackName = \"monospace\";\n    } else if (this.isSerifFont) {\n      this.fallbackName = \"serif\";\n    } else {\n      this.fallbackName = \"sans-serif\";\n    }\n\n    if (this.systemFontInfo?.guessFallback) {\n      // Once the fallback name is guessed, we don't want to guess it again.\n      this.systemFontInfo.guessFallback = false;\n      this.systemFontInfo.css += `,${this.fallbackName}`;\n    }\n\n    this.differences = properties.differences;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.composite = properties.composite;\n    this.cMap = properties.cMap;\n    this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;\n    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;\n    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;\n    this.lineHeight = this.ascent - this.descent;\n    this.fontMatrix = properties.fontMatrix;\n    this.bbox = properties.bbox;\n    this.defaultEncoding = properties.defaultEncoding;\n\n    this.toUnicode = properties.toUnicode;\n    this.toFontChar = [];\n\n    if (properties.type === \"Type3\") {\n      for (let charCode = 0; charCode < 256; charCode++) {\n        this.toFontChar[charCode] =\n          this.differences[charCode] || properties.defaultEncoding[charCode];\n      }\n      return;\n    }\n\n    this.cidEncoding = properties.cidEncoding || \"\";\n    this.vertical = !!properties.vertical;\n    if (this.vertical) {\n      this.vmetrics = properties.vmetrics;\n      this.defaultVMetrics = properties.defaultVMetrics;\n    }\n\n    if (!file || file.isEmpty) {\n      if (file) {\n        // Some bad PDF generators will include empty font files,\n        // attempting to recover by assuming that no file exists.\n        warn('Font file is empty in \"' + name + '\" (' + this.loadedName + \")\");\n      }\n      this.fallbackToSystemFont(properties);\n      return;\n    }\n\n    // Parse the font file to determine the correct type/subtype, rather than\n    // relying on the (often incorrect) data in the font dictionary; (see e.g.\n    //  issue6782.pdf, issue7598.pdf, and issue9949.pdf).\n    [type, subtype] = getFontFileType(file, properties);\n\n    if (type !== this.type || subtype !== this.subtype) {\n      info(\n        \"Inconsistent font file Type/SubType, expected: \" +\n          `${this.type}/${this.subtype} but found: ${type}/${subtype}.`\n      );\n    }\n\n    let data;\n    try {\n      switch (type) {\n        case \"MMType1\":\n          info(\"MMType1 font (\" + name + \"), falling back to Type1.\");\n        /* falls through */\n        case \"Type1\":\n        case \"CIDFontType0\":\n          this.mimetype = \"font/opentype\";\n\n          const cff =\n            subtype === \"Type1C\" || subtype === \"CIDFontType0C\"\n              ? new CFFFont(file, properties)\n              : new Type1Font(name, file, properties);\n\n          adjustWidths(properties);\n\n          // Wrap the CFF data inside an OTF font file\n          data = this.convert(name, cff, properties);\n          break;\n\n        case \"OpenType\":\n        case \"TrueType\":\n        case \"CIDFontType2\":\n          this.mimetype = \"font/opentype\";\n\n          // Repair the TrueType file. It is can be damaged in the point of\n          // view of the sanitizer\n          data = this.checkAndRepair(name, file, properties);\n\n          adjustWidths(properties);\n\n          if (this.isOpenType) {\n            type = \"OpenType\";\n          }\n          break;\n\n        default:\n          throw new FormatError(`Font ${type} is not supported`);\n      }\n    } catch (e) {\n      warn(e);\n      this.fallbackToSystemFont(properties);\n      return;\n    }\n\n    amendFallbackToUnicode(properties);\n    this.data = data;\n\n    // Transfer some properties again that could change during font conversion\n    this.type = type;\n    this.subtype = subtype;\n    this.fontMatrix = properties.fontMatrix;\n    this.widths = properties.widths;\n    this.defaultWidth = properties.defaultWidth;\n    this.toUnicode = properties.toUnicode;\n    this.seacMap = properties.seacMap;\n  }\n\n  get renderer() {\n    const renderer = FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);\n    return shadow(this, \"renderer\", renderer);\n  }\n\n  #getExportData(props) {\n    const data = Object.create(null);\n    for (const prop of props) {\n      const value = this[prop];\n      // Ignore properties that haven't been explicitly set.\n      if (value !== undefined) {\n        data[prop] = value;\n      }\n    }\n    return data;\n  }\n\n  exportData() {\n    return {\n      buffer: compileFontInfo(this.#getExportData(EXPORT_DATA_PROPERTIES)),\n      charProcOperatorList: this.charProcOperatorList,\n      extra: this.fontExtraProperties\n        ? this.#getExportData(EXPORT_DATA_EXTRA_PROPERTIES)\n        : undefined,\n    };\n  }\n\n  fallbackToSystemFont(properties) {\n    this.missingFile = true;\n    // The file data is not specified. Trying to fix the font name\n    // to be used with the canvas.font.\n    const { name, type } = this;\n    let fontName = normalizeFontName(name);\n    const stdFontMap = getStdFontMap(),\n      nonStdFontMap = getNonStdFontMap();\n    const isStandardFont = !!stdFontMap[fontName];\n    const isMappedToStandardFont = !!(\n      nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]\n    );\n\n    fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\n\n    const fontBasicMetricsMap = getFontBasicMetrics();\n    const metrics = fontBasicMetricsMap[fontName];\n    if (metrics) {\n      if (isNaN(this.ascent)) {\n        this.ascent = metrics.ascent / PDF_GLYPH_SPACE_UNITS;\n      }\n      if (isNaN(this.descent)) {\n        this.descent = metrics.descent / PDF_GLYPH_SPACE_UNITS;\n      }\n      if (isNaN(this.capHeight)) {\n        this.capHeight = metrics.capHeight / PDF_GLYPH_SPACE_UNITS;\n      }\n    }\n\n    this.bold = /bold/i.test(fontName);\n    this.italic = /oblique|italic/i.test(fontName);\n\n    // Use 'name' instead of 'fontName' here because the original\n    // name ArialBlack for example will be replaced by Helvetica.\n    this.black = /Black/.test(name);\n\n    // Use 'name' instead of 'fontName' here because the original\n    // name ArialNarrow for example will be replaced by Helvetica.\n    const isNarrow = /Narrow/.test(name);\n\n    // if at least one width is present, remeasure all chars when exists\n    this.remeasure =\n      (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;\n    if (\n      (isStandardFont || isMappedToStandardFont) &&\n      type === \"CIDFontType2\" &&\n      this.cidEncoding.startsWith(\"Identity-\")\n    ) {\n      const cidToGidMap = properties.cidToGidMap;\n      // Standard fonts might be embedded as CID font without glyph mapping.\n      // Building one based on GlyphMapForStandardFonts.\n      const map = [];\n      applyStandardFontGlyphMap(map, getGlyphMapForStandardFonts());\n\n      if (/Arial-?Black/i.test(name)) {\n        applyStandardFontGlyphMap(map, getSupplementalGlyphMapForArialBlack());\n      } else if (/Calibri/i.test(name)) {\n        applyStandardFontGlyphMap(map, getSupplementalGlyphMapForCalibri());\n      }\n\n      // Always update the glyph mapping with the `cidToGidMap` when it exists\n      // (fixes issue12418_reduced.pdf).\n      if (cidToGidMap) {\n        for (const charCode in map) {\n          const cid = map[charCode];\n          if (cidToGidMap[cid] !== undefined) {\n            map[+charCode] = cidToGidMap[cid];\n          }\n        }\n        // When the /CIDToGIDMap is \"incomplete\", fallback to the included\n        // /ToUnicode-map regardless of its encoding (fixes issue11915.pdf).\n        if (\n          cidToGidMap.length !== this.toUnicode.length &&\n          properties.hasIncludedToUnicodeMap &&\n          this.toUnicode instanceof IdentityToUnicodeMap\n        ) {\n          this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n            const cid = map[charCode];\n            if (cidToGidMap[cid] === undefined) {\n              map[+charCode] = unicodeCharCode;\n            }\n          });\n        }\n      }\n\n      if (!(this.toUnicode instanceof IdentityToUnicodeMap)) {\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n          map[+charCode] = unicodeCharCode;\n        });\n      }\n      this.toFontChar = map;\n      this.toUnicode = new ToUnicodeMap(map);\n    } else if (/Symbol/i.test(fontName)) {\n      this.toFontChar = buildToFontChar(\n        SymbolSetEncoding,\n        getGlyphsUnicode(),\n        this.differences\n      );\n    } else if (/Dingbats/i.test(fontName)) {\n      this.toFontChar = buildToFontChar(\n        ZapfDingbatsEncoding,\n        getDingbatsGlyphsUnicode(),\n        this.differences\n      );\n    } else if (isStandardFont || isMappedToStandardFont) {\n      const map = buildToFontChar(\n        this.defaultEncoding,\n        getGlyphsUnicode(),\n        this.differences\n      );\n\n      if (\n        type === \"CIDFontType2\" &&\n        !this.cidEncoding.startsWith(\"Identity-\") &&\n        !(this.toUnicode instanceof IdentityToUnicodeMap)\n      ) {\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\n          map[+charCode] = unicodeCharCode;\n        });\n      }\n      this.toFontChar = map;\n    } else {\n      const glyphsUnicodeMap = getGlyphsUnicode();\n      const map = [];\n      this.toUnicode.forEach((charCode, unicodeCharCode) => {\n        if (!this.composite) {\n          const glyphName =\n            this.differences[charCode] || this.defaultEncoding[charCode];\n          const unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n          if (unicode !== -1) {\n            unicodeCharCode = unicode;\n          }\n        }\n        map[+charCode] = unicodeCharCode;\n      });\n\n      // Attempt to improve the glyph mapping for (some) composite fonts that\n      // appear to lack meaningful ToUnicode data.\n      if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {\n        if (/Tahoma|Verdana/i.test(name)) {\n          // Fixes issue15719.pdf and issue11242_reduced.pdf.\n          applyStandardFontGlyphMap(map, getGlyphMapForStandardFonts());\n        }\n      }\n      this.toFontChar = map;\n    }\n\n    amendFallbackToUnicode(properties);\n    this.loadedName = fontName.split(\"-\", 1)[0];\n  }\n\n  checkAndRepair(name, font, properties) {\n    const VALID_TABLES = [\n      \"OS/2\",\n      \"cmap\",\n      \"head\",\n      \"hhea\",\n      \"hmtx\",\n      \"maxp\",\n      \"name\",\n      \"post\",\n      \"loca\",\n      \"glyf\",\n      \"fpgm\",\n      \"prep\",\n      \"cvt \",\n      \"CFF \",\n    ];\n\n    function readTables(file, numTables) {\n      const tables = Object.create(null);\n      tables[\"OS/2\"] = null;\n      tables.cmap = null;\n      tables.head = null;\n      tables.hhea = null;\n      tables.hmtx = null;\n      tables.maxp = null;\n      tables.name = null;\n      tables.post = null;\n\n      for (let i = 0; i < numTables; i++) {\n        const table = readTableEntry(file);\n        if (!VALID_TABLES.includes(table.tag)) {\n          continue; // skipping table if it's not a required or optional table\n        }\n        if (table.length === 0) {\n          continue; // skipping empty tables\n        }\n        tables[table.tag] = table;\n      }\n      return tables;\n    }\n\n    function readTableEntry(file) {\n      const tag = file.getString(4);\n\n      const checksum = file.getInt32() >>> 0;\n      const offset = file.getInt32() >>> 0;\n      const length = file.getInt32() >>> 0;\n\n      // Read the table associated data\n      const previousPosition = file.pos;\n      file.pos = file.start || 0;\n      file.skip(offset);\n      const data = file.getBytes(length);\n      file.pos = previousPosition;\n\n      if (tag === \"head\") {\n        // clearing checksum adjustment\n        data[8] = data[9] = data[10] = data[11] = 0;\n        data[17] |= 0x20; // Set font optimized for cleartype flag.\n      }\n      // The \"CFF \" table may be replaced completely, hence its data shouldn't\n      // need to be read and/or modified piecewise through a `DataView`.\n      const view =\n        tag === \"CFF \"\n          ? null\n          : new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n      return {\n        tag,\n        checksum,\n        length,\n        offset,\n        data,\n        view,\n      };\n    }\n\n    function readOpenTypeHeader(ttf) {\n      return {\n        version: ttf.getString(4),\n        numTables: ttf.getUint16(),\n        searchRange: ttf.getUint16(),\n        entrySelector: ttf.getUint16(),\n        rangeShift: ttf.getUint16(),\n      };\n    }\n\n    function readTrueTypeCollectionHeader(ttc) {\n      const ttcTag = ttc.getString(4);\n      assert(ttcTag === \"ttcf\", \"Must be a TrueType Collection font.\");\n\n      const majorVersion = ttc.getUint16();\n      const minorVersion = ttc.getUint16();\n      const numFonts = ttc.getInt32() >>> 0;\n      const offsetTable = [];\n      for (let i = 0; i < numFonts; i++) {\n        offsetTable.push(ttc.getInt32() >>> 0);\n      }\n\n      const header = {\n        ttcTag,\n        majorVersion,\n        minorVersion,\n        numFonts,\n        offsetTable,\n      };\n      switch (majorVersion) {\n        case 1:\n          return header;\n        case 2:\n          header.dsigTag = ttc.getInt32() >>> 0;\n          header.dsigLength = ttc.getInt32() >>> 0;\n          header.dsigOffset = ttc.getInt32() >>> 0;\n          return header;\n      }\n      throw new FormatError(\n        `Invalid TrueType Collection majorVersion: ${majorVersion}.`\n      );\n    }\n\n    function readTrueTypeCollectionData(ttc, fontName) {\n      const { numFonts, offsetTable } = readTrueTypeCollectionHeader(ttc);\n      const fontNameParts = fontName.split(\"+\");\n      let fallbackData;\n\n      for (let i = 0; i < numFonts; i++) {\n        ttc.pos = (ttc.start || 0) + offsetTable[i];\n        const potentialHeader = readOpenTypeHeader(ttc);\n        const potentialTables = readTables(ttc, potentialHeader.numTables);\n\n        if (!potentialTables.name) {\n          throw new FormatError(\n            'TrueType Collection font must contain a \"name\" table.'\n          );\n        }\n        const [nameTable] = readNameTable(potentialTables.name);\n\n        for (const nameArr of nameTable) {\n          for (const entry of nameArr) {\n            const nameEntry = entry?.replaceAll(/\\s/g, \"\");\n            if (!nameEntry) {\n              continue;\n            }\n            if (nameEntry === fontName) {\n              return {\n                header: potentialHeader,\n                tables: potentialTables,\n              };\n            }\n            if (fontNameParts.length < 2) {\n              continue;\n            }\n            for (const part of fontNameParts) {\n              if (nameEntry === part) {\n                fallbackData = {\n                  name: part,\n                  header: potentialHeader,\n                  tables: potentialTables,\n                };\n              }\n            }\n          }\n        }\n      }\n      if (fallbackData) {\n        warn(\n          `TrueType Collection does not contain \"${fontName}\" font, ` +\n            `falling back to \"${fallbackData.name}\" font instead.`\n        );\n        return {\n          header: fallbackData.header,\n          tables: fallbackData.tables,\n        };\n      }\n      throw new FormatError(\n        `TrueType Collection does not contain \"${fontName}\" font.`\n      );\n    }\n\n    /**\n     * Read the appropriate subtable from the cmap according to 9.6.6.4 from\n     * PDF spec\n     */\n    function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {\n      if (!cmap) {\n        warn(\"No cmap table available.\");\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false,\n        };\n      }\n      let segment;\n      let start = (file.start || 0) + cmap.offset;\n      file.pos = start;\n\n      file.skip(2); // version\n      const numTables = file.getUint16();\n\n      let potentialTable;\n      let canBreak = false;\n      // There's an order of preference in terms of which cmap subtable to\n      // use:\n      // - non-symbolic fonts the preference is a 3,1 table then a 1,0 table\n      // - symbolic fonts the preference is a 3,0 table then a 1,0 table\n      // The following takes advantage of the fact that the tables are sorted\n      // to work.\n      for (let i = 0; i < numTables; i++) {\n        const platformId = file.getUint16();\n        const encodingId = file.getUint16();\n        const offset = file.getInt32() >>> 0;\n        let useTable = false;\n\n        // Sometimes there are multiple of the same type of table. Default\n        // to choosing the first table and skip the rest.\n        if (\n          potentialTable?.platformId === platformId &&\n          potentialTable?.encodingId === encodingId\n        ) {\n          continue;\n        }\n\n        if (\n          platformId === 0 &&\n          (encodingId === /* Unicode Default */ 0 ||\n            encodingId === /* Unicode 1.1 */ 1 ||\n            encodingId === /* Unicode BMP */ 3)\n        ) {\n          useTable = true;\n          // Continue the loop since there still may be a higher priority\n          // table.\n        } else if (platformId === 1 && encodingId === 0) {\n          useTable = true;\n          // Continue the loop since there still may be a higher priority\n          // table.\n        } else if (\n          platformId === 3 &&\n          encodingId === 1 &&\n          (hasEncoding || !potentialTable)\n        ) {\n          useTable = true;\n          if (!isSymbolicFont) {\n            canBreak = true;\n          }\n        } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {\n          useTable = true;\n\n          let correctlySorted = true;\n          if (i < numTables - 1) {\n            const nextBytes = file.peekBytes(2),\n              nextPlatformId = int16(nextBytes[0], nextBytes[1]);\n            if (nextPlatformId < platformId) {\n              correctlySorted = false;\n            }\n          }\n          if (correctlySorted) {\n            canBreak = true;\n          }\n        }\n\n        if (useTable) {\n          potentialTable = {\n            platformId,\n            encodingId,\n            offset,\n          };\n        }\n        if (canBreak) {\n          break;\n        }\n      }\n\n      if (potentialTable) {\n        file.pos = start + potentialTable.offset;\n      }\n      if (!potentialTable || file.peekByte() === -1) {\n        warn(\"Could not find a preferred cmap table.\");\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false,\n        };\n      }\n\n      const format = file.getUint16();\n      let hasShortCmap = false;\n      const mappings = [];\n      let j, glyphId;\n\n      // TODO(mack): refactor this cmap subtable reading logic out\n      if (format === 0) {\n        file.skip(2 + 2); // length + language\n\n        for (j = 0; j < 256; j++) {\n          const index = file.getByte();\n          if (!index) {\n            continue;\n          }\n          mappings.push({\n            charCode: j,\n            glyphId: index,\n          });\n        }\n        hasShortCmap = true;\n      } else if (format === 2) {\n        file.skip(2 + 2); // length + language\n\n        const subHeaderKeys = [];\n        let maxSubHeaderKey = 0;\n        // Read subHeaderKeys. If subHeaderKeys[i] === 0, then i is a\n        // single-byte character. Otherwise, i is the first byte of a\n        // multi-byte character, and the value is 8*index into\n        // subHeaders.\n        for (let i = 0; i < 256; i++) {\n          const subHeaderKey = file.getUint16() >> 3;\n          subHeaderKeys.push(subHeaderKey);\n          maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey);\n        }\n        // Read subHeaders. The number of entries is determined\n        // dynamically based on the subHeaderKeys found above.\n        const subHeaders = [];\n        for (let i = 0; i <= maxSubHeaderKey; i++) {\n          subHeaders.push({\n            firstCode: file.getUint16(),\n            entryCount: file.getUint16(),\n            idDelta: signedInt16(file.getByte(), file.getByte()),\n            idRangePos: file.pos + file.getUint16(),\n          });\n        }\n        for (let i = 0; i < 256; i++) {\n          if (subHeaderKeys[i] === 0) {\n            // i is a single-byte code.\n            file.pos = subHeaders[0].idRangePos + 2 * i;\n            glyphId = file.getUint16();\n            mappings.push({\n              charCode: i,\n              glyphId,\n            });\n          } else {\n            // i is the first byte of a two-byte code.\n            const s = subHeaders[subHeaderKeys[i]];\n            for (j = 0; j < s.entryCount; j++) {\n              const charCode = (i << 8) + j + s.firstCode;\n              file.pos = s.idRangePos + 2 * j;\n              glyphId = file.getUint16();\n              if (glyphId !== 0) {\n                glyphId = (glyphId + s.idDelta) % 65536;\n              }\n              mappings.push({\n                charCode,\n                glyphId,\n              });\n            }\n          }\n        }\n      } else if (format === 4) {\n        file.skip(2 + 2); // length + language\n\n        // re-creating the table in format 4 since the encoding\n        // might be changed\n        const segCount = file.getUint16() >> 1;\n        file.skip(6); // skipping range fields\n        const segments = [];\n        let segIndex;\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments.push({ end: file.getUint16() });\n        }\n        file.skip(2);\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments[segIndex].start = file.getUint16();\n        }\n\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segments[segIndex].delta = file.getUint16();\n        }\n\n        let offsetsCount = 0,\n          offsetIndex;\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segment = segments[segIndex];\n          const rangeOffset = file.getUint16();\n          if (!rangeOffset) {\n            segment.offsetIndex = -1;\n            continue;\n          }\n\n          offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);\n          segment.offsetIndex = offsetIndex;\n          offsetsCount = Math.max(\n            offsetsCount,\n            offsetIndex + segment.end - segment.start + 1\n          );\n        }\n\n        const offsets = [];\n        for (j = 0; j < offsetsCount; j++) {\n          offsets.push(file.getUint16());\n        }\n\n        for (segIndex = 0; segIndex < segCount; segIndex++) {\n          segment = segments[segIndex];\n          start = segment.start;\n          const end = segment.end;\n          const delta = segment.delta;\n          offsetIndex = segment.offsetIndex;\n\n          for (j = start; j <= end; j++) {\n            if (j === 0xffff) {\n              continue;\n            }\n\n            glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];\n            glyphId = (glyphId + delta) & 0xffff;\n            mappings.push({\n              charCode: j,\n              glyphId,\n            });\n          }\n        }\n      } else if (format === 6) {\n        file.skip(2 + 2); // length + language\n\n        // Format 6 is a 2-bytes dense mapping, which means the font data\n        // lives glue together even if they are pretty far in the unicode\n        // table. (This looks weird, so I can have missed something), this\n        // works on Linux but seems to fails on Mac so let's rewrite the\n        // cmap table to a 3-1-4 style\n        const firstCode = file.getUint16();\n        const entryCount = file.getUint16();\n\n        for (j = 0; j < entryCount; j++) {\n          glyphId = file.getUint16();\n          const charCode = firstCode + j;\n\n          mappings.push({\n            charCode,\n            glyphId,\n          });\n        }\n      } else if (format === 12) {\n        file.skip(2 + 4 + 4); // reserved + length + language\n\n        const nGroups = file.getInt32() >>> 0;\n        for (j = 0; j < nGroups; j++) {\n          const startCharCode = file.getInt32() >>> 0;\n          const endCharCode = file.getInt32() >>> 0;\n          let glyphCode = file.getInt32() >>> 0;\n\n          for (\n            let charCode = startCharCode;\n            charCode <= endCharCode;\n            charCode++\n          ) {\n            mappings.push({\n              charCode,\n              glyphId: glyphCode++,\n            });\n          }\n        }\n      } else {\n        warn(\"cmap table has unsupported format: \" + format);\n        return {\n          platformId: -1,\n          encodingId: -1,\n          mappings: [],\n          hasShortCmap: false,\n        };\n      }\n\n      // removing duplicate entries\n      const finalMappings = [],\n        seenCharCodes = new Set();\n      for (const map of mappings) {\n        const { charCode } = map;\n\n        if (seenCharCodes.has(charCode)) {\n          continue;\n        }\n        seenCharCodes.add(charCode);\n        finalMappings.push(map);\n      }\n\n      return {\n        platformId: potentialTable.platformId,\n        encodingId: potentialTable.encodingId,\n        mappings: finalMappings.sort((a, b) => a.charCode - b.charCode),\n        hasShortCmap,\n      };\n    }\n\n    function sanitizeMetrics(\n      file,\n      header,\n      metrics,\n      headTable,\n      numGlyphs,\n      dupFirstEntry\n    ) {\n      if (!header) {\n        if (metrics) {\n          metrics.data = null;\n        }\n        return;\n      }\n\n      file.pos = (file.start || 0) + header.offset;\n      file.pos += 4; // version\n      file.pos += 2; // ascent\n      file.pos += 2; // descent\n      file.pos += 2; // linegap\n      file.pos += 2; // adv_width_max\n      file.pos += 2; // min_sb1\n      file.pos += 2; // min_sb2\n      file.pos += 2; // max_extent\n      file.pos += 2; // caret_slope_rise\n      file.pos += 2; // caret_slope_run\n      const caretOffset = file.getUint16();\n      file.pos += 8; // reserved\n      file.pos += 2; // format\n      let numOfMetrics = file.getUint16();\n\n      if (caretOffset !== 0) {\n        const macStyle = int16(headTable.data[44], headTable.data[45]);\n        if (!(macStyle & 2)) {\n          // Suppress OTS warnings about the `caretOffset` in the hhea-table.\n          header.data[22] = 0;\n          header.data[23] = 0;\n        }\n      }\n\n      if (numOfMetrics > numGlyphs) {\n        info(\n          `The numOfMetrics (${numOfMetrics}) should not be ` +\n            `greater than the numGlyphs (${numGlyphs}).`\n        );\n        // Reduce numOfMetrics if it is greater than numGlyphs\n        numOfMetrics = numGlyphs;\n        header.data[34] = (numOfMetrics & 0xff00) >> 8;\n        header.data[35] = numOfMetrics & 0x00ff;\n      }\n\n      const numOfSidebearings = numGlyphs - numOfMetrics;\n      const numMissing =\n        numOfSidebearings - ((metrics.length - numOfMetrics * 4) >> 1);\n\n      if (numMissing > 0) {\n        // For each missing glyph, we set both the width and lsb to 0 (zero).\n        // Since we need to add two properties for each glyph, this explains\n        // the use of |numMissing * 2| when initializing the typed array.\n        const entries = new Uint8Array(metrics.length + numMissing * 2);\n        entries.set(metrics.data);\n        if (dupFirstEntry) {\n          // Set the sidebearing value of the duplicated glyph.\n          entries[metrics.length] = metrics.data[2];\n          entries[metrics.length + 1] = metrics.data[3];\n        }\n        metrics.data = entries;\n      }\n    }\n\n    function sanitizeGlyph(\n      source,\n      sourceStart,\n      sourceEnd,\n      dest,\n      destStart,\n      hintsValid\n    ) {\n      const glyphProfile = {\n        length: 0,\n        sizeOfInstructions: 0,\n      };\n      if (\n        sourceStart < 0 ||\n        sourceStart >= source.length ||\n        sourceEnd > source.length ||\n        sourceEnd - sourceStart <= 12\n      ) {\n        // If the offsets are wrong or the glyph is too small, remove it.\n        return glyphProfile;\n      }\n      const glyf = source.subarray(sourceStart, sourceEnd);\n\n      // Sanitize the glyph bounding box.\n      const xMin = signedInt16(glyf[2], glyf[3]);\n      const yMin = signedInt16(glyf[4], glyf[5]);\n      const xMax = signedInt16(glyf[6], glyf[7]);\n      const yMax = signedInt16(glyf[8], glyf[9]);\n\n      if (xMin > xMax) {\n        writeSignedInt16(glyf, 2, xMax);\n        writeSignedInt16(glyf, 6, xMin);\n      }\n      if (yMin > yMax) {\n        writeSignedInt16(glyf, 4, yMax);\n        writeSignedInt16(glyf, 8, yMin);\n      }\n\n      const contoursCount = signedInt16(glyf[0], glyf[1]);\n      if (contoursCount < 0) {\n        if (contoursCount < -1) {\n          // OTS doesn't like contour count to be less than -1.\n          // The glyph data offsets are very likely wrong and\n          // having something lower than -1, very likely, implies\n          // to have some garbage data.\n          return glyphProfile;\n        }\n        // complex glyph, writing as is\n        dest.set(glyf, destStart);\n        glyphProfile.length = glyf.length;\n        return glyphProfile;\n      }\n\n      let i,\n        j = 10,\n        flagsCount = 0;\n      for (i = 0; i < contoursCount; i++) {\n        const endPoint = (glyf[j] << 8) | glyf[j + 1];\n        flagsCount = endPoint + 1;\n        j += 2;\n      }\n      // skipping instructions\n      const instructionsStart = j;\n      const instructionsLength = (glyf[j] << 8) | glyf[j + 1];\n      glyphProfile.sizeOfInstructions = instructionsLength;\n      j += 2 + instructionsLength;\n      const instructionsEnd = j;\n      // validating flags\n      let coordinatesLength = 0;\n      for (i = 0; i < flagsCount; i++) {\n        const flag = glyf[j++];\n        if (flag & 0xc0) {\n          // reserved flags must be zero, cleaning up\n          glyf[j - 1] = flag & 0x3f;\n        }\n        let xLength = 2;\n        if (flag & 2) {\n          xLength = 1;\n        } else if (flag & 16) {\n          xLength = 0;\n        }\n        let yLength = 2;\n        if (flag & 4) {\n          yLength = 1;\n        } else if (flag & 32) {\n          yLength = 0;\n        }\n        const xyLength = xLength + yLength;\n        coordinatesLength += xyLength;\n        if (flag & 8) {\n          const repeat = glyf[j++];\n          if (repeat === 0) {\n            // The repeat count should be non-zero when the repeat flag is set.\n            glyf[j - 1] ^= 8;\n          }\n          i += repeat;\n          coordinatesLength += repeat * xyLength;\n        }\n      }\n      // glyph without coordinates will be rejected\n      if (coordinatesLength === 0) {\n        return glyphProfile;\n      }\n      let glyphDataLength = j + coordinatesLength;\n      if (glyphDataLength > glyf.length) {\n        // not enough data for coordinates\n        return glyphProfile;\n      }\n      if (!hintsValid && instructionsLength > 0) {\n        dest.set(glyf.subarray(0, instructionsStart), destStart);\n        dest.set([0, 0], destStart + instructionsStart);\n        dest.set(\n          glyf.subarray(instructionsEnd, glyphDataLength),\n          destStart + instructionsStart + 2\n        );\n        glyphDataLength -= instructionsLength;\n        if (glyf.length - glyphDataLength > 3) {\n          glyphDataLength = (glyphDataLength + 3) & ~3;\n        }\n        glyphProfile.length = glyphDataLength;\n        return glyphProfile;\n      }\n      if (glyf.length - glyphDataLength > 3) {\n        // truncating and aligning to 4 bytes the long glyph data\n        glyphDataLength = (glyphDataLength + 3) & ~3;\n        dest.set(glyf.subarray(0, glyphDataLength), destStart);\n        glyphProfile.length = glyphDataLength;\n        return glyphProfile;\n      }\n      // glyph data is fine\n      dest.set(glyf, destStart);\n      glyphProfile.length = glyf.length;\n      return glyphProfile;\n    }\n\n    function sanitizeHead(head, numGlyphs, locaLength) {\n      const { data, view } = head;\n\n      // Validate version:\n      // Should always be 0x00010000\n      const version = view.getInt32(0);\n      if (version >> 16 !== 1) {\n        info(\"Attempting to fix invalid version in head table: \" + version);\n        view.setInt32(0, 0x00010000);\n      }\n\n      const indexToLocFormat = signedInt16(data[50], data[51]);\n      if (indexToLocFormat < 0 || indexToLocFormat > 1) {\n        info(\n          \"Attempting to fix invalid indexToLocFormat in head table: \" +\n            indexToLocFormat\n        );\n\n        // The value of indexToLocFormat should be 0 if the loca table\n        // consists of short offsets, and should be 1 if the loca table\n        // consists of long offsets.\n        //\n        // The number of entries in the loca table should be numGlyphs + 1.\n        //\n        // Using this information, we can work backwards to deduce if the\n        // size of each offset in the loca table, and thus figure out the\n        // appropriate value for indexToLocFormat.\n\n        const numGlyphsPlusOne = numGlyphs + 1;\n        if (locaLength === numGlyphsPlusOne << 1) {\n          // 0x0000 indicates the loca table consists of short offsets\n          data[50] = 0;\n          data[51] = 0;\n        } else if (locaLength === numGlyphsPlusOne << 2) {\n          // 0x0001 indicates the loca table consists of long offsets\n          data[50] = 0;\n          data[51] = 1;\n        } else {\n          throw new FormatError(\n            \"Could not fix indexToLocFormat: \" + indexToLocFormat\n          );\n        }\n      }\n    }\n\n    function sanitizeGlyphLocations(\n      loca,\n      glyf,\n      numGlyphs,\n      isGlyphLocationsLong,\n      hintsValid,\n      dupFirstEntry,\n      maxSizeOfInstructions\n    ) {\n      let itemSize, itemDecode, itemEncode;\n      if (isGlyphLocationsLong) {\n        itemSize = 4;\n        itemDecode = function fontItemDecodeLong(data, offset) {\n          return (\n            (data[offset] << 24) |\n            (data[offset + 1] << 16) |\n            (data[offset + 2] << 8) |\n            data[offset + 3]\n          );\n        };\n        itemEncode = function fontItemEncodeLong(data, offset, value) {\n          data[offset] = (value >>> 24) & 0xff;\n          data[offset + 1] = (value >> 16) & 0xff;\n          data[offset + 2] = (value >> 8) & 0xff;\n          data[offset + 3] = value & 0xff;\n        };\n      } else {\n        itemSize = 2;\n        itemDecode = function fontItemDecode(data, offset) {\n          return (data[offset] << 9) | (data[offset + 1] << 1);\n        };\n        itemEncode = function fontItemEncode(data, offset, value) {\n          data[offset] = (value >> 9) & 0xff;\n          data[offset + 1] = (value >> 1) & 0xff;\n        };\n      }\n      // The first glyph is duplicated.\n      const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;\n      const locaDataSize = itemSize * (1 + numGlyphsOut);\n      // Resize loca table to account for duplicated glyph.\n      const locaData = new Uint8Array(locaDataSize);\n      locaData.set(loca.data.subarray(0, locaDataSize));\n      loca.data = locaData;\n      // removing the invalid glyphs\n      const oldGlyfData = glyf.data;\n      const oldGlyfDataLength = oldGlyfData.length;\n      const newGlyfData = new Uint8Array(oldGlyfDataLength);\n\n      // The spec says the offsets should be in ascending order, however\n      // this is not true for some fonts or they use the offset of 0 to mark a\n      // glyph as missing. OTS requires the offsets to be in order and not to\n      // be zero, so we must sort and rebuild the loca table and potentially\n      // re-arrange the glyf data.\n      let i, j;\n      const locaEntries = [];\n      // There are numGlyphs + 1 loca table entries.\n      for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {\n        let offset = itemDecode(locaData, j);\n        if (offset > oldGlyfDataLength) {\n          offset = oldGlyfDataLength;\n        }\n        locaEntries.push({\n          index: i,\n          offset,\n          endOffset: 0,\n        });\n      }\n      locaEntries.sort((a, b) => a.offset - b.offset);\n      // Now the offsets are sorted, calculate the end offset of each glyph.\n      // The last loca entry's endOffset is not calculated since it's the end\n      // of the data and will be stored on the previous entry's endOffset.\n      for (i = 0; i < numGlyphs; i++) {\n        locaEntries[i].endOffset = locaEntries[i + 1].offset;\n      }\n      // Re-sort so glyphs aren't out of order.\n      locaEntries.sort((a, b) => a.index - b.index);\n      // Calculate the endOffset of the \"first\" glyph correctly when there are\n      // *multiple* empty ones at the start of the data (fixes issue14618.pdf).\n      for (i = 0; i < numGlyphs; i++) {\n        const { offset, endOffset } = locaEntries[i];\n        if (offset !== 0 || endOffset !== 0) {\n          break;\n        }\n        const nextOffset = locaEntries[i + 1].offset;\n        if (nextOffset === 0) {\n          continue;\n        }\n        locaEntries[i].endOffset = nextOffset;\n        break;\n      }\n\n      // If the last offset is 0 in the loca table then we can't compute the\n      // endOffset for the last glyph. So in such a case we set the endOffset\n      // to the end of the data (fixes issue #17671).\n      const last = locaEntries.at(-2);\n      if (last.offset !== 0 && last.endOffset === 0) {\n        last.endOffset = oldGlyfDataLength;\n      }\n\n      const droppedGlyphs = pruneCompositeGlyphCycles(\n        oldGlyfData,\n        locaEntries,\n        numGlyphs\n      );\n      const missingGlyphs = Object.create(null);\n      let writeOffset = 0;\n      itemEncode(locaData, 0, writeOffset);\n      for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {\n        const glyphProfile = droppedGlyphs.has(i)\n          ? { length: 0, sizeOfInstructions: 0 }\n          : sanitizeGlyph(\n              oldGlyfData,\n              locaEntries[i].offset,\n              locaEntries[i].endOffset,\n              newGlyfData,\n              writeOffset,\n              hintsValid\n            );\n        const newLength = glyphProfile.length;\n        if (newLength === 0) {\n          missingGlyphs[i] = true;\n        }\n        if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {\n          maxSizeOfInstructions = glyphProfile.sizeOfInstructions;\n        }\n        writeOffset += newLength;\n        itemEncode(locaData, j, writeOffset);\n      }\n\n      if (writeOffset === 0) {\n        // glyf table cannot be empty -- redoing the glyf and loca tables\n        // to have single glyph with one point\n        const simpleGlyph = new Uint8Array([\n          0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0,\n        ]);\n        for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {\n          itemEncode(locaData, j, simpleGlyph.length);\n        }\n        glyf.data = simpleGlyph;\n      } else if (dupFirstEntry) {\n        // Browsers will not display a glyph at position 0. Typically glyph 0\n        // is notdef, but a number of fonts put a valid glyph there so it must\n        // be duplicated and appended.\n        const firstEntryLength = itemDecode(locaData, itemSize);\n        if (newGlyfData.length > firstEntryLength + writeOffset) {\n          glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);\n        } else {\n          glyf.data = new Uint8Array(firstEntryLength + writeOffset);\n          glyf.data.set(newGlyfData.subarray(0, writeOffset));\n        }\n        glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);\n        itemEncode(\n          loca.data,\n          locaData.length - itemSize,\n          writeOffset + firstEntryLength\n        );\n      } else {\n        glyf.data = newGlyfData.subarray(0, writeOffset);\n      }\n      return {\n        missingGlyphs,\n        maxSizeOfInstructions,\n      };\n    }\n\n    function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {\n      const start = (font.start || 0) + post.offset;\n      font.pos = start;\n\n      const length = post.length,\n        end = start + length;\n      const version = font.getInt32();\n      // skip rest to the tables\n      font.skip(28);\n\n      let glyphNames;\n      let valid = true;\n      let i;\n\n      switch (version) {\n        case 0x00010000:\n          glyphNames = MacStandardGlyphOrdering;\n          break;\n        case 0x00020000:\n          const numGlyphs = font.getUint16();\n          if (numGlyphs !== maxpNumGlyphs) {\n            valid = false;\n            break;\n          }\n          const glyphNameIndexes = [];\n          for (i = 0; i < numGlyphs; ++i) {\n            const index = font.getUint16();\n            if (index >= 32768) {\n              valid = false;\n              break;\n            }\n            glyphNameIndexes.push(index);\n          }\n          if (!valid) {\n            break;\n          }\n          const customNames = [];\n          while (font.pos < end) {\n            const strLen = font.getByte(),\n              str = font.getString(strLen);\n            customNames.push(str);\n          }\n          glyphNames = [];\n          for (i = 0; i < numGlyphs; ++i) {\n            const j = glyphNameIndexes[i];\n            if (j < 258) {\n              glyphNames.push(MacStandardGlyphOrdering[j]);\n              continue;\n            }\n            glyphNames.push(customNames[j - 258]);\n          }\n          break;\n        case 0x00030000:\n          break;\n        default:\n          warn(\"Unknown/unsupported post table version \" + version);\n          valid = false;\n          if (propertiesObj.defaultEncoding) {\n            glyphNames = propertiesObj.defaultEncoding;\n          }\n          break;\n      }\n      propertiesObj.glyphNames = glyphNames;\n      return valid;\n    }\n\n    function readNameTable(nameTable) {\n      const start = (font.start || 0) + nameTable.offset;\n      font.pos = start;\n\n      const names = [[], []],\n        records = [];\n      const length = nameTable.length,\n        end = start + length;\n      const format = font.getUint16();\n      const FORMAT_0_HEADER_LENGTH = 6;\n      if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {\n        // unsupported name table format or table \"too\" small\n        return [names, records];\n      }\n      const numRecords = font.getUint16();\n      const stringsStart = font.getUint16();\n      const NAME_RECORD_LENGTH = 12;\n      let i, ii;\n\n      for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {\n        const r = {\n          platform: font.getUint16(),\n          encoding: font.getUint16(),\n          language: font.getUint16(),\n          name: font.getUint16(),\n          length: font.getUint16(),\n          offset: font.getUint16(),\n        };\n        // using only Macintosh and Windows platform/encoding names\n        if (isMacNameRecord(r) || isWinNameRecord(r)) {\n          records.push(r);\n        }\n      }\n      for (i = 0, ii = records.length; i < ii; i++) {\n        const record = records[i];\n        if (record.length <= 0) {\n          continue; // Nothing to process, ignoring.\n        }\n        const pos = start + stringsStart + record.offset;\n        if (pos + record.length > end) {\n          continue; // outside of name table, ignoring\n        }\n        font.pos = pos;\n        const nameIndex = record.name;\n        if (record.encoding) {\n          // unicode\n          let str = \"\";\n          for (let j = 0, jj = record.length; j < jj; j += 2) {\n            str += String.fromCharCode(font.getUint16());\n          }\n          names[1][nameIndex] = str;\n        } else {\n          names[0][nameIndex] = font.getString(record.length);\n        }\n      }\n      return [names, records];\n    }\n\n    // prettier-ignore\n    const TTOpsStackDeltas = [\n      0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5,\n      -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1,\n      1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1,\n      0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2,\n      0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1,\n      -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1,\n      -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n      -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1,\n      -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];\n    // 0xC0-DF == -1 and 0xE0-FF == -2\n\n    function sanitizeTTProgram(table, ttContext) {\n      let data = table.data;\n      let i = 0,\n        j,\n        n,\n        b,\n        funcId,\n        pc,\n        lastEndf = 0,\n        lastDeff = 0;\n      const stack = [];\n      const callstack = [];\n      const functionsCalled = [];\n      let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;\n      let inFDEF = false,\n        ifLevel = 0,\n        inELSE = 0;\n      for (let ii = data.length; i < ii;) {\n        const op = data[i++];\n        // The TrueType instruction set docs can be found at\n        // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html\n        if (op === 0x40) {\n          // NPUSHB - pushes n bytes\n          n = data[i++];\n          if (inFDEF || inELSE) {\n            i += n;\n          } else {\n            for (j = 0; j < n; j++) {\n              stack.push(data[i++]);\n            }\n          }\n        } else if (op === 0x41) {\n          // NPUSHW - pushes n words\n          n = data[i++];\n          if (inFDEF || inELSE) {\n            i += n * 2;\n          } else {\n            for (j = 0; j < n; j++) {\n              b = data[i++];\n              stack.push(signedInt16(b, data[i++]));\n            }\n          }\n        } else if ((op & 0xf8) === 0xb0) {\n          // PUSHB - pushes bytes\n          n = op - 0xb0 + 1;\n          if (inFDEF || inELSE) {\n            i += n;\n          } else {\n            for (j = 0; j < n; j++) {\n              stack.push(data[i++]);\n            }\n          }\n        } else if ((op & 0xf8) === 0xb8) {\n          // PUSHW - pushes words\n          n = op - 0xb8 + 1;\n          if (inFDEF || inELSE) {\n            i += n * 2;\n          } else {\n            for (j = 0; j < n; j++) {\n              b = data[i++];\n              stack.push(signedInt16(b, data[i++]));\n            }\n          }\n        } else if (op === 0x2b && !tooComplexToFollowFunctions) {\n          // CALL\n          if (!inFDEF && !inELSE) {\n            // collecting information about which functions are used\n            funcId = stack.at(-1);\n            if (isNaN(funcId)) {\n              info(\"TT: CALL empty stack (or invalid entry).\");\n            } else {\n              ttContext.functionsUsed[funcId] = true;\n              if (funcId in ttContext.functionsStackDeltas) {\n                const newStackLength =\n                  stack.length + ttContext.functionsStackDeltas[funcId];\n                if (newStackLength < 0) {\n                  warn(\"TT: CALL invalid functions stack delta.\");\n                  ttContext.hintsValid = false;\n                  return;\n                }\n                stack.length = newStackLength;\n              } else if (\n                funcId in ttContext.functionsDefined &&\n                !functionsCalled.includes(funcId)\n              ) {\n                callstack.push({ data, i, stackTop: stack.length - 1 });\n                functionsCalled.push(funcId);\n                pc = ttContext.functionsDefined[funcId];\n                if (!pc) {\n                  warn(\"TT: CALL non-existent function\");\n                  ttContext.hintsValid = false;\n                  return;\n                }\n                data = pc.data;\n                i = pc.i;\n              }\n            }\n          }\n        } else if (op === 0x2c && !tooComplexToFollowFunctions) {\n          // FDEF\n          if (inFDEF || inELSE) {\n            warn(\"TT: nested FDEFs not allowed\");\n            tooComplexToFollowFunctions = true;\n          }\n          inFDEF = true;\n          // collecting information about which functions are defined\n          lastDeff = i;\n          funcId = stack.pop();\n          ttContext.functionsDefined[funcId] = { data, i };\n        } else if (op === 0x2d) {\n          // ENDF - end of function\n          if (inFDEF) {\n            inFDEF = false;\n            lastEndf = i;\n          } else {\n            pc = callstack.pop();\n            if (!pc) {\n              warn(\"TT: ENDF bad stack\");\n              ttContext.hintsValid = false;\n              return;\n            }\n            funcId = functionsCalled.pop();\n            data = pc.data;\n            i = pc.i;\n            ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;\n          }\n        } else if (op === 0x89) {\n          // IDEF - instruction definition\n          if (inFDEF || inELSE) {\n            warn(\"TT: nested IDEFs not allowed\");\n            tooComplexToFollowFunctions = true;\n          }\n          inFDEF = true;\n          // recording it as a function to track ENDF\n          lastDeff = i;\n        } else if (op === 0x58) {\n          // IF\n          ++ifLevel;\n        } else if (op === 0x1b) {\n          // ELSE\n          inELSE = ifLevel;\n        } else if (op === 0x59) {\n          // EIF\n          if (inELSE === ifLevel) {\n            inELSE = 0;\n          }\n          --ifLevel;\n        } else if (op === 0x1c) {\n          // JMPR\n          if (!inFDEF && !inELSE) {\n            const offset = stack.at(-1);\n            // only jumping forward to prevent infinite loop\n            if (offset > 0) {\n              i += offset - 1;\n            }\n          }\n        }\n        // Adjusting stack not exactly, but just enough to get function id\n        if (!inFDEF && !inELSE) {\n          let stackDelta = 0;\n          if (op <= 0x8e) {\n            stackDelta = TTOpsStackDeltas[op];\n          } else if (op >= 0xc0 && op <= 0xdf) {\n            stackDelta = -1;\n          } else if (op >= 0xe0) {\n            stackDelta = -2;\n          }\n          if (op >= 0x71 && op <= 0x75) {\n            n = stack.pop();\n            if (!isNaN(n)) {\n              stackDelta = -n * 2;\n            }\n          }\n          while (stackDelta < 0 && stack.length > 0) {\n            stack.pop();\n            stackDelta++;\n          }\n          while (stackDelta > 0) {\n            stack.push(NaN); // pushing any number into stack\n            stackDelta--;\n          }\n        }\n      }\n      ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;\n      const content = [data];\n      if (i > data.length) {\n        content.push(new Uint8Array(i - data.length));\n      }\n      if (lastDeff > lastEndf) {\n        warn(\"TT: complementing a missing function tail\");\n        // new function definition started, but not finished\n        // complete function by [CLEAR, ENDF]\n        content.push(new Uint8Array([0x22, 0x2d]));\n      }\n      foldTTTable(table, content);\n    }\n\n    function checkInvalidFunctions(ttContext, maxFunctionDefs) {\n      if (ttContext.tooComplexToFollowFunctions) {\n        return;\n      }\n      if (ttContext.functionsDefined.length > maxFunctionDefs) {\n        warn(\"TT: more functions defined than expected\");\n        ttContext.hintsValid = false;\n        return;\n      }\n      for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {\n        if (j > maxFunctionDefs) {\n          warn(\"TT: invalid function id: \" + j);\n          ttContext.hintsValid = false;\n          return;\n        }\n        if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {\n          warn(\"TT: undefined function: \" + j);\n          ttContext.hintsValid = false;\n          return;\n        }\n      }\n    }\n\n    function foldTTTable(table, content) {\n      if (content.length > 1) {\n        // concatenating the content items\n        let newLength = 0;\n        let j, jj;\n        for (j = 0, jj = content.length; j < jj; j++) {\n          newLength += content[j].length;\n        }\n        newLength = (newLength + 3) & ~3;\n        const result = new Uint8Array(newLength);\n        let pos = 0;\n        for (j = 0, jj = content.length; j < jj; j++) {\n          result.set(content[j], pos);\n          pos += content[j].length;\n        }\n        table.data = result;\n        table.length = newLength;\n      }\n    }\n\n    function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {\n      const ttContext = {\n        functionsDefined: [],\n        functionsUsed: [],\n        functionsStackDeltas: [],\n        tooComplexToFollowFunctions: false,\n        hintsValid: true,\n      };\n      if (fpgm) {\n        sanitizeTTProgram(fpgm, ttContext);\n      }\n      if (prep) {\n        sanitizeTTProgram(prep, ttContext);\n      }\n      if (fpgm) {\n        checkInvalidFunctions(ttContext, maxFunctionDefs);\n      }\n      if (cvt && cvt.length & 1) {\n        const cvtData = new Uint8Array(cvt.length + 1);\n        cvtData.set(cvt.data);\n        cvt.data = cvtData;\n      }\n      return ttContext.hintsValid;\n    }\n\n    // The following steps modify the original font data, making copy\n    font = new Stream(new Uint8Array(font.getBytes()));\n\n    let header, tables;\n    if (isTrueTypeCollectionFile(font)) {\n      const ttcData = readTrueTypeCollectionData(font, this.name);\n      header = ttcData.header;\n      tables = ttcData.tables;\n    } else {\n      header = readOpenTypeHeader(font);\n      tables = readTables(font, header.numTables);\n    }\n\n    const isTrueType = !tables[\"CFF \"];\n    let parsedCff = null;\n    if (!isTrueType) {\n      try {\n        parsedCff = new CFFParser(\n          new Stream(tables[\"CFF \"].data),\n          properties,\n          SEAC_ANALYSIS_ENABLED\n        ).parse();\n      } catch {\n        warn(\"Failed to parse font \" + properties.loadedName);\n      }\n\n      // OpenType font (skip composite fonts with non-default glyph mapping).\n      if (\n        (header.version === \"OTTO\" &&\n          (!properties.composite ||\n            (properties.fontFileN === \"FontFile3\" && parsedCff?.isCIDFont))) ||\n        !tables.head ||\n        !tables.hhea ||\n        !tables.maxp ||\n        !tables.post\n      ) {\n        // No major tables: throwing everything at `CFFFont`.\n        return this.convert(\n          name,\n          new CFFFont(new Stream(tables[\"CFF \"].data), properties),\n          properties\n        );\n      }\n\n      delete tables.glyf;\n      delete tables.loca;\n      delete tables.fpgm;\n      delete tables.prep;\n      delete tables[\"cvt \"];\n      this.isOpenType = true;\n    } else {\n      if (!tables.loca) {\n        throw new FormatError('Required \"loca\" table is not found');\n      }\n      if (!tables.glyf) {\n        warn('Required \"glyf\" table is not found -- trying to recover.');\n        // Note: We use `sanitizeGlyphLocations` to add dummy glyf data below.\n        tables.glyf = {\n          tag: \"glyf\",\n          data: new Uint8Array(0),\n        };\n      }\n      this.isOpenType = false;\n    }\n\n    if (!tables.maxp) {\n      throw new FormatError('Required \"maxp\" table is not found');\n    }\n\n    let numGlyphsFromCFF;\n    if (parsedCff) {\n      try {\n        parsedCff.duplicateFirstGlyph();\n        tables[\"CFF \"].data = new CFFCompiler(parsedCff).compile();\n        numGlyphsFromCFF = parsedCff.charStringCount;\n      } catch {\n        warn(\"Failed to compile font \" + properties.loadedName);\n      }\n    }\n\n    font.pos = (font.start || 0) + tables.maxp.offset;\n    let version = font.getInt32();\n    const numGlyphs = numGlyphsFromCFF ?? font.getUint16();\n    if (version === 0x00005000 && tables.maxp.length !== 6) {\n      tables.maxp.data = tables.maxp.data.subarray(0, 6);\n      tables.maxp.length = 6;\n    }\n\n    if (version !== 0x00010000 && version !== 0x00005000) {\n      // https://learn.microsoft.com/en-us/typography/opentype/spec/maxp\n      if (tables.maxp.length === 6) {\n        version = 0x0005000;\n      } else if (tables.maxp.length >= 32) {\n        version = 0x00010000;\n      } else {\n        throw new FormatError(`\"maxp\" table has a wrong version number`);\n      }\n      writeUint32(tables.maxp.data, 0, version);\n    }\n\n    let isGlyphLocationsLong = int16(\n      tables.head.data[50],\n      tables.head.data[51]\n    );\n    if (tables.loca) {\n      const locaLength = isGlyphLocationsLong\n        ? (numGlyphs + 1) * 4\n        : (numGlyphs + 1) * 2;\n      if (tables.loca.length !== locaLength) {\n        warn(\"Incorrect 'loca' table length -- attempting to fix it.\");\n        // The length of the loca table is wrong (see #13425), so we check if we\n        // have enough space to fix it.\n        const sortedTables = Object.values(tables)\n          .filter(Boolean)\n          .sort((a, b) => a.offset - b.offset);\n        const locaIndex = sortedTables.indexOf(tables.loca);\n        const nextTable = sortedTables[locaIndex + 1] || null;\n        if (nextTable && tables.loca.offset + locaLength < nextTable.offset) {\n          const previousPos = font.pos;\n          font.pos = font.start || 0;\n          font.skip(tables.loca.offset);\n          tables.loca.data = font.getBytes(locaLength);\n          tables.loca.length = locaLength;\n          font.pos = previousPos;\n        }\n      }\n    }\n\n    if (properties.scaleFactors?.length === numGlyphs && isTrueType) {\n      const { scaleFactors } = properties;\n      const glyphs = new GlyfTable({\n        glyfTable: tables.glyf.data,\n        isGlyphLocationsLong,\n        locaTable: tables.loca.data,\n        numGlyphs,\n      });\n      glyphs.scale(scaleFactors);\n\n      const { glyf, loca, isLocationLong } = glyphs.write();\n      tables.glyf.data = glyf;\n      tables.loca.data = loca;\n\n      if (isLocationLong !== !!isGlyphLocationsLong) {\n        tables.head.data[50] = 0;\n        isGlyphLocationsLong = tables.head.data[51] = isLocationLong ? 1 : 0;\n      }\n\n      const metrics = tables.hmtx.data;\n\n      for (let i = 0; i < numGlyphs; i++) {\n        const j = 4 * i;\n        const advanceWidth = Math.round(\n          scaleFactors[i] * int16(metrics[j], metrics[j + 1])\n        );\n        metrics[j] = (advanceWidth >> 8) & 0xff;\n        metrics[j + 1] = advanceWidth & 0xff;\n        const lsb = Math.round(\n          scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3])\n        );\n        writeSignedInt16(metrics, j + 2, lsb);\n      }\n    }\n\n    // Glyph 0 is duplicated and appended.\n    let numGlyphsOut = numGlyphs + 1;\n    let dupFirstEntry = true;\n    if (numGlyphsOut > 0xffff) {\n      dupFirstEntry = false;\n      numGlyphsOut = numGlyphs;\n      warn(\"Not enough space in glyfs to duplicate first glyph.\");\n    }\n    let maxFunctionDefs = 0;\n    let maxSizeOfInstructions = 0;\n    if (version >= 0x00010000 && tables.maxp.length >= 32) {\n      // maxZones can be invalid\n      font.pos += 8;\n      const maxZones = font.getUint16();\n      if (maxZones > 2) {\n        // reset to 2 if font has invalid maxZones\n        tables.maxp.data[14] = 0;\n        tables.maxp.data[15] = 2;\n      }\n      font.pos += 4;\n      maxFunctionDefs = font.getUint16();\n      font.pos += 4;\n      maxSizeOfInstructions = font.getUint16();\n    } else if (isTrueType && version === 0x00005000) {\n      const newMaxp = new Uint8Array(32);\n      writeUint32(newMaxp, 0, 0x00010000);\n      newMaxp[4] = (numGlyphs >> 8) & 0xff;\n      newMaxp[5] = numGlyphs & 0xff;\n      newMaxp.fill(0xff, 6, 14);\n      newMaxp[15] = 2;\n      newMaxp[28] = 0xff;\n      newMaxp[29] = 0xff;\n      newMaxp[31] = 0x10;\n      tables.maxp.data = newMaxp;\n      tables.maxp.length = 32;\n      version = 0x00010000;\n    }\n\n    tables.maxp.data[4] = numGlyphsOut >> 8;\n    tables.maxp.data[5] = numGlyphsOut & 255;\n\n    const hintsValid = sanitizeTTPrograms(\n      tables.fpgm,\n      tables.prep,\n      tables[\"cvt \"],\n      maxFunctionDefs\n    );\n    if (!hintsValid) {\n      delete tables.fpgm;\n      delete tables.prep;\n      delete tables[\"cvt \"];\n    }\n\n    // Ensure the hmtx table contains the advance width and\n    // sidebearings information for numGlyphs in the maxp table\n    sanitizeMetrics(\n      font,\n      tables.hhea,\n      tables.hmtx,\n      tables.head,\n      numGlyphsOut,\n      dupFirstEntry\n    );\n\n    if (!tables.head) {\n      throw new FormatError('Required \"head\" table is not found');\n    }\n\n    sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);\n\n    let missingGlyphs = Object.create(null);\n    if (isTrueType) {\n      const glyphsInfo = sanitizeGlyphLocations(\n        tables.loca,\n        tables.glyf,\n        numGlyphs,\n        isGlyphLocationsLong,\n        hintsValid,\n        dupFirstEntry,\n        maxSizeOfInstructions\n      );\n      missingGlyphs = glyphsInfo.missingGlyphs;\n\n      // Some fonts have incorrect maxSizeOfInstructions values, so we use\n      // the computed value instead.\n      if (version >= 0x00010000 && tables.maxp.length >= 32) {\n        tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;\n        tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;\n      }\n    }\n    if (!tables.hhea) {\n      throw new FormatError('Required \"hhea\" table is not found');\n    }\n\n    // Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth\n    // Sometimes it's 0. That needs to be fixed\n    if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {\n      tables.hhea.data[10] = 0xff;\n      tables.hhea.data[11] = 0xff;\n    }\n\n    // Extract some more font properties from the OpenType head and\n    // hhea tables; yMin and descent value are always negative.\n    const metricsOverride = {\n      unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),\n      yMax: signedInt16(tables.head.data[42], tables.head.data[43]),\n      yMin: signedInt16(tables.head.data[38], tables.head.data[39]),\n      ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]),\n      descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]),\n      lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9]),\n    };\n\n    // PDF FontDescriptor metrics lie -- using data from actual font.\n    this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;\n    this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;\n    this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm;\n\n    if (this.cssFontInfo?.lineHeight) {\n      this.lineHeight = this.cssFontInfo.metrics.lineHeight;\n      this.lineGap = this.cssFontInfo.metrics.lineGap;\n    } else {\n      this.lineHeight = this.ascent - this.descent + this.lineGap;\n    }\n\n    // The 'post' table has glyphs names.\n    if (tables.post) {\n      readPostScriptTable(tables.post, properties, numGlyphs);\n    }\n\n    // The original 'post' table is not needed, replace it.\n    tables.post = {\n      tag: \"post\",\n      data: createPostTable(properties),\n    };\n\n    const charCodeToGlyphId = Object.create(null);\n\n    // Helper function to try to skip mapping of empty glyphs.\n    function hasGlyph(glyphId) {\n      return !missingGlyphs[glyphId];\n    }\n\n    if (properties.composite) {\n      const cidToGidMap = properties.cidToGidMap || [];\n      const isCidToGidMapEmpty = cidToGidMap.length === 0;\n\n      properties.cMap.forEach(function (charCode, cid) {\n        if (typeof cid === \"string\") {\n          cid = convertCidString(charCode, cid, /* shouldThrow = */ true);\n        }\n        if (cid > 0xffff) {\n          throw new FormatError(\"Max size of CID is 65,535\");\n        }\n        let glyphId = -1;\n        if (isCidToGidMapEmpty) {\n          glyphId = cid;\n        } else if (cidToGidMap[cid] !== undefined) {\n          glyphId = cidToGidMap[cid];\n        }\n\n        if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {\n          charCodeToGlyphId[charCode] = glyphId;\n        }\n      });\n    } else {\n      // Most of the following logic in this code branch is based on the\n      // 9.6.6.4 of the PDF spec.\n      const cmapTable = readCmapTable(\n        tables.cmap,\n        font,\n        this.isSymbolicFont,\n        properties.hasEncoding\n      );\n      const cmapPlatformId = cmapTable.platformId;\n      const cmapEncodingId = cmapTable.encodingId;\n      const cmapMappings = cmapTable.mappings;\n      let baseEncoding = [],\n        forcePostTable = false;\n      if (\n        properties.hasEncoding &&\n        (properties.baseEncodingName === \"MacRomanEncoding\" ||\n          properties.baseEncodingName === \"WinAnsiEncoding\")\n      ) {\n        baseEncoding = getEncoding(properties.baseEncodingName);\n      }\n\n      // If the font has an encoding and is not symbolic then follow the rules\n      // in section 9.6.6.4 of the spec on how to map 3,1 and 1,0 cmaps.\n      if (\n        properties.hasEncoding &&\n        !this.isSymbolicFont &&\n        ((cmapPlatformId === 3 && cmapEncodingId === 1) ||\n          (cmapPlatformId === 1 && cmapEncodingId === 0))\n      ) {\n        const glyphsUnicodeMap = getGlyphsUnicode();\n        for (let charCode = 0; charCode < 256; charCode++) {\n          let glyphName;\n          if (this.differences[charCode] !== undefined) {\n            glyphName = this.differences[charCode];\n          } else if (baseEncoding.length && baseEncoding[charCode] !== \"\") {\n            glyphName = baseEncoding[charCode];\n          } else {\n            glyphName = StandardEncoding[charCode];\n          }\n          if (!glyphName) {\n            continue;\n          }\n          // Ensure that non-standard glyph names are resolved to valid ones.\n          const standardGlyphName = recoverGlyphName(\n            glyphName,\n            glyphsUnicodeMap\n          );\n\n          let unicodeOrCharCode;\n          if (cmapPlatformId === 3 && cmapEncodingId === 1) {\n            unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];\n          } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {\n            // TODO: the encoding needs to be updated with mac os table.\n            unicodeOrCharCode = MacRomanEncoding.indexOf(standardGlyphName);\n          }\n\n          if (unicodeOrCharCode === undefined) {\n            // Not a valid glyph name, fallback to using the /ToUnicode map\n            // when no post-table exists (fixes issue13316_reduced.pdf).\n            if (\n              !properties.glyphNames &&\n              properties.hasIncludedToUnicodeMap &&\n              !(this.toUnicode instanceof IdentityToUnicodeMap)\n            ) {\n              const unicode = this.toUnicode.get(charCode);\n              if (unicode) {\n                unicodeOrCharCode = unicode.codePointAt(0);\n              }\n            }\n\n            if (unicodeOrCharCode === undefined) {\n              continue; // No valid glyph mapping found.\n            }\n          }\n\n          for (const mapping of cmapMappings) {\n            if (mapping.charCode !== unicodeOrCharCode) {\n              continue;\n            }\n            charCodeToGlyphId[charCode] = mapping.glyphId;\n            break;\n          }\n        }\n      } else if (cmapPlatformId === 0) {\n        // Default Unicode semantics, use the charcodes as is.\n        for (const mapping of cmapMappings) {\n          charCodeToGlyphId[mapping.charCode] = mapping.glyphId;\n        }\n        // Always prefer the BaseEncoding/Differences arrays, when they exist\n        // (fixes issue13433.pdf).\n        forcePostTable = true;\n      } else if (cmapPlatformId === 3 && cmapEncodingId === 0) {\n        // When a (3, 0) cmap table is present, it is used instead but the\n        // spec has special rules for char codes in the range of 0xF000 to\n        // 0xF0FF and it says the (3, 0) table should map the values from\n        // the (1, 0) table by prepending 0xF0 to the char codes. To reverse\n        // this, the upper bits of the char code are cleared, but only for the\n        // special range since some PDFs have char codes outside of this range\n        // (e.g. 0x2013) which when masked would overwrite other values in the\n        // cmap.\n        for (const mapping of cmapMappings) {\n          let charCode = mapping.charCode;\n          if (charCode >= 0xf000 && charCode <= 0xf0ff) {\n            charCode &= 0xff;\n          }\n          charCodeToGlyphId[charCode] = mapping.glyphId;\n        }\n      } else {\n        // When there is only a (1, 0) cmap table, the char code is a single\n        // byte and it is used directly as the char code.\n        for (const mapping of cmapMappings) {\n          charCodeToGlyphId[mapping.charCode] = mapping.glyphId;\n        }\n      }\n\n      // Last, try to map any missing charcodes using the post table.\n      if (\n        properties.glyphNames &&\n        (baseEncoding.length || this.differences.length)\n      ) {\n        for (let i = 0; i < 256; ++i) {\n          if (!forcePostTable && charCodeToGlyphId[i] !== undefined) {\n            continue;\n          }\n          const glyphName = this.differences[i] || baseEncoding[i];\n          if (!glyphName) {\n            continue;\n          }\n          const glyphId = properties.glyphNames.indexOf(glyphName);\n          if (glyphId > 0 && hasGlyph(glyphId)) {\n            charCodeToGlyphId[i] = glyphId;\n          }\n        }\n      }\n\n      // The char code 0 isn't associated with any glyph name in the standard\n      // encodings, hence it can only refer to glyph 0 (i.e. the \".notdef\"\n      // glyph). Some embedded fonts use a non-empty glyph 0 (e.g. a checkbox\n      // in a symbol font) and the page content draws it with the char code 0,\n      // so map it explicitly when it would otherwise be left unmapped, but\n      // only when the glyph is non-empty to avoid displaying a \".notdef\" box\n      // for fonts that don't (issue 17333). This is restricted to embedded\n      // fonts since the \".notdef\" glyph of a standard substitution font must\n      // never be rendered.\n      if (\n        !properties.isInternalFont &&\n        charCodeToGlyphId[0] === undefined &&\n        hasGlyph(0)\n      ) {\n        charCodeToGlyphId[0] = 0;\n      }\n    }\n\n    if (charCodeToGlyphId.length === 0) {\n      // defines at least one glyph\n      charCodeToGlyphId[0] = 0;\n    }\n\n    // Typically glyph 0 is duplicated and the mapping must be updated, but if\n    // there isn't enough room to duplicate, the glyph id is left the same. In\n    // this case, glyph 0 may not work correctly, but that is better than\n    // having the whole font fail.\n    const glyphZeroId = dupFirstEntry ? numGlyphsOut - 1 : 0;\n\n    // When `cssFontInfo` is set, the font is used to render text in the HTML\n    // view (e.g. with Xfa) so nothing must be moved in the private use area.\n    if (!properties.cssFontInfo) {\n      // Converting glyphs and ids into font's cmap table\n      const newMapping = adjustMapping(\n        charCodeToGlyphId,\n        hasGlyph,\n        glyphZeroId,\n        this.toUnicode\n      );\n      this.toFontChar = newMapping.toFontChar;\n      tables.cmap = {\n        tag: \"cmap\",\n        data: createCmapTable(\n          newMapping.charCodeToGlyphId,\n          newMapping.toUnicodeExtraMap,\n          numGlyphsOut\n        ),\n      };\n\n      if (!tables[\"OS/2\"] || !validateOS2Table(tables[\"OS/2\"], font)) {\n        tables[\"OS/2\"] = {\n          tag: \"OS/2\",\n          data: createOS2Table(\n            properties,\n            newMapping.charCodeToGlyphId,\n            metricsOverride\n          ),\n        };\n      }\n    }\n\n    // Re-creating 'name' table\n    if (!tables.name) {\n      tables.name = {\n        tag: \"name\",\n        data: createNameTable(this.name),\n      };\n    } else {\n      // ... using existing 'name' table as prototype\n      const [namePrototype, nameRecords] = readNameTable(tables.name);\n\n      tables.name.data = createNameTable(name, namePrototype);\n      this.psName = namePrototype[0][6] || null;\n\n      if (!properties.composite) {\n        // For TrueType fonts that do not include `ToUnicode` or `Encoding`\n        // data, attempt to use the name-table to improve text selection.\n        adjustTrueTypeToUnicode(properties, this.isSymbolicFont, nameRecords);\n      }\n    }\n\n    const builder = new OpenTypeFileBuilder(header.version);\n    for (const tableTag in tables) {\n      builder.addTable(tableTag, tables[tableTag].data);\n    }\n    return builder.toArray();\n  }\n\n  convert(fontName, font, properties) {\n    // TODO: Check the charstring widths to determine this.\n    properties.fixedPitch = false;\n\n    if (properties.builtInEncoding) {\n      // For Type1 fonts that do not include either `ToUnicode` or `Encoding`\n      // data, attempt to use the `builtInEncoding` to improve text selection.\n      adjustType1ToUnicode(properties, properties.builtInEncoding);\n    }\n\n    // Type 1 fonts have a notdef inserted at the beginning, so glyph 0\n    // becomes glyph 1. In a CFF font glyph 0 is appended to the end of the\n    // char strings.\n    const glyphZeroId = font instanceof CFFFont ? font.numGlyphs - 1 : 1;\n    const mapping = font.getGlyphMapping(properties);\n    let newMapping = null;\n    let newCharCodeToGlyphId = mapping;\n    let toUnicodeExtraMap = null;\n\n    // When `cssFontInfo` is set, the font is used to render text in the HTML\n    // view (e.g. with Xfa) so nothing must be moved in the private use area.\n    if (!properties.cssFontInfo) {\n      newMapping = adjustMapping(\n        mapping,\n        font.hasGlyphId.bind(font),\n        glyphZeroId,\n        this.toUnicode\n      );\n      this.toFontChar = newMapping.toFontChar;\n      newCharCodeToGlyphId = newMapping.charCodeToGlyphId;\n      toUnicodeExtraMap = newMapping.toUnicodeExtraMap;\n    }\n    const numGlyphs = font.numGlyphs;\n\n    function getCharCodes(charCodeToGlyphId, glyphId) {\n      let charCodes = null;\n      for (const charCode in charCodeToGlyphId) {\n        if (glyphId === charCodeToGlyphId[charCode]) {\n          (charCodes ||= []).push(charCode | 0);\n        }\n      }\n      return charCodes;\n    }\n\n    function createCharCode(charCodeToGlyphId, glyphId) {\n      for (const charCode in charCodeToGlyphId) {\n        if (glyphId === charCodeToGlyphId[charCode]) {\n          return charCode | 0;\n        }\n      }\n      newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] =\n        glyphId;\n      return newMapping.nextAvailableFontCharCode++;\n    }\n\n    const seacs = font.seacs;\n    if (newMapping && SEAC_ANALYSIS_ENABLED && seacs?.length) {\n      const matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;\n      const charset = font.getCharset();\n      const seacMap = Object.create(null);\n      for (let glyphId in seacs) {\n        glyphId |= 0;\n        const seac = seacs[glyphId];\n        const baseGlyphName = StandardEncoding[seac[2]];\n        const accentGlyphName = StandardEncoding[seac[3]];\n        const baseGlyphId = charset.indexOf(baseGlyphName);\n        const accentGlyphId = charset.indexOf(accentGlyphName);\n        if (baseGlyphId < 0 || accentGlyphId < 0) {\n          continue;\n        }\n        const accentOffset = {\n          x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],\n          y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5],\n        };\n\n        const charCodes = getCharCodes(mapping, glyphId);\n        if (!charCodes) {\n          // There's no point in mapping it if the char code was never mapped\n          // to begin with.\n          continue;\n        }\n        for (const charCode of charCodes) {\n          // Find a fontCharCode that maps to the base and accent glyphs.\n          // If one doesn't exists, create it.\n          const charCodeToGlyphId = newMapping.charCodeToGlyphId;\n          const baseFontCharCode = createCharCode(\n            charCodeToGlyphId,\n            baseGlyphId\n          );\n          const accentFontCharCode = createCharCode(\n            charCodeToGlyphId,\n            accentGlyphId\n          );\n          seacMap[charCode] = {\n            baseFontCharCode,\n            accentFontCharCode,\n            accentOffset,\n          };\n        }\n      }\n      properties.seacMap = seacMap;\n    }\n\n    const unitsPerEm = properties.fontMatrix\n      ? 1 / Math.max(...properties.fontMatrix.slice(0, 4).map(Math.abs))\n      : 1000;\n\n    const builder = new OpenTypeFileBuilder(\"\\x4F\\x54\\x54\\x4F\");\n    // PostScript Font Program\n    builder.addTable(\"CFF \", font.data);\n    // OS/2 and Windows Specific metrics\n    builder.addTable(\"OS/2\", createOS2Table(properties, newCharCodeToGlyphId));\n    // Character to glyphs mapping\n    builder.addTable(\n      \"cmap\",\n      createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs)\n    );\n    // Font header\n    builder.addTable(\n      \"head\",\n      (function fontTableHead() {\n        const dateArr = [0x00, 0x00, 0x00, 0x00, 0x9e, 0x0b, 0x7e, 0x27];\n\n        const head = new DataBuilder({ exactLength: 54 });\n        head.setArray([0x00, 0x01, 0x00, 0x00]); // Version number\n        head.setArray([0x00, 0x00, 0x10, 0x00]); // fontRevision\n        head.skip(4); // checksumAdjustement, skip redundant \"\\x00\\x00\\x00\\x00\"\n        head.setArray([0x5f, 0x0f, 0x3c, 0xf5]); // magicNumber\n        head.skip(2); // Flags, skip redundant \"\\x00\\x00\"\n        head.setSafeInt16(unitsPerEm); // unitsPerEM\n        head.setArray(dateArr); // creation date\n        head.setArray(dateArr); // modifification date\n        head.skip(2); // xMin, skip redundant \"\\x00\\x00\"\n        head.setSafeInt16(properties.descent); // yMin\n        head.setArray([0x0f, 0xff]); // xMax\n        head.setSafeInt16(properties.ascent); // yMax\n        head.setInt16(properties.italicAngle ? 2 : 0); // macStyle\n        head.setArray([0x00, 0x11]); // lowestRecPPEM\n        head.skip(\n          2 + // fontDirectionHint, skip redundant \"\\x00\\x00\"\n            2 + // indexToLocFormat, skip redundant \"\\x00\\x00\"\n            2 // glyphDataFormat, skip redundant \"\\x00\\x00\"\n        );\n        return head.data;\n      })()\n    );\n\n    // Horizontal header\n    builder.addTable(\n      \"hhea\",\n      (function fontTableHhea() {\n        const hhea = new DataBuilder({ exactLength: 36 });\n        hhea.setArray([0x00, 0x01, 0x00, 0x00]); // Version number\n        hhea.setSafeInt16(properties.ascent); // Typographic Ascent\n        hhea.setSafeInt16(properties.descent); // Typographic Descent\n        hhea.skip(2); // Line Gap, skip redundant \"\\x00\\x00\"\n        hhea.setArray([0xff, 0xff]); // advanceWidthMax\n        hhea.skip(\n          2 + // minLeftSidebearing, skip redundant \"\\x00\\x00\"\n            2 + // minRightSidebearing, skip redundant \"\\x00\\x00\"\n            2 // xMaxExtent, skip redundant \"\\x00\\x00\"\n        );\n        hhea.setSafeInt16(properties.capHeight); // caretSlopeRise\n        hhea.setSafeInt16(\n          Math.tan(properties.italicAngle) * properties.xHeight\n        ); // caretSlopeRun\n        hhea.skip(\n          2 + // caretOffset, skip redundant \"\\x00\\x00\"\n            2 + // -reserved-, skip redundant \"\\x00\\x00\"\n            2 + // -reserved-, skip redundant \"\\x00\\x00\"\n            2 + // -reserved-, skip redundant \"\\x00\\x00\"\n            2 + // -reserved-, skip redundant \"\\x00\\x00\"\n            2 // metricDataFormat, skip redundant \"\\x00\\x00\"\n        );\n        hhea.setInt16(numGlyphs); // Number of HMetrics\n        return hhea.data;\n      })()\n    );\n\n    // Horizontal metrics\n    builder.addTable(\n      \"hmtx\",\n      (function fontTableHmtx() {\n        const charstrings = font.charstrings;\n        const cffWidths = font.cff?.widths ?? null;\n\n        const hmtx = new DataBuilder({ exactLength: numGlyphs * 4 });\n        // Fake .notdef (width=0 and lsb=0) first, skip redundant assignment.\n        hmtx.skip(4);\n\n        for (let i = 1, ii = numGlyphs; i < ii; i++) {\n          let width = 0;\n          if (charstrings) {\n            width = charstrings[i - 1].width || 0;\n          } else if (cffWidths) {\n            width = Math.ceil(cffWidths[i] || 0);\n          }\n          hmtx.setInt16(width);\n          hmtx.skip(2); // Use lsb=0, skip redundant assignment.\n        }\n        return hmtx.data;\n      })()\n    );\n\n    // Maximum profile\n    builder.addTable(\n      \"maxp\",\n      (function fontTableMaxp() {\n        const maxp = new DataBuilder({ exactLength: 6 });\n        maxp.setArray([0x00, 0x00, 0x50, 0x00]); // Version number\n        maxp.setInt16(numGlyphs); // Num of glyphs\n        return maxp.data;\n      })()\n    );\n\n    // Naming tables\n    builder.addTable(\"name\", createNameTable(fontName));\n\n    // PostScript information\n    builder.addTable(\"post\", createPostTable(properties));\n\n    return builder.toArray();\n  }\n\n  /**\n   * @private\n   */\n  get _spaceWidth() {\n    // trying to estimate space character width\n    const possibleSpaceReplacements = [\"space\", \"minus\", \"one\", \"i\", \"I\"];\n    let width;\n    for (const glyphName of possibleSpaceReplacements) {\n      // if possible, getting width by glyph name\n      if (glyphName in this.widths) {\n        width = this.widths[glyphName];\n        break;\n      }\n      const glyphsUnicodeMap = getGlyphsUnicode();\n      const glyphUnicode = glyphsUnicodeMap[glyphName];\n      // finding the charcode via unicodeToCID map\n      let charcode = 0;\n      if (this.composite && this.cMap.contains(glyphUnicode)) {\n        charcode = this.cMap.lookup(glyphUnicode);\n\n        if (typeof charcode === \"string\") {\n          charcode = convertCidString(glyphUnicode, charcode);\n        }\n      }\n      // ... via toUnicode map\n      if (!charcode && this.toUnicode) {\n        charcode = this.toUnicode.charCodeOf(glyphUnicode);\n      }\n      // setting it to unicode if negative or undefined\n      if (charcode <= 0) {\n        charcode = glyphUnicode;\n      }\n      // trying to get width via charcode\n      width = this.widths[charcode];\n      if (width) {\n        break; // the non-zero width found\n      }\n    }\n    return shadow(this, \"_spaceWidth\", width || this.defaultWidth);\n  }\n\n  /**\n   * @private\n   */\n  _charToGlyph(charcode, isSpace = false) {\n    let glyph = this.#glyphCache.get(charcode);\n    // All `Glyph`-properties, except `isSpace` in multi-byte strings,\n    // depend indirectly on the `charcode`.\n    if (glyph?.isSpace === isSpace) {\n      return glyph;\n    }\n    let fontCharCode, width, operatorListId;\n\n    let widthCode = charcode;\n    if (this.cMap?.contains(charcode)) {\n      widthCode = this.cMap.lookup(charcode);\n\n      if (typeof widthCode === \"string\") {\n        widthCode = convertCidString(charcode, widthCode);\n      }\n    }\n    width = this.widths[widthCode];\n    if (typeof width !== \"number\") {\n      width = this.defaultWidth;\n    }\n    const vmetric = this.vmetrics?.[widthCode] || this.defaultVMetrics;\n\n    let unicode = this.toUnicode.get(charcode) || charcode;\n    if (typeof unicode === \"number\") {\n      unicode = String.fromCharCode(unicode);\n    }\n\n    let isInFont = this.toFontChar[charcode] !== undefined;\n    // First try the toFontChar map, if it's not there then try falling\n    // back to the char code.\n    fontCharCode = this.toFontChar[charcode] || charcode;\n    if (this.missingFile) {\n      const glyphName =\n        this.differences[charcode] || this.defaultEncoding[charcode];\n      if (\n        (glyphName === \".notdef\" || glyphName === \"\") &&\n        this.type === \"Type1\"\n      ) {\n        // .notdef glyphs should be invisible in non-embedded Type1 fonts, so\n        // replace them with spaces.\n        fontCharCode = 0x20;\n\n        if (glyphName === \"\") {\n          // Ensure that other relevant glyph properties are also updated\n          // (fixes issue18059.pdf).\n          width ||= this._spaceWidth;\n          unicode = String.fromCharCode(fontCharCode);\n        }\n      }\n      fontCharCode = mapSpecialUnicodeValues(fontCharCode);\n    }\n\n    if (this.isType3Font) {\n      // Font char code in this case is actually a glyph name.\n      operatorListId = fontCharCode;\n    }\n\n    let accent = null;\n    if (this.seacMap?.[charcode]) {\n      isInFont = true;\n      const seac = this.seacMap[charcode];\n      fontCharCode = seac.baseFontCharCode;\n      accent = {\n        fontChar: String.fromCodePoint(seac.accentFontCharCode),\n        offset: seac.accentOffset,\n      };\n    }\n\n    let fontChar = \"\";\n    if (typeof fontCharCode === \"number\") {\n      if (fontCharCode <= 0x10ffff) {\n        fontChar = String.fromCodePoint(fontCharCode);\n      } else {\n        warn(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);\n      }\n    }\n\n    if (this.missingFile && this.vertical && fontChar.length === 1) {\n      const vertical = getVerticalPresentationForm()[fontChar.charCodeAt(0)];\n      if (vertical) {\n        fontChar = unicode = String.fromCharCode(vertical);\n      }\n    }\n\n    glyph = new Glyph(\n      charcode,\n      fontChar,\n      unicode,\n      accent,\n      width,\n      vmetric,\n      operatorListId,\n      isSpace,\n      isInFont\n    );\n    this.#glyphCache.set(charcode, glyph);\n    return glyph;\n  }\n\n  charsToGlyphs(chars) {\n    // If we translated this string before, just grab it from the cache.\n    let glyphs = this.#charsCache.get(chars);\n    if (glyphs) {\n      return glyphs;\n    }\n    glyphs = [];\n\n    if (this.cMap) {\n      // Composite fonts have multi-byte strings, convert the string from\n      // single-byte to multi-byte.\n      const c = Object.create(null),\n        ii = chars.length;\n      let i = 0;\n      while (i < ii) {\n        this.cMap.readCharCode(chars, i, c);\n        const { charcode, length } = c;\n        i += length;\n        // Space is char with code 0x20 and length 1 in multiple-byte codes.\n        const glyph = this._charToGlyph(\n          charcode,\n          length === 1 && chars.charCodeAt(i - 1) === 0x20\n        );\n        glyphs.push(glyph);\n      }\n    } else {\n      for (let i = 0, ii = chars.length; i < ii; ++i) {\n        const charcode = chars.charCodeAt(i);\n        const glyph = this._charToGlyph(charcode, charcode === 0x20);\n        glyphs.push(glyph);\n      }\n    }\n\n    // Enter the translated string into the cache.\n    this.#charsCache.set(chars, glyphs);\n    return glyphs;\n  }\n\n  /**\n   * Chars can have different sizes (depends on the encoding).\n   * @param {String} a string encoded with font encoding.\n   * @returns {Array<Array<number>>} the positions of each char in the string.\n   */\n  getCharPositions(chars) {\n    // This function doesn't use a cache because\n    // it's called only when saving or printing.\n    const positions = [];\n\n    if (this.cMap) {\n      const c = Object.create(null);\n      let i = 0;\n      while (i < chars.length) {\n        this.cMap.readCharCode(chars, i, c);\n        const length = c.length;\n        positions.push([i, i + length]);\n        i += length;\n      }\n    } else {\n      for (let i = 0, ii = chars.length; i < ii; ++i) {\n        positions.push([i, i + 1]);\n      }\n    }\n\n    return positions;\n  }\n\n  get glyphCacheValues() {\n    return this.#glyphCache.values();\n  }\n\n  /**\n   * Encode a js string using font encoding.\n   * The resulting array contains an encoded string at even positions\n   * (can be empty) and a non-encoded one at odd positions.\n   * @param {String} a js string.\n   * @returns {Array<String>} an array of encoded strings or non-encoded ones.\n   */\n  encodeString(str) {\n    const buffers = [];\n    const currentBuf = [];\n\n    // buffers will contain: encoded, non-encoded, encoded, ...\n    // currentBuf is pushed in buffers each time there is a change.\n    // So when buffers.length is odd then the last string is an encoded one\n    // and currentBuf contains non-encoded chars.\n    const hasCurrentBufErrors = () => buffers.length % 2 === 1;\n\n    const getCharCode =\n      this.toUnicode instanceof IdentityToUnicodeMap\n        ? unicode => this.toUnicode.charCodeOf(unicode)\n        : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode));\n\n    for (let i = 0, ii = str.length; i < ii; i++) {\n      const unicode = str.codePointAt(i);\n      if (unicode > 0xffff) {\n        // unicode is represented by two uint16\n        i++;\n      }\n      if (this.toUnicode) {\n        const charCode = getCharCode(unicode);\n        if (charCode !== -1) {\n          if (hasCurrentBufErrors()) {\n            buffers.push(currentBuf.join(\"\"));\n            currentBuf.length = 0;\n          }\n          const charCodeLength = this.cMap\n            ? this.cMap.getCharCodeLength(charCode)\n            : 1;\n          for (let j = charCodeLength - 1; j >= 0; j--) {\n            currentBuf.push(String.fromCharCode((charCode >> (8 * j)) & 0xff));\n          }\n          continue;\n        }\n      }\n\n      // unicode can't be encoded\n      if (!hasCurrentBufErrors()) {\n        buffers.push(currentBuf.join(\"\"));\n        currentBuf.length = 0;\n      }\n      currentBuf.push(String.fromCodePoint(unicode));\n    }\n\n    buffers.push(currentBuf.join(\"\"));\n\n    return buffers;\n  }\n}\n\nclass ErrorFont {\n  constructor(error) {\n    this.error = error;\n    this.loadedName = \"g_font_error\";\n    this.missingFile = true;\n  }\n\n  charsToGlyphs() {\n    return [];\n  }\n\n  encodeString(chars) {\n    return [chars];\n  }\n\n  exportData() {\n    return { error: this.error };\n  }\n}\n\nexport { ErrorFont, Font };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Factors to rescale LiberationSans-Bold.ttf to have the same\n// metrics as calibrib.ttf.\nconst CalibriBoldFactors = [\n  1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566,\n  0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657,\n  0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133,\n  0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859,\n  0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356,\n  0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795,\n  0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577,\n  0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176,\n  0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401,\n  0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343,\n  0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331,\n  1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133,\n  1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787,\n  0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056,\n  0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908,\n  0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133,\n  0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506,\n  0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508,\n  0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762,\n  0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518,\n  0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785,\n  0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785,\n  0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762,\n  0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241,\n  0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518,\n  0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518,\n  0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785,\n  0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401,\n  0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1,\n  0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823,\n  0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785,\n  0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958,\n  0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864,\n  0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399,\n  0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785,\n  0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257,\n  0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908,\n  0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528,\n  1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161,\n  1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029,\n  0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257,\n  0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943,\n  0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819,\n  0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211,\n  0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813,\n  1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638,\n  0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926,\n  0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1,\n  0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1,\n  0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012,\n  0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372,\n  1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133,\n  1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527,\n  1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018,\n  0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747,\n  0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572,\n  0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1,\n  0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst CalibriBoldMetrics = { lineHeight: 1.2207, lineGap: 0.2207 };\n\n// Factors to rescale LiberationSans-BoldItalic.ttf to have the same\n// metrics as calibriz.ttf.\nconst CalibriBoldItalicFactors = [\n  1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566,\n  0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239,\n  0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133,\n  0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859,\n  0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356,\n  0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795,\n  0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577,\n  0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908,\n  0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401,\n  0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411,\n  0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548,\n  0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133,\n  0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839,\n  0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1,\n  1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133,\n  0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539,\n  0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958,\n  0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938,\n  0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795,\n  0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887,\n  0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401,\n  0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331,\n  0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411,\n  0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805,\n  0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289,\n  0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133,\n  0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921,\n  0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958,\n  0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958,\n  0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401,\n  1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331,\n  1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938,\n  0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958,\n  0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766,\n  0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399,\n  0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399,\n  0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492,\n  0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908,\n  0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528,\n  1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387,\n  0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346,\n  1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356,\n  0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938,\n  0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466,\n  0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733,\n  0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988,\n  0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581,\n  0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015,\n  1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794,\n  0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527,\n  1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012,\n  0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171,\n  1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021,\n  1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527,\n  1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284,\n  0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356,\n  0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572,\n  0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst CalibriBoldItalicMetrics = { lineHeight: 1.2207, lineGap: 0.2207 };\n\n// Factors to rescale LiberationSans-Italic.ttf to have the same\n// metrics as calibrii.ttf.\nconst CalibriItalicFactors = [\n  1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601,\n  0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133,\n  0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133,\n  0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071,\n  0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685,\n  0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374,\n  0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306,\n  0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245,\n  0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918,\n  1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562,\n  0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152,\n  0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552,\n  1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737,\n  0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642,\n  0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675,\n  0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685,\n  0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118,\n  0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844,\n  0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245,\n  0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601,\n  0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274,\n  0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245,\n  0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203,\n  0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875,\n  0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865,\n  0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105,\n  0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685,\n  0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896,\n  1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032,\n  0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249,\n  0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118,\n  0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789,\n  0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776,\n  0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245,\n  0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306,\n  0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004,\n  1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1,\n  0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695,\n  1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824,\n  0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206,\n  0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249,\n  0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782,\n  0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516,\n  0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297,\n  1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507,\n  0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248,\n  0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309,\n  0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552,\n  0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566,\n  1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176,\n  1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1,\n  1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055,\n  0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589,\n  0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747,\n  0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8,\n  0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1,\n  0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst CalibriItalicMetrics = { lineHeight: 1.2207, lineGap: 0.2207 };\n\n// Factors to rescale LiberationSans-Regular.ttf to have the same\n// metrics as calibri.ttf.\nconst CalibriRegularFactors = [\n  1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601,\n  0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133,\n  0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133,\n  0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071,\n  0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685,\n  0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503,\n  0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306,\n  0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128,\n  0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297,\n  1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469,\n  1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527,\n  0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133,\n  0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098,\n  0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1,\n  1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972,\n  0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834,\n  0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685,\n  0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284,\n  0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331,\n  0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464,\n  0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469,\n  0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469,\n  0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675,\n  0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457,\n  0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206,\n  0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105,\n  0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872,\n  0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685,\n  1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918,\n  0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429,\n  0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122,\n  0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692,\n  1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223,\n  0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469,\n  0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469,\n  0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004,\n  0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128,\n  0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622,\n  1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387,\n  0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254,\n  1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275,\n  0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122,\n  0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772,\n  0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018,\n  0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516,\n  0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442,\n  0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181,\n  1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986,\n  0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527,\n  1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566,\n  0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523,\n  1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1,\n  0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055,\n  0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589,\n  0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747,\n  0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8,\n  0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1,\n  0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1,\n  1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst CalibriRegularMetrics = { lineHeight: 1.2207, lineGap: 0.2207 };\n\nexport {\n  CalibriBoldFactors,\n  CalibriBoldItalicFactors,\n  CalibriBoldItalicMetrics,\n  CalibriBoldMetrics,\n  CalibriItalicFactors,\n  CalibriItalicMetrics,\n  CalibriRegularFactors,\n  CalibriRegularMetrics,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Factors to rescale LiberationSans-Bold.ttf to have the same\n// metrics as NimbusSans-Bold.otf.\nconst HelveticaBoldFactors = [\n  0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977,\n  1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999,\n  0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977,\n  1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001,\n  1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001,\n  1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998,\n  0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026,\n  1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026,\n  0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1,\n  0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973,\n  0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003,\n  1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006,\n  0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977,\n  0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001,\n  1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022,\n  1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977,\n  0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026,\n  1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026,\n  1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973,\n  1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973,\n  1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026,\n  0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006,\n  1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006,\n  0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828,\n  1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026,\n  0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026,\n  1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977,\n  0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001,\n  0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977,\n  1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977,\n  1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001,\n  1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1,\n  0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998,\n  0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998,\n  0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973,\n  1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026,\n  0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069,\n  1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001,\n  0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995,\n  1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087,\n  1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056,\n  1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006,\n  0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019,\n  0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942,\n  0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944,\n  1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999,\n  0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057,\n  1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994,\n  0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973,\n  1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999,\n  1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041,\n  1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973,\n  0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026,\n  0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005,\n  1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1,\n  0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973,\n  0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998,\n  1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1,\n  0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1,\n  0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027,\n  1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999,\n  0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625,\n  0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972,\n  0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1,\n  0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998,\n  0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst HelveticaBoldMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-BoldItalic.ttf to have the same\n// metrics as NimbusSans-BoldItalic.otf.\nconst HelveticaBoldItalicFactors = [\n  0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977,\n  1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999,\n  0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977,\n  1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001,\n  1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001,\n  1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998,\n  0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026,\n  1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026,\n  0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1,\n  0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973,\n  0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003,\n  1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006,\n  0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977,\n  0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001,\n  1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022,\n  1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977,\n  0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026,\n  1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026,\n  1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973,\n  1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973,\n  1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026,\n  0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006,\n  1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006,\n  0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011,\n  1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026,\n  0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026,\n  1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977,\n  0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001,\n  0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977,\n  1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977,\n  1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001,\n  1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1,\n  0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998,\n  0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998,\n  0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998,\n  1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977,\n  1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022,\n  1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1,\n  1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064,\n  0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014,\n  0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064,\n  1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948,\n  1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035,\n  1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967,\n  0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001,\n  0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977,\n  1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001,\n  0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999,\n  0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995,\n  1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026,\n  1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999,\n  0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973,\n  0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975,\n  1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044,\n  1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1,\n  0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973,\n  0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998,\n  1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991,\n  0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1,\n  0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027,\n  1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999,\n  0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625,\n  0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972,\n  0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1,\n  0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998,\n  0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst HelveticaBoldItalicMetrics = { lineHeight: 1.35, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-Italic.ttf to have the same\n// metrics as NimbusSans-Italic.otf.\nconst HelveticaItalicFactors = [\n  0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001,\n  1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987,\n  1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977,\n  1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022,\n  0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001,\n  1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973,\n  1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924,\n  0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1,\n  0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973,\n  0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968,\n  0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1,\n  0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002,\n  1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977,\n  1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977,\n  0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022,\n  0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973,\n  0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973,\n  0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001,\n  0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288,\n  0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973,\n  1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973,\n  1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006,\n  1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924,\n  0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998,\n  0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016,\n  0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1,\n  1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001,\n  1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1,\n  0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998,\n  0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998,\n  0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013,\n  0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977,\n  1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022,\n  1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1,\n  1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945,\n  0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962,\n  1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036,\n  0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036,\n  1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006,\n  1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001,\n  1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954,\n  0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001,\n  0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016,\n  0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089,\n  1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973,\n  0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1,\n  0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023,\n  1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1,\n  0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1,\n  0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016,\n  0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924,\n  0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267,\n  0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023,\n  0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002,\n  1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985,\n  1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031,\n  1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861,\n  0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999,\n  0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962,\n  1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst HelveticaItalicMetrics = { lineHeight: 1.35, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-Regular.ttf to have the same\n// metrics as NimbusSans-Regular.otf.\nconst HelveticaRegularFactors = [\n  0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001,\n  1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987,\n  1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977,\n  1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022,\n  0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001,\n  1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973,\n  1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924,\n  0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1,\n  0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973,\n  0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968,\n  0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1,\n  0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002,\n  1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977,\n  1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977,\n  0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022,\n  0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973,\n  0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973,\n  0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973,\n  0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001,\n  0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596,\n  0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973,\n  1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973,\n  1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006,\n  1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924,\n  0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998,\n  0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016,\n  0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1,\n  1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006,\n  0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973,\n  0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001,\n  1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1,\n  0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998,\n  0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998,\n  0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941,\n  0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977,\n  1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022,\n  0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1,\n  1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978,\n  0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1,\n  0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023,\n  0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023,\n  1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006,\n  1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962,\n  1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035,\n  1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977,\n  1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053,\n  1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043,\n  0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073,\n  1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1,\n  1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1,\n  1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006,\n  0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1,\n  1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977,\n  1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924,\n  0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999,\n  0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973,\n  0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002,\n  1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254,\n  1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031,\n  0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144,\n  1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026,\n  1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1,\n  0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst HelveticaRegularMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\nexport {\n  HelveticaBoldFactors,\n  HelveticaBoldItalicFactors,\n  HelveticaBoldItalicMetrics,\n  HelveticaBoldMetrics,\n  HelveticaItalicFactors,\n  HelveticaItalicMetrics,\n  HelveticaRegularFactors,\n  HelveticaRegularMetrics,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Widths of glyphs in LiberationSans-Bold.ttf.\nconst LiberationSansBoldWidths = [\n  365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278,\n  333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333,\n  584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556,\n  722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667,\n  611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611,\n  278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778,\n  556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333,\n  737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333,\n  333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722,\n  667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778,\n  584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556,\n  889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611,\n  611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556,\n  722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667,\n  556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611,\n  778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278,\n  278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611,\n  479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778,\n  611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556,\n  667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722,\n  611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611,\n  500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333,\n  333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906,\n  474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722,\n  667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278,\n  667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278,\n  558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753,\n  845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556,\n  1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626,\n  719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730,\n  703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556,\n  709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875,\n  556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417,\n  552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487,\n  447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552,\n  278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333,\n  333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600,\n  834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713,\n  584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604,\n  708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604,\n  604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750,\n  611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333,\n  333, 333, 333, 333, 333,\n];\n\n// Char code of glyphs in LiberationSans-Bold.ttf.\nconst LiberationSansBoldMapping = [\n  -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,\n  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n  104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\n  119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167,\n  168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,\n  184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,\n  199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,\n  214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,\n  229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,\n  244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,\n  259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,\n  274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,\n  289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,\n  304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,\n  319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,\n  334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,\n  349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,\n  364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,\n  379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538,\n  539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904,\n  905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921,\n  922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937,\n  938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,\n  953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967,\n  968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030,\n  1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,\n  1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,\n  1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,\n  1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,\n  1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,\n  1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,\n  1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139,\n  1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211,\n  8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226,\n  8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359,\n  8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593,\n  8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735,\n  8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474,\n  9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555,\n  9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568,\n  9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600,\n  9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650,\n  9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792,\n  9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n\n// Widths of glyphs in LiberationSans-BoldItalic.ttf.\nconst LiberationSansBoldItalicWidths = [\n  365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278,\n  333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333,\n  584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556,\n  722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667,\n  611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611,\n  278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778,\n  556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333,\n  737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333,\n  333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722,\n  667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778,\n  584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556,\n  889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611,\n  611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556,\n  722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667,\n  556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611,\n  778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278,\n  278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611,\n  479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778,\n  611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556,\n  667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722,\n  611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611,\n  500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333,\n  333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906,\n  473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722,\n  667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278,\n  667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278,\n  566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773,\n  834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556,\n  1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643,\n  719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729,\n  708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556,\n  736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885,\n  556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469,\n  563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575,\n  467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552,\n  278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333,\n  333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600,\n  834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713,\n  584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604,\n  708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604,\n  604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750,\n  611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333,\n  333, 333, 333, 333, 333,\n];\n\n// Char code of glyphs in LiberationSans-BoldItalic.ttf.\nconst LiberationSansBoldItalicMapping = [\n  -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,\n  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n  104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\n  119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167,\n  168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,\n  184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,\n  199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,\n  214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,\n  229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,\n  244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,\n  259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,\n  274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,\n  289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,\n  304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,\n  319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,\n  334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,\n  349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,\n  364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,\n  379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538,\n  539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904,\n  905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921,\n  922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937,\n  938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,\n  953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967,\n  968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030,\n  1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,\n  1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,\n  1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,\n  1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,\n  1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,\n  1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,\n  1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139,\n  1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211,\n  8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226,\n  8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359,\n  8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593,\n  8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735,\n  8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474,\n  9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555,\n  9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568,\n  9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600,\n  9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650,\n  9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792,\n  9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n\n// Widths of glyphs in LiberationSans-Italic.ttf.\nconst LiberationSansItalicWidths = [\n  365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278,\n  333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278,\n  584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500,\n  667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667,\n  611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556,\n  222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722,\n  500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333,\n  737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333,\n  333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722,\n  667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778,\n  584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556,\n  889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556,\n  556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556,\n  667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667,\n  556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556,\n  778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278,\n  278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556,\n  400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778,\n  556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500,\n  667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722,\n  556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611,\n  500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278,\n  333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846,\n  389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667,\n  667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278,\n  667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222,\n  500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728,\n  779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500,\n  1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614,\n  715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727,\n  673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556,\n  688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835,\n  500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378,\n  496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492,\n  339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552,\n  222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333,\n  333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600,\n  834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713,\n  584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604,\n  708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604,\n  604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750,\n  500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324,\n  324, 316, 328, 398, 285,\n];\n\n// Char code of glyphs in LiberationSans-Italic.ttf.\nconst LiberationSansItalicMapping = [\n  -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,\n  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n  104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\n  119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167,\n  168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,\n  184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,\n  199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,\n  214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,\n  229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,\n  244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,\n  259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,\n  274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,\n  289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,\n  304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,\n  319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,\n  334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,\n  349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,\n  364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,\n  379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538,\n  539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904,\n  905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921,\n  922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937,\n  938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,\n  953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967,\n  968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030,\n  1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,\n  1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,\n  1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,\n  1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,\n  1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,\n  1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,\n  1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139,\n  1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211,\n  8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226,\n  8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359,\n  8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593,\n  8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735,\n  8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474,\n  9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555,\n  9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568,\n  9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600,\n  9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650,\n  9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792,\n  9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n\n// Widths of glyphs in LiberationSans-Regular.ttf.\nconst LiberationSansRegularWidths = [\n  365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278,\n  333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278,\n  584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500,\n  667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667,\n  611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556,\n  222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722,\n  500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333,\n  737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333,\n  333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722,\n  667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778,\n  584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556,\n  889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556,\n  556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556,\n  667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667,\n  556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556,\n  778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278,\n  278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556,\n  334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778,\n  556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500,\n  667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722,\n  556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611,\n  500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278,\n  333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838,\n  384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667,\n  668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278,\n  667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222,\n  500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713,\n  781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500,\n  1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604,\n  719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740,\n  667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556,\n  669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823,\n  500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365,\n  510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489,\n  411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552,\n  222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333,\n  333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600,\n  834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713,\n  584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604,\n  708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708,\n  708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604,\n  604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750,\n  500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324,\n  324, 316, 328, 398, 285,\n];\n\n// Char code of glyphs in LiberationSans-Regular.ttf.\nconst LiberationSansRegularMapping = [\n  -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n  67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,\n  86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n  104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\n  119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167,\n  168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,\n  184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,\n  199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,\n  214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,\n  229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,\n  244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,\n  259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,\n  274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,\n  289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,\n  304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,\n  319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,\n  334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,\n  349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,\n  364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,\n  379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538,\n  539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904,\n  905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921,\n  922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937,\n  938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,\n  953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967,\n  968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030,\n  1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,\n  1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,\n  1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,\n  1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,\n  1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,\n  1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,\n  1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139,\n  1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211,\n  8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226,\n  8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359,\n  8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593,\n  8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735,\n  8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474,\n  9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555,\n  9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568,\n  9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600,\n  9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650,\n  9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792,\n  9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1,\n  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n];\n\nexport {\n  LiberationSansBoldItalicMapping,\n  LiberationSansBoldItalicWidths,\n  LiberationSansBoldMapping,\n  LiberationSansBoldWidths,\n  LiberationSansItalicMapping,\n  LiberationSansItalicWidths,\n  LiberationSansRegularMapping,\n  LiberationSansRegularWidths,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Factors to rescale LiberationSans-Bold.ttf to have the same\n// metrics as MyriadPro-Bold.otf.\nconst MyriadProBoldFactors = [\n  1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884,\n  0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582,\n  1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793,\n  0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058,\n  0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275,\n  0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179,\n  0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083,\n  0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903,\n  0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933,\n  0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407,\n  0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938,\n  0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793,\n  0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295,\n  0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1,\n  1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838,\n  0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061,\n  0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179,\n  0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438,\n  0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938,\n  0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938,\n  0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446,\n  0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039,\n  0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938,\n  0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093,\n  0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938,\n  0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768,\n  0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258,\n  0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621,\n  0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1,\n  0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1,\n  0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446,\n  0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646,\n  0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713,\n  0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438,\n  0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083,\n  0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446,\n  0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1,\n  0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088,\n  0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261,\n  0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019,\n  0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156,\n  0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704,\n  0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933,\n  1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933,\n  1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367,\n  0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774,\n  1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083,\n  0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582,\n  0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1,\n  0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1,\n  1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169,\n  1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst MyriadProBoldMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-BoldItalic.ttf to have the same\n// metrics as MyriadPro-BoldIt.otf.\nconst MyriadProBoldItalicFactors = [\n  1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222,\n  0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582,\n  1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276,\n  0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058,\n  0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655,\n  0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222,\n  0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605,\n  0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058,\n  0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796,\n  0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168,\n  0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236,\n  0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276,\n  0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074,\n  0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1,\n  0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043,\n  0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729,\n  0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621,\n  0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058,\n  0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951,\n  0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216,\n  0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381,\n  0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595,\n  0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364,\n  0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216,\n  0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783,\n  0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083,\n  0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523,\n  0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621,\n  0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036,\n  0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726,\n  0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222,\n  0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513,\n  0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077,\n  0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651,\n  0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677,\n  0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236,\n  0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1,\n  0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275,\n  1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616,\n  1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927,\n  0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805,\n  0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655,\n  0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275,\n  0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886,\n  0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276,\n  0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699,\n  0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646,\n  0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694,\n  1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896,\n  0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1,\n  1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026,\n  1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst MyriadProBoldItalicMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-Italic.ttf to have the same\n// metrics as MyriadPro-It.otf.\nconst MyriadProItalicFactors = [\n  1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307,\n  0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945,\n  1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465,\n  0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058,\n  0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125,\n  0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588,\n  0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832,\n  0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012,\n  0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075,\n  1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493,\n  0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537,\n  0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537,\n  0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353,\n  0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446,\n  0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158,\n  0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864,\n  0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588,\n  0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512,\n  0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859,\n  0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424,\n  0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859,\n  1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882,\n  0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852,\n  0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399,\n  0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453,\n  0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1,\n  0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424,\n  0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728,\n  1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475,\n  0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865,\n  0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867,\n  0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866,\n  0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658,\n  0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578,\n  0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512,\n  0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773,\n  0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012,\n  1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901,\n  0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947,\n  1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588,\n  0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701,\n  0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386,\n  0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298,\n  0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787,\n  0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737,\n  0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859,\n  0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219,\n  1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027,\n  0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1,\n  1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233,\n  1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst MyriadProItalicMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\n// Factors to rescale LiberationSans-Regular.ttf to have the same\n// metrics as MyriadPro-Regular.otf.\nconst MyriadProRegularFactors = [\n  1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706,\n  0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456,\n  0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241,\n  0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002,\n  0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051,\n  0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761,\n  0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111,\n  0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231,\n  0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938,\n  1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137,\n  0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034,\n  1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332,\n  0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519,\n  1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339,\n  0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755,\n  0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023,\n  0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858,\n  0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611,\n  0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896,\n  0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224,\n  0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595,\n  0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755,\n  0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896,\n  0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764,\n  0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764,\n  0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284,\n  0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023,\n  0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377,\n  1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441,\n  0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991,\n  0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434,\n  0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1,\n  1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074,\n  0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074,\n  0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856,\n  0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936,\n  0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088,\n  0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138,\n  0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226,\n  0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023,\n  0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297,\n  0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157,\n  0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088,\n  0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938,\n  0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007,\n  0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915,\n  0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1,\n  1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903,\n  0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241,\n  1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1,\n  0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1,\n  1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1,\n];\nconst MyriadProRegularMetrics = { lineHeight: 1.2, lineGap: 0.2 };\n\nexport {\n  MyriadProBoldFactors,\n  MyriadProBoldItalicFactors,\n  MyriadProBoldItalicMetrics,\n  MyriadProBoldMetrics,\n  MyriadProItalicFactors,\n  MyriadProItalicMetrics,\n  MyriadProRegularFactors,\n  MyriadProRegularMetrics,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Factors to rescale LiberationSans-Bold.ttf to have the same\n// metrics as segoeuib.ttf.\nconst SegoeuiBoldFactors = [\n  1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647,\n  1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578,\n  1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424,\n  1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847,\n  0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406,\n  0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489,\n  0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361,\n  1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304,\n  1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527,\n  1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862,\n  0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579,\n  0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727,\n  1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826,\n  1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866,\n  1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363,\n  0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795,\n  0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426,\n  0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135,\n  1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752,\n  0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278,\n  1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826,\n  1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752,\n  0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641,\n  0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517,\n  0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278,\n  0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1,\n  1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406,\n  1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285,\n  1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418,\n  0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251,\n  0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931,\n  0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104,\n  0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862,\n  1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041,\n  1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752,\n  0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733,\n  1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923,\n  1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912,\n  1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167,\n  1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134,\n  0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889,\n  1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996,\n  0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008,\n  1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008,\n  1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434,\n  0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439,\n  1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511,\n  1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1,\n  1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633,\n  0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372,\n  0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1,\n  0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279,\n  0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416,\n  1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025,\n  1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886,\n  1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst SegoeuiBoldMetrics = { lineHeight: 1.33008, lineGap: 0 };\n\n// Factors to rescale LiberationSans-BoldItalic.ttf to have the same\n// metrics as segoeuiz.ttf.\nconst SegoeuiBoldItalicFactors = [\n  1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953,\n  1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754,\n  1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378,\n  0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723,\n  0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128,\n  0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527,\n  0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293,\n  1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042,\n  0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236,\n  1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922,\n  0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107,\n  1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754,\n  1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047,\n  1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356,\n  1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363,\n  0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429,\n  1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552,\n  0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135,\n  0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585,\n  1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236,\n  1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165,\n  0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922,\n  0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363,\n  1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897,\n  0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503,\n  0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042,\n  0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922,\n  1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406,\n  1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236,\n  1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922,\n  1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552,\n  0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641,\n  1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527,\n  0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135,\n  0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135,\n  0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168,\n  0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385,\n  0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818,\n  1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126,\n  1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205,\n  1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815,\n  0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552,\n  1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945,\n  0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961,\n  0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518,\n  0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377,\n  1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514,\n  0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777,\n  1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1,\n  0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633,\n  0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372,\n  0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1,\n  0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279,\n  0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416,\n  1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025,\n  1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886,\n  1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst SegoeuiBoldItalicMetrics = { lineHeight: 1.33008, lineGap: 0 };\n\n// Factors to rescale LiberationSans-Italic.ttf to have the same\n// metrics as segoeuii.ttf.\nconst SegoeuiItalicFactors = [\n  1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373,\n  1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383,\n  1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927,\n  0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308,\n  0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016,\n  0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989,\n  0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143,\n  0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627,\n  1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454,\n  1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225,\n  0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973,\n  0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748,\n  0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781,\n  0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971,\n  1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836,\n  1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729,\n  0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782,\n  0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924,\n  0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402,\n  0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454,\n  0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146,\n  0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225,\n  0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351,\n  0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729,\n  0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506,\n  0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533,\n  0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454,\n  0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176,\n  0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484,\n  0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231,\n  1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989,\n  1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225,\n  0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1,\n  0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004,\n  0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351,\n  0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351,\n  0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043,\n  0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498,\n  0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839,\n  1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965,\n  0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2,\n  0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924,\n  0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642,\n  0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284,\n  0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205,\n  1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119,\n  1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679,\n  1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675,\n  1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973,\n  0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945,\n  0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621,\n  0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1,\n  1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836,\n  1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1,\n  1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622,\n  1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862,\n  0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603,\n  1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1,\n  1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst SegoeuiItalicMetrics = { lineHeight: 1.33008, lineGap: 0 };\n\n// Factors to rescale LiberationSans-Regular.ttf to have the same\n// metrics as segoeui.ttf.\nconst SegoeuiRegularFactors = [\n  1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985,\n  1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246,\n  0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927,\n  0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084,\n  0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831,\n  0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968,\n  0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433,\n  0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484,\n  1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011,\n  1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399,\n  0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043,\n  0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912,\n  0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808,\n  0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032,\n  0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381,\n  0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734,\n  0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782,\n  0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714,\n  0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049,\n  0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383,\n  0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527,\n  1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923,\n  1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706,\n  0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734,\n  0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093,\n  1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403,\n  0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1,\n  0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782,\n  0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011,\n  1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298,\n  0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444,\n  1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066,\n  0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649,\n  0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771,\n  1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132,\n  1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287,\n  0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571,\n  0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771,\n  1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572,\n  1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366,\n  0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491,\n  0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796,\n  1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287,\n  0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424,\n  1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424,\n  1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087,\n  1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205,\n  1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  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,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965,\n  1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088,\n  0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196,\n  1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483,\n  0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518,\n  0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279,\n  0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714,\n  1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238,\n  1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025,\n  0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1,\n  1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1,\n  1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n];\nconst SegoeuiRegularMetrics = { lineHeight: 1.33008, lineGap: 0 };\n\nexport {\n  SegoeuiBoldFactors,\n  SegoeuiBoldItalicFactors,\n  SegoeuiBoldItalicMetrics,\n  SegoeuiBoldMetrics,\n  SegoeuiItalicFactors,\n  SegoeuiItalicMetrics,\n  SegoeuiRegularFactors,\n  SegoeuiRegularMetrics,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  CalibriBoldFactors,\n  CalibriBoldItalicFactors,\n  CalibriBoldItalicMetrics,\n  CalibriBoldMetrics,\n  CalibriItalicFactors,\n  CalibriItalicMetrics,\n  CalibriRegularFactors,\n  CalibriRegularMetrics,\n} from \"./calibri_factors.js\";\nimport { Dict, Name } from \"./primitives.js\";\nimport {\n  HelveticaBoldFactors,\n  HelveticaBoldItalicFactors,\n  HelveticaBoldItalicMetrics,\n  HelveticaBoldMetrics,\n  HelveticaItalicFactors,\n  HelveticaItalicMetrics,\n  HelveticaRegularFactors,\n  HelveticaRegularMetrics,\n} from \"./helvetica_factors.js\";\nimport {\n  LiberationSansBoldItalicMapping,\n  LiberationSansBoldItalicWidths,\n  LiberationSansBoldMapping,\n  LiberationSansBoldWidths,\n  LiberationSansItalicMapping,\n  LiberationSansItalicWidths,\n  LiberationSansRegularMapping,\n  LiberationSansRegularWidths,\n} from \"./liberationsans_widths.js\";\nimport {\n  MyriadProBoldFactors,\n  MyriadProBoldItalicFactors,\n  MyriadProBoldItalicMetrics,\n  MyriadProBoldMetrics,\n  MyriadProItalicFactors,\n  MyriadProItalicMetrics,\n  MyriadProRegularFactors,\n  MyriadProRegularMetrics,\n} from \"./myriadpro_factors.js\";\nimport {\n  SegoeuiBoldFactors,\n  SegoeuiBoldItalicFactors,\n  SegoeuiBoldItalicMetrics,\n  SegoeuiBoldMetrics,\n  SegoeuiItalicFactors,\n  SegoeuiItalicMetrics,\n  SegoeuiRegularFactors,\n  SegoeuiRegularMetrics,\n} from \"./segoeui_factors.js\";\nimport { getLookupTableFactory } from \"./core_utils.js\";\nimport { normalizeFontName } from \"./fonts_utils.js\";\n\nconst getXFAFontMap = getLookupTableFactory(function (t) {\n  t[\"MyriadPro-Regular\"] = t[\"PdfJS-Fallback-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: MyriadProRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: MyriadProRegularMetrics,\n  };\n  t[\"MyriadPro-Bold\"] = t[\"PdfJS-Fallback-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: MyriadProBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: MyriadProBoldMetrics,\n  };\n  t[\"MyriadPro-It\"] =\n    t[\"MyriadPro-Italic\"] =\n    t[\"PdfJS-Fallback-Italic\"] =\n      {\n        name: \"LiberationSans-Italic\",\n        factors: MyriadProItalicFactors,\n        baseWidths: LiberationSansItalicWidths,\n        baseMapping: LiberationSansItalicMapping,\n        metrics: MyriadProItalicMetrics,\n      };\n  t[\"MyriadPro-BoldIt\"] =\n    t[\"MyriadPro-BoldItalic\"] =\n    t[\"PdfJS-Fallback-BoldItalic\"] =\n      {\n        name: \"LiberationSans-BoldItalic\",\n        factors: MyriadProBoldItalicFactors,\n        baseWidths: LiberationSansBoldItalicWidths,\n        baseMapping: LiberationSansBoldItalicMapping,\n        metrics: MyriadProBoldItalicMetrics,\n      };\n  t.ArialMT =\n    t.Arial =\n    t[\"Arial-Regular\"] =\n      {\n        name: \"LiberationSans-Regular\",\n        baseWidths: LiberationSansRegularWidths,\n        baseMapping: LiberationSansRegularMapping,\n      };\n  t[\"Arial-BoldMT\"] = t[\"Arial-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n  };\n  t[\"Arial-ItalicMT\"] = t[\"Arial-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n  };\n  t[\"Arial-BoldItalicMT\"] = t[\"Arial-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n  };\n  t[\"Calibri-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: CalibriRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: CalibriRegularMetrics,\n  };\n  t[\"Calibri-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: CalibriBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: CalibriBoldMetrics,\n  };\n  t[\"Calibri-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: CalibriItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: CalibriItalicMetrics,\n  };\n  t[\"Calibri-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: CalibriBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: CalibriBoldItalicMetrics,\n  };\n  t[\"Segoeui-Regular\"] = {\n    name: \"LiberationSans-Regular\",\n    factors: SegoeuiRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: SegoeuiRegularMetrics,\n  };\n  t[\"Segoeui-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: SegoeuiBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: SegoeuiBoldMetrics,\n  };\n  t[\"Segoeui-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: SegoeuiItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: SegoeuiItalicMetrics,\n  };\n  t[\"Segoeui-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: SegoeuiBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: SegoeuiBoldItalicMetrics,\n  };\n  t[\"Helvetica-Regular\"] = t.Helvetica = {\n    name: \"LiberationSans-Regular\",\n    factors: HelveticaRegularFactors,\n    baseWidths: LiberationSansRegularWidths,\n    baseMapping: LiberationSansRegularMapping,\n    metrics: HelveticaRegularMetrics,\n  };\n  t[\"Helvetica-Bold\"] = {\n    name: \"LiberationSans-Bold\",\n    factors: HelveticaBoldFactors,\n    baseWidths: LiberationSansBoldWidths,\n    baseMapping: LiberationSansBoldMapping,\n    metrics: HelveticaBoldMetrics,\n  };\n  t[\"Helvetica-Italic\"] = {\n    name: \"LiberationSans-Italic\",\n    factors: HelveticaItalicFactors,\n    baseWidths: LiberationSansItalicWidths,\n    baseMapping: LiberationSansItalicMapping,\n    metrics: HelveticaItalicMetrics,\n  };\n  t[\"Helvetica-BoldItalic\"] = {\n    name: \"LiberationSans-BoldItalic\",\n    factors: HelveticaBoldItalicFactors,\n    baseWidths: LiberationSansBoldItalicWidths,\n    baseMapping: LiberationSansBoldItalicMapping,\n    metrics: HelveticaBoldItalicMetrics,\n  };\n});\n\nfunction getXfaFontName(name) {\n  const fontName = normalizeFontName(name);\n  const fontMap = getXFAFontMap();\n  return fontMap[fontName];\n}\n\nfunction getXfaFontWidths(name) {\n  const info = getXfaFontName(name);\n  if (!info) {\n    return null;\n  }\n\n  const { baseWidths, baseMapping, factors } = info;\n  const rescaledBaseWidths = !factors\n    ? baseWidths\n    : baseWidths.map((w, i) => w * factors[i]);\n\n  let currentCode = -2;\n  let currentArray;\n\n  // Widths array for composite font is:\n  // CharCode1 [10, 20, 30] ...\n  // which means:\n  //   - CharCode1 has a width equal to 10\n  //   - CharCode1+1 has a width equal to 20\n  //   - CharCode1+2 has a width equal to 30\n  //\n  // The baseMapping array contains a map for glyph index to unicode.\n  // So from baseMapping we'll get sorted unicodes and their positions\n  // (i.e. glyph indices) and then we put widths in an array for the\n  // the consecutive unicodes.\n  const newWidths = [];\n  for (const [unicode, glyphIndex] of baseMapping\n    .map(\n      (charUnicode, index) => [\n        charUnicode,\n        index,\n      ] /* collect unicode and glyph index */\n    )\n    .sort(\n      ([unicode1], [unicode2]) =>\n        unicode1 - unicode2 /* order by unicode only */\n    )) {\n    if (unicode === -1) {\n      continue;\n    }\n\n    if (unicode === currentCode + 1) {\n      currentArray.push(rescaledBaseWidths[glyphIndex]);\n      currentCode += 1;\n    } else {\n      currentCode = unicode;\n      currentArray = [rescaledBaseWidths[glyphIndex]];\n      newWidths.push(unicode, currentArray);\n    }\n  }\n\n  return newWidths;\n}\n\nfunction getXfaFontDict(name) {\n  const widths = getXfaFontWidths(name);\n  const dict = new Dict(null);\n  dict.set(\"BaseFont\", Name.get(name));\n  dict.set(\"Type\", Name.get(\"Font\"));\n  dict.set(\"Subtype\", Name.get(\"CIDFontType2\"));\n  dict.set(\"Encoding\", Name.get(\"Identity-H\"));\n  dict.set(\"CIDToGIDMap\", Name.get(\"Identity\"));\n  dict.set(\"W\", widths);\n  dict.set(\"FirstChar\", widths[0]);\n  dict.set(\"LastChar\", widths.at(-2) + widths.at(-1).length - 1);\n  const descriptor = new Dict(null);\n  dict.set(\"FontDescriptor\", descriptor);\n  const systemInfo = new Dict(null);\n  systemInfo.set(\"Ordering\", \"Identity\");\n  systemInfo.set(\"Registry\", \"Adobe\");\n  systemInfo.set(\"Supplement\", 0);\n  dict.set(\"CIDSystemInfo\", systemInfo);\n\n  return dict;\n}\n\nexport { getXfaFontDict, getXfaFontName };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst TOKEN = {\n  // Structural tokens — not keyword operators\n  number: 0,\n  lbrace: 1,\n  rbrace: 2,\n\n  // Boolean literals\n  true: 3,\n  false: 4,\n\n  // Arithmetic binary operators\n  add: 5,\n  sub: 6,\n  mul: 7,\n  div: 8,\n  idiv: 9,\n  mod: 10,\n  exp: 11,\n\n  // Comparison binary operators\n  eq: 12,\n  ne: 13,\n  gt: 14,\n  ge: 15,\n  lt: 16,\n  le: 17,\n\n  // Bitwise / boolean binary operators\n  and: 18,\n  or: 19,\n  xor: 20,\n  bitshift: 21,\n\n  // Unary arithmetic operators\n  abs: 22,\n  neg: 23,\n  ceiling: 24,\n  floor: 25,\n  round: 26,\n  truncate: 27,\n\n  // Unary boolean / bitwise operator\n  not: 28,\n\n  // Mathematical functions — unary\n  sqrt: 29,\n  sin: 30,\n  cos: 31,\n  ln: 32,\n  log: 33,\n\n  // Mathematical function — binary\n  atan: 34,\n\n  // Type conversion operators\n  cvi: 35,\n  cvr: 36,\n\n  // Stack operators\n  dup: 37,\n  exch: 38,\n  pop: 39,\n  copy: 40,\n  index: 41,\n  roll: 42,\n\n  // Control flow\n  if: 43,\n  ifelse: 44,\n\n  // End of input\n  eof: 45,\n\n  // Synthetic: produced by the optimizer, never emitted by the lexer.\n  min: 46,\n  max: 47,\n};\n\nclass Token {\n  constructor(id, value = null) {\n    this.id = id;\n    this.value = value;\n  }\n}\n\nclass Lexer {\n  // Singletons for every non-number token, built lazily on first construction.\n  // Keyword operator tokens carry their name as `value`; structural tokens\n  // (lbrace, rbrace, eof) carry null.\n  static #singletons = null;\n\n  static #operatorSingletons = null;\n\n  static #initSingletons() {\n    const singletons = Object.create(null);\n    const operatorSingletons = Object.create(null);\n    for (const [name, id] of Object.entries(TOKEN)) {\n      if (name === \"number\") {\n        continue;\n      }\n      const isOperator = id >= TOKEN.true && id <= TOKEN.ifelse;\n      const token = new Token(id, isOperator ? name : null);\n      singletons[name] = token;\n      if (isOperator) {\n        operatorSingletons[name] = token;\n      }\n    }\n    this.#singletons = singletons;\n    this.#operatorSingletons = operatorSingletons;\n  }\n\n  constructor(data) {\n    if (!Lexer.#singletons) {\n      Lexer.#initSingletons();\n    }\n    this.data = data;\n    this.pos = 0;\n    this.len = data.length;\n    // Sticky regexes: set lastIndex before exec() to match at an exact offset.\n    this._numberPattern = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/iy;\n    this._identifierPattern = /[a-z]+/y;\n  }\n\n  // Skip a % comment, advancing past the next \\n or \\r (or to EOF).\n  _skipComment() {\n    const lf = this.data.indexOf(\"\\n\", this.pos);\n    const cr = this.data.indexOf(\"\\r\", this.pos);\n    // Treat a missing EOL as this.len so Math.min picks the one that exists.\n    const eol = Math.min(lf < 0 ? this.len : lf, cr < 0 ? this.len : cr);\n    this.pos = Math.min(eol + 1, this.len);\n  }\n\n  _getNumber() {\n    this._numberPattern.lastIndex = this.pos;\n    const match = this._numberPattern.exec(this.data);\n    if (!match) {\n      return new Token(TOKEN.number, 0);\n    }\n    const number = parseFloat(match[0]);\n    if (!Number.isFinite(number)) {\n      return new Token(TOKEN.number, 0);\n    }\n    this.pos = this._numberPattern.lastIndex;\n    return new Token(TOKEN.number, number);\n  }\n\n  _getOperator() {\n    this._identifierPattern.lastIndex = this.pos;\n    const match = this._identifierPattern.exec(this.data);\n    if (!match) {\n      return new Token(TOKEN.number, 0);\n    }\n    this.pos = this._identifierPattern.lastIndex;\n    const op = match[0];\n    const token = Lexer.#operatorSingletons[op];\n    if (!token) {\n      return new Token(TOKEN.number, 0);\n    }\n    return token;\n  }\n\n  // Return the next token, or Lexer.#singletons.eof at end of input.\n  next() {\n    while (this.pos < this.len) {\n      const ch = this.data.charCodeAt(this.pos++);\n      switch (ch) {\n        // PostScript white-space characters (PDF32000 §7.2.2)\n        case 0x00 /* NUL */:\n        case 0x09 /* HT */:\n        case 0x0a /* LF */:\n        case 0x0c /* FF */:\n        case 0x0d /* CR */:\n        case 0x20 /* SP */:\n          break;\n\n        case 0x25 /* % — comment */:\n          this._skipComment();\n          break;\n\n        case 0x7b /* { */:\n          return Lexer.#singletons.lbrace;\n        case 0x7d /* } */:\n          return Lexer.#singletons.rbrace;\n\n        case 0x2b /* + */:\n        case 0x2d /* - */:\n          this.pos--;\n          return this._getNumber();\n\n        case 0x2e /* . */:\n          this.pos--;\n          return this._getNumber();\n\n        default:\n          if (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) {\n            this.pos--;\n            return this._getNumber();\n          }\n          if (ch >= 0x61 /* a */ && ch <= 0x7a /* z */) {\n            this.pos--;\n            return this._getOperator();\n          }\n          return new Token(TOKEN.number, 0);\n      }\n    }\n    return Lexer.#singletons.eof;\n  }\n}\n\nexport { Lexer, Token, TOKEN };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormatError, warn } from \"../../shared/util.js\";\nimport { Lexer, TOKEN } from \"./lexer.js\";\n\n// Value types for tree nodes — used to select the correct code-generation\n// path for type-sensitive operators (currently `not`).\nconst PS_VALUE_TYPE = {\n  numeric: 0, // known to be a number (f64 in Wasm)\n  boolean: 1, // known to be a boolean (0.0 = false, 1.0 = true in f64)\n  unknown: 2, // indeterminate at compile time\n};\n\n// AST node type constants\n\nconst PS_NODE = {\n  // Parser AST node types (produced by Parser / parsePostScriptFunction)\n  program: 0,\n  block: 1,\n  number: 2,\n  operator: 3,\n  if: 4,\n  ifelse: 5,\n  // Tree AST node types (produced by PSStackToTree)\n  arg: 6,\n  const: 7,\n  unary: 8,\n  binary: 9,\n  ternary: 10,\n};\n\n// AST node classes\n\nclass PsNode {\n  constructor(type) {\n    this.type = type;\n  }\n}\n\n/**\n * The root node.  Wraps the outermost `{ … }` of a Type 4 function body.\n */\nclass PsProgram extends PsNode {\n  constructor(body) {\n    super(PS_NODE.program);\n    /** @type {PsBlock} */\n    this.body = body;\n  }\n}\n\nclass PsBlock extends PsNode {\n  constructor(instructions) {\n    super(PS_NODE.block);\n    /** @type {Array<PsNumber|PsOperator|PsIf|PsIfElse>} */\n    this.instructions = instructions;\n  }\n}\n\nclass PsNumber extends PsNode {\n  /** @param {number} value */\n  constructor(value) {\n    super(PS_NODE.number);\n    this.value = value;\n  }\n}\n\n/** A regular PS operator (not `if` / `ifelse`). */\nclass PsOperator extends PsNode {\n  /** @param {number} op — one of the TOKEN.* constants from lexer.js */\n  constructor(op) {\n    super(PS_NODE.operator);\n    this.op = op;\n  }\n}\n\n/**\n * `<cond> { thenBlock } if`\n *\n * The condition value is consumed from the operand stack at runtime.\n */\nclass PsIf extends PsNode {\n  /** @param {PsBlock} then */\n  constructor(then) {\n    super(PS_NODE.if);\n    this.then = then;\n  }\n}\n\n/**\n * `<cond> { thenBlock } { elseBlock } ifelse`\n *\n * The condition value is consumed from the operand stack at runtime.\n */\nclass PsIfElse extends PsNode {\n  /**\n   * @param {PsBlock} then\n   * @param {PsBlock} otherwise\n   */\n  constructor(then, otherwise) {\n    super(PS_NODE.ifelse);\n    this.then = then;\n    this.otherwise = otherwise;\n  }\n}\n\n// Tree AST node classes  (produced by PSStackToTree)\n\n/**\n * A function input argument.  `index` is the zero-based position in the\n * domain — in0 has index 0, in1 has index 1, etc.\n */\nclass PsArgNode extends PsNode {\n  /** @param {number} index */\n  constructor(index) {\n    super(PS_NODE.arg);\n    this.index = index;\n    this.valueType = PS_VALUE_TYPE.numeric;\n  }\n}\n\n/**\n * A folded constant — a numeric or boolean literal that is known at\n * compile time.\n */\nclass PsConstNode extends PsNode {\n  /** @param {number|boolean} value */\n  constructor(value) {\n    super(PS_NODE.const);\n    this.value = value;\n    this.valueType =\n      typeof value === \"boolean\"\n        ? PS_VALUE_TYPE.boolean\n        : PS_VALUE_TYPE.numeric;\n  }\n}\n\n/**\n * A unary operation.\n */\nclass PsUnaryNode extends PsNode {\n  /**\n   * @param {number} op — TOKEN.* constant\n   * @param {PsNode} operand\n   * @param {number} [valueType]\n   */\n  constructor(op, operand, valueType = PS_VALUE_TYPE.unknown) {\n    super(PS_NODE.unary);\n    this.op = op;\n    this.operand = operand;\n    this.valueType = valueType;\n  }\n}\n\n/**\n * A binary operation.\n *\n * `first` was the top-of-stack operand (popped first);\n * `second` was the operand just below it (popped second).\n *\n * For non-commutative operators the mathematical meaning is\n *   second OP first\n * e.g. `a b sub` → second = a, first = b → a − b.\n */\nclass PsBinaryNode extends PsNode {\n  /**\n   * @param {number} op — TOKEN.* constant\n   * @param {PsNode} first — was on top of stack\n   * @param {PsNode} second — was below top\n   * @param {number} [valueType]\n   */\n  constructor(op, first, second, valueType = PS_VALUE_TYPE.unknown) {\n    super(PS_NODE.binary);\n    this.op = op;\n    this.first = first;\n    this.second = second;\n    this.valueType = valueType;\n  }\n}\n\n/**\n * A conditional expression: `cond ? then : otherwise`.\n *\n * Represents both PostScript `if` (where `otherwise` is the pre-existing\n * stack value that would remain unchanged when the condition is false) and\n * `ifelse` constructs, after the stack-to-tree conversion.\n */\nclass PsTernaryNode extends PsNode {\n  /**\n   * @param {PsNode} cond\n   * @param {PsNode} then\n   * @param {PsNode} otherwise\n   * @param {number} [valueType]\n   */\n  constructor(cond, then, otherwise, valueType = PS_VALUE_TYPE.unknown) {\n    super(PS_NODE.ternary);\n    this.cond = cond;\n    this.then = then;\n    this.otherwise = otherwise;\n    this.valueType = valueType;\n  }\n}\n\nclass Parser {\n  constructor(lexer) {\n    this.lexer = lexer;\n    this._token = null;\n  }\n\n  static _isRegularOperator(id) {\n    return id >= TOKEN.true && id < TOKEN.if;\n  }\n\n  // Fetch the next token from the lexer.\n  _advance() {\n    this._token = this.lexer.next();\n  }\n\n  // Assert that the current token has the given id, consume it, and return it.\n  _expect(id) {\n    if (this._token.id !== id) {\n      throw new FormatError(\n        `PostScript function: expected token id ${id}, got ${this._token.id}.`\n      );\n    }\n    const tok = this._token;\n    this._advance();\n    return tok;\n  }\n\n  /**\n   * Parse the full Type 4 function body.\n   *\n   * Grammar (simplified):\n   *   program   ::= '{' block '}'\n   *   block     ::= instruction*\n   *   instruction ::= number\n   *                 | operator          (any PS_OPERATOR except if / ifelse)\n   *                 | '{' block '}' 'if'\n   *                 | '{' block '}' '{' block '}' 'ifelse'\n   *\n   * @returns {PsProgram}\n   */\n  parse() {\n    this._advance();\n    this._expect(TOKEN.lbrace);\n    const block = this._parseBlock();\n    this._expect(TOKEN.rbrace);\n    if (this._token.id !== TOKEN.eof) {\n      warn(\"PostScript function: unexpected content after closing brace.\");\n    }\n    return new PsProgram(block);\n  }\n\n  _parseBlock() {\n    const instructions = [];\n\n    while (true) {\n      const tok = this._token;\n      switch (tok.id) {\n        case TOKEN.number:\n          instructions.push(new PsNumber(tok.value));\n          this._advance();\n          break;\n\n        case TOKEN.lbrace: {\n          // Start of a sub-procedure: must be followed by 'if' or '{ } ifelse'.\n          this._advance();\n          const thenBlock = this._parseBlock();\n          this._expect(TOKEN.rbrace);\n\n          if (this._token.id === TOKEN.if) {\n            this._advance();\n            instructions.push(new PsIf(thenBlock));\n          } else if (this._token.id === TOKEN.lbrace) {\n            this._advance();\n            const elseBlock = this._parseBlock();\n            this._expect(TOKEN.rbrace);\n            this._expect(TOKEN.ifelse);\n            instructions.push(new PsIfElse(thenBlock, elseBlock));\n          } else {\n            throw new FormatError(\n              \"PostScript function: a procedure block must be followed by 'if' or '{…} ifelse'.\"\n            );\n          }\n          break;\n        }\n\n        case TOKEN.rbrace:\n        case TOKEN.eof:\n          // End of this block; let the caller consume the '}'.\n          return new PsBlock(instructions);\n\n        case TOKEN.if:\n        case TOKEN.ifelse:\n          // 'if'/'ifelse' without a preceding block.\n          throw new FormatError(\n            `PostScript function: unexpected '${tok.value}' operator.`\n          );\n\n        default:\n          if (Parser._isRegularOperator(tok.id)) {\n            instructions.push(new PsOperator(tok.id));\n            this._advance();\n            break;\n          }\n          throw new FormatError(\n            `PostScript function: unexpected token id ${tok.id}.`\n          );\n      }\n    }\n  }\n}\n\n/**\n * Convenience function: tokenize and parse a PostScript Type 4 function body\n * given as a plain string (already decoded from the PDF stream).\n *\n * @param {string} source\n * @returns {PsProgram}\n */\nfunction parsePostScriptFunction(source) {\n  return new Parser(new Lexer(source)).parse();\n}\n\n// Stack-to-tree transformation\n\n/**\n * Structural equality for tree nodes.\n * Returns true when `a` and `b` represent the same sub-expression.\n * Reference equality (`a === b`) is checked first, so shared nodes\n * produced by `dup` are handled in O(1).\n */\nfunction _nodesEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (a.type !== b.type) {\n    return false;\n  }\n  switch (a.type) {\n    case PS_NODE.arg:\n      return a.index === b.index;\n    case PS_NODE.const:\n      return a.value === b.value;\n    case PS_NODE.unary:\n      return a.op === b.op && _nodesEqual(a.operand, b.operand);\n    case PS_NODE.binary:\n      return (\n        a.op === b.op &&\n        _nodesEqual(a.first, b.first) &&\n        _nodesEqual(a.second, b.second)\n      );\n    case PS_NODE.ternary:\n      return (\n        _nodesEqual(a.cond, b.cond) &&\n        _nodesEqual(a.then, b.then) &&\n        _nodesEqual(a.otherwise, b.otherwise)\n      );\n    default:\n      return false;\n  }\n}\n\n/**\n * Evaluate a binary PostScript operator on two compile-time-known values.\n * `a` is the second operand (was below top); `b` is the first (was on top).\n * Returns `undefined` when the operation cannot be safely folded.\n */\nfunction _evalBinaryConst(op, a, b) {\n  switch (op) {\n    case TOKEN.add:\n      return a + b;\n    case TOKEN.sub:\n      return a - b;\n    case TOKEN.mul:\n      return a * b;\n    case TOKEN.div:\n      return b !== 0 ? a / b : 0; // div by zero → 0\n    case TOKEN.idiv:\n      return b !== 0 ? Math.trunc(a / b) : 0; // div by zero → 0\n    case TOKEN.mod:\n      return b !== 0 ? a - Math.trunc(a / b) * b : 0; // div by zero → 0\n    case TOKEN.exp: {\n      const r = a ** b;\n      return Number.isFinite(r) ? r : undefined;\n    }\n    case TOKEN.atan: {\n      // PostScript: dy dx atan → angle in degrees in [0, 360)\n      let deg = Math.atan2(a, b) * (180 / Math.PI);\n      if (deg < 0) {\n        deg += 360;\n      }\n      return deg;\n    }\n    case TOKEN.eq:\n      return a === b;\n    case TOKEN.ne:\n      return a !== b;\n    case TOKEN.gt:\n      return a > b;\n    case TOKEN.ge:\n      return a >= b;\n    case TOKEN.lt:\n      return a < b;\n    case TOKEN.le:\n      return a <= b;\n    case TOKEN.and:\n      return typeof a === \"boolean\" ? a && b : (a & b) | 0;\n    case TOKEN.or:\n      return typeof a === \"boolean\" ? a || b : a | b | 0;\n    case TOKEN.xor:\n      return typeof a === \"boolean\" ? a !== b : (a ^ b) | 0;\n    case TOKEN.bitshift:\n      return b >= 0 ? (a << b) | 0 : (a >> -b) | 0;\n    case TOKEN.min:\n      return Math.min(a, b);\n    case TOKEN.max:\n      return Math.max(a, b);\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Evaluate a unary PostScript operator on a compile-time-known value.\n * Returns `undefined` when the operation cannot be safely folded.\n */\nfunction _evalUnaryConst(op, v) {\n  switch (op) {\n    case TOKEN.abs:\n      return Math.abs(v);\n    case TOKEN.neg:\n      return -v;\n    case TOKEN.ceiling:\n      return Math.ceil(v);\n    case TOKEN.floor:\n      return Math.floor(v);\n    case TOKEN.round:\n      return Math.round(v);\n    case TOKEN.truncate:\n      return Math.trunc(v);\n    case TOKEN.sqrt: {\n      const r = Math.sqrt(v);\n      return Number.isFinite(r) ? r : undefined;\n    }\n    case TOKEN.sin:\n      return Math.sin(((v % 360) * Math.PI) / 180);\n    case TOKEN.cos:\n      return Math.cos(((v % 360) * Math.PI) / 180);\n    case TOKEN.ln: {\n      const r = Math.log(v);\n      return Number.isFinite(r) ? r : undefined;\n    }\n    case TOKEN.log: {\n      const r = Math.log10(v);\n      return Number.isFinite(r) ? r : undefined;\n    }\n    case TOKEN.cvi:\n      return Math.trunc(v);\n    case TOKEN.cvr:\n      return v;\n    case TOKEN.not:\n      return typeof v === \"boolean\" ? !v : ~v;\n    default:\n      return undefined;\n  }\n}\n\n// Maximum number of nodes allowed on the virtual stack at any point during\n// the stack-to-tree conversion.  Programs that exceed this are rejected.\nconst MAX_STACK_SIZE = 100;\n\n// Determine the PS_VALUE_TYPE of a unary operation's result.\n// `not` propagates its operand's type (boolean not → boolean, integer not →\n// numeric); every other unary op always yields a numeric result.\nfunction _unaryValueType(op, operandType) {\n  return op === TOKEN.not ? operandType : PS_VALUE_TYPE.numeric;\n}\n\n// Determine the PS_VALUE_TYPE of a binary operation's result.\nfunction _binaryValueType(op, firstType, secondType) {\n  switch (op) {\n    // Comparison operators always produce a boolean.\n    case TOKEN.eq:\n    case TOKEN.ne:\n    case TOKEN.gt:\n    case TOKEN.ge:\n    case TOKEN.lt:\n    case TOKEN.le:\n      return PS_VALUE_TYPE.boolean;\n    // and / or / xor preserve the type when both operands are the same known\n    // type (both boolean or both numeric); otherwise the type is unknown.\n    case TOKEN.and:\n    case TOKEN.or:\n    case TOKEN.xor:\n      return firstType === secondType && firstType !== PS_VALUE_TYPE.unknown\n        ? firstType\n        : PS_VALUE_TYPE.unknown;\n    // All arithmetic / bitshift operators produce a numeric result.\n    default:\n      return PS_VALUE_TYPE.numeric;\n  }\n}\n\n/**\n * Converts a stack-based PostScript parser AST (PsProgram) into a stack-free\n * expression tree.\n *\n * The virtual operand stack is initialized with one PsArgNode per function\n * input; each instruction then manipulates the stack just as it would at\n * runtime, but instead of numbers the stack holds tree nodes.\n *\n * Algebraic optimizations are applied eagerly as each node is constructed:\n * constant folding, identity/absorbing elements, and double-negation\n * elimination.\n *\n * When the program finishes the remaining stack entries are the output\n * expressions — one per function output channel.\n *\n * Usage:\n *   const outputs = new PSStackToTree().evaluate(program, numInputs);\n */\nclass PSStackToTree {\n  static #binaryOps = null;\n\n  static #unaryOps = null;\n\n  static #idempotentUnary = null;\n\n  static #negatedComparison = null;\n\n  static #init() {\n    // Binary operator ids — used by _evalOp.\n    this.#binaryOps = new Set([\n      TOKEN.add,\n      TOKEN.sub,\n      TOKEN.mul,\n      TOKEN.div,\n      TOKEN.idiv,\n      TOKEN.mod,\n      TOKEN.exp,\n      TOKEN.atan,\n      TOKEN.eq,\n      TOKEN.ne,\n      TOKEN.gt,\n      TOKEN.ge,\n      TOKEN.lt,\n      TOKEN.le,\n      TOKEN.and,\n      TOKEN.or,\n      TOKEN.xor,\n      TOKEN.bitshift,\n    ]);\n    // Unary operator ids.\n    this.#unaryOps = new Set([\n      TOKEN.abs,\n      TOKEN.neg,\n      TOKEN.ceiling,\n      TOKEN.floor,\n      TOKEN.round,\n      TOKEN.truncate,\n      TOKEN.sqrt,\n      TOKEN.sin,\n      TOKEN.cos,\n      TOKEN.ln,\n      TOKEN.log,\n      TOKEN.cvi,\n      TOKEN.cvr,\n      TOKEN.not,\n    ]);\n    // Unary operators where f(f(x)) = f(x) — applying them twice is the same\n    // as applying them once.\n    this.#idempotentUnary = new Set([\n      TOKEN.abs,\n      TOKEN.ceiling,\n      TOKEN.cvi,\n      TOKEN.cvr,\n      TOKEN.floor,\n      TOKEN.round,\n      TOKEN.truncate,\n    ]);\n    // Maps each comparison operator to its logical negation.\n    // Used to simplify not(comparison) → negated-comparison.\n    this.#negatedComparison = new Map([\n      [TOKEN.eq, TOKEN.ne],\n      [TOKEN.ne, TOKEN.eq],\n      [TOKEN.lt, TOKEN.ge],\n      [TOKEN.le, TOKEN.gt],\n      [TOKEN.gt, TOKEN.le],\n      [TOKEN.ge, TOKEN.lt],\n    ]);\n  }\n\n  /**\n   * @param {PsProgram} program\n   * @param {number} numInputs — number of domain values placed on the stack\n   *   before the program runs (i.e. the length of the domain array / 2).\n   * @returns {Array<PsNode>} — one tree node per output value.\n   */\n  evaluate(program, numInputs) {\n    if (!PSStackToTree.#binaryOps) {\n      PSStackToTree.#init();\n    }\n    this._failed = false;\n    if (numInputs > MAX_STACK_SIZE) {\n      return null;\n    }\n    const stack = [];\n    for (let i = 0; i < numInputs; i++) {\n      stack.push(new PsArgNode(i));\n    }\n    this._evalBlock(program.body, stack);\n    if (this._failed) {\n      return null;\n    }\n    PSStackToTree.#markShared(stack);\n    return stack;\n  }\n\n  // Set node.shared / sharedCount on non-atomic nodes referenced more than\n  // once.  arg/const are excluded — they are cheap to re-emit inline.\n  static #markShared(outputs) {\n    const refCount = new Map();\n    const visit = node => {\n      if (!node || node.type === PS_NODE.arg || node.type === PS_NODE.const) {\n        return;\n      }\n      const prev = refCount.get(node) ?? 0;\n      refCount.set(node, prev + 1);\n      if (prev > 0) {\n        return;\n      }\n      switch (node.type) {\n        case PS_NODE.unary:\n          visit(node.operand);\n          break;\n        case PS_NODE.binary:\n          visit(node.first);\n          visit(node.second);\n          break;\n        case PS_NODE.ternary:\n          visit(node.cond);\n          visit(node.then);\n          visit(node.otherwise);\n          break;\n      }\n    };\n    for (const output of outputs) {\n      visit(output);\n    }\n    for (const [node, count] of refCount) {\n      if (count > 1) {\n        node.shared = true;\n        node.sharedCount = count;\n      }\n    }\n  }\n\n  _evalBlock(block, stack) {\n    this._evalBlockFrom(block.instructions, 0, stack);\n  }\n\n  /**\n   * Core evaluation loop.  Processes `instructions[startIdx…]` in order,\n   * mutating `stack` as each instruction executes.\n   *\n   * When a `{ body } if` instruction grows the stack (the PostScript \"early\n   * exit / guard\" idiom), the remaining instructions in the current array are\n   * evaluated on **both** the true-branch stack and the false-branch stack,\n   * then the two results are merged into PsTernaryNodes.  This handles\n   * patterns like:\n   *\n   *   cond { pop R G B sentinel } if\n   *   … more guards …\n   *   sentinel 0 gt { defaultR defaultG defaultB } if\n   */\n  _evalBlockFrom(instructions, startIdx, stack) {\n    for (let idx = startIdx; idx < instructions.length; idx++) {\n      if (this._failed) {\n        break;\n      }\n      const instr = instructions[idx];\n      switch (instr.type) {\n        case PS_NODE.number:\n          stack.push(new PsConstNode(instr.value));\n          if (stack.length > MAX_STACK_SIZE) {\n            this._failed = true;\n          }\n          break;\n\n        case PS_NODE.operator:\n          this._evalOp(instr.op, stack);\n          break;\n\n        case PS_NODE.if: {\n          // Pop condition, snapshot the stack, run the then-block on a copy,\n          // then merge.\n          if (stack.length < 1) {\n            this._failed = true;\n            break;\n          }\n          const cond = stack.pop();\n          const saved = stack.slice();\n          this._evalBlock(instr.then, stack);\n          if (this._failed) {\n            break;\n          }\n          if (stack.length === saved.length) {\n            // Normal case: depth preserved — positions that changed become\n            // PsTernaryNode(cond, thenValue, originalValue).\n            for (let i = 0; i < stack.length; i++) {\n              if (stack[i] !== saved[i]) {\n                stack[i] = this._makeTernary(cond, stack[i], saved[i]);\n              }\n            }\n          } else if (stack.length > saved.length) {\n            // \"Guard / early-exit\" pattern: the if-body pushed extra values.\n            if (cond.type === PS_NODE.const) {\n              // Condition is a compile-time constant: short-circuit without\n              // forking.  For a false condition restore the saved stack; for a\n              // true condition keep the body result already on `stack`.\n              if (!cond.value) {\n                stack.length = 0;\n                stack.push(...saved);\n              }\n              break;\n            }\n            // Non-constant condition: evaluate the *rest* of this block on\n            // both the true-branch stack and the false-branch stack, then\n            // merge the two results into PsTernaryNodes.\n            const trueStack = stack.slice();\n            this._evalBlockFrom(instructions, idx + 1, trueStack);\n            if (this._failed) {\n              break;\n            }\n            const falseStack = saved;\n            this._evalBlockFrom(instructions, idx + 1, falseStack);\n            if (this._failed) {\n              break;\n            }\n            if (trueStack.length !== falseStack.length) {\n              // The two paths produced different stack depths.  For\n              // well-formed PostScript functions this happens when the\n              // remaining code still has a \"default value\" guard that fires\n              // unconditionally for one path but not the other.  Pad the\n              // shorter result with PsConstNode(0) so both have the same\n              // length; the padding zeros end up in ternary branches that\n              // are never selected at runtime.\n              const zero = new PsConstNode(0);\n              while (trueStack.length < falseStack.length) {\n                trueStack.push(zero);\n              }\n              while (falseStack.length < trueStack.length) {\n                falseStack.push(zero);\n              }\n            }\n            stack.length = 0;\n            for (let i = 0; i < trueStack.length; i++) {\n              stack.push(this._makeTernary(cond, trueStack[i], falseStack[i]));\n            }\n            return; // Remaining instructions already consumed above.\n          } else {\n            // Stack-shrinking if — cannot represent as a tree.\n            this._failed = true;\n          }\n          break;\n        }\n\n        case PS_NODE.ifelse: {\n          // Pop condition; run each branch on an independent copy of the\n          // current stack; zip the two resulting stacks into PsTernaryNodes\n          // wherever the branches disagree.\n          if (stack.length < 1) {\n            this._failed = true;\n            break;\n          }\n          const cond = stack.pop();\n          const snapshot = stack.slice();\n\n          const thenStack = snapshot.slice();\n          this._evalBlock(instr.then, thenStack);\n          if (this._failed) {\n            break;\n          }\n\n          const elseStack = snapshot.slice();\n          this._evalBlock(instr.otherwise, elseStack);\n          if (this._failed) {\n            break;\n          }\n\n          if (thenStack.length !== elseStack.length) {\n            // Pad the shorter branch with zeros so both have the same depth.\n            // For well-formed functions the extra zeros land in branches that\n            // are never selected at runtime.\n            const zero = new PsConstNode(0);\n            while (thenStack.length < elseStack.length) {\n              thenStack.push(zero);\n            }\n            while (elseStack.length < thenStack.length) {\n              elseStack.push(zero);\n            }\n          }\n          stack.length = 0;\n          for (let i = 0; i < thenStack.length; i++) {\n            stack.push(this._makeTernary(cond, thenStack[i], elseStack[i]));\n          }\n          break;\n        }\n      }\n    }\n  }\n\n  _evalOp(op, stack) {\n    if (PSStackToTree.#binaryOps.has(op)) {\n      if (stack.length < 2) {\n        this._failed = true;\n        return;\n      }\n      const first = stack.pop();\n      const second = stack.pop();\n      stack.push(this._makeBinary(op, first, second));\n      return;\n    }\n\n    if (PSStackToTree.#unaryOps.has(op)) {\n      if (stack.length < 1) {\n        this._failed = true;\n        return;\n      }\n      stack.push(this._makeUnary(op, stack.pop()));\n      return;\n    }\n\n    switch (op) {\n      case TOKEN.true:\n        stack.push(new PsConstNode(true));\n        if (stack.length > MAX_STACK_SIZE) {\n          this._failed = true;\n        }\n        break;\n\n      case TOKEN.false:\n        stack.push(new PsConstNode(false));\n        if (stack.length > MAX_STACK_SIZE) {\n          this._failed = true;\n        }\n        break;\n\n      case TOKEN.dup:\n        if (stack.length < 1) {\n          this._failed = true;\n          break;\n        }\n        stack.push(stack.at(-1));\n        if (stack.length > MAX_STACK_SIZE) {\n          this._failed = true;\n        }\n        break;\n\n      case TOKEN.exch: {\n        if (stack.length < 2) {\n          this._failed = true;\n          break;\n        }\n        const a = stack.pop();\n        const b = stack.pop();\n        stack.push(a, b);\n        break;\n      }\n\n      case TOKEN.pop:\n        if (stack.length < 1) {\n          this._failed = true;\n          break;\n        }\n        stack.pop();\n        break;\n\n      case TOKEN.copy: {\n        if (stack.length < 1) {\n          this._failed = true;\n          break;\n        }\n        const nNode = stack.pop();\n        if (nNode.type === PS_NODE.const) {\n          const n = nNode.value | 0;\n          if (n === 0) {\n            // n === 0 is a no-op\n          } else if (n < 0 || n > stack.length) {\n            this._failed = true;\n          } else {\n            stack.push(...stack.slice(-n));\n            if (stack.length > MAX_STACK_SIZE) {\n              this._failed = true;\n            }\n          }\n        } else {\n          // Runtime n — cannot resolve at compile time.\n          this._failed = true;\n        }\n        break;\n      }\n\n      case TOKEN.index: {\n        if (stack.length < 1) {\n          this._failed = true;\n          break;\n        }\n        const nNode = stack.pop();\n        if (nNode.type === PS_NODE.const) {\n          const n = nNode.value | 0;\n          if (n < 0 || n >= stack.length) {\n            this._failed = true;\n          } else {\n            // 0 index = dup of top; n index = copy of nth element from top\n            stack.push(stack.at(-n - 1));\n          }\n        } else {\n          // Runtime n — cannot resolve at compile time.\n          this._failed = true;\n        }\n        break;\n      }\n\n      case TOKEN.roll: {\n        if (stack.length < 2) {\n          this._failed = true;\n          break;\n        }\n        const jNode = stack.pop();\n        const nNode = stack.pop();\n        if (nNode.type === PS_NODE.const && jNode.type === PS_NODE.const) {\n          const n = nNode.value | 0;\n          if (n === 0) {\n            // n === 0 is a no-op\n          } else if (n < 0 || n > stack.length) {\n            this._failed = true;\n          } else {\n            // Normalize j into [0, n): positive j moves the top element(s) to\n            // the bottom of the window.\n            const j = (((jNode.value | 0) % n) + n) % n;\n            if (j > 0) {\n              const slice = stack.splice(-n, n);\n              // slice[n-j…n-1] → new bottom; slice[0…n-j-1] → new top.\n              stack.push(...slice.slice(n - j), ...slice.slice(0, n - j));\n            }\n          }\n        } else {\n          // Runtime n or j — cannot resolve at compile time.\n          this._failed = true;\n        }\n        break;\n      }\n\n      default:\n        this._failed = true;\n        break;\n    }\n  }\n\n  /**\n   * Create a binary tree node, applying optimizations eagerly:\n   *\n   * 1. Constant folding — both operands are PsConstNode → fold to PsConstNode.\n   * 2. Reflexive simplifications — x−x→0, x xor x→0, x eq x→true, etc.\n   * 3. Algebraic simplifications with one known operand — identity elements\n   *    (x+0→x, x*1→x, …), absorbing elements (x*0→0, x and false→false, …),\n   *    and strength reductions (x*-1→neg(x), x^0.5→sqrt(x), x^2→x*x, …).\n   *\n   * Recall: `first` was on top of the stack (right operand for non-commutative\n   * ops), `second` was below (left operand). So `a b sub` → second=a, first=b\n   * → a − b.\n   */\n  _makeBinary(op, first, second) {\n    // 1. Constant folding\n    if (first.type === PS_NODE.const && second.type === PS_NODE.const) {\n      const v = _evalBinaryConst(op, second.value, first.value);\n      if (v !== undefined) {\n        return new PsConstNode(v);\n      }\n    }\n\n    // 2. Reflexive simplifications: both operands are the same expression.\n    if (_nodesEqual(first, second)) {\n      switch (op) {\n        case TOKEN.sub:\n          return new PsConstNode(0); // x − x → 0\n        case TOKEN.xor:\n          // Boolean operands: true xor true = false xor false = false.\n          // Integer operands: n xor n = 0.\n          return new PsConstNode(\n            first.valueType === PS_VALUE_TYPE.boolean ? false : 0\n          );\n        // TOKEN.mod, TOKEN.div, TOKEN.idiv are NOT simplified here:\n        // x op x is undefined when x = 0, so we cannot fold without knowing\n        // that x is non-zero.\n        case TOKEN.and:\n        case TOKEN.or:\n          return first; // x and x → x; x or x → x\n        case TOKEN.min:\n        case TOKEN.max:\n          return first; // min(x,x) → x; max(x,x) → x\n        case TOKEN.eq:\n        case TOKEN.ge:\n        case TOKEN.le:\n          return new PsConstNode(true);\n        case TOKEN.ne:\n        case TOKEN.gt:\n        case TOKEN.lt:\n          return new PsConstNode(false);\n      }\n    }\n\n    // 3. Algebraic simplifications — b = first.value, a = second.value.\n    if (first.type === PS_NODE.const) {\n      const b = first.value;\n      switch (op) {\n        case TOKEN.add:\n          if (b === 0) {\n            return second; // x + 0 → x\n          }\n          break;\n        case TOKEN.sub:\n          if (b === 0) {\n            return second; // x − 0 → x\n          }\n          break;\n        case TOKEN.mul:\n          if (b === 1) {\n            return second; // x * 1 → x\n          }\n          if (b === 0) {\n            return first; // x * 0 → 0  (reuse the PsConstNode(0))\n          }\n          if (b === -1) {\n            return this._makeUnary(TOKEN.neg, second); // x * -1 → neg(x)\n          }\n          break;\n        case TOKEN.div:\n          // x / c → x * (1/c): replace division by a constant with the\n          // equivalent multiplication (1/1=1 is caught by the mul identity).\n          if (b !== 0) {\n            return this._makeBinary(TOKEN.mul, new PsConstNode(1 / b), second);\n          }\n          break;\n        case TOKEN.idiv:\n          if (b === 1) {\n            return second; // x idiv 1 → x\n          }\n          break;\n        case TOKEN.exp:\n          if (b === 1) {\n            return second; // x ^ 1 → x\n          }\n          if (b === -1) {\n            return this._makeBinary(TOKEN.div, second, new PsConstNode(1));\n          }\n          if (b === 0.5) {\n            return this._makeUnary(TOKEN.sqrt, second); // x ^ 0.5 → sqrt(x)\n          }\n          if (b === 0.25) {\n            // x ^ 0.25 → sqrt(sqrt(x)): two native f64.sqrt calls instead\n            // of the pow() import.\n            const sqrtOnce = this._makeUnary(TOKEN.sqrt, second);\n            return this._makeUnary(TOKEN.sqrt, sqrtOnce);\n          }\n          if (b === 2) {\n            // x ^ 2 → x * x: avoids the pow() import call entirely.\n            return this._makeBinary(TOKEN.mul, second, second);\n          }\n          if (b === 3) {\n            // x ^ 3 → (x * x) * x: avoids the pow() import call entirely.\n            return this._makeBinary(\n              TOKEN.mul,\n              this._makeBinary(TOKEN.mul, second, second),\n              second\n            );\n          }\n          if (b === 4) {\n            // x ^ 4 → (x * x) * (x * x): avoids the pow() import call entirely.\n            const square = this._makeBinary(TOKEN.mul, second, second);\n            return this._makeBinary(TOKEN.mul, square, square);\n          }\n          if (b === 0) {\n            return new PsConstNode(1); // x ^ 0 → 1\n          }\n          break;\n        case TOKEN.and:\n          if (b === true) {\n            return second; // x and true → x\n          }\n          if (b === false) {\n            return first; // x and false → false\n          }\n          break;\n        case TOKEN.or:\n          if (b === false) {\n            return second; // x or false → x\n          }\n          if (b === true) {\n            return first; // x or true → true\n          }\n          break;\n        case TOKEN.min:\n          // min(max(x, c2), c1) where c2 ≥ c1 → c1:\n          // max(x, c2) ≥ c2 ≥ c1, so min with c1 always returns c1.\n          if (\n            second.type === PS_NODE.binary &&\n            second.op === TOKEN.max &&\n            second.first.type === PS_NODE.const &&\n            second.first.value >= b\n          ) {\n            return first;\n          }\n          break;\n        case TOKEN.max:\n          // max(min(x, c1), c2) where c2 ≥ c1 → c2:\n          // min(x, c1) ≤ c1 ≤ c2, so max with c2 always returns c2.\n          if (\n            second.type === PS_NODE.binary &&\n            second.op === TOKEN.min &&\n            second.first.type === PS_NODE.const &&\n            second.first.value <= b\n          ) {\n            return first;\n          }\n          break;\n      }\n    }\n\n    if (second.type === PS_NODE.const) {\n      const a = second.value;\n      switch (op) {\n        case TOKEN.add:\n          if (a === 0) {\n            return first; // 0 + x → x\n          }\n          break;\n        case TOKEN.sub:\n          if (a === 0) {\n            return this._makeUnary(TOKEN.neg, first); // 0 − x → neg(x)\n          }\n          break;\n        case TOKEN.mul:\n          if (a === 1) {\n            return first; // 1 * x → x\n          }\n          if (a === 0) {\n            return second; // 0 * x → 0  (reuse the PsConstNode(0))\n          }\n          if (a === -1) {\n            return this._makeUnary(TOKEN.neg, first); // -1 * x → neg(x)\n          }\n          break;\n        case TOKEN.and:\n          if (a === true) {\n            return first; // true and x → x\n          }\n          if (a === false) {\n            return second; // false and x → false\n          }\n          break;\n        case TOKEN.or:\n          if (a === false) {\n            return first; // false or x → x\n          }\n          if (a === true) {\n            return second; // true or x → true\n          }\n          break;\n      }\n    }\n\n    return new PsBinaryNode(\n      op,\n      first,\n      second,\n      _binaryValueType(op, first.valueType, second.valueType)\n    );\n  }\n\n  /**\n   * Create a unary tree node, applying optimizations eagerly:\n   *\n   * 1. Constant folding.\n   * 2. not(comparison) → negated comparison: not(a eq b) → a ne b, etc.\n   * 3. neg(a − b) → b − a.\n   * 4. Double-negation: neg(neg(x)) → x, not(not(x)) → x.\n   * 5. abs(neg(x)) → abs(x).\n   * 6. Idempotent: f(f(x)) → f(x) for abs, ceiling, floor, round, etc.\n   */\n  _makeUnary(op, operand) {\n    // 1. Constant folding\n    if (operand.type === PS_NODE.const) {\n      const v = _evalUnaryConst(op, operand.value);\n      if (v !== undefined) {\n        return new PsConstNode(v);\n      }\n    }\n\n    // 2.\n    if (op === TOKEN.not && operand.type === PS_NODE.binary) {\n      const negated = PSStackToTree.#negatedComparison.get(operand.op);\n      if (negated !== undefined) {\n        return new PsBinaryNode(\n          negated,\n          operand.first,\n          operand.second,\n          PS_VALUE_TYPE.boolean\n        );\n      }\n    }\n\n    // 3. (_makeBinary may fold further if one operand is 0)\n    if (\n      op === TOKEN.neg &&\n      operand.type === PS_NODE.binary &&\n      operand.op === TOKEN.sub\n    ) {\n      return this._makeBinary(TOKEN.sub, operand.second, operand.first);\n    }\n\n    if (operand.type === PS_NODE.unary) {\n      // 4. (not(not(x)) only reachable when x is not a comparison)\n      if (\n        (op === TOKEN.neg && operand.op === TOKEN.neg) ||\n        (op === TOKEN.not && operand.op === TOKEN.not)\n      ) {\n        return operand.operand;\n      }\n      // 5.\n      if (op === TOKEN.abs && operand.op === TOKEN.neg) {\n        return this._makeUnary(TOKEN.abs, operand.operand);\n      }\n      // 6.\n      if (PSStackToTree.#idempotentUnary.has(op) && op === operand.op) {\n        return operand;\n      }\n    }\n\n    return new PsUnaryNode(op, operand, _unaryValueType(op, operand.valueType));\n  }\n\n  /**\n   * Create a ternary node, applying optimizations eagerly:\n   *\n   * 1. Constant condition — fold to the live branch.\n   * 2. Identical branches — the condition is irrelevant, return either branch.\n   * 3. Boolean branch constants — `cond ? true : false` → cond,\n   *    `cond ? false : true` → not(cond).\n   * 4. Ternary → branchless min/max when the condition compares two numeric\n   *    expressions that are also the two branches.\n   */\n  _makeTernary(cond, then, otherwise) {\n    // 1. Constant condition\n    if (cond.type === PS_NODE.const) {\n      return cond.value ? then : otherwise;\n    }\n    // 2. Both branches are the same expression\n    if (_nodesEqual(then, otherwise)) {\n      return then;\n    }\n    // 3. Boolean branch constants\n    if (then.type === PS_NODE.const && otherwise.type === PS_NODE.const) {\n      if (then.value === true && otherwise.value === false) {\n        return cond; // cond ? true : false → cond\n      }\n      if (then.value === false && otherwise.value === true) {\n        return this._makeUnary(TOKEN.not, cond); // cond ? false : true → !cond\n      }\n    }\n\n    // 4. Ternary → branchless min/max folding.\n    //\n    // When the condition is a numeric comparison between two expressions A and\n    // B, and the two branches are exactly those two expressions (in some\n    // order), the ternary collapses to a single f64.min / f64.max instruction:\n    //\n    //   (A gt B) ? B : A  →  min(A, B)   (A ge B) ? B : A  →  min(A, B)\n    //   (A lt B) ? B : A  →  max(A, B)   (A le B) ? B : A  →  max(A, B)\n    //   (A gt B) ? A : B  →  max(A, B)   (A ge B) ? A : B  →  max(A, B)\n    //   (A lt B) ? A : B  →  min(A, B)   (A le B) ? A : B  →  min(A, B)\n    //\n    // Here A = cond.second (left operand) and B = cond.first (right operand),\n    // following the PS stack convention: `A B gt` → second=A, first=B.\n    if (cond.type === PS_NODE.binary) {\n      const { op: cop, first: cf, second: cs } = cond;\n      if (cop === TOKEN.gt || cop === TOKEN.ge) {\n        // cond: cs > cf\n        if (_nodesEqual(then, cf) && _nodesEqual(otherwise, cs)) {\n          return this._makeBinary(TOKEN.min, cf, cs); // cs>cf ? cf:cs → min\n        }\n        if (_nodesEqual(then, cs) && _nodesEqual(otherwise, cf)) {\n          return this._makeBinary(TOKEN.max, cf, cs); // cs>cf ? cs:cf → max\n        }\n      } else if (cop === TOKEN.lt || cop === TOKEN.le) {\n        // cond: cs < cf\n        if (_nodesEqual(then, cf) && _nodesEqual(otherwise, cs)) {\n          return this._makeBinary(TOKEN.max, cf, cs); // cs<cf ? cf:cs → max\n        }\n        if (_nodesEqual(then, cs) && _nodesEqual(otherwise, cf)) {\n          return this._makeBinary(TOKEN.min, cf, cs); // cs<cf ? cs:cf → min\n        }\n      }\n    }\n\n    return new PsTernaryNode(\n      cond,\n      then,\n      otherwise,\n      then.valueType === otherwise.valueType\n        ? then.valueType\n        : PS_VALUE_TYPE.unknown\n    );\n  }\n}\n\nexport {\n  parsePostScriptFunction,\n  Parser,\n  PS_NODE,\n  PS_VALUE_TYPE,\n  PsArgNode,\n  PsBinaryNode,\n  PsBlock,\n  PsConstNode,\n  PsIf,\n  PsIfElse,\n  PsNode,\n  PsNumber,\n  PsOperator,\n  PsProgram,\n  PSStackToTree,\n  PsTernaryNode,\n  PsUnaryNode,\n};\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  parsePostScriptFunction,\n  PS_NODE,\n  PS_VALUE_TYPE,\n  PSStackToTree,\n} from \"./ast.js\";\nimport { MathClamp } from \"../../shared/math_clamp.js\";\nimport { TOKEN } from \"./lexer.js\";\n\n// Consecutive integers for a dense jump table in _execute.\n// 2-slot: ARG, CONST, IF, JUMP, SHIFT. 4-slot: STORE. All others: 1 slot.\nconst OP = {\n  ARG: 0, // [ARG, idx]\n  CONST: 1, // [CONST, val]\n  STORE: 2, // [STORE, slot, min, max]  clamp(pop()) → mem[slot]\n  IF: 3, // [IF, target]  jump when top-of-stack === 0\n  JUMP: 4, // [JUMP, target]  unconditional\n  ABS: 5,\n  NEG: 6,\n  CEIL: 7,\n  FLOOR: 8,\n  ROUND: 9, // floor(x + 0.5)\n  TRUNC: 10,\n  NOT_B: 11, // boolean NOT\n  NOT_N: 12, // bitwise NOT\n  SQRT: 13,\n  SIN: 14, // degrees in/out\n  COS: 15,\n  LN: 16,\n  LOG10: 17,\n  CVI: 18,\n  SHIFT: 19, // [SHIFT, amount]  +ve = left, −ve = right\n  // Binary ops: second below, first on top; result = second OP first.\n  ADD: 20,\n  SUB: 21,\n  MUL: 22,\n  DIV: 23, // 0 when divisor is 0\n  IDIV: 24, // 0 when divisor is 0\n  MOD: 25, // 0 when divisor is 0\n  POW: 26,\n  EQ: 27,\n  NE: 28,\n  GT: 29,\n  GE: 30,\n  LT: 31,\n  LE: 32,\n  AND: 33,\n  OR: 34,\n  XOR: 35,\n  ATAN: 36, // atan2(second, first) → degrees [0, 360)\n  MIN: 37,\n  MAX: 38,\n  TEE_TMP: 39, // [TEE_TMP, slot]  peek top of stack → tmp[slot], leave on stack\n  LOAD_TMP: 40, // [LOAD_TMP, slot]  push tmp[slot]\n};\n\nconst _DEG_TO_RAD = Math.PI / 180;\nconst _RAD_TO_DEG = 180 / Math.PI;\n\nclass PsJsCompiler {\n  // Safe because JS is single-threaded.\n  static #stack = new Float64Array(64);\n\n  static #tmp = new Float64Array(64);\n\n  constructor(domain, range) {\n    this.nIn = domain.length >> 1;\n    this.nOut = range.length >> 1;\n    this.range = range;\n    this.ir = [];\n    this._tmpMap = new Map(); // node → tmp slot index (CSE)\n    this._nextTmp = 0;\n  }\n\n  _compileNode(node) {\n    if (node.shared) {\n      const cached = this._tmpMap.get(node);\n      if (cached !== undefined) {\n        this.ir.push(OP.LOAD_TMP, cached);\n        return true;\n      }\n      if (!this._compileNodeImpl(node)) {\n        return false;\n      }\n      const slot = this._nextTmp++;\n      this._tmpMap.set(node, slot);\n      this.ir.push(OP.TEE_TMP, slot);\n      return true;\n    }\n    return this._compileNodeImpl(node);\n  }\n\n  _compileNodeImpl(node) {\n    switch (node.type) {\n      case PS_NODE.arg:\n        this.ir.push(OP.ARG, node.index);\n        return true;\n\n      case PS_NODE.const: {\n        const v = node.value;\n        this.ir.push(OP.CONST, typeof v === \"boolean\" ? Number(v) : v);\n        return true;\n      }\n\n      case PS_NODE.unary:\n        return this._compileUnary(node);\n\n      case PS_NODE.binary:\n        return this._compileBinary(node);\n\n      case PS_NODE.ternary:\n        return this._compileTernary(node);\n\n      default:\n        return false;\n    }\n  }\n\n  _compileUnary(node) {\n    const { op, operand, valueType } = node;\n\n    // cvr is a no-op — values are already f64.\n    if (op === TOKEN.cvr) {\n      return this._compileNode(operand);\n    }\n\n    if (!this._compileNode(operand)) {\n      return false;\n    }\n\n    switch (op) {\n      case TOKEN.abs:\n        this.ir.push(OP.ABS);\n        break;\n      case TOKEN.neg:\n        this.ir.push(OP.NEG);\n        break;\n      case TOKEN.ceiling:\n        this.ir.push(OP.CEIL);\n        break;\n      case TOKEN.floor:\n        this.ir.push(OP.FLOOR);\n        break;\n      case TOKEN.round:\n        this.ir.push(OP.ROUND);\n        break;\n      case TOKEN.truncate:\n        this.ir.push(OP.TRUNC);\n        break;\n      case TOKEN.sqrt:\n        this.ir.push(OP.SQRT);\n        break;\n      case TOKEN.sin:\n        this.ir.push(OP.SIN);\n        break;\n      case TOKEN.cos:\n        this.ir.push(OP.COS);\n        break;\n      case TOKEN.ln:\n        this.ir.push(OP.LN);\n        break;\n      case TOKEN.log:\n        this.ir.push(OP.LOG10);\n        break;\n      case TOKEN.cvi:\n        this.ir.push(OP.CVI);\n        break;\n      case TOKEN.not:\n        if (valueType === PS_VALUE_TYPE.boolean) {\n          this.ir.push(OP.NOT_B);\n        } else if (valueType === PS_VALUE_TYPE.numeric) {\n          this.ir.push(OP.NOT_N);\n        } else {\n          return false;\n        }\n        break;\n      default:\n        return false;\n    }\n    return true;\n  }\n\n  _compileBinary(node) {\n    const { op, first, second } = node;\n\n    // bitshift requires a constant shift amount.\n    if (op === TOKEN.bitshift) {\n      if (first.type !== PS_NODE.const || !Number.isInteger(first.value)) {\n        return false;\n      }\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      this.ir.push(OP.SHIFT, first.value);\n      return true;\n    }\n\n    if (!this._compileNode(second)) {\n      return false;\n    }\n    if (!this._compileNode(first)) {\n      return false;\n    }\n\n    switch (op) {\n      case TOKEN.add:\n        this.ir.push(OP.ADD);\n        break;\n      case TOKEN.sub:\n        this.ir.push(OP.SUB);\n        break;\n      case TOKEN.mul:\n        this.ir.push(OP.MUL);\n        break;\n      case TOKEN.div:\n        this.ir.push(OP.DIV);\n        break;\n      case TOKEN.idiv:\n        this.ir.push(OP.IDIV);\n        break;\n      case TOKEN.mod:\n        this.ir.push(OP.MOD);\n        break;\n      case TOKEN.exp:\n        this.ir.push(OP.POW);\n        break;\n      case TOKEN.eq:\n        this.ir.push(OP.EQ);\n        break;\n      case TOKEN.ne:\n        this.ir.push(OP.NE);\n        break;\n      case TOKEN.gt:\n        this.ir.push(OP.GT);\n        break;\n      case TOKEN.ge:\n        this.ir.push(OP.GE);\n        break;\n      case TOKEN.lt:\n        this.ir.push(OP.LT);\n        break;\n      case TOKEN.le:\n        this.ir.push(OP.LE);\n        break;\n      case TOKEN.and:\n        this.ir.push(OP.AND);\n        break;\n      case TOKEN.or:\n        this.ir.push(OP.OR);\n        break;\n      case TOKEN.xor:\n        this.ir.push(OP.XOR);\n        break;\n      case TOKEN.atan:\n        this.ir.push(OP.ATAN);\n        break;\n      case TOKEN.min:\n        this.ir.push(OP.MIN);\n        break;\n      case TOKEN.max:\n        this.ir.push(OP.MAX);\n        break;\n      default:\n        return false;\n    }\n    return true;\n  }\n\n  _compileTernary(node) {\n    if (!this._compileNode(node.cond)) {\n      return false;\n    }\n\n    this.ir.push(OP.IF, 0);\n    const ifPatch = this.ir.length - 1;\n\n    if (!this._compileNode(node.then)) {\n      return false;\n    }\n\n    this.ir.push(OP.JUMP, 0);\n    const jumpPatch = this.ir.length - 1;\n\n    this.ir[ifPatch] = this.ir.length; // IF jumps here on false\n    if (!this._compileNode(node.otherwise)) {\n      return false;\n    }\n\n    this.ir[jumpPatch] = this.ir.length; // JUMP lands here\n    return true;\n  }\n\n  compile(program) {\n    const outputs = new PSStackToTree().evaluate(program, this.nIn);\n    if (!outputs || outputs.length < this.nOut) {\n      return null;\n    }\n\n    for (let i = 0; i < this.nOut; i++) {\n      if (!this._compileNode(outputs[i])) {\n        return null;\n      }\n      const min = this.range[i * 2];\n      const max = this.range[i * 2 + 1];\n      this.ir.push(OP.STORE, i, min, max);\n    }\n\n    return new Float64Array(this.ir);\n  }\n\n  static execute(ir, src, srcOffset, dest, destOffset) {\n    let ip = 0,\n      sp = 0;\n    const n = ir.length;\n    const stack = this.#stack;\n    const tmp = this.#tmp;\n\n    while (ip < n) {\n      switch (ir[ip++] | 0) {\n        case OP.ARG:\n          stack[sp++] = src[srcOffset + (ir[ip++] | 0)];\n          break;\n        case OP.CONST:\n          stack[sp++] = ir[ip++];\n          break;\n        case OP.STORE: {\n          const slot = ir[ip++] | 0;\n          const min = ir[ip++];\n          const max = ir[ip++];\n          dest[destOffset + slot] = MathClamp(stack[--sp], min, max);\n          break;\n        }\n        case OP.IF: {\n          const tgt = ir[ip++];\n          if (stack[--sp] === 0) {\n            ip = tgt;\n          }\n          break;\n        }\n        case OP.JUMP:\n          ip = ir[ip];\n          break;\n        case OP.ABS:\n          stack[sp - 1] = Math.abs(stack[sp - 1]);\n          break;\n        case OP.NEG:\n          stack[sp - 1] = -stack[sp - 1];\n          break;\n        case OP.CEIL:\n          stack[sp - 1] = Math.ceil(stack[sp - 1]);\n          break;\n        case OP.FLOOR:\n          stack[sp - 1] = Math.floor(stack[sp - 1]);\n          break;\n        case OP.ROUND:\n          stack[sp - 1] = Math.floor(stack[sp - 1] + 0.5);\n          break;\n        case OP.TRUNC:\n          stack[sp - 1] = Math.trunc(stack[sp - 1]);\n          break;\n        case OP.NOT_B:\n          stack[sp - 1] = stack[sp - 1] !== 0 ? 0 : 1;\n          break;\n        case OP.NOT_N:\n          stack[sp - 1] = ~(stack[sp - 1] | 0);\n          break;\n        case OP.SQRT:\n          stack[sp - 1] = Math.sqrt(stack[sp - 1]);\n          break;\n        case OP.SIN:\n          stack[sp - 1] = Math.sin((stack[sp - 1] % 360) * _DEG_TO_RAD);\n          break;\n        case OP.COS:\n          stack[sp - 1] = Math.cos((stack[sp - 1] % 360) * _DEG_TO_RAD);\n          break;\n        case OP.LN:\n          stack[sp - 1] = Math.log(stack[sp - 1]);\n          break;\n        case OP.LOG10:\n          stack[sp - 1] = Math.log10(stack[sp - 1]);\n          break;\n        case OP.CVI:\n          stack[sp - 1] = Math.trunc(stack[sp - 1]) | 0;\n          break;\n        case OP.SHIFT: {\n          const amt = ir[ip++];\n          const v = stack[sp - 1] | 0;\n          if (amt > 0) {\n            stack[sp - 1] = v << amt;\n          } else if (amt < 0) {\n            stack[sp - 1] = v >> -amt;\n          } else {\n            stack[sp - 1] = v;\n          }\n          break;\n        }\n        case OP.ADD: {\n          const b = stack[--sp];\n          stack[sp - 1] += b;\n          break;\n        }\n        case OP.SUB: {\n          const b = stack[--sp];\n          stack[sp - 1] -= b;\n          break;\n        }\n        case OP.MUL: {\n          const b = stack[--sp];\n          stack[sp - 1] *= b;\n          break;\n        }\n        case OP.DIV: {\n          const b = stack[--sp];\n          stack[sp - 1] = b !== 0 ? stack[sp - 1] / b : 0;\n          break;\n        }\n        case OP.IDIV: {\n          const b = stack[--sp];\n          stack[sp - 1] = b !== 0 ? Math.trunc(stack[sp - 1] / b) : 0;\n          break;\n        }\n        case OP.MOD: {\n          const b = stack[--sp];\n          stack[sp - 1] = b !== 0 ? stack[sp - 1] % b : 0;\n          break;\n        }\n        case OP.POW: {\n          const b = stack[--sp];\n          stack[sp - 1] **= b;\n          break;\n        }\n        case OP.EQ: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] === b ? 1 : 0;\n          break;\n        }\n        case OP.NE: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] !== b ? 1 : 0;\n          break;\n        }\n        case OP.GT: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] > b ? 1 : 0;\n          break;\n        }\n        case OP.GE: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] >= b ? 1 : 0;\n          break;\n        }\n        case OP.LT: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] < b ? 1 : 0;\n          break;\n        }\n        case OP.LE: {\n          const b = stack[--sp];\n          stack[sp - 1] = stack[sp - 1] <= b ? 1 : 0;\n          break;\n        }\n        case OP.AND: {\n          const b = stack[--sp] | 0;\n          stack[sp - 1] = (stack[sp - 1] | 0) & b;\n          break;\n        }\n        case OP.OR: {\n          const b = stack[--sp] | 0;\n          stack[sp - 1] = stack[sp - 1] | 0 | b;\n          break;\n        }\n        case OP.XOR: {\n          const b = stack[--sp] | 0;\n          stack[sp - 1] = (stack[sp - 1] | 0) ^ b;\n          break;\n        }\n        case OP.ATAN: {\n          const b = stack[--sp];\n          const deg = Math.atan2(stack[sp - 1], b) * _RAD_TO_DEG;\n          stack[sp - 1] = deg < 0 ? deg + 360 : deg;\n          break;\n        }\n        case OP.MIN: {\n          const b = stack[--sp];\n          stack[sp - 1] = Math.min(stack[sp - 1], b);\n          break;\n        }\n        case OP.MAX: {\n          const b = stack[--sp];\n          stack[sp - 1] = Math.max(stack[sp - 1], b);\n          break;\n        }\n        case OP.TEE_TMP:\n          tmp[ir[ip++] | 0] = stack[sp - 1];\n          break;\n        case OP.LOAD_TMP:\n          stack[sp++] = tmp[ir[ip++] | 0];\n          break;\n      }\n    }\n  }\n}\n\n/**\n * Direct stack-based interpreter for a parsed PsProgram.\n * Used when PSStackToTree fails to optimize the AST.\n */\nclass PSStackBasedInterpreter {\n  // Safe: JS is single-threaded.\n  static #stack = new Float64Array(100);\n\n  static #sp = 0;\n\n  static #push(v) {\n    if (this.#sp < this.#stack.length) {\n      this.#stack[this.#sp++] = v;\n    }\n  }\n\n  static #execOp(op) {\n    const stack = this.#stack;\n    switch (op) {\n      case TOKEN.true:\n        this.#push(1);\n        break;\n      case TOKEN.false:\n        this.#push(0);\n        break;\n      case TOKEN.abs:\n        stack[this.#sp - 1] = Math.abs(stack[this.#sp - 1]);\n        break;\n      case TOKEN.neg:\n        stack[this.#sp - 1] = -stack[this.#sp - 1];\n        break;\n      case TOKEN.ceiling:\n        stack[this.#sp - 1] = Math.ceil(stack[this.#sp - 1]);\n        break;\n      case TOKEN.floor:\n        stack[this.#sp - 1] = Math.floor(stack[this.#sp - 1]);\n        break;\n      case TOKEN.round:\n        stack[this.#sp - 1] = Math.floor(stack[this.#sp - 1] + 0.5);\n        break;\n      case TOKEN.truncate:\n        stack[this.#sp - 1] = Math.trunc(stack[this.#sp - 1]);\n        break;\n      case TOKEN.sqrt:\n        stack[this.#sp - 1] = Math.sqrt(stack[this.#sp - 1]);\n        break;\n      case TOKEN.sin:\n        stack[this.#sp - 1] = Math.sin(\n          (stack[this.#sp - 1] % 360) * _DEG_TO_RAD\n        );\n        break;\n      case TOKEN.cos:\n        stack[this.#sp - 1] = Math.cos(\n          (stack[this.#sp - 1] % 360) * _DEG_TO_RAD\n        );\n        break;\n      case TOKEN.ln:\n        stack[this.#sp - 1] = Math.log(stack[this.#sp - 1]);\n        break;\n      case TOKEN.log:\n        stack[this.#sp - 1] = Math.log10(stack[this.#sp - 1]);\n        break;\n      case TOKEN.cvi:\n        stack[this.#sp - 1] = Math.trunc(stack[this.#sp - 1]) | 0;\n        break;\n      case TOKEN.cvr:\n        break; // values are already f64\n      case TOKEN.not: {\n        const v = stack[this.#sp - 1];\n        stack[this.#sp - 1] = v === 0 || v === 1 ? 1 - v : ~(v | 0);\n        break;\n      }\n      case TOKEN.add: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] += b;\n        break;\n      }\n      case TOKEN.sub: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] -= b;\n        break;\n      }\n      case TOKEN.mul: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] *= b;\n        break;\n      }\n      case TOKEN.div: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = b !== 0 ? stack[this.#sp - 1] / b : 0;\n        break;\n      }\n      case TOKEN.idiv: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = b !== 0 ? Math.trunc(stack[this.#sp - 1] / b) : 0;\n        break;\n      }\n      case TOKEN.mod: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = b !== 0 ? stack[this.#sp - 1] % b : 0;\n        break;\n      }\n      case TOKEN.exp: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] **= b;\n        break;\n      }\n      case TOKEN.atan: {\n        // Stack: [..., dy, dx] — dx on top.\n        const dx = stack[--this.#sp];\n        const deg = Math.atan2(stack[this.#sp - 1], dx) * _RAD_TO_DEG;\n        stack[this.#sp - 1] = deg < 0 ? deg + 360 : deg;\n        break;\n      }\n      case TOKEN.eq: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] === b ? 1 : 0;\n        break;\n      }\n      case TOKEN.ne: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] !== b ? 1 : 0;\n        break;\n      }\n      case TOKEN.gt: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] > b ? 1 : 0;\n        break;\n      }\n      case TOKEN.ge: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] >= b ? 1 : 0;\n        break;\n      }\n      case TOKEN.lt: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] < b ? 1 : 0;\n        break;\n      }\n      case TOKEN.le: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = stack[this.#sp - 1] <= b ? 1 : 0;\n        break;\n      }\n      case TOKEN.and: {\n        const b = stack[--this.#sp] | 0;\n        stack[this.#sp - 1] = (stack[this.#sp - 1] | 0) & b;\n        break;\n      }\n      case TOKEN.or: {\n        const b = stack[--this.#sp] | 0;\n        stack[this.#sp - 1] = stack[this.#sp - 1] | 0 | b;\n        break;\n      }\n      case TOKEN.xor: {\n        const b = stack[--this.#sp] | 0;\n        stack[this.#sp - 1] = (stack[this.#sp - 1] | 0) ^ b;\n        break;\n      }\n      case TOKEN.bitshift: {\n        const amt = stack[--this.#sp] | 0;\n        const v = stack[this.#sp - 1] | 0;\n        stack[this.#sp - 1] = amt > 0 ? v << amt : v >> -amt;\n        break;\n      }\n      case TOKEN.min: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = Math.min(stack[this.#sp - 1], b);\n        break;\n      }\n      case TOKEN.max: {\n        const b = stack[--this.#sp];\n        stack[this.#sp - 1] = Math.max(stack[this.#sp - 1], b);\n        break;\n      }\n      case TOKEN.dup:\n        this.#push(stack[this.#sp - 1]);\n        break;\n      case TOKEN.exch: {\n        const a = stack[--this.#sp];\n        const b = stack[--this.#sp];\n        this.#push(a);\n        this.#push(b);\n        break;\n      }\n      case TOKEN.pop:\n        this.#sp--;\n        break;\n      case TOKEN.copy: {\n        const n = Math.trunc(stack[--this.#sp]);\n        const base = this.#sp - n;\n        for (let k = 0; k < n; k++) {\n          this.#push(stack[base + k]);\n        }\n        break;\n      }\n      case TOKEN.index: {\n        const i = Math.trunc(stack[--this.#sp]);\n        this.#push(stack[this.#sp - 1 - i]);\n        break;\n      }\n      case TOKEN.roll: {\n        // Rotate top n elements by j positions toward the top.\n        const j = Math.trunc(stack[--this.#sp]);\n        const n = Math.trunc(stack[--this.#sp]);\n        if (n > 1 && j !== 0) {\n          const mod = ((j % n) + n) % n;\n          if (mod !== 0) {\n            const base = this.#sp - n;\n            const sub = stack.slice(base, this.#sp);\n            for (let k = 0; k < n; k++) {\n              stack[base + k] = sub[(k - mod + n) % n];\n            }\n          }\n        }\n        break;\n      }\n    }\n  }\n\n  static #execBlock(instructions) {\n    for (const instr of instructions) {\n      switch (instr.type) {\n        case PS_NODE.number:\n          this.#push(instr.value);\n          break;\n        case PS_NODE.operator:\n          this.#execOp(instr.op);\n          break;\n        case PS_NODE.if:\n          if (this.#stack[--this.#sp] !== 0) {\n            this.#execBlock(instr.then.instructions);\n          }\n          break;\n        case PS_NODE.ifelse:\n          if (this.#stack[--this.#sp] !== 0) {\n            this.#execBlock(instr.then.instructions);\n          } else {\n            this.#execBlock(instr.otherwise.instructions);\n          }\n          break;\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"./ast.js\").PsProgram} program\n   * @param {number[]} domain  – flat [min0,max0, …]\n   * @param {number[]} range   – flat [min0,max0, …]\n   * @returns {Function}  – `(src, srcOffset, dest, destOffset) => void`\n   */\n  static build(program, domain, range) {\n    const nIn = domain.length >> 1;\n    const nOut = range.length >> 1;\n    const { instructions } = program.body;\n    return (src, srcOffset, dest, destOffset) => {\n      this.#sp = 0;\n      for (let i = 0; i < nIn; i++) {\n        this.#push(src[srcOffset + i]);\n      }\n      this.#execBlock(instructions);\n      // Outputs: first at bottom, last at top.\n      const base = this.#sp - nOut;\n      for (let i = 0; i < nOut; i++) {\n        const v = base + i >= 0 ? this.#stack[base + i] : 0;\n        dest[destOffset + i] = MathClamp(range[i * 2 + 1], range[i * 2], v);\n      }\n    };\n  }\n}\n\n/**\n * Tries PSStackToTree-optimized IR first; falls back to direct interpreter.\n *\n * @param {string}   source\n * @param {number[]} domain  – flat [min0,max0, …]\n * @param {number[]} range   – flat [min0,max0, …]\n * @returns {Function}  – `(src, srcOffset, dest, destOffset) => void`\n */\nfunction buildPostScriptJsFunction(\n  source,\n  domain,\n  range,\n  forceInterpreter = false\n) {\n  const program = parsePostScriptFunction(source);\n  const ir =\n    !forceInterpreter && new PsJsCompiler(domain, range).compile(program);\n  if (ir) {\n    return (src, srcOffset, dest, destOffset) => {\n      PsJsCompiler.execute(ir, src, srcOffset, dest, destOffset);\n    };\n  }\n  // Fall back to direct interpreter.\n  return PSStackBasedInterpreter.build(program, domain, range);\n}\n\nexport { buildPostScriptJsFunction };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  parsePostScriptFunction,\n  PS_NODE,\n  PS_VALUE_TYPE,\n  PSStackToTree,\n} from \"./ast.js\";\nimport { TOKEN } from \"./lexer.js\";\n\n// Wasm opcodes — https://webassembly.github.io/spec/core/binary/instructions.html\nconst OP = {\n  if: 0x04,\n  else: 0x05,\n  end: 0x0b,\n  select: 0x1b,\n  call: 0x10,\n  local_get: 0x20,\n  local_set: 0x21,\n  local_tee: 0x22,\n  i32_const: 0x41,\n  i32_eqz: 0x45,\n  i32_and: 0x71,\n  i32_or: 0x72,\n  i32_xor: 0x73,\n  i32_shl: 0x74,\n  i32_shr_s: 0x75,\n  i32_trunc_f64_s: 0xaa,\n  f64_const: 0x44,\n  f64_eq: 0x61,\n  f64_ne: 0x62,\n  f64_lt: 0x63,\n  f64_gt: 0x64,\n  f64_le: 0x65,\n  f64_ge: 0x66,\n  f64_abs: 0x99,\n  f64_neg: 0x9a,\n  f64_ceil: 0x9b,\n  f64_floor: 0x9c,\n  f64_trunc: 0x9d,\n  f64_nearest: 0x9e,\n  f64_sqrt: 0x9f,\n  f64_add: 0xa0,\n  f64_sub: 0xa1,\n  f64_mul: 0xa2,\n  f64_div: 0xa3,\n  f64_min: 0xa4,\n  f64_max: 0xa5,\n  f64_convert_i32_s: 0xb7,\n  f64_store: 0x39,\n};\n\n// https://webassembly.github.io/spec/core/binary/types.html#binary-comptype\nconst FUNC_TYPE = 0x60;\n// https://webassembly.github.io/spec/core/binary/types.html#binary-valtype\nconst F64 = 0x7c;\n\n// https://webassembly.github.io/spec/core/binary/modules.html\nconst SECTION = {\n  type: 0x01,\n  import: 0x02,\n  function: 0x03,\n  memory: 0x05,\n  export: 0x07,\n  code: 0x0a,\n};\n\n// https://webassembly.github.io/spec/core/binary/modules.html#binary-importdesc\nconst EXTERN_FUNC = 0x00;\n// https://webassembly.github.io/spec/core/binary/modules.html#binary-exportdesc\nconst EXTERN_MEM = 0x02;\n\n// https://webassembly.github.io/spec/core/binary/values.html#binary-int (unsigned LEB128)\nfunction unsignedLEB128(n) {\n  const out = [];\n  do {\n    let byte = n & 0x7f;\n    n >>>= 7;\n    if (n !== 0) {\n      byte |= 0x80;\n    }\n    out.push(byte);\n  } while (n !== 0);\n  return out;\n}\n\nfunction encodeASCIIString(s) {\n  return [...unsignedLEB128(s.length), ...Array.from(s, c => c.charCodeAt(0))];\n}\n\nfunction section(id, data) {\n  return [id, ...unsignedLEB128(data.length), ...data];\n}\n\nfunction vec(items) {\n  const out = unsignedLEB128(items.length);\n  for (const item of items) {\n    if (typeof item === \"number\") {\n      out.push(item);\n      continue;\n    }\n    for (const byte of item) {\n      out.push(byte);\n    }\n  }\n  return out;\n}\n\n// Math functions unavailable as Wasm instructions — imported from JS.\nconst MATH_IMPORTS = [\n  // name | module | field | params | results\n  [\"sin\", \"Math\", \"sin\", [F64], [F64]],\n  [\"cos\", \"Math\", \"cos\", [F64], [F64]],\n  // atan2(dy, dx) — PS atan takes (dy dx) in that order\n  [\"atan2\", \"Math\", \"atan2\", [F64, F64], [F64]],\n  [\"log\", \"Math\", \"log\", [F64], [F64]], // natural log\n  [\"log10\", \"Math\", \"log10\", [F64], [F64]],\n  // pow(base, exp)\n  [\"pow\", \"Math\", \"pow\", [F64, F64], [F64]],\n];\n\n// Import object for WebAssembly instantiation — only the functions declared\n// in MATH_IMPORTS, keyed by their field name.\nconst _mathImportObject = {\n  Math: Object.fromEntries(MATH_IMPORTS.map(([name]) => [name, Math[name]])),\n};\n\n// Walks each PSStackToTree output node and emits Wasm, leaving one f64 per\n// output on the Wasm operand stack.  Ternary nodes compile to if/else/end.\nclass PsWasmCompiler {\n  static #initialized = false;\n\n  static #comparisonToOp = null;\n\n  static #importIdx = null;\n\n  static #degToRad = 0;\n\n  static #radToDeg = 0;\n\n  static #importTypeEntries = null;\n\n  static #importSection = null;\n\n  static #functionSection = null;\n\n  static #memorySection = null;\n\n  static #exportSection = null;\n\n  static #wasmMagicVersion = null;\n\n  // Shared buffer for f64 encoding — avoids per-call allocation.\n  static #f64View = null;\n\n  static #f64Arr = null;\n\n  static #init() {\n    // TOKEN comparison ids → Wasm f64 comparison opcodes (leave i32 on stack).\n    this.#comparisonToOp = new Map([\n      [TOKEN.eq, OP.f64_eq],\n      [TOKEN.ne, OP.f64_ne],\n      [TOKEN.lt, OP.f64_lt],\n      [TOKEN.le, OP.f64_le],\n      [TOKEN.gt, OP.f64_gt],\n      [TOKEN.ge, OP.f64_ge],\n    ]);\n    // Index of each import function by name.\n    this.#importIdx = Object.create(null);\n    for (let i = 0; i < MATH_IMPORTS.length; i++) {\n      this.#importIdx[MATH_IMPORTS[i][0]] = i;\n    }\n    this.#degToRad = Math.PI / 180;\n    this.#radToDeg = 180 / Math.PI;\n    // Import type entries are identical on every compilation — compute once.\n    this.#importTypeEntries = MATH_IMPORTS.map(([, , , params, results]) => [\n      FUNC_TYPE,\n      ...vec(params),\n      ...vec(results),\n    ]);\n    // Static Wasm sections that never change between compilations.\n    this.#importSection = new Uint8Array(\n      section(\n        SECTION.import,\n        vec(\n          MATH_IMPORTS.map(([, mod, field], i) => [\n            ...encodeASCIIString(mod),\n            ...encodeASCIIString(field),\n            EXTERN_FUNC, // import kind: function\n            ...unsignedLEB128(i + 1), // type index (0 = main func type)\n          ])\n        )\n      )\n    );\n    // One function, type index 0.\n    this.#functionSection = new Uint8Array(\n      section(SECTION.function, vec([[0]]))\n    );\n    // Min 1 page (64 KiB), no max.\n    // https://webassembly.github.io/spec/core/binary/types.html#binary-limits\n    this.#memorySection = new Uint8Array(\n      section(SECTION.memory, vec([[0x00, 0x01]]))\n    );\n    // Export \"fn\" (func index = nImports) and \"mem\" (memory) for the wrapper.\n    this.#exportSection = new Uint8Array(\n      section(\n        SECTION.export,\n        vec([\n          [\n            ...encodeASCIIString(\"fn\"),\n            EXTERN_FUNC,\n            ...unsignedLEB128(MATH_IMPORTS.length),\n          ],\n          [...encodeASCIIString(\"mem\"), EXTERN_MEM, 0x00],\n        ])\n      )\n    );\n    // Wasm binary magic + version (constant).\n    // https://webassembly.github.io/spec/core/binary/modules.html#binary-magic\n    this.#wasmMagicVersion = new Uint8Array([\n      0x00,\n      0x61,\n      0x73,\n      0x6d, // \\0asm\n      0x01,\n      0x00,\n      0x00,\n      0x00, // version 1\n    ]);\n    const f64Buf = new ArrayBuffer(8);\n    this.#f64View = new DataView(f64Buf);\n    this.#f64Arr = new Uint8Array(f64Buf);\n    this.#initialized = true;\n  }\n\n  constructor(domain, range) {\n    if (!PsWasmCompiler.#initialized) {\n      PsWasmCompiler.#init();\n    }\n    this._nIn = domain.length >> 1;\n    this._nOut = range.length >> 1;\n    this._range = range;\n    this._code = [];\n\n    // Params 0..nIn-1 are locals; extra locals start at _nextLocal.\n    this._nextLocal = this._nIn;\n\n    this._freeLocals = [];\n    this._sharedLocals = new Map(); // node → {local, remaining} for CSE\n  }\n\n  // Wasm emit helpers\n\n  _allocLocal() {\n    return this._freeLocals.pop() ?? this._nextLocal++;\n  }\n\n  _releaseLocal(idx) {\n    this._freeLocals.push(idx);\n  }\n\n  _emitULEB128(n) {\n    do {\n      let b = n & 0x7f;\n      n >>>= 7;\n      if (n !== 0) {\n        b |= 0x80;\n      }\n      this._code.push(b);\n    } while (n !== 0);\n  }\n\n  // `i32.const` immediates are signed LEB128 (Wasm spec), so they must be\n  // emitted with sign extension — the unsigned encoder mis-encodes any value\n  // whose final 7-bit group has bit 0x40 set (e.g. 64 → 0x40 → decoded as −64).\n  _emitSLEB128(n) {\n    for (;;) {\n      const b = n & 0x7f;\n      n >>= 7; // arithmetic shift keeps the sign bit\n      if ((n === 0 && (b & 0x40) === 0) || (n === -1 && (b & 0x40) !== 0)) {\n        this._code.push(b);\n        return;\n      }\n      this._code.push(b | 0x80);\n    }\n  }\n\n  _emitF64Const(value) {\n    this._code.push(OP.f64_const);\n    PsWasmCompiler.#f64View.setFloat64(0, value, true /* little-endian */);\n    for (let i = 0; i < 8; i++) {\n      this._code.push(PsWasmCompiler.#f64Arr[i]);\n    }\n  }\n\n  _emitLocalGet(idx) {\n    this._code.push(OP.local_get);\n    this._emitULEB128(idx);\n  }\n\n  _emitLocalSet(idx) {\n    this._code.push(OP.local_set);\n    this._emitULEB128(idx);\n  }\n\n  _emitLocalTee(idx) {\n    this._code.push(OP.local_tee);\n    this._emitULEB128(idx);\n  }\n\n  // Tree node compilation\n\n  /**\n   * Emit Wasm instructions for `node`, leaving exactly one f64 on the Wasm\n   * operand stack. Returns false if the node cannot be compiled.\n   */\n  _compileNode(node) {\n    if (node.shared) {\n      const entry = this._sharedLocals.get(node);\n      if (entry !== undefined) {\n        this._emitLocalGet(entry.local);\n        if (--entry.remaining === 0) {\n          this._releaseLocal(entry.local);\n        }\n        return true;\n      }\n      if (!this._compileNodeImpl(node)) {\n        return false;\n      }\n      const local = this._allocLocal();\n      this._sharedLocals.set(node, { local, remaining: node.sharedCount - 1 });\n      this._emitLocalTee(local);\n      return true;\n    }\n    return this._compileNodeImpl(node);\n  }\n\n  _compileNodeImpl(node) {\n    switch (node.type) {\n      case PS_NODE.arg:\n        this._emitLocalGet(node.index);\n        return true;\n\n      case PS_NODE.const: {\n        let v = node.value;\n        if (typeof v === \"boolean\") {\n          v = v ? 1 : 0;\n        }\n        this._emitF64Const(v);\n        return true;\n      }\n\n      case PS_NODE.unary:\n        return this._compileUnaryNode(node);\n\n      case PS_NODE.binary:\n        return this._compileBinaryNode(node);\n\n      case PS_NODE.ternary:\n        return this._compileTernaryNode(node);\n\n      default:\n        return false;\n    }\n  }\n\n  _compileSinCosNode(node) {\n    // PS sin/cos take degrees; normalize mod 360 before converting to radians\n    // so that e.g. sin(360°) = 0, not Math.sin(2π) ≈ -2.4e-16.\n    const local = this._allocLocal();\n    try {\n      if (!this._compileNode(node.operand)) {\n        return false;\n      }\n      const code = this._code;\n      this._emitLocalSet(local);\n      this._emitLocalGet(local);\n      this._emitLocalGet(local);\n      this._emitF64Const(360);\n      code.push(OP.f64_div, OP.f64_trunc);\n      this._emitF64Const(360);\n      code.push(OP.f64_mul, OP.f64_sub); // a mod 360\n      this._emitF64Const(PsWasmCompiler.#degToRad);\n      code.push(OP.f64_mul, OP.call);\n      this._emitULEB128(\n        PsWasmCompiler.#importIdx[node.op === TOKEN.sin ? \"sin\" : \"cos\"]\n      );\n      return true;\n    } finally {\n      this._releaseLocal(local);\n    }\n  }\n\n  _compileUnaryNode(node) {\n    const code = this._code;\n    if (node.op === TOKEN.sin || node.op === TOKEN.cos) {\n      return this._compileSinCosNode(node);\n    }\n\n    // `not` needs i32, not f64 — handle before the generic compilation below.\n    if (node.op === TOKEN.not) {\n      if (node.valueType === PS_VALUE_TYPE.boolean) {\n        if (!this._compileNodeAsBoolI32(node.operand)) {\n          return false;\n        }\n        code.push(OP.i32_eqz, OP.f64_convert_i32_s);\n        return true;\n      }\n      if (node.valueType === PS_VALUE_TYPE.numeric) {\n        // Bitwise NOT: ~n, implemented as n XOR -1.\n        // i32.const -1 encodes as the single signed-LEB128 byte 0x7f.\n        if (!this._compileNode(node.operand)) {\n          return false;\n        }\n        code.push(\n          OP.i32_trunc_f64_s,\n          OP.i32_const,\n          0x7f,\n          OP.i32_xor,\n          OP.f64_convert_i32_s\n        );\n        return true;\n      }\n      // Unknown type — cannot safely choose boolean or bitwise NOT.\n      return false;\n    }\n\n    if (!this._compileNode(node.operand)) {\n      return false;\n    }\n    switch (node.op) {\n      case TOKEN.abs:\n        code.push(OP.f64_abs);\n        break;\n      case TOKEN.neg:\n        code.push(OP.f64_neg);\n        break;\n      case TOKEN.sqrt:\n        code.push(OP.f64_sqrt);\n        break;\n      case TOKEN.floor:\n        code.push(OP.f64_floor);\n        break;\n      case TOKEN.ceiling:\n        code.push(OP.f64_ceil);\n        break;\n      case TOKEN.round:\n        // PostScript `round` uses round-half-up (floor(x+0.5)), not the\n        // banker's rounding that Wasm f64.nearest implements.\n        this._emitF64Const(0.5);\n        code.push(OP.f64_add, OP.f64_floor);\n        break;\n      case TOKEN.truncate:\n        code.push(OP.f64_trunc);\n        break;\n      case TOKEN.cvi:\n        // Truncate toward zero, keep as f64.\n        code.push(OP.i32_trunc_f64_s, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.cvr:\n        // No-op: already f64.\n        break;\n      case TOKEN.ln:\n        code.push(OP.call);\n        this._emitULEB128(PsWasmCompiler.#importIdx.log);\n        break;\n      case TOKEN.log:\n        code.push(OP.call);\n        this._emitULEB128(PsWasmCompiler.#importIdx.log10);\n        break;\n      default:\n        return false;\n    }\n    return true;\n  }\n\n  _compileSafeDivNode(first, second) {\n    // Returns 0 when divisor == 0 (IEEE 754 gives ±Inf/NaN; pdfium returns 0).\n    const tmp = this._allocLocal();\n    try {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      if (!this._compileNode(first)) {\n        return false;\n      }\n      const code = this._code;\n      this._emitLocalTee(tmp);\n      code.push(OP.f64_div);\n      this._emitF64Const(0);\n      this._emitLocalGet(tmp);\n      this._emitF64Const(0);\n      code.push(OP.f64_ne, OP.select);\n      return true;\n    } finally {\n      this._releaseLocal(tmp);\n    }\n  }\n\n  _compileSafeIdivNode(first, second) {\n    // `trunc(second / first)` returning 0 when first == 0, matching pdfium.\n    // Same select pattern as _compileSafeDivNode with an extra f64_trunc.\n    const tmp = this._allocLocal();\n    try {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      if (!this._compileNode(first)) {\n        return false;\n      }\n      const code = this._code;\n      this._emitLocalTee(tmp);\n      code.push(OP.f64_div, OP.f64_trunc);\n      this._emitF64Const(0);\n      this._emitLocalGet(tmp);\n      this._emitF64Const(0);\n      code.push(OP.f64_ne, OP.select);\n      return true;\n    } finally {\n      this._releaseLocal(tmp);\n    }\n  }\n\n  _compileBitshiftNode(first, second) {\n    if (first.type !== PS_NODE.const || !Number.isInteger(first.value)) {\n      return false;\n    }\n    if (!this._compileNode(second)) {\n      return false;\n    }\n\n    const code = this._code;\n    code.push(OP.i32_trunc_f64_s);\n    const shift = first.value;\n    if (shift > 0) {\n      code.push(OP.i32_const);\n      this._emitSLEB128(shift);\n      code.push(OP.i32_shl);\n    } else if (shift < 0) {\n      code.push(OP.i32_const);\n      this._emitSLEB128(-shift);\n      code.push(OP.i32_shr_s);\n    }\n    code.push(OP.f64_convert_i32_s);\n    return true;\n  }\n\n  _compileModNode(first, second) {\n    // a mod 0 → 0, matching pdfium. Const b=0: a is computed but discarded.\n    if (first.type === PS_NODE.const && first.value === 0) {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      this._code.push(OP.drop);\n      this._emitF64Const(0);\n      return true;\n    }\n\n    const localA = this._allocLocal();\n    try {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      this._emitLocalTee(localA);\n\n      const code = this._code;\n      if (first.type === PS_NODE.const) {\n        // b≠0 guaranteed (b=0 handled above).\n        this._emitLocalGet(localA);\n        this._emitF64Const(first.value);\n        code.push(OP.f64_div, OP.f64_trunc);\n        this._emitF64Const(first.value);\n        code.push(OP.f64_mul, OP.f64_sub);\n      } else {\n        const localB = this._allocLocal();\n        try {\n          if (!this._compileNode(first)) {\n            return false;\n          }\n          this._emitLocalSet(localB);\n          this._emitLocalGet(localA);\n          this._emitLocalGet(localB);\n          code.push(OP.f64_div, OP.f64_trunc);\n          this._emitLocalGet(localB);\n          code.push(OP.f64_mul, OP.f64_sub);\n          // Guard: if b=0, return 0 instead of NaN.\n          this._emitF64Const(0);\n          this._emitLocalGet(localB);\n          this._emitF64Const(0);\n          code.push(OP.f64_ne, OP.select);\n        } finally {\n          this._releaseLocal(localB);\n        }\n      }\n      return true;\n    } finally {\n      this._releaseLocal(localA);\n    }\n  }\n\n  _compileAtanNode(first, second) {\n    const localR = this._allocLocal();\n    try {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      if (!this._compileNode(first)) {\n        return false;\n      }\n\n      const code = this._code;\n      code.push(OP.call);\n      this._emitULEB128(PsWasmCompiler.#importIdx.atan2);\n      this._emitF64Const(PsWasmCompiler.#radToDeg);\n      code.push(OP.f64_mul);\n\n      this._emitLocalTee(localR);\n      this._emitF64Const(0);\n      code.push(OP.f64_lt, OP.if, F64);\n      this._emitLocalGet(localR);\n      this._emitF64Const(360);\n      code.push(OP.f64_add, OP.else);\n      this._emitLocalGet(localR);\n      code.push(OP.end);\n      return true;\n    } finally {\n      this._releaseLocal(localR);\n    }\n  }\n\n  _compileBitwiseNode(op, first, second) {\n    if (!this._compileBitwiseOperandI32(second)) {\n      return false;\n    }\n    if (!this._compileBitwiseOperandI32(first)) {\n      return false;\n    }\n    const code = this._code;\n    switch (op) {\n      case TOKEN.and:\n        code.push(OP.i32_and);\n        break;\n      case TOKEN.or:\n        code.push(OP.i32_or);\n        break;\n      case TOKEN.xor:\n        code.push(OP.i32_xor);\n        break;\n      default:\n        return false;\n    }\n    code.push(OP.f64_convert_i32_s);\n    return true;\n  }\n\n  _compileBitwiseOperandI32(node) {\n    if (node.valueType === PS_VALUE_TYPE.boolean) {\n      return this._compileNodeAsBoolI32(node);\n    }\n    if (!this._compileNode(node)) {\n      return false;\n    }\n    this._code.push(OP.i32_trunc_f64_s);\n    return true;\n  }\n\n  _compileStandardBinaryNode(op, first, second) {\n    // Identical non-atomic operands: compile once, tee/get.\n    // Skip when shared — _compileNode already handles that case.\n    if (\n      first === second &&\n      first.type !== PS_NODE.arg &&\n      first.type !== PS_NODE.const &&\n      !first.shared\n    ) {\n      const tmp = this._allocLocal();\n      try {\n        if (!this._compileNode(first)) {\n          return false;\n        }\n        this._emitLocalTee(tmp); // [x]  (also stores to tmp)\n        this._emitLocalGet(tmp); // [x, x]\n      } finally {\n        this._releaseLocal(tmp);\n      }\n    } else {\n      if (!this._compileNode(second)) {\n        return false;\n      }\n      if (!this._compileNode(first)) {\n        return false;\n      }\n    }\n\n    const code = this._code;\n    switch (op) {\n      case TOKEN.add:\n        code.push(OP.f64_add);\n        break;\n      case TOKEN.sub:\n        code.push(OP.f64_sub);\n        break;\n      case TOKEN.mul:\n        code.push(OP.f64_mul);\n        break;\n      case TOKEN.exp:\n        code.push(OP.call);\n        this._emitULEB128(PsWasmCompiler.#importIdx.pow);\n        break;\n      case TOKEN.eq:\n        code.push(OP.f64_eq, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.ne:\n        code.push(OP.f64_ne, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.lt:\n        code.push(OP.f64_lt, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.le:\n        code.push(OP.f64_le, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.gt:\n        code.push(OP.f64_gt, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.ge:\n        code.push(OP.f64_ge, OP.f64_convert_i32_s);\n        break;\n      case TOKEN.min:\n        code.push(OP.f64_min);\n        break;\n      case TOKEN.max:\n        code.push(OP.f64_max);\n        break;\n      default:\n        return false;\n    }\n    return true;\n  }\n\n  _compileBinaryNode(node) {\n    const { op, first, second } = node;\n    if (op === TOKEN.bitshift) {\n      return this._compileBitshiftNode(first, second);\n    }\n\n    if (op === TOKEN.div) {\n      return this._compileSafeDivNode(first, second);\n    }\n\n    if (op === TOKEN.idiv) {\n      return this._compileSafeIdivNode(first, second);\n    }\n\n    if (op === TOKEN.mod) {\n      return this._compileModNode(first, second);\n    }\n\n    if (op === TOKEN.atan) {\n      return this._compileAtanNode(first, second);\n    }\n\n    if (op === TOKEN.and || op === TOKEN.or || op === TOKEN.xor) {\n      return this._compileBitwiseNode(op, first, second);\n    }\n\n    return this._compileStandardBinaryNode(op, first, second);\n  }\n\n  /**\n   * Compile `node` leaving an i32 (0 or 1) on the stack, short-circuiting\n   * f64/i32 round-trips for comparisons, boolean and/or/xor, and boolean `not`.\n   */\n  _compileNodeAsBoolI32(node) {\n    if (node.type === PS_NODE.binary) {\n      // Comparison: leaves i32 directly.\n      const wasmOp = PsWasmCompiler.#comparisonToOp.get(node.op);\n      if (wasmOp !== undefined) {\n        if (!this._compileNode(node.second)) {\n          return false;\n        }\n        if (!this._compileNode(node.first)) {\n          return false;\n        }\n        this._code.push(wasmOp);\n        return true;\n      }\n      // Boolean and/or/xor: compile as i32, skipping f64.convert_i32_s.\n      if (\n        node.valueType === PS_VALUE_TYPE.boolean &&\n        (node.op === TOKEN.and || node.op === TOKEN.or || node.op === TOKEN.xor)\n      ) {\n        if (!this._compileNodeAsBoolI32(node.second)) {\n          return false;\n        }\n        if (!this._compileNodeAsBoolI32(node.first)) {\n          return false;\n        }\n        switch (node.op) {\n          case TOKEN.and:\n            this._code.push(OP.i32_and);\n            break;\n          case TOKEN.or:\n            this._code.push(OP.i32_or);\n            break;\n          case TOKEN.xor:\n            this._code.push(OP.i32_xor);\n            break;\n        }\n        return true;\n      }\n    }\n    // Boolean not: i32.eqz.\n    if (\n      node.type === PS_NODE.unary &&\n      node.op === TOKEN.not &&\n      node.valueType === PS_VALUE_TYPE.boolean\n    ) {\n      if (!this._compileNodeAsBoolI32(node.operand)) {\n        return false;\n      }\n      this._code.push(OP.i32_eqz);\n      return true;\n    }\n    // Fallback: f64 then truncate (safe — boolean f64 is always 0.0 or 1.0).\n    if (!this._compileNode(node)) {\n      return false;\n    }\n    if (node.valueType === PS_VALUE_TYPE.boolean) {\n      this._code.push(OP.i32_trunc_f64_s);\n    } else {\n      // Unknown type: f64.ne treats NaN as truthy (NaN != 0 → 1).\n      this._emitF64Const(0);\n      this._code.push(OP.f64_ne);\n    }\n    return true;\n  }\n\n  // Value-returning if/else/end; both branches leave one f64.\n  _compileTernaryNode(node) {\n    if (!this._compileNodeAsBoolI32(node.cond)) {\n      return false;\n    }\n    this._code.push(OP.if, F64);\n    if (!this._compileNode(node.then)) {\n      return false;\n    }\n    this._code.push(OP.else);\n    if (!this._compileNode(node.otherwise)) {\n      return false;\n    }\n    this._code.push(OP.end);\n    return true;\n  }\n\n  /**\n   * Convert the parser AST to a tree, compile each output expression, clamp\n   * results to the declared range, store to linear memory, and assemble the\n   * Wasm binary.\n   *\n   * @param {import(\"./ast.js\").PsProgram} program\n   * @returns {Uint8Array|null}  Wasm binary, or null if compilation failed.\n   */\n  compile(program) {\n    const outputs = new PSStackToTree().evaluate(program, this._nIn);\n    if (!outputs || outputs.length < this._nOut) {\n      return null;\n    }\n\n    // For each output: push memory offset, compile, clamp to [min, max], store.\n    const code = this._code;\n    for (let i = 0; i < this._nOut; i++) {\n      const min = this._range[i * 2];\n      const max = this._range[i * 2 + 1];\n      code.push(OP.i32_const);\n      this._emitSLEB128(i * 8);\n      if (!this._compileNode(outputs[i])) {\n        return null;\n      }\n      this._emitF64Const(max);\n      code.push(OP.f64_min);\n      this._emitF64Const(min);\n      code.push(OP.f64_max, OP.f64_store, 0x03, 0x00);\n    }\n    code.push(OP.end); // end of function body\n\n    // Assemble the Wasm module binary\n\n    const nIn = this._nIn;\n    const nLocals = this._nextLocal - nIn;\n\n    // Type section: function type varies per compilation; imports precomputed.\n    const paramTypes = Array(nIn).fill(F64);\n    const resultTypes = []; // void: outputs are written to linear memory\n    const funcType = [FUNC_TYPE, ...vec(paramTypes), ...vec(resultTypes)];\n    const typeSectionBytes = new Uint8Array(\n      section(\n        SECTION.type,\n        vec([funcType, ...PsWasmCompiler.#importTypeEntries])\n      )\n    );\n\n    // Code section: local declarations + compiled body bytes.\n    const localDecls =\n      nLocals > 0\n        ? vec([[...unsignedLEB128(nLocals), F64]]) // one group of nLocals f64s\n        : vec([]);\n    const funcBodyLen = localDecls.length + code.length;\n    const codeSectionBytes = new Uint8Array(\n      section(\n        SECTION.code,\n        vec([[...unsignedLEB128(funcBodyLen), ...localDecls, ...code]])\n      )\n    );\n\n    // Section order per spec: type, import, function, memory, export, code.\n    const magicVersion = PsWasmCompiler.#wasmMagicVersion;\n    const importSection = PsWasmCompiler.#importSection;\n    const functionSection = PsWasmCompiler.#functionSection;\n    const memorySection = PsWasmCompiler.#memorySection;\n    const exportSection = PsWasmCompiler.#exportSection;\n    const totalLen =\n      magicVersion.length +\n      typeSectionBytes.length +\n      importSection.length +\n      functionSection.length +\n      memorySection.length +\n      exportSection.length +\n      codeSectionBytes.length;\n    const result = new Uint8Array(totalLen);\n    let off = 0;\n    result.set(magicVersion, off);\n    off += magicVersion.length;\n    result.set(typeSectionBytes, off);\n    off += typeSectionBytes.length;\n    result.set(importSection, off);\n    off += importSection.length;\n    result.set(functionSection, off);\n    off += functionSection.length;\n    result.set(memorySection, off);\n    off += memorySection.length;\n    result.set(exportSection, off);\n    off += exportSection.length;\n    result.set(codeSectionBytes, off);\n    return result;\n  }\n}\n\n/**\n * Parse and compile a PostScript Type 4 function source string into a Wasm\n * binary.  PSStackToTree handles constant folding and algebraic simplifications\n * during the parse-to-tree conversion, so no separate optimizer pass is needed.\n *\n * @param {string} source    – raw PostScript source (decoded PDF stream)\n * @param {number[]} domain  – flat [min0,max0, min1,max1, ...] array\n * @param {number[]} range   – flat [min0,max0, min1,max1, ...] array\n * @returns {Uint8Array|null}  – Wasm binary, or null if compilation failed\n */\nfunction compilePostScriptToWasm(source, domain, range) {\n  return new PsWasmCompiler(domain, range).compile(\n    parsePostScriptFunction(source)\n  );\n}\n\n/**\n * Build a JS wrapper around a compiled Wasm instance.\n *\n * The returned function has the signature `(src, srcOffset, dest, destOffset)`.\n * It reads nIn f64 inputs from `src` starting at `srcOffset`, and writes\n * nOut clamped f64 outputs to `dest` starting at `destOffset`.\n */\nfunction _makeWrapper(exports, nIn, nOut) {\n  const { fn, mem } = exports;\n  const outView = new Float64Array(mem.buffer, 0, nOut);\n\n  // Unrolled for common arities (1-4) to avoid loop overhead.\n  let writeOut;\n  switch (nOut) {\n    case 1:\n      writeOut = (dest, destOffset) => {\n        dest[destOffset] = outView[0];\n      };\n      break;\n    case 2:\n      writeOut = (dest, destOffset) => {\n        dest[destOffset] = outView[0];\n        dest[destOffset + 1] = outView[1];\n      };\n      break;\n    case 3:\n      writeOut = (dest, destOffset) => {\n        dest[destOffset] = outView[0];\n        dest[destOffset + 1] = outView[1];\n        dest[destOffset + 2] = outView[2];\n      };\n      break;\n    case 4:\n      writeOut = (dest, destOffset) => {\n        dest[destOffset] = outView[0];\n        dest[destOffset + 1] = outView[1];\n        dest[destOffset + 2] = outView[2];\n        dest[destOffset + 3] = outView[3];\n      };\n      break;\n    default:\n      writeOut = (dest, destOffset) => {\n        for (let i = 0; i < nOut; i++) {\n          dest[destOffset + i] = outView[i];\n        }\n      };\n  }\n\n  // Specialize the call site for each arity so that the engine sees a\n  // fixed-argument call rather than a spread — avoiding the per-call\n  // argument-array allocation that `fn(...inBuf)` would cause.\n  switch (nIn) {\n    case 1:\n      return (src, srcOffset, dest, destOffset) => {\n        fn(src[srcOffset]);\n        writeOut(dest, destOffset);\n      };\n    case 2:\n      return (src, srcOffset, dest, destOffset) => {\n        fn(src[srcOffset], src[srcOffset + 1]);\n        writeOut(dest, destOffset);\n      };\n    case 3:\n      return (src, srcOffset, dest, destOffset) => {\n        fn(src[srcOffset], src[srcOffset + 1], src[srcOffset + 2]);\n        writeOut(dest, destOffset);\n      };\n    case 4:\n      return (src, srcOffset, dest, destOffset) => {\n        fn(\n          src[srcOffset],\n          src[srcOffset + 1],\n          src[srcOffset + 2],\n          src[srcOffset + 3]\n        );\n        writeOut(dest, destOffset);\n      };\n    default: {\n      // Fallback for unusual arities: pre-allocate once, copy per call.\n      const inBuf = new Float64Array(nIn);\n      return (src, srcOffset, dest, destOffset) => {\n        for (let i = 0; i < nIn; i++) {\n          inBuf[i] = src[srcOffset + i];\n        }\n        fn(...inBuf);\n        writeOut(dest, destOffset);\n      };\n    }\n  }\n}\n\n/**\n * Parse, optimize, compile, and synchronously instantiate a PostScript Type 4\n * function source string as a callable JavaScript function backed by a Wasm\n * module.\n *\n * Note: synchronous Wasm compilation is only allowed for small modules\n * (< 4 KB in most browsers).  Type 4 functions always qualify.\n *\n * @param {string} source    – raw PostScript source (decoded PDF stream)\n * @param {number[]} domain  – flat [min0,max0, min1,max1, ...] array\n * @param {number[]} range   – flat [min0,max0, min1,max1, ...] array\n * @returns {Function|null}  – a `(src, srcOffset, dest, destOffset)` function\n *   that writes nOut clamped f64 outputs to `dest`, or null if compilation\n *   failed.\n */\nfunction buildPostScriptWasmFunction(source, domain, range) {\n  const bytes = compilePostScriptToWasm(source, domain, range);\n  if (!bytes) {\n    return null;\n  }\n  try {\n    const instance = new WebAssembly.Instance(\n      new WebAssembly.Module(bytes),\n      _mathImportObject\n    );\n    return _makeWrapper(\n      instance.exports,\n      domain.length >> 1,\n      range.length >> 1\n    );\n  } catch {\n    return null;\n  }\n}\n\nexport { buildPostScriptWasmFunction, compilePostScriptToWasm };\n","/* Copyright 2019 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, makeSet, unreachable, warn } from \"../shared/util.js\";\nimport { RefSet, RefSetCache } from \"./primitives.js\";\n\nclass BaseLocalCache {\n  constructor(options) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseLocalCache\n    ) {\n      unreachable(\"Cannot initialize BaseLocalCache.\");\n    }\n    this._onlyRefs = options?.onlyRefs === true;\n\n    if (!this._onlyRefs) {\n      this._nameRefMap = new Map();\n      this._imageMap = new Map();\n    }\n    this._imageCache = new RefSetCache();\n  }\n\n  getByName(name) {\n    if (this._onlyRefs) {\n      unreachable(\"Should not call `getByName` method.\");\n    }\n    const ref = this._nameRefMap.get(name);\n    if (ref) {\n      return this.getByRef(ref);\n    }\n    return this._imageMap.get(name) || null;\n  }\n\n  getByRef(ref) {\n    return this._imageCache.get(ref) || null;\n  }\n\n  set(name, ref, data) {\n    unreachable(\"Abstract method `set` called.\");\n  }\n}\n\nclass LocalImageCache extends BaseLocalCache {\n  set(name, ref = null, data) {\n    if (typeof name !== \"string\") {\n      throw new Error('LocalImageCache.set - expected \"name\" argument.');\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      this._nameRefMap.set(name, ref);\n      this._imageCache.put(ref, data);\n      return;\n    }\n    // name\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\n\nclass LocalColorSpaceCache extends BaseLocalCache {\n  set(name = null, ref = null, data) {\n    if (typeof name !== \"string\" && !ref) {\n      throw new Error(\n        'LocalColorSpaceCache.set - expected \"name\" and/or \"ref\" argument.'\n      );\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      if (name !== null) {\n        // Optional when `ref` is defined.\n        this._nameRefMap.set(name, ref);\n      }\n      this._imageCache.put(ref, data);\n      return;\n    }\n    // name\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\n\nclass LocalFunctionCache extends BaseLocalCache {\n  constructor(options) {\n    super({ onlyRefs: true });\n  }\n\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('LocalFunctionCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\n\nclass LocalGStateCache extends BaseLocalCache {\n  set(name, ref = null, data) {\n    if (typeof name !== \"string\") {\n      throw new Error('LocalGStateCache.set - expected \"name\" argument.');\n    }\n    if (ref) {\n      if (this._imageCache.has(ref)) {\n        return;\n      }\n      this._nameRefMap.set(name, ref);\n      this._imageCache.put(ref, data);\n      return;\n    }\n    // name\n    if (this._imageMap.has(name)) {\n      return;\n    }\n    this._imageMap.set(name, data);\n  }\n}\n\nclass LocalTilingPatternCache extends BaseLocalCache {\n  constructor(options) {\n    super({ onlyRefs: true });\n  }\n\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('LocalTilingPatternCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\n\nclass RegionalImageCache extends BaseLocalCache {\n  constructor(options) {\n    super({ onlyRefs: true });\n  }\n\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('RegionalImageCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n}\n\nclass GlobalColorSpaceCache extends BaseLocalCache {\n  constructor(options) {\n    super({ onlyRefs: true });\n  }\n\n  set(name = null, ref, data) {\n    if (!ref) {\n      throw new Error('GlobalColorSpaceCache.set - expected \"ref\" argument.');\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n\n  clear() {\n    this._imageCache.clear();\n  }\n}\n\nclass GlobalImageCache {\n  static NUM_PAGES_THRESHOLD = 2;\n\n  static MIN_IMAGES_TO_CACHE = 10;\n\n  static MAX_BYTE_SIZE = 5e7; // Fifty megabytes.\n\n  #decodeFailedSet = new RefSet();\n\n  constructor() {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        GlobalImageCache.NUM_PAGES_THRESHOLD > 1,\n        \"GlobalImageCache - invalid NUM_PAGES_THRESHOLD constant.\"\n      );\n    }\n    this._refCache = new RefSetCache();\n    this._imageCache = new RefSetCache();\n  }\n\n  get #byteSize() {\n    let byteSize = 0;\n    for (const imageData of this._imageCache) {\n      byteSize += imageData.byteSize;\n    }\n    return byteSize;\n  }\n\n  get #cacheLimitReached() {\n    if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {\n      return false;\n    }\n    if (this.#byteSize < GlobalImageCache.MAX_BYTE_SIZE) {\n      return false;\n    }\n    return true;\n  }\n\n  shouldCache(ref, pageIndex) {\n    const pageIndexSet = this._refCache.getOrPutComputed(ref, makeSet);\n    pageIndexSet.add(pageIndex);\n\n    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n      return false;\n    }\n    if (!this._imageCache.has(ref) && this.#cacheLimitReached) {\n      return false;\n    }\n    return true;\n  }\n\n  addDecodeFailed(ref) {\n    this.#decodeFailedSet.put(ref);\n  }\n\n  hasDecodeFailed(ref) {\n    return this.#decodeFailedSet.has(ref);\n  }\n\n  /**\n   * PLEASE NOTE: Must be called *after* the `setData` method.\n   */\n  addByteSize(ref, byteSize) {\n    const imageData = this._imageCache.get(ref);\n    if (!imageData) {\n      return; // The image data isn't cached (the limit was reached).\n    }\n    if (imageData.byteSize) {\n      return; // The byte-size has already been set.\n    }\n    imageData.byteSize = byteSize;\n  }\n\n  getData(ref, pageIndex) {\n    const pageIndexSet = this._refCache.get(ref);\n    if (!pageIndexSet) {\n      return null;\n    }\n    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\n      return null;\n    }\n    const imageData = this._imageCache.get(ref);\n    if (!imageData) {\n      return null;\n    }\n    // Ensure that we keep track of all pages containing the image reference.\n    pageIndexSet.add(pageIndex);\n\n    return imageData;\n  }\n\n  setData(ref, data) {\n    if (!this._refCache.has(ref)) {\n      throw new Error(\n        'GlobalImageCache.setData - expected \"shouldCache\" to have been called.'\n      );\n    }\n    if (this._imageCache.has(ref)) {\n      return;\n    }\n    if (this.#cacheLimitReached) {\n      warn(\"GlobalImageCache.setData - cache limit reached.\");\n      return;\n    }\n    this._imageCache.put(ref, data);\n  }\n\n  clear(onlyData = false) {\n    if (!onlyData) {\n      this.#decodeFailedSet.clear();\n      this._refCache.clear();\n    }\n    this._imageCache.clear();\n  }\n}\n\nexport {\n  GlobalColorSpaceCache,\n  GlobalImageCache,\n  LocalColorSpaceCache,\n  LocalFunctionCache,\n  LocalGStateCache,\n  LocalImageCache,\n  LocalTilingPatternCache,\n  RegionalImageCache,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dict, Ref } from \"./primitives.js\";\nimport { FormatError, info, shadow, warn } from \"../shared/util.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { buildPostScriptJsFunction } from \"./postscript/js_evaluator.js\";\nimport { buildPostScriptWasmFunction } from \"./postscript/wasm_compiler.js\";\nimport { isNumberArray } from \"./core_utils.js\";\nimport { LocalFunctionCache } from \"./image_utils.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\nconst FunctionType = {\n  SAMPLED: 0,\n  EXPONENTIAL_INTERPOLATION: 2,\n  STITCHING: 3,\n  POSTSCRIPT_CALCULATOR: 4,\n};\n\nclass PDFFunctionFactory {\n  static #useWasm = true;\n\n  static setOptions({ useWasm }) {\n    this.#useWasm = useWasm;\n  }\n\n  constructor({ xref }) {\n    this.xref = xref;\n  }\n\n  get useWasm() {\n    return PDFFunctionFactory.#useWasm;\n  }\n\n  create(fn, parseArray = false) {\n    let fnRef, parsedFn;\n\n    // Check if the Function is cached first, to avoid re-parsing it.\n    if (fn instanceof Ref) {\n      fnRef = fn;\n    } else if (fn instanceof Dict) {\n      fnRef = fn.objId;\n    } else if (fn instanceof BaseStream) {\n      fnRef = fn.dict?.objId;\n    }\n    if (fnRef) {\n      const cachedFn = this._localFunctionCache.getByRef(fnRef);\n      if (cachedFn) {\n        return cachedFn;\n      }\n    }\n\n    const fnObj = this.xref.fetchIfRef(fn);\n    if (Array.isArray(fnObj)) {\n      if (!parseArray) {\n        throw new Error(\n          'PDFFunctionFactory.create - expected \"parseArray\" argument.'\n        );\n      }\n      parsedFn = PDFFunction.parseArray(this, fnObj);\n    } else {\n      parsedFn = PDFFunction.parse(this, fnObj);\n    }\n\n    // Attempt to cache the parsed Function, by reference.\n    if (fnRef) {\n      this._localFunctionCache.set(/* name = */ null, fnRef, parsedFn);\n    }\n    return parsedFn;\n  }\n\n  /**\n   * @private\n   */\n  get _localFunctionCache() {\n    return shadow(this, \"_localFunctionCache\", new LocalFunctionCache());\n  }\n}\n\nfunction toNumberArray(arr) {\n  if (!Array.isArray(arr)) {\n    return null;\n  }\n  if (!isNumberArray(arr, null)) {\n    // Non-number is found -- convert all items to numbers.\n    return arr.map(x => +x);\n  }\n  return arr;\n}\n\nclass PDFFunction {\n  static getSampleArray(size, outputSize, bps, stream) {\n    let length = outputSize;\n    for (const s of size) {\n      length *= s;\n    }\n\n    const array = new Array(length);\n    let codeSize = 0;\n    let codeBuf = 0;\n    // 32 is a valid bps so shifting won't work\n    const sampleMul = 1.0 / (2.0 ** bps - 1);\n\n    const strBytes = stream.getBytes((length * bps + 7) / 8);\n    let strIdx = 0;\n    for (let i = 0; i < length; i++) {\n      while (codeSize < bps) {\n        codeBuf <<= 8;\n        codeBuf |= strBytes[strIdx++];\n        codeSize += 8;\n      }\n      codeSize -= bps;\n      array[i] = (codeBuf >> codeSize) * sampleMul;\n      codeBuf &= (1 << codeSize) - 1;\n    }\n    return array;\n  }\n\n  static parse(factory, fn) {\n    const dict = fn.dict || fn;\n    const typeNum = dict.get(\"FunctionType\");\n\n    switch (typeNum) {\n      case FunctionType.SAMPLED:\n        return this.constructSampled(factory, fn, dict);\n      case FunctionType.EXPONENTIAL_INTERPOLATION:\n        return this.constructInterpolated(factory, dict);\n      case FunctionType.STITCHING:\n        return this.constructStiched(factory, dict);\n      case FunctionType.POSTSCRIPT_CALCULATOR:\n        return this.constructPostScript(factory, fn, dict);\n    }\n    throw new FormatError(`Unknown function type: ${typeNum}`);\n  }\n\n  static parseArray(factory, fnObj) {\n    const { xref } = factory;\n\n    const fnArray = [];\n    for (const fn of fnObj) {\n      fnArray.push(this.parse(factory, xref.fetchIfRef(fn)));\n    }\n    return function (src, srcOffset, dest, destOffset) {\n      for (let i = 0, ii = fnArray.length; i < ii; i++) {\n        fnArray[i](src, srcOffset, dest, destOffset + i);\n      }\n    };\n  }\n\n  static constructSampled(factory, fn, dict) {\n    // See chapter 3, page 109 of the PDF reference\n    function interpolate(x, xmin, xmax, ymin, ymax) {\n      return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));\n    }\n\n    const domain = toNumberArray(dict.getArray(\"Domain\"));\n    const range = toNumberArray(dict.getArray(\"Range\"));\n\n    if (!domain || !range) {\n      throw new FormatError(\"No domain or range\");\n    }\n\n    const inputSize = domain.length / 2;\n    const outputSize = range.length / 2;\n\n    const size = toNumberArray(dict.getArray(\"Size\"));\n    const bps = dict.get(\"BitsPerSample\");\n    const order = dict.get(\"Order\") || 1;\n    if (order !== 1) {\n      // No description how cubic spline interpolation works in PDF32000:2008\n      // As in poppler, ignoring order, linear interpolation may work as good\n      info(\"No support for cubic spline interpolation: \" + order);\n    }\n\n    let encode = toNumberArray(dict.getArray(\"Encode\"));\n    if (!encode) {\n      encode = [];\n      for (let i = 0; i < inputSize; ++i) {\n        encode.push(0, size[i] - 1);\n      }\n    }\n\n    const decode = toNumberArray(dict.getArray(\"Decode\")) || range;\n\n    const samples = this.getSampleArray(size, outputSize, bps, fn);\n    // const mask = 2 ** bps - 1;\n\n    return function constructSampledFn(src, srcOffset, dest, destOffset) {\n      // See chapter 3, page 110 of the PDF reference.\n\n      // Building the cube vertices: its part and sample index\n      // http://rjwagner49.com/Mathematics/Interpolation.pdf\n      const cubeVertices = 1 << inputSize;\n      const cubeN = new Float64Array(cubeVertices).fill(1);\n      const cubeVertex = new Uint32Array(cubeVertices);\n      let i, j;\n\n      let k = outputSize,\n        pos = 1;\n      // Map x_i to y_j for 0 <= i < m using the sampled function.\n      for (i = 0; i < inputSize; ++i) {\n        // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)\n        const domain_2i = domain[2 * i];\n        const domain_2i_1 = domain[2 * i + 1];\n        const xi = MathClamp(src[srcOffset + i], domain_2i, domain_2i_1);\n\n        // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,\n        //                   Encode_2i, Encode_2i+1)\n        let e = interpolate(\n          xi,\n          domain_2i,\n          domain_2i_1,\n          encode[2 * i],\n          encode[2 * i + 1]\n        );\n\n        // e_i' = min(max(e_i, 0), Size_i - 1)\n        const size_i = size[i];\n        e = MathClamp(e, 0, size_i - 1);\n\n        // Adjusting the cube: N and vertex sample index\n        const e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;\n        const n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);\n        const n1 = e - e0; // (e - e0) / (e1 - e0);\n        const offset0 = e0 * k;\n        const offset1 = offset0 + k; // e1 * k\n        for (j = 0; j < cubeVertices; j++) {\n          if (j & pos) {\n            cubeN[j] *= n1;\n            cubeVertex[j] += offset1;\n          } else {\n            cubeN[j] *= n0;\n            cubeVertex[j] += offset0;\n          }\n        }\n\n        k *= size_i;\n        pos <<= 1;\n      }\n\n      for (j = 0; j < outputSize; ++j) {\n        // Sum all cube vertices' samples portions\n        let rj = 0;\n        for (i = 0; i < cubeVertices; i++) {\n          rj += samples[cubeVertex[i] + j] * cubeN[i];\n        }\n\n        // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,\n        //                    Decode_2j, Decode_2j+1)\n        rj = interpolate(rj, 0, 1, decode[2 * j], decode[2 * j + 1]);\n\n        // y_j = min(max(r_j, range_2j), range_2j+1)\n        dest[destOffset + j] = MathClamp(rj, range[2 * j], range[2 * j + 1]);\n      }\n    };\n  }\n\n  static constructInterpolated(factory, dict) {\n    const c0 = toNumberArray(dict.getArray(\"C0\")) || [0];\n    const c1 = toNumberArray(dict.getArray(\"C1\")) || [1];\n    const n = dict.get(\"N\");\n\n    const diff = [];\n    for (let i = 0, ii = c0.length; i < ii; ++i) {\n      diff.push(c1[i] - c0[i]);\n    }\n    const length = diff.length;\n\n    return function constructInterpolatedFn(src, srcOffset, dest, destOffset) {\n      const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;\n\n      for (let j = 0; j < length; ++j) {\n        dest[destOffset + j] = c0[j] + x * diff[j];\n      }\n    };\n  }\n\n  static constructStiched(factory, dict) {\n    const domain = toNumberArray(dict.getArray(\"Domain\"));\n\n    if (!domain) {\n      throw new FormatError(\"No domain\");\n    }\n\n    const inputSize = domain.length / 2;\n    if (inputSize !== 1) {\n      throw new FormatError(\"Bad domain for stiched function\");\n    }\n    const { xref } = factory;\n\n    const fns = [];\n    for (const fn of dict.get(\"Functions\")) {\n      fns.push(this.parse(factory, xref.fetchIfRef(fn)));\n    }\n\n    const bounds = toNumberArray(dict.getArray(\"Bounds\"));\n    const encode = toNumberArray(dict.getArray(\"Encode\"));\n    const tmpBuf = new Float32Array(1);\n\n    return function constructStichedFn(src, srcOffset, dest, destOffset) {\n      // Clamp to domain.\n      const v = MathClamp(src[srcOffset], domain[0], domain[1]);\n      // calculate which bound the value is in\n      const length = bounds.length;\n      let i;\n      for (i = 0; i < length; ++i) {\n        if (v < bounds[i]) {\n          break;\n        }\n      }\n\n      // encode value into domain of function\n      const dmin = i > 0 ? bounds[i - 1] : domain[0];\n      const dmax = i < length ? bounds[i] : domain[1];\n\n      const rmin = encode[2 * i];\n      const rmax = encode[2 * i + 1];\n\n      // Prevent the value from becoming NaN as a result\n      // of division by zero (fixes issue6113.pdf).\n      tmpBuf[0] =\n        dmin === dmax\n          ? rmin\n          : rmin + ((v - dmin) * (rmax - rmin)) / (dmax - dmin);\n\n      // call the appropriate function\n      fns[i](tmpBuf, 0, dest, destOffset);\n    };\n  }\n\n  static constructPostScript(factory, fn, dict) {\n    const domain = toNumberArray(dict.getArray(\"Domain\"));\n    const range = toNumberArray(dict.getArray(\"Range\"));\n\n    if (!domain) {\n      throw new FormatError(\"No domain.\");\n    }\n\n    if (!range) {\n      throw new FormatError(\"No range.\");\n    }\n\n    const psCode = fn.getString();\n\n    try {\n      if (factory.useWasm) {\n        const wasmFn = buildPostScriptWasmFunction(psCode, domain, range);\n        if (wasmFn) {\n          return wasmFn; // (src, srcOffset, dest, destOffset) → void\n        }\n      }\n    } catch {}\n\n    warn(\"Failed to compile PostScript function to wasm, falling back to JS\");\n\n    return buildPostScriptJsFunction(psCode, domain, range);\n  }\n}\n\nfunction isPDFFunction(v) {\n  let fnDict;\n  if (v instanceof Dict) {\n    fnDict = v;\n  } else if (v instanceof BaseStream) {\n    fnDict = v.dict;\n  } else {\n    return false;\n  }\n  return fnDict.has(\"FunctionType\");\n}\n\nexport { FunctionType, isPDFFunction, PDFFunctionFactory };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dict, Name, Ref } from \"./primitives.js\";\nimport { FormatError, warn } from \"../shared/util.js\";\n\nfunction textSinkWrapper(sink) {\n  const TEXT_CONTENT_CHUNK_SIZE = 100; // Same as in `src/display/api.js`.\n  const resolved = sink ? null : Promise.resolve();\n\n  return {\n    enqueueInvoked: false,\n\n    enqueue(chunk, size) {\n      this.enqueueInvoked = true;\n      sink?.enqueue(chunk, size);\n    },\n\n    get desiredSize() {\n      return sink?.desiredSize ?? TEXT_CONTENT_CHUNK_SIZE;\n    },\n\n    get ready() {\n      return sink?.ready ?? resolved;\n    },\n  };\n}\n\nfunction _parseVisibilityExpression(\n  xref,\n  array,\n  nestingCounter,\n  currentResult\n) {\n  const MAX_NESTING = 10;\n  if (++nestingCounter > MAX_NESTING) {\n    warn(\"Visibility expression is too deeply nested\");\n    return;\n  }\n  const length = array.length;\n  const operator = xref.fetchIfRef(array[0]);\n  if (length < 2 || !(operator instanceof Name)) {\n    warn(\"Invalid visibility expression\");\n    return;\n  }\n  switch (operator.name) {\n    case \"And\":\n    case \"Or\":\n    case \"Not\":\n      currentResult.push(operator.name);\n      break;\n    default:\n      warn(`Invalid operator ${operator.name} in visibility expression`);\n      return;\n  }\n  for (let i = 1; i < length; i++) {\n    const raw = array[i];\n    const object = xref.fetchIfRef(raw);\n    if (Array.isArray(object)) {\n      const nestedResult = [];\n      currentResult.push(nestedResult);\n      // Recursively parse a subarray.\n      _parseVisibilityExpression(xref, object, nestingCounter, nestedResult);\n    } else if (raw instanceof Ref) {\n      // Reference to an OCG dictionary.\n      currentResult.push(raw.toString());\n    }\n  }\n}\n\nfunction parseMarkedContentProps(xref, contentProperties, resources) {\n  let optionalContent;\n  if (contentProperties instanceof Name) {\n    const properties = resources.get(\"Properties\");\n    optionalContent = properties.get(contentProperties.name);\n  } else if (contentProperties instanceof Dict) {\n    optionalContent = contentProperties;\n  } else {\n    throw new FormatError(\"Optional content properties malformed.\");\n  }\n\n  const optionalContentType = optionalContent.get(\"Type\")?.name;\n  if (optionalContentType === \"OCG\") {\n    return {\n      type: optionalContentType,\n      id: optionalContent.objId,\n    };\n  } else if (optionalContentType === \"OCMD\") {\n    const expression = optionalContent.get(\"VE\");\n    if (Array.isArray(expression)) {\n      const result = [];\n      _parseVisibilityExpression(xref, expression, 0, result);\n      if (result.length > 0) {\n        return {\n          type: \"OCMD\",\n          expression: result,\n        };\n      }\n    }\n\n    const optionalContentGroups = optionalContent.get(\"OCGs\");\n    if (\n      Array.isArray(optionalContentGroups) ||\n      optionalContentGroups instanceof Dict\n    ) {\n      const groupIds = [];\n      if (Array.isArray(optionalContentGroups)) {\n        for (const ocg of optionalContentGroups) {\n          groupIds.push(ocg.toString());\n        }\n      } else {\n        // Dictionary, just use the obj id.\n        groupIds.push(optionalContentGroups.objId);\n      }\n      const p = optionalContent.get(\"P\");\n\n      return {\n        type: optionalContentType,\n        ids: groupIds,\n        policy: p instanceof Name ? p.name : null,\n        expression: null,\n      };\n    } else if (optionalContentGroups instanceof Ref) {\n      return {\n        type: optionalContentType,\n        id: optionalContentGroups.toString(),\n      };\n    }\n  }\n  return null;\n}\n\nexport { parseMarkedContentProps, textSinkWrapper };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { warn } from \"../shared/util.js\";\n\n// Implements a subset of the Unicode Bidirectional Algorithm (UBA).\n// Specification: https://www.unicode.org/reports/tr9/tr9-48.html\n\n// Character types for symbols from 0000 to 00FF.\n// Source: ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt\n// prettier-ignore\nconst baseTypes = [\n  \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"S\", \"B\", \"S\",\n  \"WS\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\",\n  \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"B\", \"B\", \"S\", \"WS\", \"ON\", \"ON\", \"ET\",\n  \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ES\", \"CS\", \"ES\", \"CS\", \"CS\",\n  \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"CS\", \"ON\",\n  \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\",\n  \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\",\n  \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\",\n  \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"CS\", \"ON\", \"ET\",\n  \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"ON\", \"ON\", \"BN\", \"ON\",\n  \"ON\", \"ET\", \"ET\", \"EN\", \"EN\", \"ON\", \"L\", \"ON\", \"ON\", \"ON\", \"EN\", \"L\",\n  \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\",\n  \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\"\n];\n\n// Character types for symbols from 0600 to 06FF.\n// Source: ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt\n// Note that 061D does not exist in the Unicode standard (see\n// http://unicode.org/charts/PDF/U0600.pdf), so we replace it with an\n// empty string and issue a warning if we encounter this character. The\n// empty string is required to properly index the items after it.\n// prettier-ignore\nconst arabicTypes = [\n  \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ON\", \"ON\", \"AL\", \"ET\", \"ET\", \"AL\",\n  \"CS\", \"AL\", \"ON\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\",\n  \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\",\n  \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\",\n  \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\",\n  \"AN\", \"AN\", \"AN\", \"ET\", \"AN\", \"AN\", \"AL\", \"AL\", \"AL\", \"NSM\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\",\n  \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\",\n  \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"NSM\", \"NSM\",\n  \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"EN\", \"EN\", \"EN\", \"EN\",\n  \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\"\n];\n\nfunction isOdd(i) {\n  return (i & 1) !== 0;\n}\n\nfunction isEven(i) {\n  return (i & 1) === 0;\n}\n\nfunction findUnequal(arr, start, value) {\n  let j, jj;\n  for (j = start, jj = arr.length; j < jj; ++j) {\n    if (arr[j] !== value) {\n      return j;\n    }\n  }\n  return j;\n}\n\nfunction reverseValues(arr, start, end) {\n  for (let i = start, j = end - 1; i < j; ++i, --j) {\n    const temp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = temp;\n  }\n}\n\nfunction createBidiText(str, isLTR, vertical = false) {\n  let dir = \"ltr\";\n  if (vertical) {\n    dir = \"ttb\";\n  } else if (!isLTR) {\n    dir = \"rtl\";\n  }\n  return { str, dir };\n}\n\n// These are used in bidi(), which is called frequently. We re-use them on\n// each call to avoid unnecessary allocations.\nconst chars = [];\nconst types = [];\n\nfunction bidi(str, startLevel = -1, vertical = false) {\n  let isLTR = true;\n  const strLength = str.length;\n  if (strLength === 0 || vertical) {\n    return createBidiText(str, isLTR, vertical);\n  }\n\n  // Get types and fill arrays\n  chars.length = strLength;\n  types.length = strLength;\n  let numBidi = 0;\n\n  let i, ii;\n  for (i = 0; i < strLength; ++i) {\n    chars[i] = str.charAt(i);\n\n    const charCode = str.charCodeAt(i);\n    let charType = \"L\";\n    if (charCode <= 0x00ff) {\n      charType = baseTypes[charCode];\n    } else if (0x0590 <= charCode && charCode <= 0x05f4) {\n      charType = \"R\";\n    } else if (0x0600 <= charCode && charCode <= 0x06ff) {\n      charType = arabicTypes[charCode & 0xff];\n      if (!charType) {\n        warn(\"Bidi: invalid Unicode character \" + charCode.toString(16));\n      }\n    } else if (\n      (0x0700 <= charCode && charCode <= 0x08ac) ||\n      (0xfb50 <= charCode && charCode <= 0xfdff) ||\n      (0xfe70 <= charCode && charCode <= 0xfeff)\n    ) {\n      charType = \"AL\";\n    }\n    if (charType === \"R\" || charType === \"AL\" || charType === \"AN\") {\n      numBidi++;\n    }\n    types[i] = charType;\n  }\n\n  // Detect the bidi method\n  // - If there are no rtl characters then no bidi needed\n  // - If less than 30% chars are rtl then string is primarily ltr,\n  //   unless the string is very short.\n  // - If more than 30% chars are rtl then string is primarily rtl\n  if (numBidi === 0) {\n    isLTR = true;\n    return createBidiText(str, isLTR);\n  }\n\n  if (startLevel === -1) {\n    if (numBidi / strLength < 0.3 && strLength > 4) {\n      isLTR = true;\n      startLevel = 0;\n    } else {\n      isLTR = false;\n      startLevel = 1;\n    }\n  }\n\n  const levels = [];\n  for (i = 0; i < strLength; ++i) {\n    levels[i] = startLevel;\n  }\n\n  /*\n   X1-X10: skip most of this, since we are NOT doing the embeddings.\n   */\n  const e = isOdd(startLevel) ? \"R\" : \"L\";\n  const sor = e;\n  const eor = sor;\n\n  /*\n   W1. Examine each non-spacing mark (NSM) in the level run, and change the\n   type of the NSM to the type of the previous character. If the NSM is at the\n   start of the level run, it will get the type of sor.\n   */\n  let lastType = sor;\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"NSM\") {\n      types[i] = lastType;\n    } else {\n      lastType = types[i];\n    }\n  }\n\n  /*\n   W2. Search backwards from each instance of a European number until the\n   first strong type (R, L, AL, or sor) is found.  If an AL is found, change\n   the type of the European number to Arabic number.\n   */\n  lastType = sor;\n  let t;\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"EN\") {\n      types[i] = lastType === \"AL\" ? \"AN\" : \"EN\";\n    } else if (t === \"R\" || t === \"L\" || t === \"AL\") {\n      lastType = t;\n    }\n  }\n\n  /*\n   W3. Change all ALs to R.\n   */\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"AL\") {\n      types[i] = \"R\";\n    }\n  }\n\n  /*\n   W4. A single European separator between two European numbers changes to a\n   European number. A single common separator between two numbers of the same\n   type changes to that type:\n   */\n  for (i = 1; i < strLength - 1; ++i) {\n    if (types[i] === \"ES\" && types[i - 1] === \"EN\" && types[i + 1] === \"EN\") {\n      types[i] = \"EN\";\n    }\n    if (\n      types[i] === \"CS\" &&\n      (types[i - 1] === \"EN\" || types[i - 1] === \"AN\") &&\n      types[i + 1] === types[i - 1]\n    ) {\n      types[i] = types[i - 1];\n    }\n  }\n\n  /*\n   W5. A sequence of European terminators adjacent to European numbers changes\n   to all European numbers:\n   */\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"EN\") {\n      // do before\n      for (let j = i - 1; j >= 0; --j) {\n        if (types[j] !== \"ET\") {\n          break;\n        }\n        types[j] = \"EN\";\n      }\n      // do after\n      for (let j = i + 1; j < strLength; ++j) {\n        if (types[j] !== \"ET\") {\n          break;\n        }\n        types[j] = \"EN\";\n      }\n    }\n  }\n\n  /*\n   W6. Otherwise, separators and terminators change to Other Neutral:\n   */\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"WS\" || t === \"ES\" || t === \"ET\" || t === \"CS\") {\n      types[i] = \"ON\";\n    }\n  }\n\n  /*\n   W7. Search backwards from each instance of a European number until the\n   first strong type (R, L, or sor) is found. If an L is found,  then change\n   the type of the European number to L.\n   */\n  lastType = sor;\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (t === \"EN\") {\n      types[i] = lastType === \"L\" ? \"L\" : \"EN\";\n    } else if (t === \"R\" || t === \"L\") {\n      lastType = t;\n    }\n  }\n\n  /*\n   N1. A sequence of neutrals takes the direction of the surrounding strong\n   text if the text on both sides has the same direction. European and Arabic\n   numbers are treated as though they were R. Start-of-level-run (sor) and\n   end-of-level-run (eor) are used at level run boundaries.\n   See https://www.unicode.org/reports/tr9/tr9-48.html#N1\n   */\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"ON\") {\n      const end = findUnequal(types, i + 1, \"ON\");\n\n      // Scan left past non-strong types to find the nearest strong context\n      // (L, R, EN, or AN), falling back to sor at the level-run boundary.\n      let before = sor;\n      for (let j = i - 1; j >= 0; j--) {\n        const tt = types[j];\n        if (tt === \"L\") {\n          before = \"L\";\n          break;\n        }\n        if (tt === \"R\" || tt === \"EN\" || tt === \"AN\") {\n          before = \"R\";\n          break;\n        }\n      }\n\n      // Scan right past non-strong types to find the nearest strong context,\n      // falling back to eor at the level-run boundary.\n      let after = eor;\n      for (let j = end; j < strLength; j++) {\n        const tt = types[j];\n        if (tt === \"L\") {\n          after = \"L\";\n          break;\n        }\n        if (tt === \"R\" || tt === \"EN\" || tt === \"AN\") {\n          after = \"R\";\n          break;\n        }\n      }\n\n      if (before === after) {\n        types.fill(before, i, end);\n      }\n      i = end - 1; // reset to end (-1 so next iteration is ok)\n    }\n  }\n\n  /*\n   N2. Any remaining neutrals take the embedding direction.\n   */\n  for (i = 0; i < strLength; ++i) {\n    if (types[i] === \"ON\") {\n      types[i] = e;\n    }\n  }\n\n  /*\n   I1. For all characters with an even (left-to-right) embedding direction,\n   those of type R go up one level and those of type AN or EN go up two\n   levels.\n   I2. For all characters with an odd (right-to-left) embedding direction,\n   those of type L, EN or AN go up one level.\n   */\n  for (i = 0; i < strLength; ++i) {\n    t = types[i];\n    if (isEven(levels[i])) {\n      if (t === \"R\") {\n        levels[i] += 1;\n      } else if (t === \"AN\" || t === \"EN\") {\n        levels[i] += 2;\n      }\n    } else if (/* isOdd && */ t === \"L\" || t === \"AN\" || t === \"EN\") {\n      levels[i] += 1;\n    }\n  }\n\n  /*\n   L1. On each line, reset the embedding level of the following characters to\n   the paragraph embedding level:\n\n   segment separators,\n   paragraph separators,\n   any sequence of whitespace characters preceding a segment separator or\n   paragraph separator, and any sequence of white space characters at the end\n   of the line.\n   */\n\n  // don't bother as text is only single line\n\n  /*\n   L2. From the highest level found in the text to the lowest odd level on\n   each line, reverse any contiguous sequence of characters that are at that\n   level or higher.\n   */\n\n  // find highest level & lowest odd level\n  let highestLevel = -1;\n  let lowestOddLevel = 99;\n  let level;\n  for (i = 0, ii = levels.length; i < ii; ++i) {\n    level = levels[i];\n    if (highestLevel < level) {\n      highestLevel = level;\n    }\n    if (lowestOddLevel > level && isOdd(level)) {\n      lowestOddLevel = level;\n    }\n  }\n\n  // now reverse between those limits\n  for (level = highestLevel; level >= lowestOddLevel; --level) {\n    // find segments to reverse\n    let start = -1;\n    for (i = 0, ii = levels.length; i < ii; ++i) {\n      if (levels[i] < level) {\n        if (start >= 0) {\n          reverseValues(chars, start, i);\n          start = -1;\n        }\n      } else if (start < 0) {\n        start = i;\n      }\n    }\n    if (start >= 0) {\n      reverseValues(chars, start, levels.length);\n    }\n  }\n\n  /*\n   L3. Combining marks applied to a right-to-left base character will at this\n   point precede their base character. If the rendering engine expects them to\n   follow the base characters in the final display process, then the ordering\n   of the marks and the base character must be reversed.\n   */\n\n  // don't bother for now\n\n  /*\n   L4. A character that possesses the mirrored property as specified by\n   Section 4.7, Mirrored, must be depicted by a mirrored glyph if the resolved\n   directionality of that character is R.\n   */\n\n  // don't mirror as characters are already mirrored in the pdf\n\n  // Finally, return string\n  for (i = 0, ii = chars.length; i < ii; ++i) {\n    const ch = chars[i];\n    if (ch === \"<\" || ch === \">\") {\n      chars[i] = \"\";\n    }\n  }\n  return createBidiText(chars.join(\"\"), isLTR);\n}\n\nexport { bidi };\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { normalizeFontName } from \"./fonts_utils.js\";\nimport { validateFontName } from \"./core_utils.js\";\nimport { warn } from \"../shared/util.js\";\n\nconst NORMAL = {\n  style: \"normal\",\n  weight: \"normal\",\n};\nconst MEDIUM = {\n  style: \"normal\",\n  weight: \"500\",\n};\nconst BOLD = {\n  style: \"normal\",\n  weight: \"bold\",\n};\nconst ITALIC = {\n  style: \"italic\",\n  weight: \"normal\",\n};\nconst BOLDITALIC = {\n  style: \"italic\",\n  weight: \"bold\",\n};\n\nconst substitutionMap = new Map([\n  [\n    \"Times-Roman\",\n    {\n      local: [\n        \"Times New Roman\",\n        \"Times-Roman\",\n        \"Times\",\n        \"Liberation Serif\",\n        \"Nimbus Roman\",\n        \"Nimbus Roman L\",\n        \"Tinos\",\n        \"Thorndale\",\n        \"TeX Gyre Termes\",\n        \"FreeSerif\",\n        \"Linux Libertine O\",\n        \"Libertinus Serif\",\n        \"PT Astra Serif\",\n        \"DejaVu Serif\",\n        \"Bitstream Vera Serif\",\n        \"Ubuntu\",\n      ],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"Times-Bold\",\n    {\n      alias: \"Times-Roman\",\n      style: BOLD,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"Times-Italic\",\n    {\n      alias: \"Times-Roman\",\n      style: ITALIC,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"Times-BoldItalic\",\n    {\n      alias: \"Times-Roman\",\n      style: BOLDITALIC,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"Helvetica\",\n    {\n      local: [\n        \"Helvetica\",\n        \"Helvetica Neue\",\n        \"Arial\",\n        \"Arial Nova\",\n        \"Liberation Sans\",\n        \"Arimo\",\n        \"Nimbus Sans\",\n        \"Nimbus Sans L\",\n        \"A030\",\n        \"TeX Gyre Heros\",\n        \"FreeSans\",\n        \"DejaVu Sans\",\n        \"Albany\",\n        \"Bitstream Vera Sans\",\n        \"Arial Unicode MS\",\n        \"Microsoft Sans Serif\",\n        \"Apple Symbols\",\n        \"Cantarell\",\n      ],\n      path: \"LiberationSans-Regular.ttf\",\n      style: NORMAL,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"Helvetica-Bold\",\n    {\n      alias: \"Helvetica\",\n      path: \"LiberationSans-Bold.ttf\",\n      style: BOLD,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"Helvetica-Oblique\",\n    {\n      alias: \"Helvetica\",\n      path: \"LiberationSans-Italic.ttf\",\n      style: ITALIC,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"Helvetica-BoldOblique\",\n    {\n      alias: \"Helvetica\",\n      path: \"LiberationSans-BoldItalic.ttf\",\n      style: BOLDITALIC,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"Courier\",\n    {\n      local: [\n        \"Courier\",\n        \"Courier New\",\n        \"Liberation Mono\",\n        \"Nimbus Mono\",\n        \"Nimbus Mono L\",\n        \"Cousine\",\n        \"Cumberland\",\n        \"TeX Gyre Cursor\",\n        \"FreeMono\",\n        \"Linux Libertine Mono O\",\n        \"Libertinus Mono\",\n      ],\n      style: NORMAL,\n      ultimate: \"monospace\",\n    },\n  ],\n  [\n    \"Courier-Bold\",\n    {\n      alias: \"Courier\",\n      style: BOLD,\n      ultimate: \"monospace\",\n    },\n  ],\n  [\n    \"Courier-Oblique\",\n    {\n      alias: \"Courier\",\n      style: ITALIC,\n      ultimate: \"monospace\",\n    },\n  ],\n  [\n    \"Courier-BoldOblique\",\n    {\n      alias: \"Courier\",\n      style: BOLDITALIC,\n      ultimate: \"monospace\",\n    },\n  ],\n  [\n    \"ArialBlack\",\n    {\n      local: [\"Arial Black\"],\n      style: {\n        style: \"normal\",\n        weight: \"900\",\n      },\n      fallback: \"Helvetica-Bold\",\n    },\n  ],\n  [\n    \"ArialBlack-Bold\",\n    {\n      alias: \"ArialBlack\",\n    },\n  ],\n  [\n    \"ArialBlack-Italic\",\n    {\n      alias: \"ArialBlack\",\n      style: {\n        style: \"italic\",\n        weight: \"900\",\n      },\n      fallback: \"Helvetica-BoldOblique\",\n    },\n  ],\n  [\n    \"ArialBlack-BoldItalic\",\n    {\n      alias: \"ArialBlack-Italic\",\n    },\n  ],\n  [\n    \"ArialNarrow\",\n    {\n      local: [\n        \"Arial Narrow\",\n        \"Liberation Sans Narrow\",\n        \"Helvetica Condensed\",\n        \"Nimbus Sans Narrow\",\n        \"TeX Gyre Heros Cn\",\n      ],\n      style: NORMAL,\n      fallback: \"Helvetica\",\n    },\n  ],\n  [\n    \"ArialNarrow-Bold\",\n    {\n      alias: \"ArialNarrow\",\n      style: BOLD,\n      fallback: \"Helvetica-Bold\",\n    },\n  ],\n  [\n    \"ArialNarrow-Italic\",\n    {\n      alias: \"ArialNarrow\",\n      style: ITALIC,\n      fallback: \"Helvetica-Oblique\",\n    },\n  ],\n  [\n    \"ArialNarrow-BoldItalic\",\n    {\n      alias: \"ArialNarrow\",\n      style: BOLDITALIC,\n      fallback: \"Helvetica-BoldOblique\",\n    },\n  ],\n  [\n    \"Calibri\",\n    {\n      local: [\"Calibri\", \"Carlito\"],\n      style: NORMAL,\n      fallback: \"Helvetica\",\n    },\n  ],\n  [\n    \"Calibri-Bold\",\n    {\n      alias: \"Calibri\",\n      style: BOLD,\n      fallback: \"Helvetica-Bold\",\n    },\n  ],\n  [\n    \"Calibri-Italic\",\n    {\n      alias: \"Calibri\",\n      style: ITALIC,\n      fallback: \"Helvetica-Oblique\",\n    },\n  ],\n  [\n    \"Calibri-BoldItalic\",\n    {\n      alias: \"Calibri\",\n      style: BOLDITALIC,\n      fallback: \"Helvetica-BoldOblique\",\n    },\n  ],\n  [\n    \"Wingdings\",\n    {\n      local: [\"Wingdings\", \"URW Dingbats\"],\n      style: NORMAL,\n    },\n  ],\n  [\n    \"Wingdings-Regular\",\n    {\n      alias: \"Wingdings\",\n    },\n  ],\n  [\n    \"Wingdings-Bold\",\n    {\n      alias: \"Wingdings\",\n    },\n  ],\n  [\n    \"\\xCB\\xCE\\xCC\\xE5\",\n    {\n      local: [\"SimSun\", \"SimSun Regular\", \"NSimSun\"],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"\\xBA\\xDA\\xCC\\xE5\",\n    {\n      local: [\"SimHei\", \"SimHei Regular\"],\n      style: NORMAL,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"\\xBF\\xAC\\xCC\\xE5\",\n    {\n      local: [\"KaiTi\", \"SimKai\", \"SimKai Regular\"],\n      style: NORMAL,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\n    \"\\xB7\\xC2\\xCB\\xCE\",\n    {\n      local: [\"FangSong\", \"SimFang\", \"SimFang Regular\"],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"\\xBF\\xAC\\xCC\\xE5_GB2312\",\n    {\n      alias: \"\\xBF\\xAC\\xCC\\xE5\",\n    },\n  ],\n  [\n    \"\\xB7\\xC2\\xCB\\xCE_GB2312\",\n    {\n      alias: \"\\xB7\\xC2\\xCB\\xCE\",\n    },\n  ],\n  [\n    \"\\xC1\\xA5\\xCA\\xE9\",\n    {\n      local: [\"SimLi\", \"SimLi Regular\"],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  [\n    \"\\xD0\\xC2\\xCB\\xCE\",\n    {\n      alias: \"\\xCB\\xCE\\xCC\\xE5\",\n    },\n  ],\n  // Standard Acrobat CJK fonts. These BaseFont names appear in PDFs that\n  // don't embed a CJK font and rely on the reader having Acrobat's bundled\n  // CJK fonts installed.\n  // Adobe-Japan1 - Mincho (serif).\n  [\n    \"HeiseiMin-W3\",\n    {\n      local: [\n        \"Hiragino Mincho ProN\",\n        \"Hiragino Mincho Pro\",\n        \"Yu Mincho\",\n        \"YuMincho\",\n        \"Source Han Serif JP\",\n        \"Noto Serif JP\",\n        \"Noto Serif CJK JP\",\n        \"IPAexMincho\",\n        \"IPAMincho\",\n        \"Takao Mincho\",\n        \"MS Mincho\",\n        \"MS PMincho\",\n      ],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  // Adobe-Japan1 - Gothic (sans-serif).\n  [\n    \"HeiseiKakuGo-W5\",\n    {\n      local: [\n        \"Hiragino Kaku Gothic ProN\",\n        \"Hiragino Kaku Gothic Pro\",\n        \"Hiragino Sans\",\n        \"Yu Gothic\",\n        \"YuGothic\",\n        \"Source Han Sans JP\",\n        \"Noto Sans JP\",\n        \"Noto Sans CJK JP\",\n        \"IPAexGothic\",\n        \"IPAGothic\",\n        \"Takao Gothic\",\n        \"Meiryo\",\n        \"MS Gothic\",\n        \"MS PGothic\",\n      ],\n      style: MEDIUM,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  // Common Adobe-Japan1 variants and Kozuka names.\n  [\"HeiseiMin-W3-Acro\", { alias: \"HeiseiMin-W3\" }],\n  [\"HeiseiKakuGo-W5-Acro\", { alias: \"HeiseiKakuGo-W5\" }],\n  [\"KozMinPro-Regular\", { alias: \"HeiseiMin-W3\" }],\n  [\"KozMinProVI-Regular\", { alias: \"HeiseiMin-W3\" }],\n  [\"KozMinPr6N-Regular\", { alias: \"HeiseiMin-W3\" }],\n  [\"KozGoPro-Regular\", { alias: \"HeiseiKakuGo-W5\" }],\n  [\"KozGoProVI-Regular\", { alias: \"HeiseiKakuGo-W5\" }],\n  [\"KozGoPr6N-Regular\", { alias: \"HeiseiKakuGo-W5\" }],\n\n  // Adobe-GB1 - Song (Simplified Chinese serif).\n  [\n    \"STSong-Light\",\n    {\n      local: [\n        \"STSong\",\n        \"Songti SC\",\n        \"Source Han Serif SC\",\n        \"Source Han Serif CN\",\n        \"Noto Serif SC\",\n        \"Noto Serif CJK SC\",\n        \"AR PL UMing CN\",\n        \"SimSun\",\n        \"NSimSun\",\n      ],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  // Adobe-GB1 - Hei (Simplified Chinese sans-serif).\n  [\n    \"STHeiti-Regular\",\n    {\n      local: [\n        \"STHeiti\",\n        \"Heiti SC\",\n        \"PingFang SC\",\n        \"Source Han Sans SC\",\n        \"Source Han Sans CN\",\n        \"Noto Sans SC\",\n        \"Noto Sans CJK SC\",\n        \"Microsoft YaHei\",\n        \"SimHei\",\n        \"WenQuanYi Zen Hei\",\n      ],\n      style: NORMAL,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\"STSongStd-Light\", { alias: \"STSong-Light\" }],\n  [\"AdobeSongStd-Light\", { alias: \"STSong-Light\" }],\n  [\"AdobeHeitiStd-Regular\", { alias: \"STHeiti-Regular\" }],\n  // KaiTi (regular script) and FangSong (imitation Song) are different\n  // typographic styles; route to the existing GB2312-keyed entries above.\n  [\"AdobeKaitiStd-Regular\", { alias: \"\\xBF\\xAC\\xCC\\xE5\" }],\n  [\"AdobeFangsongStd-Regular\", { alias: \"\\xB7\\xC2\\xCB\\xCE\" }],\n\n  // Adobe-CNS1 - Sung (Traditional Chinese serif).\n  [\n    \"MSung-Light\",\n    {\n      local: [\n        \"Songti TC\",\n        \"LiSong Pro\",\n        \"Source Han Serif TC\",\n        \"Source Han Serif TW\",\n        \"Noto Serif TC\",\n        \"Noto Serif CJK TC\",\n        \"AR PL UMing TW\",\n        \"PMingLiU\",\n        \"MingLiU\",\n        \"MingLiU_HKSCS\",\n      ],\n      style: NORMAL,\n      ultimate: \"serif\",\n    },\n  ],\n  // Adobe-CNS1 - Hei (Traditional Chinese sans-serif).\n  [\n    \"MHei-Medium\",\n    {\n      local: [\n        \"Heiti TC\",\n        \"STHeiti\",\n        \"Source Han Sans TC\",\n        \"Source Han Sans TW\",\n        \"Noto Sans TC\",\n        \"Noto Sans CJK TC\",\n        \"PingFang TC\",\n        \"Microsoft JhengHei\",\n      ],\n      style: MEDIUM,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\"MSungStd-Light\", { alias: \"MSung-Light\" }],\n  [\"AdobeMingStd-Light\", { alias: \"MSung-Light\" }],\n\n  // Adobe-Korea1 - Myeongjo (Korean serif).\n  [\n    \"HYSMyeongJo-Medium\",\n    {\n      local: [\n        \"AppleMyungjo\",\n        \"Source Han Serif KR\",\n        \"Noto Serif KR\",\n        \"Noto Serif CJK KR\",\n        \"Nanum Myeongjo\",\n        \"Batang\",\n      ],\n      style: MEDIUM,\n      ultimate: \"serif\",\n    },\n  ],\n  // Adobe-Korea1 - Gothic (Korean sans-serif).\n  [\n    \"HYGoThic-Medium\",\n    {\n      local: [\n        \"Apple SD Gothic Neo\",\n        \"AppleGothic\",\n        \"Source Han Sans KR\",\n        \"Noto Sans KR\",\n        \"Noto Sans CJK KR\",\n        \"Nanum Gothic\",\n        \"Malgun Gothic\",\n        \"Dotum\",\n        \"Gulim\",\n      ],\n      style: MEDIUM,\n      ultimate: \"sans-serif\",\n    },\n  ],\n  [\"HYSMyeongJoStd-Medium\", { alias: \"HYSMyeongJo-Medium\" }],\n  [\"AdobeMyungjoStd-Medium\", { alias: \"HYSMyeongJo-Medium\" }],\n  // Bold variants reuse the same fallback list with a bold style override\n  // so the @font-face declaration requests a bold local() match.\n  [\"HYGoThic-Bold\", { alias: \"HYGoThic-Medium\", style: BOLD }],\n  [\"AdobeGothicStd-Bold\", { alias: \"HYGoThic-Medium\", style: BOLD }],\n]);\n\nconst fontAliases = new Map([[\"Arial-Black\", \"ArialBlack\"]]);\n\nfunction getStyleToAppend(style) {\n  switch (style) {\n    case BOLD:\n      return \"Bold\";\n    case ITALIC:\n      return \"Italic\";\n    case BOLDITALIC:\n      return \"Bold Italic\";\n    default:\n      if (style?.weight === \"bold\") {\n        return \"Bold\";\n      }\n      if (style?.style === \"italic\") {\n        return \"Italic\";\n      }\n  }\n  return \"\";\n}\n\nfunction getFamilyName(str) {\n  // See https://gitlab.freedesktop.org/fontconfig/fontconfig/-/blob/14d466b30a8ab4a9d789977ed94f2c30e7209267/src/fcname.c#L137.\n  const keywords = new Set([\n    \"thin\",\n    \"extralight\",\n    \"ultralight\",\n    \"demilight\",\n    \"semilight\",\n    \"light\",\n    \"book\",\n    \"regular\",\n    \"normal\",\n    \"medium\",\n    \"demibold\",\n    \"semibold\",\n    \"bold\",\n    \"extrabold\",\n    \"ultrabold\",\n    \"black\",\n    \"heavy\",\n    \"extrablack\",\n    \"ultrablack\",\n    \"roman\",\n    \"italic\",\n    \"oblique\",\n    \"ultracondensed\",\n    \"extracondensed\",\n    \"condensed\",\n    \"semicondensed\",\n    \"normal\",\n    \"semiexpanded\",\n    \"expanded\",\n    \"extraexpanded\",\n    \"ultraexpanded\",\n    \"bolditalic\",\n  ]);\n  return str\n    .split(/[- ,+]+/g)\n    .filter(tok => !keywords.has(tok.toLowerCase()))\n    .join(\" \");\n}\n\n/**\n * Generate font description.\n * @param {Object} param0, font substitution description.\n * @param {Array<String>} src, contains src values (local(...) or url(...)).\n * @param {String} localFontPath, path to local fonts.\n * @param {boolean} useFallback, whether to use fallback font.\n * @param {boolean} usePath, whether to use path to font.\n * @param {String} append, style (Bold, Italic, ...) to append to font name.\n * @return {Object} { style, ultimate }.\n */\nfunction generateFont(\n  { alias, local, path, fallback, style, ultimate },\n  src,\n  localFontPath,\n  useFallback = true,\n  usePath = true,\n  append = \"\"\n) {\n  const result = {\n    style: null,\n    ultimate: null,\n  };\n  if (local) {\n    const extra = append ? ` ${append}` : \"\";\n    for (const name of local) {\n      src.push(`local(${name}${extra})`);\n    }\n  }\n  if (alias) {\n    const substitution = substitutionMap.get(alias);\n    const aliasAppend = append || getStyleToAppend(style);\n    Object.assign(\n      result,\n      generateFont(\n        substitution,\n        src,\n        localFontPath,\n        /* useFallback = */ useFallback && !fallback,\n        /* usePath = */ usePath && !path,\n        aliasAppend\n      )\n    );\n  }\n  if (style) {\n    result.style = style;\n  }\n  if (ultimate) {\n    result.ultimate = ultimate;\n  }\n  if (useFallback && fallback) {\n    const fallbackInfo = substitutionMap.get(fallback);\n    const { ultimate: fallbackUltimate } = generateFont(\n      fallbackInfo,\n      src,\n      localFontPath,\n      useFallback,\n      /* usePath = */ usePath && !path,\n      append\n    );\n    result.ultimate ||= fallbackUltimate;\n  }\n  if (usePath && path && localFontPath) {\n    src.push(`url(${localFontPath}${path})`);\n  }\n\n  return result;\n}\n\n/**\n * Get a font substitution for a given font.\n * The general idea is to have enough information to create a CSS rule like\n * this:\n *   @font-face {\n *    font-family: 'Times';\n *    src: local('Times New Roman'), local('Subst1'), local('Subst2'),\n *         url(.../TimesNewRoman.ttf)\n *    font-weight: normal;\n *    font-style: normal;\n *   }\n * or use the FontFace API.\n *\n * @param {Map} systemFontCache The cache of local fonts.\n * @param {Object} idFactory The ids factory.\n * @param {String} localFontPath Path to the fonts directory.\n * @param {String} baseFontName The font name to be substituted.\n * @param {String|undefined} standardFontName The standard font name to use\n *   if the base font is not available.\n * @param {String} type The font type.\n * @returns an Object with the CSS, the loaded name, the src and the style.\n */\nfunction getFontSubstitution(\n  systemFontCache,\n  idFactory,\n  localFontPath,\n  baseFontName,\n  standardFontName,\n  type\n) {\n  if (baseFontName.startsWith(\"InvalidPDFjsFont_\")) {\n    return null;\n  }\n\n  if (\n    (type === \"TrueType\" || type === \"Type1\") &&\n    /^[A-Z]{6}\\+/.test(baseFontName)\n  ) {\n    // When the font is a subset, we need to remove the prefix (see 9.6.4).\n    baseFontName = baseFontName.slice(7);\n  }\n\n  // It's possible to have a font name with spaces, commas or dashes, hence we\n  // just replace them by a dash.\n  baseFontName = normalizeFontName(baseFontName);\n\n  const key = baseFontName;\n  let substitutionInfo = systemFontCache.get(key);\n  if (substitutionInfo) {\n    return substitutionInfo;\n  }\n\n  // First, check if we've a substitution for the base font.\n  let substitution = substitutionMap.get(baseFontName);\n  if (!substitution) {\n    // Check if we've an alias for the base font, Arial-Black is the same as\n    // ArialBlack\n    for (const [alias, subst] of fontAliases) {\n      if (baseFontName.startsWith(alias)) {\n        baseFontName = `${subst}${baseFontName.substring(alias.length)}`;\n        substitution = substitutionMap.get(baseFontName);\n        break;\n      }\n    }\n  }\n\n  let mustAddBaseFont = false;\n  if (!substitution) {\n    // If not, check if we've a substitution for the standard font.\n    substitution = substitutionMap.get(standardFontName);\n    mustAddBaseFont = true;\n  }\n\n  const loadedName = `${idFactory.getDocId()}_s${idFactory.createFontId()}`;\n  if (!substitution) {\n    if (!validateFontName(baseFontName)) {\n      warn(`Cannot substitute the font because of its name: ${baseFontName}`);\n      systemFontCache.set(key, null);\n      // If the baseFontName is not valid we don't want to use it.\n      return null;\n    }\n    // Maybe we'll be lucky and the OS will have the font.\n    const bold = /bold/i.test(baseFontName);\n    const italic = /oblique|italic/i.test(baseFontName);\n    const style =\n      (bold && italic && BOLDITALIC) ||\n      (bold && BOLD) ||\n      (italic && ITALIC) ||\n      NORMAL;\n    substitutionInfo = {\n      css: `\"${getFamilyName(baseFontName)}\",${loadedName}`,\n      guessFallback: true,\n      loadedName,\n      baseFontName,\n      src: `local(${baseFontName})`,\n      style,\n    };\n    systemFontCache.set(key, substitutionInfo);\n    return substitutionInfo;\n  }\n\n  const src = [];\n  // Maybe the OS will have the exact font we want so just prepend it to the\n  // list.\n  if (mustAddBaseFont && validateFontName(baseFontName)) {\n    src.push(`local(${baseFontName})`);\n  }\n  const { style, ultimate } = generateFont(substitution, src, localFontPath);\n  const guessFallback = ultimate === null;\n  const fallback = guessFallback ? \"\" : `,${ultimate}`;\n\n  substitutionInfo = {\n    css: `\"${getFamilyName(baseFontName)}\",${loadedName}${fallback}`,\n    guessFallback,\n    loadedName,\n    baseFontName,\n    src: src.join(\",\"),\n    style,\n  };\n  systemFontCache.set(key, substitutionInfo);\n\n  return substitutionInfo;\n}\n\nexport { getFontSubstitution };\n","/* Copyright 2014 Opera Software ASA\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    // We don't care about endianness here.\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        h1 ^= k1;\n        h1 = (h1 << 13) | (h1 >>> 19);\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n        k2 = (k2 << 15) | (k2 >>> 17);\n        k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n        h2 ^= k2;\n        h2 = (h2 << 13) | (h2 >>> 19);\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n\n    k1 = 0;\n\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      /* falls through */\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      /* falls through */\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        /* falls through */\n\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n    h2 =\n      ((h2 * 0xff51afd7) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n    h2 =\n      ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n\n    return (\n      (h1 >>> 0).toString(16).padStart(8, \"0\") +\n      (h2 >>> 0).toString(16).padStart(8, \"0\")\n    );\n  }\n}\n\nexport { MurmurHash3_64 };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  FeatureTest,\n  FormatError,\n  ImageKind,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  convertBlackAndWhiteToRGBA,\n  convertToRGBA,\n} from \"../shared/image_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { ColorSpace } from \"./colorspace.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { DecodeStream } from \"./decode_stream.js\";\nimport { ImageResizer } from \"./image_resizer.js\";\nimport { JpegStream } from \"./jpeg_stream.js\";\nimport { JpxImage } from \"./jpx.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\nimport { Name } from \"./primitives.js\";\n\n/**\n * Configuration for {@linkcode PDFImage.fillGrayBuffer}.\n *\n * @typedef FillGrayBufferOptions\n * @property {number} [destWidth]\n *   Destination width; defaults to the source image width (no resampling).\n * @property {number} [destHeight]\n *   Destination height; defaults to the source image height (no resampling).\n * @property {boolean} [invertOutput=false]\n *   Whether to invert the output values (as in `x = 255 - x`).\n * @property {number} [maxRows]\n *   Maximum number of destination rows to write.\n * @property {number} [offset=0]\n *   Where to start.\n * @property {number} [stride=1]\n *   Step size between consecutive elements.\n */\n\n/**\n * Configuration for {@linkcode FillMaskAlphaCallback} functions.\n *\n * @typedef FillMaskAlphaOptions\n * @property {number} maxRows\n *   Maximum number of image rows to write; defaults to the full image height.\n * @property {number} offset\n *   Where to start.\n * @property {number} stride\n *   Step size between consecutive elements.\n */\n\n/**\n * Fills the alpha values for the mask.\n *\n * @callback FillMaskAlphaCallback\n * @param {Uint8ClampedArray} buffer\n *   Buffer to write the alpha values to.\n * @param {FillMaskAlphaOptions} options\n *   Configuration for filling the alpha values.\n * @return {Promise<undefined> | undefined | void}\n *   Optional promise that resolves when the alpha values have been filled.\n */\n\nclass PDFImage {\n  constructor({\n    xref,\n    res,\n    image,\n    isInline = false,\n    smask = null,\n    mask = null,\n    isMask = false,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache,\n  }) {\n    this.image = image;\n    const dict = image.dict;\n\n    const filter = dict.get(\"F\", \"Filter\");\n    let filterName;\n    if (filter instanceof Name) {\n      filterName = filter.name;\n    } else if (Array.isArray(filter)) {\n      const filterZero = xref.fetchIfRef(filter[0]);\n      if (filterZero instanceof Name) {\n        filterName = filterZero.name;\n      }\n    }\n    switch (filterName) {\n      case \"JPXDecode\":\n        ({\n          width: image.width,\n          height: image.height,\n          componentsCount: image.numComps,\n          bitsPerComponent: image.bitsPerComponent,\n        } = JpxImage.parseImageProperties(image.stream));\n        image.stream.reset();\n        const reducePower = ImageResizer.getReducePowerForJPX(\n          image.width,\n          image.height,\n          image.numComps\n        );\n        this.jpxDecoderOptions = {\n          numComponents: 0,\n          isIndexedColormap: false,\n          smaskInData: dict.get(\"SMaskInData\") >= 1,\n          reducePower,\n        };\n        if (reducePower) {\n          const factor = 2 ** reducePower;\n          image.width = Math.ceil(image.width / factor);\n          image.height = Math.ceil(image.height / factor);\n        }\n        break;\n      case \"JBIG2Decode\":\n        image.bitsPerComponent = 1;\n        image.numComps = 1;\n        break;\n    }\n\n    let width = dict.get(\"W\", \"Width\");\n    let height = dict.get(\"H\", \"Height\");\n\n    if (\n      Number.isInteger(image.width) &&\n      image.width > 0 &&\n      Number.isInteger(image.height) &&\n      image.height > 0 &&\n      (image.width !== width || image.height !== height)\n    ) {\n      warn(\n        \"PDFImage - using the Width/Height of the image data, \" +\n          \"rather than the image dictionary.\"\n      );\n      width = image.width;\n      height = image.height;\n    } else {\n      const validWidth = typeof width === \"number\" && width > 0,\n        validHeight = typeof height === \"number\" && height > 0;\n\n      if (!validWidth || !validHeight) {\n        if (!image.fallbackDims) {\n          throw new FormatError(\n            `Invalid image width: ${width} or height: ${height}`\n          );\n        }\n        warn(\n          \"PDFImage - using the Width/Height of the parent image, for SMask/Mask data.\"\n        );\n        if (!validWidth) {\n          width = image.fallbackDims.width;\n        }\n        if (!validHeight) {\n          height = image.fallbackDims.height;\n        }\n      }\n    }\n    this.width = width;\n    this.height = height;\n\n    this.interpolate = dict.get(\"I\", \"Interpolate\");\n    this.imageMask = dict.get(\"IM\", \"ImageMask\") || false;\n    this.matte = dict.get(\"Matte\") || false;\n\n    let bitsPerComponent = image.bitsPerComponent;\n    if (!bitsPerComponent) {\n      bitsPerComponent = dict.get(\"BPC\", \"BitsPerComponent\");\n      if (!bitsPerComponent) {\n        if (this.imageMask) {\n          bitsPerComponent = 1;\n        } else {\n          throw new FormatError(\n            `Bits per component missing in image: ${this.imageMask}`\n          );\n        }\n      }\n    }\n    this.bpc = bitsPerComponent;\n\n    if (!this.imageMask) {\n      let colorSpace = dict.getRaw(\"CS\") || dict.getRaw(\"ColorSpace\");\n      const hasColorSpace = !!colorSpace;\n\n      if (\n        this.jpxDecoderOptions?.smaskInData &&\n        dict.get(\"SMaskInData\") === 2\n      ) {\n        this.jpxPremultiplied = true;\n        if (this.matte) {\n          const matteColorSpace = ColorSpaceUtils.parse({\n            cs: hasColorSpace ? colorSpace : Name.get(\"DeviceRGB\"),\n            xref,\n            resources: isInline ? res : null,\n            pdfFunctionFactory,\n            globalColorSpaceCache,\n            localColorSpaceCache,\n          });\n          this.preblendMatte = matteColorSpace.getRgb(this.matte, 0);\n        }\n      }\n\n      if (!hasColorSpace) {\n        if (this.jpxDecoderOptions) {\n          colorSpace = Name.get(\"DeviceRGBA\");\n        } else {\n          switch (image.numComps) {\n            case 1:\n              colorSpace = Name.get(\"DeviceGray\");\n              break;\n            case 3:\n              colorSpace = Name.get(\"DeviceRGB\");\n              break;\n            case 4:\n              colorSpace = Name.get(\"DeviceCMYK\");\n              break;\n            default:\n              throw new Error(\n                `Images with ${image.numComps} color components not supported.`\n              );\n          }\n        }\n      } else if (this.jpxDecoderOptions?.smaskInData) {\n        // If the jpx image has a color space then it mustn't be used in order\n        // to be able to use the color space that comes from the pdf.\n        colorSpace = Name.get(\"DeviceRGBA\");\n      }\n\n      this.colorSpace = ColorSpaceUtils.parse({\n        cs: colorSpace,\n        xref,\n        resources: isInline ? res : null,\n        pdfFunctionFactory,\n        globalColorSpaceCache,\n        localColorSpaceCache,\n      });\n      this.numComps = this.colorSpace.numComps;\n\n      if (this.jpxDecoderOptions) {\n        this.jpxDecoderOptions.numComponents = hasColorSpace\n          ? this.numComps\n          : 0;\n        // If the jpx image has a color space then it mustn't be used in order\n        // to be able to use the color space that comes from the pdf.\n        this.jpxDecoderOptions.isIndexedColormap =\n          this.colorSpace.name === \"Indexed\";\n      }\n    } else {\n      this.numComps = 1;\n    }\n\n    this.decode = dict.getArray(\"D\", \"Decode\");\n    this.needsDecode = false;\n    if (\n      this.decode &&\n      ((this.colorSpace &&\n        !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent)) ||\n        (isMask &&\n          !ColorSpace.isDefaultDecode(this.decode, /* numComps = */ 1)))\n    ) {\n      this.needsDecode = true;\n      // Do some preprocessing to avoid more math.\n      const max = (1 << bitsPerComponent) - 1;\n      this.decodeCoefficients = [];\n      this.decodeAddends = [];\n      const isIndexed = this.colorSpace?.name === \"Indexed\";\n      for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) {\n        const dmin = this.decode[i];\n        const dmax = this.decode[i + 1];\n        this.decodeCoefficients[j] = isIndexed\n          ? (dmax - dmin) / max\n          : dmax - dmin;\n        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;\n      }\n    }\n\n    if (smask) {\n      // Provide fallback width/height values for corrupt SMask images\n      // (see issue19611.pdf).\n      smask.fallbackDims ??= { width, height };\n\n      this.smask = new PDFImage({\n        xref,\n        res,\n        image: smask,\n        isInline,\n        pdfFunctionFactory,\n        globalColorSpaceCache,\n        localColorSpaceCache,\n      });\n    } else if (mask) {\n      if (mask instanceof BaseStream) {\n        const maskDict = mask.dict,\n          imageMask = maskDict.get(\"IM\", \"ImageMask\");\n        if (!imageMask) {\n          warn(\"Ignoring /Mask in image without /ImageMask.\");\n        } else {\n          // Provide fallback width/height values for corrupt Mask images\n          // (see issue19611.pdf).\n          mask.fallbackDims ??= { width, height };\n\n          this.mask = new PDFImage({\n            xref,\n            res,\n            image: mask,\n            isInline,\n            isMask: true,\n            pdfFunctionFactory,\n            globalColorSpaceCache,\n            localColorSpaceCache,\n          });\n        }\n      } else {\n        // Color key mask (just an array).\n        this.mask = mask;\n      }\n    }\n  }\n\n  /**\n   * Handles processing of image data and returns the Promise that is resolved\n   * with a PDFImage when the image is ready to be used.\n   */\n  static async buildImage({\n    xref,\n    res,\n    image,\n    isInline = false,\n    pdfFunctionFactory,\n    globalColorSpaceCache,\n    localColorSpaceCache,\n  }) {\n    const imageData = image;\n    let smaskData = null;\n    let maskData = null;\n\n    const smask = image.dict.get(\"SMask\");\n    const mask = image.dict.get(\"Mask\");\n\n    if (smask) {\n      if (smask instanceof BaseStream) {\n        smaskData = smask;\n      } else {\n        warn(\"Unsupported /SMask format.\");\n      }\n    } else if (mask) {\n      if (mask instanceof BaseStream || Array.isArray(mask)) {\n        maskData = mask;\n      } else {\n        warn(\"Unsupported /Mask format.\");\n      }\n    }\n\n    return new PDFImage({\n      xref,\n      res,\n      image: imageData,\n      isInline,\n      smask: smaskData,\n      mask: maskData,\n      pdfFunctionFactory,\n      globalColorSpaceCache,\n      localColorSpaceCache,\n    });\n  }\n\n  static async createMask({ image, isOffscreenCanvasSupported = false }) {\n    const { dict } = image;\n    const width = dict.get(\"W\", \"Width\");\n    const height = dict.get(\"H\", \"Height\");\n\n    const interpolate = dict.get(\"I\", \"Interpolate\");\n    const decode = dict.getArray(\"D\", \"Decode\");\n    const inverseDecode = decode?.[0] > 0;\n\n    const computedLength = ((width + 7) >> 3) * height;\n    const imgArray = await image.getImageData(computedLength);\n\n    const isSingleOpaquePixel =\n      width === 1 &&\n      height === 1 &&\n      inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128));\n\n    if (isSingleOpaquePixel) {\n      return { isSingleOpaquePixel };\n    }\n\n    if (isOffscreenCanvasSupported) {\n      if (ImageResizer.needsToBeResized(width, height)) {\n        const data = new Uint8ClampedArray(width * height * 4);\n        convertBlackAndWhiteToRGBA({\n          src: imgArray,\n          dest: data,\n          width,\n          height,\n          nonBlackColor: 0,\n          inverseDecode,\n        });\n        return ImageResizer.createImage({\n          kind: ImageKind.RGBA_32BPP,\n          data,\n          width,\n          height,\n          interpolate,\n        });\n      }\n\n      const canvas = new OffscreenCanvas(width, height);\n      const ctx = canvas.getContext(\"2d\");\n      const imgData = ctx.createImageData(width, height);\n      convertBlackAndWhiteToRGBA({\n        src: imgArray,\n        dest: imgData.data,\n        width,\n        height,\n        nonBlackColor: 0,\n        inverseDecode,\n      });\n\n      ctx.putImageData(imgData, 0, 0);\n      const bitmap = canvas.transferToImageBitmap();\n\n      return {\n        data: null,\n        width,\n        height,\n        interpolate,\n        bitmap,\n      };\n    }\n    // Fallback to get the data almost as they're and they'll be decoded\n    // just before being drawn.\n\n    // |imgArray| might not contain full data for every pixel of the mask, so\n    // we need to distinguish between |computedLength| and |actualLength|.\n    // In particular, if inverseDecode is true, then the array we return must\n    // have a length of |computedLength|.\n    const actualLength = imgArray.byteLength;\n    const haveFullData = computedLength === actualLength;\n    let data;\n\n    if (image instanceof DecodeStream && (!inverseDecode || haveFullData)) {\n      // imgArray came from a DecodeStream and its data is in an appropriate\n      // form, so we can just transfer it.\n      data = imgArray;\n    } else if (!inverseDecode) {\n      data = new Uint8Array(imgArray);\n    } else {\n      data = new Uint8Array(computedLength);\n      data.set(imgArray);\n      data.fill(0xff, actualLength);\n    }\n\n    // If necessary, invert the original mask data (but not any extra we might\n    // have added above). It's safe to modify the array -- whether it's the\n    // original or a copy, we're about to transfer it anyway, so nothing else\n    // in this thread can be relying on its contents.\n    if (inverseDecode) {\n      for (let i = 0; i < actualLength; i++) {\n        data[i] ^= 0xff;\n      }\n    }\n\n    return { data, width, height, interpolate };\n  }\n\n  get drawWidth() {\n    return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0);\n  }\n\n  get drawHeight() {\n    return Math.max(\n      this.height,\n      this.smask?.height || 0,\n      this.mask?.height || 0\n    );\n  }\n\n  decodeBuffer(buffer) {\n    const bpc = this.bpc;\n    const numComps = this.numComps;\n\n    const decodeAddends = this.decodeAddends;\n    const decodeCoefficients = this.decodeCoefficients;\n    const max = (1 << bpc) - 1;\n    let i, ii;\n\n    if (bpc === 1) {\n      // If the buffer needed decode that means it just needs to be inverted.\n      for (i = 0, ii = buffer.length; i < ii; i++) {\n        buffer[i] = +!buffer[i];\n      }\n      return;\n    }\n    let index = 0;\n    for (i = 0, ii = this.width * this.height; i < ii; i++) {\n      for (let j = 0; j < numComps; j++) {\n        // Decode and clamp. The formula is different from the spec because we\n        // don't decode to float range [0,1], we decode it in the [0,max] range.\n        buffer[index] = MathClamp(\n          decodeAddends[j] + buffer[index] * decodeCoefficients[j],\n          0,\n          max\n        );\n        index++;\n      }\n    }\n  }\n\n  getComponents(buffer) {\n    const bpc = this.bpc;\n\n    // This image doesn't require any extra work.\n    if (bpc === 8) {\n      return buffer;\n    }\n\n    const width = this.width;\n    const height = this.height;\n    const numComps = this.numComps;\n\n    const length = width * height * numComps;\n    let bufferPos = 0;\n    let output;\n    if (bpc <= 8) {\n      output = new Uint8Array(length);\n    } else if (bpc <= 16) {\n      output = new Uint16Array(length);\n    } else {\n      output = new Uint32Array(length);\n    }\n    const rowComps = width * numComps;\n\n    const max = (1 << bpc) - 1;\n    let i = 0,\n      ii,\n      buf;\n\n    if (bpc === 1) {\n      // Optimization for reading 1 bpc images.\n      let mask, loop1End, loop2End;\n      for (let j = 0; j < height; j++) {\n        loop1End = i + (rowComps & ~7);\n        loop2End = i + rowComps;\n\n        // unroll loop for all full bytes\n        while (i < loop1End) {\n          buf = buffer[bufferPos++];\n          output[i] = (buf >> 7) & 1;\n          output[i + 1] = (buf >> 6) & 1;\n          output[i + 2] = (buf >> 5) & 1;\n          output[i + 3] = (buf >> 4) & 1;\n          output[i + 4] = (buf >> 3) & 1;\n          output[i + 5] = (buf >> 2) & 1;\n          output[i + 6] = (buf >> 1) & 1;\n          output[i + 7] = buf & 1;\n          i += 8;\n        }\n\n        // handle remaining bits\n        if (i < loop2End) {\n          buf = buffer[bufferPos++];\n          mask = 128;\n          while (i < loop2End) {\n            output[i++] = +!!(buf & mask);\n            mask >>= 1;\n          }\n        }\n      }\n    } else {\n      // The general case that handles all other bpc values.\n      let bits = 0;\n      buf = 0;\n      for (i = 0, ii = length; i < ii; ++i) {\n        if (i % rowComps === 0) {\n          buf = 0;\n          bits = 0;\n        }\n\n        while (bits < bpc) {\n          buf = (buf << 8) | buffer[bufferPos++];\n          bits += 8;\n        }\n\n        const remainingBits = bits - bpc;\n        output[i] = MathClamp(buf >> remainingBits, 0, max);\n        buf &= (1 << remainingBits) - 1;\n        bits = remainingBits;\n      }\n    }\n    return output;\n  }\n\n  async fillOpacity(rgbaBuf, width, height, actualHeight, image) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        rgbaBuf instanceof Uint8ClampedArray,\n        'PDFImage.fillOpacity: Unsupported \"rgbaBuf\" type.'\n      );\n    }\n    /** @type {FillMaskAlphaCallback} */\n    let apply;\n\n    if (this.smask) {\n      apply = (buffer, options) =>\n        this.smask.fillGrayBuffer(buffer, {\n          ...options,\n          destWidth: width,\n          destHeight: height,\n        });\n    } else if (this.mask) {\n      if (this.mask instanceof PDFImage) {\n        // Single mask.\n        apply = (buffer, options) =>\n          this.mask.fillGrayBuffer(buffer, {\n            ...options,\n            invertOutput: true,\n            destWidth: width,\n            destHeight: height,\n          });\n      } else if (Array.isArray(this.mask)) {\n        // Color key mask: if any of the components are outside the range\n        // then they should be painted.\n        apply = (buffer, { maxRows, offset, stride }) => {\n          for (let i = 0, ii = width * maxRows; i < ii; ++i) {\n            let opacity = 0;\n            const imageOffset = i * this.numComps;\n            for (let j = 0; j < this.numComps; ++j) {\n              const color = image[imageOffset + j];\n              const maskOffset = j * 2;\n              if (\n                color < this.mask[maskOffset] ||\n                color > this.mask[maskOffset + 1]\n              ) {\n                opacity = 255;\n                break;\n              }\n            }\n            buffer[i * stride + offset] = opacity;\n          }\n        };\n      } else {\n        throw new FormatError(\"Unknown mask format.\");\n      }\n    } else {\n      // No mask.\n      apply = (buffer, { maxRows, offset, stride }) => {\n        for (let i = 0, ii = width * maxRows; i < ii; ++i) {\n          buffer[i * stride + offset] = 255;\n        }\n      };\n    }\n\n    await apply(rgbaBuf, {\n      maxRows: actualHeight,\n      offset: 3,\n      stride: 4,\n    });\n  }\n\n  static #undoPreblend(buffer, length, matteR, matteG, matteB) {\n    for (let i = 0; i < length; i += 4) {\n      const alpha = buffer[i + 3];\n      if (alpha === 0) {\n        // according formula we have to get Infinity in all components\n        // making it white (typical paper color) should be okay\n        buffer[i] = 255;\n        buffer[i + 1] = 255;\n        buffer[i + 2] = 255;\n        continue;\n      }\n      const k = 255 / alpha;\n      buffer[i] = (buffer[i] - matteR) * k + matteR;\n      buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;\n      buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;\n    }\n  }\n\n  undoPreblend(buffer, width, height) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        buffer instanceof Uint8ClampedArray,\n        'PDFImage.undoPreblend: Unsupported \"buffer\" type.'\n      );\n    }\n    const matte = this.smask?.matte;\n    if (!matte) {\n      return;\n    }\n    const matteRgb = this.colorSpace.getRgb(matte, 0);\n    PDFImage.#undoPreblend(\n      buffer,\n      width * height * 4,\n      matteRgb[0],\n      matteRgb[1],\n      matteRgb[2]\n    );\n  }\n\n  async createImageData(forceRGBA = false, isOffscreenCanvasSupported = false) {\n    const drawWidth = this.drawWidth;\n    const drawHeight = this.drawHeight;\n    const imgData = {\n      width: drawWidth,\n      height: drawHeight,\n      interpolate: this.interpolate,\n      kind: 0,\n      data: null,\n      // Other fields are filled in below.\n    };\n\n    const numComps = this.numComps;\n    const originalWidth = this.width;\n    const originalHeight = this.height;\n    const bpc = this.bpc;\n\n    // Rows start at byte boundary.\n    const rowBytes = (originalWidth * numComps * bpc + 7) >> 3;\n    const mustBeResized =\n      isOffscreenCanvasSupported &&\n      ImageResizer.needsToBeResized(drawWidth, drawHeight);\n\n    if (!this.smask && !this.mask && this.colorSpace.name === \"DeviceRGBA\") {\n      imgData.kind = ImageKind.RGBA_32BPP;\n      const imgArray = (imgData.data = await this.getImageBytes(\n        originalHeight * originalWidth * 4,\n        { internal: isOffscreenCanvasSupported && mustBeResized }\n      ));\n\n      if (this.jpxPremultiplied) {\n        const matteRgb = this.preblendMatte;\n        PDFImage.#undoPreblend(\n          imgArray,\n          imgArray.length,\n          matteRgb?.[0] ?? 0,\n          matteRgb?.[1] ?? 0,\n          matteRgb?.[2] ?? 0\n        );\n      }\n\n      if (isOffscreenCanvasSupported) {\n        if (!mustBeResized) {\n          return this.createBitmap(\n            ImageKind.RGBA_32BPP,\n            drawWidth,\n            drawHeight,\n            imgArray\n          );\n        }\n        return ImageResizer.createImage(imgData, false);\n      }\n\n      return imgData;\n    }\n\n    if (!forceRGBA) {\n      // If it is a 1-bit-per-pixel grayscale (i.e. black-and-white) image\n      // without any complications, we pass a same-sized copy to the main\n      // thread rather than expanding by 32x to RGBA form. This saves *lots*\n      // of memory for many scanned documents. It's also much faster.\n      //\n      // Similarly, if it is a 24-bit-per pixel RGB image without any\n      // complications, we avoid expanding by 1.333x to RGBA form.\n      let kind;\n      if (this.colorSpace.name === \"DeviceGray\" && bpc === 1) {\n        kind = ImageKind.GRAYSCALE_1BPP;\n      } else if (\n        this.colorSpace.name === \"DeviceRGB\" &&\n        bpc === 8 &&\n        !this.needsDecode\n      ) {\n        kind = ImageKind.RGB_24BPP;\n      }\n      if (\n        kind &&\n        !this.smask &&\n        !this.mask &&\n        drawWidth === originalWidth &&\n        drawHeight === originalHeight\n      ) {\n        const image = await this.#getImage(originalWidth, originalHeight);\n        if (image) {\n          return image;\n        }\n        const data = await this.getImageBytes(originalHeight * rowBytes, {\n          internal: isOffscreenCanvasSupported && mustBeResized,\n        });\n        if (isOffscreenCanvasSupported) {\n          if (mustBeResized) {\n            return ImageResizer.createImage(\n              {\n                data,\n                kind,\n                width: drawWidth,\n                height: drawHeight,\n                interpolate: this.interpolate,\n              },\n              this.needsDecode\n            );\n          }\n          return this.createBitmap(kind, originalWidth, originalHeight, data);\n        }\n        imgData.kind = kind;\n        imgData.data = data;\n\n        if (this.needsDecode) {\n          // Invert the buffer (which must be grayscale if we reached here).\n          assert(\n            kind === ImageKind.GRAYSCALE_1BPP,\n            \"PDFImage.createImageData: The image must be grayscale.\"\n          );\n          const buffer = imgData.data;\n          for (let i = 0, ii = buffer.length; i < ii; i++) {\n            buffer[i] ^= 0xff;\n          }\n        }\n        return imgData;\n      }\n      if (\n        this.image instanceof JpegStream &&\n        !this.smask &&\n        !this.mask &&\n        !this.needsDecode\n      ) {\n        let imageLength = originalHeight * rowBytes;\n        if (isOffscreenCanvasSupported && !mustBeResized) {\n          let isHandled = false;\n          switch (this.colorSpace.name) {\n            case \"DeviceGray\":\n              // Avoid truncating the image, since `JpegImage.getData`\n              // will expand the image data when `forceRGB === true`.\n              imageLength *= 4;\n              isHandled = true;\n              break;\n            case \"DeviceRGB\":\n              imageLength = (imageLength / 3) * 4;\n              isHandled = true;\n              break;\n            case \"DeviceCMYK\":\n              isHandled = true;\n              break;\n          }\n\n          if (isHandled) {\n            const image = await this.#getImage(drawWidth, drawHeight);\n            if (image) {\n              return image;\n            }\n            const rgba = await this.getImageBytes(imageLength, {\n              drawWidth,\n              drawHeight,\n              forceRGBA: true,\n              internal: true,\n            });\n            return this.createBitmap(\n              ImageKind.RGBA_32BPP,\n              drawWidth,\n              drawHeight,\n              rgba\n            );\n          }\n        } else {\n          switch (this.colorSpace.name) {\n            case \"DeviceGray\":\n              imageLength *= 3;\n            /* falls through */\n            case \"DeviceRGB\":\n            case \"DeviceCMYK\":\n              imgData.kind = ImageKind.RGB_24BPP;\n              imgData.data = await this.getImageBytes(imageLength, {\n                drawWidth,\n                drawHeight,\n                forceRGB: true,\n                internal: mustBeResized,\n              });\n              if (mustBeResized) {\n                // The image is too big so we resize it.\n                return ImageResizer.createImage(imgData);\n              }\n              return imgData;\n          }\n        }\n      }\n    }\n\n    const imgArray = await this.getImageBytes(originalHeight * rowBytes, {\n      internal: true,\n    });\n    // imgArray can be incomplete (e.g. after CCITT fax encoding).\n    const actualHeight =\n      0 | (((imgArray.length / rowBytes) * drawHeight) / originalHeight);\n\n    const comps = this.getComponents(imgArray);\n\n    // If opacity data is present, use RGBA_32BPP form. Otherwise, use the\n    // more compact RGB_24BPP form if allowable.\n    let alpha01, maybeUndoPreblend;\n\n    let canvas, ctx, canvasImgData, data;\n    if (isOffscreenCanvasSupported && !mustBeResized) {\n      canvas = new OffscreenCanvas(drawWidth, drawHeight);\n      ctx = canvas.getContext(\"2d\");\n      canvasImgData = ctx.createImageData(drawWidth, drawHeight);\n      data = canvasImgData.data;\n    }\n\n    imgData.kind = ImageKind.RGBA_32BPP;\n\n    if (!forceRGBA && !this.smask && !this.mask) {\n      if (!isOffscreenCanvasSupported || mustBeResized) {\n        imgData.kind = ImageKind.RGB_24BPP;\n        data = new Uint8ClampedArray(drawWidth * drawHeight * 3);\n        alpha01 = 0;\n      } else {\n        const arr = new Uint32Array(data.buffer);\n        arr.fill(FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff);\n        alpha01 = 1;\n      }\n      maybeUndoPreblend = false;\n    } else {\n      if (!isOffscreenCanvasSupported || mustBeResized) {\n        data = new Uint8ClampedArray(drawWidth * drawHeight * 4);\n      }\n\n      alpha01 = 1;\n      maybeUndoPreblend = true;\n\n      // Color key masking (opacity) must be performed before decoding.\n      await this.fillOpacity(data, drawWidth, drawHeight, actualHeight, comps);\n    }\n\n    if (this.needsDecode) {\n      this.decodeBuffer(comps);\n    }\n    this.colorSpace.fillRgb(\n      data,\n      originalWidth,\n      originalHeight,\n      drawWidth,\n      drawHeight,\n      actualHeight,\n      bpc,\n      comps,\n      alpha01\n    );\n    if (maybeUndoPreblend) {\n      this.undoPreblend(data, drawWidth, actualHeight);\n    }\n\n    if (isOffscreenCanvasSupported && !mustBeResized) {\n      ctx.putImageData(canvasImgData, 0, 0);\n      const bitmap = canvas.transferToImageBitmap();\n\n      return {\n        data: null,\n        width: drawWidth,\n        height: drawHeight,\n        bitmap,\n        interpolate: this.interpolate,\n      };\n    }\n\n    imgData.data = data;\n    if (mustBeResized) {\n      return ImageResizer.createImage(imgData);\n    }\n    return imgData;\n  }\n\n  /**\n   * Fills `buffer` with decoded grayscale values from the image.\n   *\n   * When `destWidth`/`destHeight` match the source image dimensions (or are\n   * omitted), pixels are sampled linearly with no extra allocation.\n   * When they differ, nearest-neighbour resampling is used, sampling decoded\n   * pixels directly from the `comps` array with no intermediate buffer.\n   *\n   * @param {Uint8ClampedArray} buffer\n   *   Buffer to fill with grayscale values.\n   * @param {FillGrayBufferOptions} [options]\n   *   Configuration (optional).\n   * @returns {Promise<undefined>}\n   *   Promise that resolves to `undefined`.\n   */\n  async fillGrayBuffer(\n    buffer,\n    {\n      destWidth,\n      destHeight,\n      invertOutput,\n      maxRows,\n      offset = 0,\n      stride = 1,\n    } = {}\n  ) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        buffer instanceof Uint8ClampedArray,\n        'PDFImage.fillGrayBuffer: Unsupported \"buffer\" type.'\n      );\n    }\n    const numComps = this.numComps;\n    if (numComps !== 1) {\n      throw new FormatError(\n        `Reading gray scale from a color image: ${numComps}`\n      );\n    }\n\n    const srcWidth = this.width;\n    const srcHeight = this.height;\n    const bpc = this.bpc;\n\n    // rows start at byte boundary\n    const rowBytes = (srcWidth * numComps * bpc + 7) >> 3;\n    const imgArray = await this.getImageBytes(srcHeight * rowBytes, {\n      internal: true,\n    });\n    const comps = this.getComponents(imgArray);\n\n    const resolvedDestWidth = destWidth ?? srcWidth;\n    const resolvedDestHeight = destHeight ?? srcHeight;\n    const needsResampling =\n      resolvedDestWidth !== srcWidth || resolvedDestHeight !== srcHeight;\n    const rows =\n      maxRows === undefined\n        ? resolvedDestHeight\n        : Math.min(resolvedDestHeight, maxRows);\n\n    let outputWidth = srcWidth;\n    let yRatio = 0;\n    let xScaled = null;\n    if (needsResampling) {\n      outputWidth = resolvedDestWidth;\n      yRatio = srcHeight / resolvedDestHeight;\n      const xRatio = srcWidth / resolvedDestWidth;\n      xScaled = new Uint32Array(resolvedDestWidth);\n      for (let i = 0; i < resolvedDestWidth; i++) {\n        xScaled[i] = Math.floor(i * xRatio);\n      }\n    }\n\n    const mask = invertOutput ? 0xff : 0;\n\n    if (bpc === 1) {\n      // inline decoding (= inversion) for 1 bpc images\n      if (xScaled) {\n        const xMap = xScaled;\n        let destIndex = offset;\n        if (this.needsDecode) {\n          for (let row = 0; row < rows; row++) {\n            const py = Math.floor(row * yRatio) * srcWidth;\n            for (let col = 0; col < outputWidth; col++) {\n              buffer[destIndex] = ((comps[py + xMap[col]] - 1) & 255) ^ mask;\n              destIndex += stride;\n            }\n          }\n        } else {\n          for (let row = 0; row < rows; row++) {\n            const py = Math.floor(row * yRatio) * srcWidth;\n            for (let col = 0; col < outputWidth; col++) {\n              buffer[destIndex] = (-comps[py + xMap[col]] & 255) ^ mask;\n              destIndex += stride;\n            }\n          }\n        }\n      } else {\n        const length = outputWidth * rows;\n        if (this.needsDecode) {\n          // invert and scale to {0, 255}\n          for (let i = 0; i < length; ++i) {\n            buffer[i * stride + offset] = ((comps[i] - 1) & 255) ^ mask;\n          }\n        } else {\n          // scale to {0, 255}\n          for (let i = 0; i < length; ++i) {\n            buffer[i * stride + offset] = (-comps[i] & 255) ^ mask;\n          }\n        }\n      }\n      return;\n    }\n\n    if (this.needsDecode) {\n      this.decodeBuffer(comps);\n    }\n    // we aren't using a colorspace so we need to scale the value\n    const scale = 255 / ((1 << bpc) - 1);\n    if (xScaled) {\n      const xMap = xScaled;\n      let destIndex = offset;\n      for (let row = 0; row < rows; row++) {\n        const py = Math.floor(row * yRatio) * srcWidth;\n        for (let col = 0; col < outputWidth; col++) {\n          buffer[destIndex] = (scale * comps[py + xMap[col]]) ^ mask;\n          destIndex += stride;\n        }\n      }\n    } else {\n      const length = outputWidth * rows;\n      for (let i = 0; i < length; ++i) {\n        buffer[i * stride + offset] = (scale * comps[i]) ^ mask;\n      }\n    }\n  }\n\n  createBitmap(kind, width, height, src) {\n    const canvas = new OffscreenCanvas(width, height);\n    const ctx = canvas.getContext(\"2d\");\n    let imgData;\n    if (kind === ImageKind.RGBA_32BPP) {\n      imgData = new ImageData(src, width, height);\n    } else {\n      imgData = ctx.createImageData(width, height);\n      convertToRGBA({\n        kind,\n        src,\n        dest: new Uint32Array(imgData.data.buffer),\n        width,\n        height,\n        inverseDecode: this.needsDecode,\n      });\n    }\n    ctx.putImageData(imgData, 0, 0);\n    const bitmap = canvas.transferToImageBitmap();\n\n    return {\n      data: null,\n      width,\n      height,\n      bitmap,\n      interpolate: this.interpolate,\n    };\n  }\n\n  async #getImage(width, height) {\n    const bitmap = await this.image.getTransferableImage();\n    if (!bitmap) {\n      return null;\n    }\n    return {\n      data: null,\n      width,\n      height,\n      bitmap,\n      interpolate: this.interpolate,\n    };\n  }\n\n  async getImageBytes(\n    length,\n    {\n      drawWidth,\n      drawHeight,\n      forceRGBA = false,\n      forceRGB = false,\n      internal = false,\n    }\n  ) {\n    this.image.reset();\n    this.image.drawWidth = drawWidth || this.width;\n    this.image.drawHeight = drawHeight || this.height;\n    this.image.forceRGBA = !!forceRGBA;\n    this.image.forceRGB = !!forceRGB;\n    const imageBytes = await this.image.getImageData(\n      length,\n      this.jpxDecoderOptions\n    );\n\n    if (internal || this.image instanceof DecodeStream) {\n      // Internal callers never transfer/return raw bytes out of the worker,\n      // and DecodeStream-backed bytes are self-contained for the decode.\n      return imageBytes;\n    }\n\n    // Stream-backed image data can be a subarray into shared stream storage,\n    // so returning it directly would risk detaching/mutating bytes that\n    // subsequent stream reads still need.\n    // Always return a fresh copy.\n    assert(\n      imageBytes instanceof Uint8Array,\n      'PDFImage.getImageBytes: Unsupported \"imageBytes\" type.'\n    );\n    return new Uint8Array(imageBytes);\n  }\n}\n\nexport { PDFImage };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AbortException,\n  assert,\n  BBOX_INIT,\n  DrawOPS,\n  F32_BBOX_INIT,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  info,\n  isArrayEqual,\n  normalizeUnicode,\n  OPS,\n  shadow,\n  TextRenderingMode,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { CheckedOperatorList, OperatorList } from \"./operator_list.js\";\nimport { CMapFactory, IdentityCMap } from \"./cmap.js\";\nimport { Cmd, Dict, EOF, isName, Name, Ref, RefSet } from \"./primitives.js\";\nimport {\n  compileType3Glyph,\n  FontFlags,\n  normalizeFontName,\n} from \"./fonts_utils.js\";\nimport { ErrorFont, Font } from \"./fonts.js\";\nimport {\n  fetchBinaryData,\n  IDENTITY_MATRIX,\n  isNumberArray,\n  lookupMatrix,\n  lookupNormalRect,\n} from \"./core_utils.js\";\nimport {\n  getEncoding,\n  MacRomanEncoding,\n  StandardEncoding,\n  SymbolSetEncoding,\n  WinAnsiEncoding,\n  ZapfDingbatsEncoding,\n} from \"./encodings.js\";\nimport {\n  getFontNameToFileMap,\n  getSerifFonts,\n  getStandardFontName,\n  getStdFontMap,\n  getSymbolsFonts,\n  isKnownFontName,\n} from \"./standard_fonts.js\";\nimport { getTilingPatternIR, Pattern } from \"./pattern.js\";\nimport { getXfaFontDict, getXfaFontName } from \"./xfa_fonts.js\";\nimport { IdentityToUnicodeMap, ToUnicodeMap } from \"./to_unicode_map.js\";\nimport { isPDFFunction, PDFFunctionFactory } from \"./function.js\";\nimport { Lexer, Parser } from \"./parser.js\";\nimport {\n  LocalColorSpaceCache,\n  LocalGStateCache,\n  LocalImageCache,\n  LocalTilingPatternCache,\n  RegionalImageCache,\n} from \"./image_utils.js\";\nimport { parseMarkedContentProps, textSinkWrapper } from \"./evaluator_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { bidi } from \"./bidi.js\";\nimport { ColorSpace } from \"./colorspace.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { compilePatternInfo } from \"./obj_bin_transform_core.js\";\nimport { getFontSubstitution } from \"./font_substitutions.js\";\nimport { getGlyphsUnicode } from \"./glyphlist.js\";\nimport { getMetrics } from \"./metrics.js\";\nimport { getUnicodeForGlyph } from \"./unicode.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\nimport { PDFImage } from \"./image.js\";\nimport { Stream } from \"./stream.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\n\nconst DefaultPartialEvaluatorOptions = Object.freeze({\n  maxImageSize: -1,\n  disableFontFace: false,\n  ignoreErrors: false,\n  isOffscreenCanvasSupported: false,\n  isImageDecoderSupported: false,\n  canvasMaxAreaInBytes: -1,\n  fontExtraProperties: false,\n  useSystemFonts: true,\n  useWasm: true,\n  useWorkerFetch: true,\n  cMapUrl: null,\n  cMapPacked: true,\n  iccUrl: null,\n  standardFontDataUrl: null,\n  wasmUrl: null,\n  hasGPU: false,\n});\n\nconst PatternType = {\n  TILING: 1,\n  SHADING: 2,\n};\n\n// Optionally avoid sending individual, or very few, text chunks to reduce\n// `postMessage` overhead with ReadableStream (see issue 13962).\n//\n// PLEASE NOTE: This value should *not* be too large (it's used as a lower limit\n// in `enqueueChunk`), since that would cause streaming of textContent to become\n// essentially useless in practice by sending all (or most) chunks at once.\n// Also, a too large value would (indirectly) affect the main-thread `textLayer`\n// building negatively by forcing all textContent to be handled at once, which\n// could easily end up hurting *overall* performance (e.g. rendering as well).\nconst TEXT_CHUNK_BATCH_SIZE = 10;\n\nconst deferred = Promise.resolve();\n\n// Convert PDF blend mode names to HTML5 blend mode names.\nfunction normalizeBlendMode(value, parsingArray = false) {\n  if (Array.isArray(value)) {\n    // Use the first *supported* BM value in the Array (fixes issue11279.pdf).\n    for (const val of value) {\n      const maybeBM = normalizeBlendMode(val, /* parsingArray = */ true);\n      if (maybeBM) {\n        return maybeBM;\n      }\n    }\n    warn(`Unsupported blend mode Array: ${value}`);\n    return \"source-over\";\n  }\n\n  if (value instanceof Name) {\n    switch (value.name) {\n      case \"Normal\":\n      case \"Compatible\":\n        return \"source-over\";\n      case \"Multiply\":\n        return \"multiply\";\n      case \"Screen\":\n        return \"screen\";\n      case \"Overlay\":\n        return \"overlay\";\n      case \"Darken\":\n        return \"darken\";\n      case \"Lighten\":\n        return \"lighten\";\n      case \"ColorDodge\":\n        return \"color-dodge\";\n      case \"ColorBurn\":\n        return \"color-burn\";\n      case \"HardLight\":\n        return \"hard-light\";\n      case \"SoftLight\":\n        return \"soft-light\";\n      case \"Difference\":\n        return \"difference\";\n      case \"Exclusion\":\n        return \"exclusion\";\n      case \"Hue\":\n        return \"hue\";\n      case \"Saturation\":\n        return \"saturation\";\n      case \"Color\":\n        return \"color\";\n      case \"Luminosity\":\n        return \"luminosity\";\n    }\n    warn(`Unsupported blend mode: ${value.name}`);\n  }\n  return parsingArray ? null : \"source-over\";\n}\n\nfunction addCachedImageOps(\n  opList,\n  { objId, fn, args, optionalContent, hasMask }\n) {\n  if (objId) {\n    opList.addDependency(objId);\n  }\n  opList.addImageOps(fn, args, optionalContent, hasMask);\n\n  if (fn === OPS.paintImageMaskXObject && args[0]?.count > 0) {\n    args[0].count++;\n  }\n}\n\n// Trying to minimize Date.now() usage and check every 100 time.\nclass TimeSlotManager {\n  static TIME_SLOT_DURATION_MS = 20;\n\n  static CHECK_TIME_EVERY = 100;\n\n  constructor() {\n    this.reset();\n  }\n\n  check() {\n    if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) {\n      return false;\n    }\n    this.checked = 0;\n    return this.endTime <= Date.now();\n  }\n\n  reset() {\n    this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS;\n    this.checked = 0;\n  }\n}\n\nclass PartialEvaluator {\n  constructor({\n    xref,\n    handler,\n    pageIndex,\n    idFactory,\n    fontCache,\n    builtInCMapCache,\n    standardFontDataCache,\n    globalColorSpaceCache,\n    globalImageCache,\n    systemFontCache,\n    options = null,\n  }) {\n    this.xref = xref;\n    this.handler = handler;\n    this.pageIndex = pageIndex;\n    this.idFactory = idFactory;\n    this.fontCache = fontCache;\n    this.builtInCMapCache = builtInCMapCache;\n    this.standardFontDataCache = standardFontDataCache;\n    this.globalColorSpaceCache = globalColorSpaceCache;\n    this.globalImageCache = globalImageCache;\n    this.systemFontCache = systemFontCache;\n    this.options = options || DefaultPartialEvaluatorOptions;\n    this.type3FontRefs = null;\n\n    this._regionalImageCache = new RegionalImageCache();\n    this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);\n  }\n\n  /**\n   * Since Functions are only cached (locally) by reference, we can share one\n   * `PDFFunctionFactory` instance within this `PartialEvaluator` instance.\n   */\n  get _pdfFunctionFactory() {\n    return shadow(\n      this,\n      \"_pdfFunctionFactory\",\n      new PDFFunctionFactory({ xref: this.xref })\n    );\n  }\n\n  get parsingType3Font() {\n    return !!this.type3FontRefs;\n  }\n\n  clone(newOptions = null) {\n    const newEvaluator = Object.create(this);\n    newEvaluator.options = Object.assign(\n      Object.create(null),\n      this.options,\n      newOptions\n    );\n    return newEvaluator;\n  }\n\n  hasBlendModes(resources, nonBlendModesSet) {\n    if (!(resources instanceof Dict)) {\n      return false;\n    }\n    if (resources.objId && nonBlendModesSet.has(resources.objId)) {\n      return false;\n    }\n\n    const processed = new RefSet(nonBlendModesSet);\n    if (resources.objId) {\n      processed.put(resources.objId);\n    }\n\n    const nodes = [resources],\n      xref = this.xref;\n    while (nodes.length) {\n      const node = nodes.shift();\n      // First check the current resources for blend modes.\n      const graphicStates = node.get(\"ExtGState\");\n      if (graphicStates instanceof Dict) {\n        for (let graphicState of graphicStates.getRawValues()) {\n          if (graphicState instanceof Ref) {\n            if (processed.has(graphicState)) {\n              continue; // The ExtGState has already been processed.\n            }\n            try {\n              graphicState = xref.fetch(graphicState);\n            } catch (ex) {\n              // Avoid parsing a corrupt ExtGState more than once.\n              processed.put(graphicState);\n\n              info(`hasBlendModes - ignoring ExtGState: \"${ex}\".`);\n              continue;\n            }\n          }\n          if (!(graphicState instanceof Dict)) {\n            continue;\n          }\n          if (graphicState.objId) {\n            processed.put(graphicState.objId);\n          }\n\n          const bm = graphicState.get(\"BM\");\n          if (bm instanceof Name) {\n            if (bm.name !== \"Normal\") {\n              return true;\n            }\n            continue;\n          }\n          if (bm !== undefined && Array.isArray(bm)) {\n            for (const element of bm) {\n              if (element instanceof Name && element.name !== \"Normal\") {\n                return true;\n              }\n            }\n          }\n        }\n      }\n      // Descend into the XObjects to look for more resources and blend modes.\n      const xObjects = node.get(\"XObject\");\n      if (!(xObjects instanceof Dict)) {\n        continue;\n      }\n      for (let xObject of xObjects.getRawValues()) {\n        if (xObject instanceof Ref) {\n          if (processed.has(xObject)) {\n            // The XObject has already been processed, and by avoiding a\n            // redundant `xref.fetch` we can *significantly* reduce the load\n            // time for badly generated PDF files (fixes issue6961.pdf).\n            continue;\n          }\n          try {\n            xObject = xref.fetch(xObject);\n          } catch (ex) {\n            // Avoid parsing a corrupt XObject more than once.\n            processed.put(xObject);\n\n            info(`hasBlendModes - ignoring XObject: \"${ex}\".`);\n            continue;\n          }\n        }\n        if (!(xObject instanceof BaseStream)) {\n          continue;\n        }\n        if (xObject.dict.objId) {\n          processed.put(xObject.dict.objId);\n        }\n        const xResources = xObject.dict.get(\"Resources\");\n        if (!(xResources instanceof Dict)) {\n          continue;\n        }\n        // Checking objId to detect an infinite loop.\n        if (xResources.objId && processed.has(xResources.objId)) {\n          continue;\n        }\n\n        nodes.push(xResources);\n        if (xResources.objId) {\n          processed.put(xResources.objId);\n        }\n      }\n    }\n\n    // When no blend modes exist, there's no need re-fetch/re-parse any of the\n    // processed `Ref`s again for subsequent pages. This helps reduce redundant\n    // `XRef.fetch` calls for some documents (e.g. issue6961.pdf).\n    for (const ref of processed) {\n      nonBlendModesSet.put(ref);\n    }\n    return false;\n  }\n\n  async fetchBuiltInCMap(name) {\n    const cachedData = this.builtInCMapCache.get(name);\n    if (cachedData) {\n      return cachedData;\n    }\n    let data;\n\n    if (this.options.useWorkerFetch) {\n      // Only compressed CMaps are (currently) supported here.\n      data = {\n        cMapData: await fetchBinaryData(`${this.options.cMapUrl}${name}.bcmap`),\n        isCompressed: true,\n      };\n    } else {\n      if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n        throw new Error(\"Only worker-thread fetching supported.\");\n      }\n      // Get the data on the main-thread instead.\n      data = {\n        cMapData: await this.handler.sendWithPromise(\"FetchBinaryData\", {\n          kind: \"cMapUrl\",\n          filename: `${name}${this.options.cMapPacked ? \".bcmap\" : \"\"}`,\n        }),\n        isCompressed: this.options.cMapPacked,\n      };\n    }\n    // Cache the CMap data, to avoid fetching it repeatedly.\n    this.builtInCMapCache.set(name, data);\n\n    return data;\n  }\n\n  async fetchStandardFontData(name) {\n    const cachedData = this.standardFontDataCache.get(name);\n    if (cachedData) {\n      return new Stream(cachedData);\n    }\n\n    // The symbol fonts are not consistent across platforms, always load the\n    // standard font data for them.\n    if (\n      this.options.useSystemFonts &&\n      name !== \"Symbol\" &&\n      name !== \"ZapfDingbats\"\n    ) {\n      return null;\n    }\n\n    const standardFontNameToFileName = getFontNameToFileMap(),\n      filename = standardFontNameToFileName[name];\n    let data;\n\n    try {\n      if (this.options.useWorkerFetch) {\n        data = await fetchBinaryData(\n          `${this.options.standardFontDataUrl}${filename}`\n        );\n      } else {\n        if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n          throw new Error(\"Only worker-thread fetching supported.\");\n        }\n        // Get the data on the main-thread instead.\n        data = await this.handler.sendWithPromise(\"FetchBinaryData\", {\n          kind: \"standardFontDataUrl\",\n          filename,\n        });\n      }\n    } catch (ex) {\n      warn(ex);\n      return null;\n    }\n    // Cache the \"raw\" standard font data, to avoid fetching it repeatedly\n    // (see e.g. issue 11399).\n    this.standardFontDataCache.set(name, data);\n\n    return new Stream(data);\n  }\n\n  async buildFormXObject(\n    resources,\n    xobj,\n    smask,\n    operatorList,\n    task,\n    initialState,\n    localColorSpaceCache,\n    seenRefs\n  ) {\n    const { dict } = xobj;\n    const matrix = lookupMatrix(dict.getArray(\"Matrix\"), null);\n    const bbox = lookupNormalRect(dict.getArray(\"BBox\"), null);\n    let f32bbox = bbox && new Float32Array(bbox);\n    if (f32bbox?.some(x => !isFinite(x))) {\n      f32bbox = null;\n    }\n\n    let optionalContent, groupOptions;\n    if (dict.has(\"OC\")) {\n      optionalContent = await this.parseMarkedContentProps(\n        dict.get(\"OC\"),\n        resources\n      );\n    }\n    if (optionalContent !== undefined) {\n      operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n\n    const group = dict.get(\"Group\");\n    let newOpList;\n\n    // If it's a group, a new canvas will be created that is the size of the\n    // bounding box and translated to the correct position so we don't need to\n    // apply the bounding box to it.\n    const f32matrix = matrix && new Float32Array(matrix);\n    const args = [f32matrix, (!group && f32bbox) || null];\n    const localResources = dict.get(\"Resources\");\n\n    if (group) {\n      groupOptions = {\n        matrix,\n        bbox: f32bbox,\n        smask,\n        isolated: false,\n        knockout: false,\n        needsIsolation: false,\n        hasSoftMask: false,\n        isGray: false,\n      };\n\n      const groupSubtype = group.get(\"S\");\n      let colorSpace = null;\n      if (isName(groupSubtype, \"Transparency\")) {\n        groupOptions.isolated = group.get(\"I\") || false;\n        groupOptions.knockout = group.get(\"K\") || false;\n        if (group.has(\"CS\")) {\n          const cs = this._getColorSpace(\n            group.getRaw(\"CS\"),\n            resources,\n            localColorSpaceCache\n          );\n          colorSpace =\n            cs instanceof ColorSpace ? cs : await this._handleColorSpace(cs);\n        }\n      }\n\n      // When the group color space is gray (a single component) the group's\n      // content must be rendered in grayscale, see issue 7998.\n      groupOptions.isGray = colorSpace?.numComps === 1;\n\n      if (smask?.backdrop) {\n        colorSpace ||= ColorSpaceUtils.rgb;\n        smask.backdrop = colorSpace.getRgbHex(smask.backdrop, 0);\n      } else if (smask?.subtype === \"Luminosity\") {\n        // Per PDF spec 11.6.5.2: when /BC is missing the backdrop is the\n        // initial value of the group colour space, which is black for all\n        // standard colour spaces.\n        smask.backdrop = \"#000000\";\n      }\n\n      newOpList = new CheckedOperatorList();\n    } else {\n      newOpList = operatorList;\n      operatorList.addOp(OPS.paintFormXObjectBegin, args);\n    }\n\n    await this.getOperatorList({\n      stream: xobj,\n      task,\n      resources: localResources instanceof Dict ? localResources : resources,\n      operatorList: newOpList,\n      initialState,\n      prevRefs: seenRefs,\n    });\n\n    if (group) {\n      groupOptions.needsIsolation = newOpList.needsIsolation || !!smask;\n      groupOptions.hasSoftMask = newOpList.hasSoftMask || !!smask;\n      operatorList.addOp(OPS.beginGroup, [groupOptions]);\n      operatorList.addOp(OPS.paintFormXObjectBegin, args);\n      operatorList.addOpList(newOpList);\n      operatorList.addOp(OPS.paintFormXObjectEnd, []);\n      operatorList.addOp(OPS.endGroup, [groupOptions]);\n    } else {\n      operatorList.addOp(OPS.paintFormXObjectEnd, []);\n    }\n\n    if (optionalContent !== undefined) {\n      operatorList.addOp(OPS.endMarkedContent, []);\n    }\n  }\n\n  _sendImgData(objId, imgData, cacheGlobally = false) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      imgData\n    ) {\n      assert(Number.isInteger(imgData.dataLen), \"Expected dataLen to be set.\");\n    }\n    const transfers = imgData ? [imgData.bitmap || imgData.data.buffer] : null;\n\n    if (this.parsingType3Font || cacheGlobally) {\n      return this.handler.send(\n        \"commonobj\",\n        [objId, \"Image\", imgData],\n        transfers\n      );\n    }\n    return this.handler.send(\n      \"obj\",\n      [objId, this.pageIndex, \"Image\", imgData],\n      transfers\n    );\n  }\n\n  async buildPaintImageXObject({\n    resources,\n    image,\n    isInline = false,\n    operatorList,\n    cacheKey,\n    localImageCache,\n    localColorSpaceCache,\n  }) {\n    const { maxImageSize, ignoreErrors, isOffscreenCanvasSupported } =\n      this.options;\n\n    const { dict } = image;\n    const imageRef = dict.objId;\n    const w = dict.get(\"W\", \"Width\");\n    const h = dict.get(\"H\", \"Height\");\n\n    if (!(w && typeof w === \"number\") || !(h && typeof h === \"number\")) {\n      warn(\"Image dimensions are missing, or not numbers.\");\n      return;\n    }\n    if (maxImageSize !== -1 && w * h > maxImageSize) {\n      const msg = \"Image exceeded maximum allowed size and was removed.\";\n\n      if (!ignoreErrors) {\n        throw new Error(msg);\n      }\n      warn(msg);\n      return;\n    }\n\n    let optionalContent;\n    if (dict.has(\"OC\")) {\n      optionalContent = await this.parseMarkedContentProps(\n        dict.get(\"OC\"),\n        resources\n      );\n    }\n\n    const imageMask = dict.get(\"IM\", \"ImageMask\") || false;\n    let imgData, fn, args;\n    if (imageMask) {\n      // This depends on a tmpCanvas being filled with the\n      // current fillStyle, such that processing the pixel\n      // data can't be done here. Instead of creating a\n      // complete PDFImage, only read the information needed\n      // for later.\n      imgData = await PDFImage.createMask({\n        image,\n        isOffscreenCanvasSupported:\n          isOffscreenCanvasSupported && !this.parsingType3Font,\n      });\n\n      if (imgData.isSingleOpaquePixel) {\n        // Handles special case of mainly LaTeX documents which use image\n        // masks to draw lines with the current fill style.\n        fn = OPS.paintSolidColorImageMask;\n        args = [];\n        operatorList.addImageOps(fn, args, optionalContent);\n\n        if (cacheKey) {\n          const cacheData = { fn, args, optionalContent };\n          localImageCache.set(cacheKey, imageRef, cacheData);\n\n          if (imageRef) {\n            this._regionalImageCache.set(\n              /* name = */ null,\n              imageRef,\n              cacheData\n            );\n          }\n        }\n        return;\n      }\n\n      if (this.parsingType3Font) {\n        // NOTE: Compared to other image resources we don't bother caching\n        // Type3-glyph image masks, since we've not come across any cases\n        // where that actually helps.\n        // In Type3-glyphs image masks are \"always\" inline resources,\n        // they're usually fairly small and aren't being re-used either.\n        if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n          assert(\n            imgData.data instanceof Uint8Array,\n            \"Type3 glyph image mask must be a TypedArray.\"\n          );\n        }\n        args = compileType3Glyph(imgData);\n\n        if (args) {\n          operatorList.addImageOps(OPS.constructPath, args, optionalContent);\n          return;\n        }\n        warn(\"Cannot compile Type3 glyph.\");\n\n        // If compilation failed, or was disabled, fallback to using an inline\n        // image mask; this case should be extremely rare.\n        operatorList.addImageOps(\n          OPS.paintImageMaskXObject,\n          [imgData],\n          optionalContent\n        );\n        return;\n      }\n\n      const objId = `mask_${this.idFactory.createObjId()}`;\n      operatorList.addDependency(objId);\n\n      imgData.dataLen = imgData.bitmap\n        ? imgData.width * imgData.height * 4\n        : imgData.data.length;\n      this._sendImgData(objId, imgData);\n\n      fn = OPS.paintImageMaskXObject;\n      args = [\n        {\n          data: objId,\n          width: imgData.width,\n          height: imgData.height,\n          interpolate: imgData.interpolate,\n          count: 1,\n        },\n      ];\n      operatorList.addImageOps(fn, args, optionalContent);\n\n      if (cacheKey) {\n        const cacheData = { objId, fn, args, optionalContent };\n        localImageCache.set(cacheKey, imageRef, cacheData);\n\n        if (imageRef) {\n          this._regionalImageCache.set(/* name = */ null, imageRef, cacheData);\n        }\n      }\n      return;\n    }\n\n    const SMALL_IMAGE_DIMENSIONS = 200;\n    const hasMask = dict.has(\"SMask\") || dict.has(\"Mask\");\n    // Inlining small images into the queue as RGB data\n    if (isInline && w + h < SMALL_IMAGE_DIMENSIONS && !hasMask) {\n      try {\n        const imageObj = new PDFImage({\n          xref: this.xref,\n          res: resources,\n          image,\n          isInline,\n          pdfFunctionFactory: this._pdfFunctionFactory,\n          globalColorSpaceCache: this.globalColorSpaceCache,\n          localColorSpaceCache,\n        });\n        // We force the use of RGBA_32BPP images here, because we can't handle\n        // any other kind.\n        imgData = await imageObj.createImageData(\n          /* forceRGBA = */ true,\n          /* isOffscreenCanvasSupported = */ false\n        );\n        operatorList.addImageOps(\n          OPS.paintInlineImageXObject,\n          [imgData],\n          optionalContent\n        );\n      } catch (reason) {\n        const msg = `Unable to decode inline image: \"${reason}\".`;\n\n        if (!ignoreErrors) {\n          throw new Error(msg);\n        }\n        warn(msg);\n      }\n      return;\n    }\n\n    // If there is no imageMask, create the PDFImage and a lot\n    // of image processing can be done here.\n    let objId = `img_${this.idFactory.createObjId()}`,\n      cacheGlobally = false,\n      globalCacheData = null;\n\n    if (this.parsingType3Font) {\n      objId = `${this.idFactory.getDocId()}_type3_${objId}`;\n    } else if (cacheKey && imageRef) {\n      cacheGlobally = this.globalImageCache.shouldCache(\n        imageRef,\n        this.pageIndex\n      );\n\n      if (cacheGlobally) {\n        assert(!isInline, \"Cannot cache an inline image globally.\");\n\n        objId = `${this.idFactory.getDocId()}_${objId}`;\n      }\n    }\n\n    // Ensure that the dependency is added before the image is decoded.\n    operatorList.addDependency(objId);\n\n    fn = OPS.paintImageXObject;\n    args = [objId, w, h];\n    operatorList.addImageOps(fn, args, optionalContent, hasMask);\n\n    if (cacheGlobally) {\n      globalCacheData = {\n        objId,\n        fn,\n        args,\n        optionalContent,\n        hasMask,\n        byteSize: 0, // Temporary entry, to avoid `setData` returning early.\n      };\n\n      if (this.globalImageCache.hasDecodeFailed(imageRef)) {\n        this.globalImageCache.setData(imageRef, globalCacheData);\n\n        this._sendImgData(objId, /* imgData = */ null, cacheGlobally);\n        return;\n      }\n\n      // For large (at least 500x500) or more complex images that we'll cache\n      // globally, check if the image is still cached locally on the main-thread\n      // to avoid having to re-parse the image (since that can be slow).\n      if (w * h > 250000 || hasMask) {\n        const localLength = await this.handler.sendWithPromise(\"commonobj\", [\n          objId,\n          \"CopyLocalImage\",\n          { imageRef },\n        ]);\n\n        if (localLength) {\n          this.globalImageCache.setData(imageRef, globalCacheData);\n          this.globalImageCache.addByteSize(imageRef, localLength);\n          return;\n        }\n      }\n    }\n\n    PDFImage.buildImage({\n      xref: this.xref,\n      res: resources,\n      image,\n      isInline,\n      pdfFunctionFactory: this._pdfFunctionFactory,\n      globalColorSpaceCache: this.globalColorSpaceCache,\n      localColorSpaceCache,\n    })\n      .then(async imageObj => {\n        imgData = await imageObj.createImageData(\n          /* forceRGBA = */ false,\n          isOffscreenCanvasSupported\n        );\n        imgData.dataLen = imgData.bitmap\n          ? imgData.width * imgData.height * 4\n          : imgData.data.length;\n        imgData.ref = imageRef;\n\n        if (cacheGlobally) {\n          this.globalImageCache.addByteSize(imageRef, imgData.dataLen);\n        }\n        return this._sendImgData(objId, imgData, cacheGlobally);\n      })\n      .catch(reason => {\n        warn(`Unable to decode image \"${objId}\": \"${reason}\".`);\n\n        if (imageRef) {\n          this.globalImageCache.addDecodeFailed(imageRef);\n        }\n        return this._sendImgData(objId, /* imgData = */ null, cacheGlobally);\n      });\n\n    if (cacheKey) {\n      const cacheData = { objId, fn, args, optionalContent, hasMask };\n      localImageCache.set(cacheKey, imageRef, cacheData);\n\n      if (imageRef) {\n        this._regionalImageCache.set(/* name = */ null, imageRef, cacheData);\n\n        if (cacheGlobally) {\n          assert(globalCacheData, \"The global cache-data must be available.\");\n          this.globalImageCache.setData(imageRef, globalCacheData);\n        }\n      }\n    }\n  }\n\n  handleSMask(\n    smask,\n    resources,\n    operatorList,\n    task,\n    stateManager,\n    localColorSpaceCache,\n    seenRefs\n  ) {\n    const smaskContent = smask.get(\"G\");\n    const smaskOptions = {\n      subtype: smask.get(\"S\").name,\n      backdrop: smask.get(\"BC\"),\n    };\n\n    // The SMask might have a alpha/luminosity value transfer function --\n    // we will build a map of integer values in range 0..255 to be fast.\n    const transferObj = smask.get(\"TR\");\n    if (isPDFFunction(transferObj)) {\n      const transferFn = this._pdfFunctionFactory.create(transferObj);\n      const transferMap = new Uint8Array(256);\n      const tmp = new Float32Array(1);\n      for (let i = 0; i < 256; i++) {\n        tmp[0] = i / 255;\n        transferFn(tmp, 0, tmp, 0);\n        transferMap[i] = (tmp[0] * 255) | 0;\n      }\n      smaskOptions.transferMap = transferMap;\n    }\n\n    return this.buildFormXObject(\n      resources,\n      smaskContent,\n      smaskOptions,\n      operatorList,\n      task,\n      stateManager.state.clone({ newPath: true }),\n      localColorSpaceCache,\n      seenRefs\n    );\n  }\n\n  handleTransferFunction(tr) {\n    let transferArray;\n    if (Array.isArray(tr)) {\n      transferArray = tr;\n      if (tr.length > 1 && tr.every(map => map === tr[0])) {\n        // All entries in the array are the same, so we can just use one of\n        // them.\n        transferArray = [tr[0]];\n      }\n    } else if (isPDFFunction(tr)) {\n      transferArray = [tr];\n    } else {\n      return null; // Not a valid transfer function entry.\n    }\n\n    const transferMaps = [];\n    let numFns = 0,\n      numEffectfulFns = 0;\n    for (const entry of transferArray) {\n      const transferObj = this.xref.fetchIfRef(entry);\n      numFns++;\n\n      if (isName(transferObj, \"Identity\")) {\n        transferMaps.push(null);\n        continue;\n      } else if (!isPDFFunction(transferObj)) {\n        return null; // Not a valid transfer function object.\n      }\n\n      const transferFn = this._pdfFunctionFactory.create(transferObj);\n      const transferMap = new Uint8Array(256),\n        tmp = new Float32Array(1);\n      for (let j = 0; j < 256; j++) {\n        tmp[0] = j / 255;\n        transferFn(tmp, 0, tmp, 0);\n        transferMap[j] = (tmp[0] * 255) | 0;\n      }\n      transferMaps.push(transferMap);\n      numEffectfulFns++;\n    }\n\n    if (!(numFns === 1 || numFns === 4)) {\n      return null; // Only 1 or 4 functions are supported, by the specification.\n    }\n    if (numEffectfulFns === 0) {\n      return null; // Only /Identity transfer functions found, which are no-ops.\n    }\n    return transferMaps;\n  }\n\n  handleTilingType(\n    fn,\n    color,\n    resources,\n    pattern,\n    patternDict,\n    operatorList,\n    task,\n    localTilingPatternCache,\n    seenRefs\n  ) {\n    // Create an IR of the pattern code.\n    const tilingOpList = new CheckedOperatorList();\n    // Merge the available resources, to prevent issues when the patternDict\n    // is missing some /Resources entries (fixes issue6541.pdf).\n    const patternResources = Dict.merge({\n      xref: this.xref,\n      dictArray: [patternDict.get(\"Resources\"), resources],\n    });\n\n    return this.getOperatorList({\n      stream: pattern,\n      task,\n      resources: patternResources,\n      operatorList: tilingOpList,\n      prevRefs: seenRefs,\n    })\n      .then(function () {\n        const operatorListIR = tilingOpList.getIR();\n        const { needsIsolation } = tilingOpList;\n        const tilingPatternIR = getTilingPatternIR(\n          operatorListIR,\n          patternDict,\n          color,\n          needsIsolation\n        );\n        // Add the dependencies to the parent operator list so they are\n        // resolved before the sub operator list is executed synchronously.\n        operatorList.addDependencies(tilingOpList.dependencies);\n        operatorList.addOp(fn, tilingPatternIR);\n\n        if (patternDict.objId) {\n          localTilingPatternCache.set(/* name = */ null, patternDict.objId, {\n            operatorListIR,\n            needsIsolation,\n            dict: patternDict,\n          });\n        }\n      })\n      .catch(reason => {\n        if (reason instanceof AbortException) {\n          return;\n        }\n        if (this.options.ignoreErrors) {\n          warn(`handleTilingType - ignoring pattern: \"${reason}\".`);\n          return;\n        }\n        throw reason;\n      });\n  }\n\n  async handleSetFont(\n    resources,\n    fontArgs,\n    fontRef,\n    operatorList,\n    task,\n    state,\n    fallbackFontDict = null,\n    cssFontInfo = null,\n    seenRefs = null\n  ) {\n    const fontName = fontArgs?.[0] instanceof Name ? fontArgs[0].name : null;\n\n    const translated = await this.loadFont(\n      fontName,\n      fontRef,\n      resources,\n      task,\n      fallbackFontDict,\n      cssFontInfo,\n      seenRefs\n    );\n\n    if (translated.font.isType3Font) {\n      // Add the dependencies to the parent operatorList so they are\n      // resolved before Type3 operatorLists are executed synchronously.\n      operatorList.addDependencies(translated.type3Dependencies);\n    }\n\n    state.font = translated.font;\n    translated.send(this.handler);\n    return translated.loadedName;\n  }\n\n  handleText(chars, state) {\n    const font = state.font;\n    const glyphs = font.charsToGlyphs(chars);\n\n    if (font.data) {\n      const isAddToPathSet = !!(\n        state.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n      );\n      if (\n        isAddToPathSet ||\n        state.fillColorSpace.name === \"Pattern\" ||\n        state.strokeColorSpace.name === \"Pattern\" ||\n        font.disableFontFace\n      ) {\n        PartialEvaluator.buildFontPaths(\n          font,\n          glyphs,\n          this.handler,\n          this.options\n        );\n      }\n    }\n    return glyphs;\n  }\n\n  ensureStateFont(state) {\n    if (state.font) {\n      return;\n    }\n    const reason = new FormatError(\n      \"Missing setFont (Tf) operator before text rendering operator.\"\n    );\n\n    if (this.options.ignoreErrors) {\n      warn(`ensureStateFont: \"${reason}\".`);\n      return;\n    }\n    throw reason;\n  }\n\n  async setGState({\n    resources,\n    gState,\n    operatorList,\n    cacheKey,\n    task,\n    stateManager,\n    localGStateCache,\n    localColorSpaceCache,\n    seenRefs,\n  }) {\n    const gStateRef = gState.objId;\n    let isSimpleGState = true;\n    // This array holds the converted/processed state data.\n    const gStateObj = [];\n    let promise = Promise.resolve();\n    for (const [key, value] of gState) {\n      switch (key) {\n        case \"Type\":\n          break;\n        case \"LW\":\n          if (typeof value !== \"number\") {\n            warn(`Invalid LW (line width): ${value}`);\n            break;\n          }\n          gStateObj.push([key, Math.abs(value)]);\n          break;\n        case \"LC\":\n        case \"LJ\":\n        case \"ML\":\n        case \"D\":\n        case \"RI\":\n        case \"FL\":\n        case \"CA\":\n        case \"ca\":\n          gStateObj.push([key, value]);\n          break;\n        case \"Font\":\n          isSimpleGState = false;\n\n          promise = promise.then(() =>\n            this.handleSetFont(\n              resources,\n              null,\n              value[0],\n              operatorList,\n              task,\n              stateManager.state,\n              /* fallbackFontDict = */ null,\n              /* cssFontInfo = */ null,\n              seenRefs\n            ).then(function (loadedName) {\n              operatorList.addDependency(loadedName);\n              gStateObj.push([key, [loadedName, value[1]]]);\n            })\n          );\n          break;\n        case \"BM\":\n          gStateObj.push([key, normalizeBlendMode(value)]);\n          break;\n        case \"SMask\":\n          if (isName(value, \"None\")) {\n            gStateObj.push([key, false]);\n            break;\n          }\n          if (value instanceof Dict) {\n            isSimpleGState = false;\n\n            promise = promise.then(() =>\n              this.handleSMask(\n                value,\n                resources,\n                operatorList,\n                task,\n                stateManager,\n                localColorSpaceCache,\n                seenRefs\n              )\n            );\n            gStateObj.push([key, true]);\n          } else {\n            warn(\"Unsupported SMask type\");\n          }\n          break;\n        case \"TR\":\n        case \"TR2\": {\n          // TR2 takes precedence over TR (see PDF 32000-1:2008, Table 58), so\n          // ignore TR when a TR2 entry is present in the same dictionary.\n          if (key === \"TR\" && gState.has(\"TR2\")) {\n            break;\n          }\n          // For TR2 the name /Default denotes \"the transfer function that was\n          // in effect at the start of the page\" (PDF 32000-1:2008, Table 58).\n          // A page always starts with the identity transfer function, hence\n          // /Default (and /Identity) means \"no transfer function\" here, which\n          // clears any filter previously set on the display side (issue 21406).\n          // `handleTransferFunction` returns `null` for those names.\n          const transferMaps = this.handleTransferFunction(value);\n          gStateObj.push([\"TR\", transferMaps]);\n          break;\n        }\n        // Only generate info log messages for the following since\n        // they are unlikely to have a big impact on the rendering.\n        case \"OP\":\n        case \"op\":\n        case \"OPM\":\n        case \"BG\":\n        case \"BG2\":\n        case \"UCR\":\n        case \"UCR2\":\n        case \"HT\":\n        case \"SM\":\n        case \"SA\":\n        case \"AIS\":\n        case \"TK\":\n          // TODO implement these operators.\n          info(\"graphic state operator \" + key);\n          break;\n        default:\n          info(\"Unknown graphic state operator \" + key);\n          break;\n      }\n    }\n    await promise;\n\n    if (gStateObj.length > 0) {\n      operatorList.addOp(OPS.setGState, [gStateObj]);\n    }\n\n    if (isSimpleGState) {\n      localGStateCache.set(cacheKey, gStateRef, gStateObj);\n    }\n  }\n\n  loadFont(\n    fontName,\n    font,\n    resources,\n    task,\n    fallbackFontDict = null,\n    cssFontInfo = null,\n    seenRefs = null\n  ) {\n    const errorFont = async () =>\n      new TranslatedFont({\n        loadedName: \"g_font_error\",\n        font: new ErrorFont(`Font \"${fontName}\" is not available.`),\n        dict: font,\n      });\n\n    let fontRef;\n    if (font) {\n      // Loading by ref.\n      if (font instanceof Ref) {\n        fontRef = font;\n      }\n    } else {\n      // Loading by name.\n      const fontRes = resources.get(\"Font\");\n      if (fontRes) {\n        fontRef = fontRes.getRaw(fontName);\n      }\n    }\n    if (fontRef) {\n      if (this.type3FontRefs?.has(fontRef)) {\n        return errorFont();\n      }\n\n      if (this.fontCache.has(fontRef)) {\n        return this.fontCache.get(fontRef);\n      }\n\n      try {\n        font = this.xref.fetchIfRef(fontRef);\n      } catch (ex) {\n        warn(`loadFont - lookup failed: \"${ex}\".`);\n      }\n    }\n\n    if (!(font instanceof Dict)) {\n      if (!this.options.ignoreErrors && !this.parsingType3Font) {\n        warn(`Font \"${fontName}\" is not available.`);\n        return errorFont();\n      }\n      warn(\n        `Font \"${fontName}\" is not available -- attempting to fallback to a default font.`\n      );\n\n      // Falling back to a default font to avoid completely broken rendering,\n      // but note that there're no guarantees that things will look \"correct\".\n      font = fallbackFontDict || PartialEvaluator.fallbackFontDict;\n    }\n\n    // We are holding `font.cacheKey` references only for `fontRef`s that\n    // are not actually `Ref`s, but rather `Dict`s. See explanation below.\n    if (font.cacheKey && this.fontCache.has(font.cacheKey)) {\n      return this.fontCache.get(font.cacheKey);\n    }\n\n    const { promise, resolve } = Promise.withResolvers();\n\n    let preEvaluatedFont;\n    try {\n      preEvaluatedFont = this.preEvaluateFont(font);\n      preEvaluatedFont.cssFontInfo = cssFontInfo;\n    } catch (reason) {\n      warn(`loadFont - preEvaluateFont failed: \"${reason}\".`);\n      return errorFont();\n    }\n    const { descriptor, hash } = preEvaluatedFont;\n\n    const fontRefIsRef = fontRef instanceof Ref;\n    let fontID;\n\n    if (hash && descriptor instanceof Dict) {\n      const fontAliases = (descriptor.fontAliases ||= Object.create(null));\n\n      if (fontAliases[hash]) {\n        const aliasFontRef = fontAliases[hash].aliasRef;\n        if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {\n          this.fontCache.putAlias(fontRef, aliasFontRef);\n          return this.fontCache.get(fontRef);\n        }\n      } else {\n        fontAliases[hash] = {\n          fontID: this.idFactory.createFontId(),\n        };\n      }\n\n      if (fontRefIsRef) {\n        fontAliases[hash].aliasRef = fontRef;\n      }\n      fontID = fontAliases[hash].fontID;\n    } else {\n      fontID = this.idFactory.createFontId();\n    }\n    assert(\n      fontID?.startsWith(\"f\"),\n      'The \"fontID\" must be (correctly) defined.'\n    );\n\n    // Workaround for bad PDF generators that reference fonts incorrectly,\n    // where `fontRef` is a `Dict` rather than a `Ref` (fixes bug946506.pdf).\n    // In this case we cannot put the font into `this.fontCache` (which is\n    // a `RefSetCache`), since it's not possible to use a `Dict` as a key.\n    //\n    // However, if we don't cache the font it's not possible to remove it\n    // when `cleanup` is triggered from the API, which causes issues on\n    // subsequent rendering operations (see issue7403.pdf) and would force us\n    // to unnecessarily load the same fonts over and over.\n    //\n    // Instead, we cheat a bit by using a modified `fontID` as a key in\n    // `this.fontCache`, to allow the font to be cached.\n    // NOTE: This works because `RefSetCache` calls `toString()` on provided\n    //       keys. Also, since `fontRef` is used when getting cached fonts,\n    //       we'll not accidentally match fonts cached with the `fontID`.\n    if (fontRefIsRef) {\n      this.fontCache.put(fontRef, promise);\n    } else {\n      font.cacheKey = `cacheKey_${fontID}`;\n      this.fontCache.put(font.cacheKey, promise);\n    }\n\n    // Keep track of each font we translated so the caller can\n    // load them asynchronously before calling display on a page.\n    font.loadedName = `${this.idFactory.getDocId()}_${fontID}`;\n\n    this.translateFont(preEvaluatedFont)\n      .then(async translatedFont => {\n        const translated = new TranslatedFont({\n          loadedName: font.loadedName,\n          font: translatedFont,\n          dict: font,\n        });\n\n        if (translatedFont.isType3Font) {\n          try {\n            await translated.loadType3Data(this, resources, task, seenRefs);\n          } catch (reason) {\n            throw new Error(`Type3 font load error: ${reason}`);\n          }\n        }\n        resolve(translated);\n      })\n      .catch(reason => {\n        // TODO reject?\n        warn(`loadFont - translateFont failed: \"${reason}\".`);\n\n        resolve(\n          new TranslatedFont({\n            loadedName: font.loadedName,\n            font: new ErrorFont(reason?.message),\n            dict: font,\n          })\n        );\n      });\n    return promise;\n  }\n\n  buildPath(fn, args, state) {\n    const { pathMinMax: minMax, pathBuffer } = state;\n    switch (fn | 0) {\n      case OPS.rectangle: {\n        const x = (state.currentPointX = args[0]);\n        const y = (state.currentPointY = args[1]);\n        const width = args[2];\n        const height = args[3];\n        const xw = x + width;\n        const yh = y + height;\n        if (width === 0 || height === 0) {\n          pathBuffer.push(\n            DrawOPS.moveTo,\n            x,\n            y,\n            DrawOPS.lineTo,\n            xw,\n            yh,\n            DrawOPS.closePath\n          );\n        } else {\n          pathBuffer.push(\n            DrawOPS.moveTo,\n            x,\n            y,\n            DrawOPS.lineTo,\n            xw,\n            y,\n            DrawOPS.lineTo,\n            xw,\n            yh,\n            DrawOPS.lineTo,\n            x,\n            yh,\n            DrawOPS.closePath\n          );\n        }\n        Util.rectBoundingBox(x, y, xw, yh, minMax);\n        break;\n      }\n      case OPS.moveTo: {\n        const x = (state.currentPointX = args[0]);\n        const y = (state.currentPointY = args[1]);\n        pathBuffer.push(DrawOPS.moveTo, x, y);\n        Util.pointBoundingBox(x, y, minMax);\n        break;\n      }\n      case OPS.lineTo: {\n        const x = (state.currentPointX = args[0]);\n        const y = (state.currentPointY = args[1]);\n        pathBuffer.push(DrawOPS.lineTo, x, y);\n        Util.pointBoundingBox(x, y, minMax);\n        break;\n      }\n      case OPS.curveTo: {\n        const startX = state.currentPointX;\n        const startY = state.currentPointY;\n        const [x1, y1, x2, y2, x, y] = args;\n        state.currentPointX = x;\n        state.currentPointY = y;\n        pathBuffer.push(DrawOPS.curveTo, x1, y1, x2, y2, x, y);\n        Util.bezierBoundingBox(startX, startY, x1, y1, x2, y2, x, y, minMax);\n        break;\n      }\n      case OPS.curveTo2: {\n        const startX = state.currentPointX;\n        const startY = state.currentPointY;\n        const [x1, y1, x, y] = args;\n        state.currentPointX = x;\n        state.currentPointY = y;\n        pathBuffer.push(DrawOPS.curveTo, startX, startY, x1, y1, x, y);\n        Util.bezierBoundingBox(\n          startX,\n          startY,\n          startX,\n          startY,\n          x1,\n          y1,\n          x,\n          y,\n          minMax\n        );\n        break;\n      }\n      case OPS.curveTo3: {\n        const startX = state.currentPointX;\n        const startY = state.currentPointY;\n        const [x1, y1, x, y] = args;\n        state.currentPointX = x;\n        state.currentPointY = y;\n        pathBuffer.push(DrawOPS.curveTo, x1, y1, x, y, x, y);\n        Util.bezierBoundingBox(startX, startY, x1, y1, x, y, x, y, minMax);\n        break;\n      }\n      case OPS.closePath:\n        pathBuffer.push(DrawOPS.closePath);\n        break;\n    }\n  }\n\n  _getColorSpace(cs, resources, localColorSpaceCache) {\n    return ColorSpaceUtils.parse({\n      cs,\n      xref: this.xref,\n      resources,\n      pdfFunctionFactory: this._pdfFunctionFactory,\n      globalColorSpaceCache: this.globalColorSpaceCache,\n      localColorSpaceCache,\n      asyncIfNotCached: true,\n    });\n  }\n\n  async _handleColorSpace(csPromise) {\n    try {\n      return await csPromise;\n    } catch (ex) {\n      if (ex instanceof AbortException) {\n        return null;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`_handleColorSpace - ignoring ColorSpace: \"${ex}\".`);\n        return null;\n      }\n      throw ex;\n    }\n  }\n\n  parseShading({\n    shading,\n    resources,\n    localColorSpaceCache,\n    localShadingPatternCache,\n  }) {\n    // Shadings and patterns may be referenced by the same name but the resource\n    // dictionary could be different so we can't use the name for the cache key.\n    let id = localShadingPatternCache.get(shading);\n    if (id) {\n      return id;\n    }\n    let patternIR;\n\n    try {\n      const shadingFill = Pattern.parseShading(\n        shading,\n        this.xref,\n        resources,\n        this._pdfFunctionFactory,\n        this.globalColorSpaceCache,\n        localColorSpaceCache\n      );\n      patternIR = shadingFill.getIR();\n    } catch (reason) {\n      if (reason instanceof AbortException) {\n        return null;\n      }\n      if (this.options.ignoreErrors) {\n        warn(`parseShading - ignoring shading: \"${reason}\".`);\n\n        localShadingPatternCache.set(shading, null);\n        return null;\n      }\n      throw reason;\n    }\n\n    id = `pattern_${this.idFactory.createObjId()}`;\n    if (this.parsingType3Font) {\n      id = `${this.idFactory.getDocId()}_type3_${id}`;\n    }\n    localShadingPatternCache.set(shading, id);\n\n    if (this.parsingType3Font) {\n      const buffer = compilePatternInfo(patternIR);\n      this.handler.send(\"commonobj\", [id, \"Pattern\", buffer], [buffer]);\n    } else {\n      this.handler.send(\"obj\", [id, this.pageIndex, \"Pattern\", patternIR]);\n    }\n    return id;\n  }\n\n  handleColorN(\n    operatorList,\n    fn,\n    args,\n    cs,\n    patterns,\n    resources,\n    task,\n    localColorSpaceCache,\n    localTilingPatternCache,\n    localShadingPatternCache,\n    seenRefs\n  ) {\n    // compile tiling patterns\n    const patternName = args.pop();\n    // SCN/scn applies patterns along with normal colors\n    if (patternName instanceof Name) {\n      const rawPattern = patterns.getRaw(patternName.name);\n\n      const localTilingPattern =\n        rawPattern instanceof Ref &&\n        localTilingPatternCache.getByRef(rawPattern);\n      if (localTilingPattern) {\n        try {\n          const color = cs.base ? cs.base.getRgbHex(args, 0) : null;\n          const tilingPatternIR = getTilingPatternIR(\n            localTilingPattern.operatorListIR,\n            localTilingPattern.dict,\n            color,\n            localTilingPattern.needsIsolation\n          );\n          operatorList.addOp(fn, tilingPatternIR);\n          return undefined;\n        } catch {\n          // Handle any errors during normal TilingPattern parsing.\n        }\n      }\n\n      const pattern = this.xref.fetchIfRef(rawPattern);\n      if (pattern) {\n        const dict = pattern instanceof BaseStream ? pattern.dict : pattern;\n        const typeNum = dict.get(\"PatternType\");\n\n        if (typeNum === PatternType.TILING) {\n          const color = cs.base ? cs.base.getRgbHex(args, 0) : null;\n          return this.handleTilingType(\n            fn,\n            color,\n            resources,\n            pattern,\n            dict,\n            operatorList,\n            task,\n            localTilingPatternCache,\n            seenRefs\n          );\n        } else if (typeNum === PatternType.SHADING) {\n          const shading = dict.get(\"Shading\");\n          const objId = this.parseShading({\n            shading,\n            resources,\n            localColorSpaceCache,\n            localShadingPatternCache,\n          });\n          if (objId) {\n            const matrix = lookupMatrix(dict.getArray(\"Matrix\"), null);\n            operatorList.addOp(fn, [\"Shading\", objId, matrix]);\n          }\n          return undefined;\n        }\n        throw new FormatError(`Unknown PatternType: ${typeNum}`);\n      }\n    }\n    throw new FormatError(`Unknown PatternName: ${patternName}`);\n  }\n\n  async parseMarkedContentProps(contentProperties, resources) {\n    return parseMarkedContentProps(this.xref, contentProperties, resources);\n  }\n\n  async getOperatorList({\n    stream,\n    task,\n    resources,\n    operatorList,\n    initialState = null,\n    fallbackFontDict = null,\n    prevRefs = null,\n  }) {\n    if (stream.isAsync) {\n      const bytes = await stream.asyncGetBytes();\n      if (bytes) {\n        stream = new Stream(bytes, 0, bytes.length, stream.dict);\n      }\n    }\n\n    const objId = stream.dict?.objId;\n    const seenRefs = new RefSet(prevRefs);\n\n    if (objId) {\n      if (prevRefs?.has(objId)) {\n        throw new Error(\n          `getOperatorList - ignoring circular reference: ${objId}`\n        );\n      }\n      seenRefs.put(objId);\n    }\n    // Ensure that `resources`/`initialState` is correctly initialized,\n    // even if the provided parameter is e.g. `null`.\n    resources ||= Dict.empty;\n    initialState ||= new EvalState();\n\n    if (!operatorList) {\n      throw new Error('getOperatorList: missing \"operatorList\" parameter');\n    }\n\n    const self = this;\n    const xref = this.xref;\n    const localImageCache = new LocalImageCache();\n    const localColorSpaceCache = new LocalColorSpaceCache();\n    const localGStateCache = new LocalGStateCache();\n    const localTilingPatternCache = new LocalTilingPatternCache();\n    const localShadingPatternCache = new Map();\n\n    const xobjs = resources.get(\"XObject\") || Dict.empty;\n    const patterns = resources.get(\"Pattern\") || Dict.empty;\n    const stateManager = new StateManager(initialState);\n    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n    const timeSlotManager = new TimeSlotManager();\n\n    function closePendingRestoreOPS(argument) {\n      for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {\n        operatorList.addOp(OPS.restore, []);\n      }\n    }\n\n    return new Promise(function promiseBody(resolve, reject) {\n      const next = function (promise) {\n        Promise.all([promise, operatorList.ready]).then(function () {\n          try {\n            promiseBody(resolve, reject);\n          } catch (ex) {\n            reject(ex);\n          }\n        }, reject);\n      };\n      task.ensureNotTerminated();\n      timeSlotManager.reset();\n\n      const operation = {};\n      let stop, i, ii, cs, name, isValidName;\n      while (!(stop = timeSlotManager.check())) {\n        // The arguments parsed by read() are used beyond this loop, so we\n        // cannot reuse the same array on each iteration. Therefore we pass\n        // in |null| as the initial value (see the comment on\n        // EvaluatorPreprocessor_read() for why).\n        operation.args = null;\n        if (!preprocessor.read(operation)) {\n          break;\n        }\n        let args = operation.args;\n        let fn = operation.fn;\n\n        switch (fn | 0) {\n          case OPS.paintXObject:\n            // eagerly compile XForm objects\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n\n            if (isValidName) {\n              const localImage = localImageCache.getByName(name);\n              if (localImage) {\n                addCachedImageOps(operatorList, localImage);\n                args = null;\n                continue;\n              }\n            }\n\n            next(\n              new Promise(function (resolveXObject, rejectXObject) {\n                if (!isValidName) {\n                  throw new FormatError(\"XObject must be referred to by name.\");\n                }\n\n                let xobj = xobjs.getRaw(name);\n                if (xobj instanceof Ref) {\n                  const cachedImage =\n                    localImageCache.getByRef(xobj) ||\n                    self._regionalImageCache.getByRef(xobj) ||\n                    self.globalImageCache.getData(xobj, self.pageIndex);\n                  if (cachedImage) {\n                    addCachedImageOps(operatorList, cachedImage);\n                    resolveXObject();\n                    return;\n                  }\n\n                  xobj = xref.fetch(xobj);\n                }\n\n                if (!(xobj instanceof BaseStream)) {\n                  throw new FormatError(\"XObject should be a stream\");\n                }\n\n                const type = xobj.dict.get(\"Subtype\");\n                if (!(type instanceof Name)) {\n                  throw new FormatError(\"XObject should have a Name subtype\");\n                }\n\n                if (type.name === \"Form\") {\n                  stateManager.save();\n                  self\n                    .buildFormXObject(\n                      resources,\n                      xobj,\n                      null,\n                      operatorList,\n                      task,\n                      stateManager.state.clone({ newPath: true }),\n                      localColorSpaceCache,\n                      seenRefs\n                    )\n                    .then(function () {\n                      stateManager.restore();\n                      resolveXObject();\n                    }, rejectXObject);\n                  return;\n                } else if (type.name === \"Image\") {\n                  self\n                    .buildPaintImageXObject({\n                      resources,\n                      image: xobj,\n                      operatorList,\n                      cacheKey: name,\n                      localImageCache,\n                      localColorSpaceCache,\n                    })\n                    .then(resolveXObject, rejectXObject);\n                  return;\n                } else if (type.name === \"PS\") {\n                  // PostScript XObjects are unused when viewing documents.\n                  // See section 4.7.1 of Adobe's PDF reference.\n                  info(\"Ignored XObject subtype PS\");\n                } else {\n                  throw new FormatError(\n                    `Unhandled XObject subtype ${type.name}`\n                  );\n                }\n                resolveXObject();\n              }).catch(function (reason) {\n                if (reason instanceof AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  warn(`getOperatorList - ignoring XObject: \"${reason}\".`);\n                  return;\n                }\n                throw reason;\n              })\n            );\n            return;\n          case OPS.setFont:\n            const fontSize = args[1];\n            // eagerly collect all fonts\n            next(\n              self\n                .handleSetFont(\n                  resources,\n                  args,\n                  null,\n                  operatorList,\n                  task,\n                  stateManager.state,\n                  fallbackFontDict,\n                  /* cssFontInfo = */ null,\n                  seenRefs\n                )\n                .then(function (loadedName) {\n                  operatorList.addDependency(loadedName);\n                  operatorList.addOp(OPS.setFont, [loadedName, fontSize]);\n                })\n            );\n            return;\n          case OPS.endInlineImage:\n            const cacheKey = args[0].cacheKey;\n            if (cacheKey) {\n              const localImage = localImageCache.getByName(cacheKey);\n              if (localImage) {\n                addCachedImageOps(operatorList, localImage);\n                args = null;\n                continue;\n              }\n            }\n            next(\n              self.buildPaintImageXObject({\n                resources,\n                image: args[0],\n                isInline: true,\n                operatorList,\n                cacheKey,\n                localImageCache,\n                localColorSpaceCache,\n              })\n            );\n            return;\n          case OPS.showText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            args[0] = self.handleText(args[0], stateManager.state);\n            break;\n          case OPS.showSpacedText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            const combinedGlyphs = [],\n              state = stateManager.state;\n            for (const arrItem of args[0]) {\n              if (typeof arrItem === \"string\") {\n                combinedGlyphs.push(...self.handleText(arrItem, state));\n              } else if (typeof arrItem === \"number\") {\n                combinedGlyphs.push(arrItem);\n              }\n            }\n            args[0] = combinedGlyphs;\n            fn = OPS.showText;\n            break;\n          case OPS.nextLineShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            operatorList.addOp(OPS.nextLine);\n            args[0] = self.handleText(args[0], stateManager.state);\n            fn = OPS.showText;\n            break;\n          case OPS.nextLineSetSpacingShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            operatorList.addOp(OPS.nextLine);\n            operatorList.addOp(OPS.setWordSpacing, [args.shift()]);\n            operatorList.addOp(OPS.setCharSpacing, [args.shift()]);\n            args[0] = self.handleText(args[0], stateManager.state);\n            fn = OPS.showText;\n            break;\n          case OPS.setTextRenderingMode:\n            stateManager.state.textRenderingMode = args[0];\n            break;\n\n          case OPS.setFillColorSpace: {\n            const fillCS = self._getColorSpace(\n              args[0],\n              resources,\n              localColorSpaceCache\n            );\n            if (fillCS instanceof ColorSpace) {\n              stateManager.state.fillColorSpace = fillCS;\n              continue;\n            }\n\n            next(\n              self._handleColorSpace(fillCS).then(colorSpace => {\n                stateManager.state.fillColorSpace =\n                  colorSpace || ColorSpaceUtils.gray;\n              })\n            );\n            return;\n          }\n          case OPS.setStrokeColorSpace: {\n            const strokeCS = self._getColorSpace(\n              args[0],\n              resources,\n              localColorSpaceCache\n            );\n            if (strokeCS instanceof ColorSpace) {\n              stateManager.state.strokeColorSpace = strokeCS;\n              continue;\n            }\n\n            next(\n              self._handleColorSpace(strokeCS).then(colorSpace => {\n                stateManager.state.strokeColorSpace =\n                  colorSpace || ColorSpaceUtils.gray;\n              })\n            );\n            return;\n          }\n          case OPS.setFillColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            cs = stateManager.state.fillColorSpace;\n            args = [cs.getRgbHex(args, 0)];\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            cs = stateManager.state.strokeColorSpace;\n            args = [cs.getRgbHex(args, 0)];\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillGray:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.fillColorSpace = ColorSpaceUtils.gray;\n            args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeGray:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.strokeColorSpace = ColorSpaceUtils.gray;\n            args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillCMYKColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.fillColorSpace = ColorSpaceUtils.cmyk;\n            args = [ColorSpaceUtils.cmyk.getRgbHex(args, 0)];\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeCMYKColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.strokeColorSpace = ColorSpaceUtils.cmyk;\n            args = [ColorSpaceUtils.cmyk.getRgbHex(args, 0)];\n            fn = OPS.setStrokeRGBColor;\n            break;\n          case OPS.setFillRGBColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.fillColorSpace = ColorSpaceUtils.rgb;\n            args = [ColorSpaceUtils.rgb.getRgbHex(args, 0)];\n            break;\n          case OPS.setStrokeRGBColor:\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            stateManager.state.strokeColorSpace = ColorSpaceUtils.rgb;\n            args = [ColorSpaceUtils.rgb.getRgbHex(args, 0)];\n            break;\n          case OPS.setFillColorN:\n            cs = stateManager.state.patternFillColorSpace;\n            if (!cs) {\n              if (isNumberArray(args, null)) {\n                args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];\n                fn = OPS.setFillRGBColor;\n                break;\n              }\n              args = [];\n              fn = OPS.setFillTransparent;\n              break;\n            }\n            if (cs.name === \"Pattern\") {\n              if (!Array.isArray(args)) {\n                continue;\n              }\n              next(\n                self.handleColorN(\n                  operatorList,\n                  OPS.setFillColorN,\n                  args,\n                  cs,\n                  patterns,\n                  resources,\n                  task,\n                  localColorSpaceCache,\n                  localTilingPatternCache,\n                  localShadingPatternCache,\n                  seenRefs\n                )\n              );\n              return;\n            }\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            args = [cs.getRgbHex(args, 0)];\n            fn = OPS.setFillRGBColor;\n            break;\n          case OPS.setStrokeColorN:\n            cs = stateManager.state.patternStrokeColorSpace;\n            if (!cs) {\n              if (isNumberArray(args, null)) {\n                args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];\n                fn = OPS.setStrokeRGBColor;\n                break;\n              }\n              args = [];\n              fn = OPS.setStrokeTransparent;\n              break;\n            }\n            if (cs.name === \"Pattern\") {\n              if (!Array.isArray(args)) {\n                continue;\n              }\n              next(\n                self.handleColorN(\n                  operatorList,\n                  OPS.setStrokeColorN,\n                  args,\n                  cs,\n                  patterns,\n                  resources,\n                  task,\n                  localColorSpaceCache,\n                  localTilingPatternCache,\n                  localShadingPatternCache,\n                  seenRefs\n                )\n              );\n              return;\n            }\n            if (!isNumberArray(args, null)) {\n              continue;\n            }\n            args = [cs.getRgbHex(args, 0)];\n            fn = OPS.setStrokeRGBColor;\n            break;\n\n          case OPS.shadingFill:\n            let shading;\n            try {\n              const shadingRes = resources.get(\"Shading\");\n              if (!shadingRes) {\n                throw new FormatError(\"No shading resource found\");\n              }\n\n              shading = shadingRes.get(args[0].name);\n              if (!shading) {\n                throw new FormatError(\"No shading object found\");\n              }\n            } catch (reason) {\n              if (reason instanceof AbortException) {\n                continue;\n              }\n              if (self.options.ignoreErrors) {\n                warn(`getOperatorList - ignoring Shading: \"${reason}\".`);\n                continue;\n              }\n              throw reason;\n            }\n            const patternId = self.parseShading({\n              shading,\n              resources,\n              localColorSpaceCache,\n              localShadingPatternCache,\n            });\n            if (!patternId) {\n              continue;\n            }\n            args = [patternId];\n            fn = OPS.shadingFill;\n            break;\n          case OPS.setGState:\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n\n            if (isValidName) {\n              const localGStateObj = localGStateCache.getByName(name);\n              if (localGStateObj) {\n                if (localGStateObj.length > 0) {\n                  operatorList.addOp(OPS.setGState, [localGStateObj]);\n                }\n                args = null;\n                continue;\n              }\n            }\n\n            next(\n              new Promise(function (resolveGState, rejectGState) {\n                if (!isValidName) {\n                  throw new FormatError(\"GState must be referred to by name.\");\n                }\n\n                const extGState = resources.get(\"ExtGState\");\n                if (!(extGState instanceof Dict)) {\n                  throw new FormatError(\"ExtGState should be a dictionary.\");\n                }\n\n                const gState = extGState.get(name);\n                // TODO: Attempt to lookup cached GStates by reference as well,\n                //       if and only if there are PDF documents where doing so\n                //       would significantly improve performance.\n                if (!(gState instanceof Dict)) {\n                  throw new FormatError(\"GState should be a dictionary.\");\n                }\n\n                self\n                  .setGState({\n                    resources,\n                    gState,\n                    operatorList,\n                    cacheKey: name,\n                    task,\n                    stateManager,\n                    localGStateCache,\n                    localColorSpaceCache,\n                    seenRefs,\n                  })\n                  .then(resolveGState, rejectGState);\n              }).catch(function (reason) {\n                if (reason instanceof AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  warn(`getOperatorList - ignoring ExtGState: \"${reason}\".`);\n                  return;\n                }\n                throw reason;\n              })\n            );\n            return;\n          case OPS.setLineWidth: {\n            // The thickness should be a non-negative number, as per spec.\n            // When the value is negative, Acrobat and Poppler take the absolute\n            // value while PDFium takes the max of 0 and the value.\n            const [thickness] = args;\n            if (typeof thickness !== \"number\") {\n              warn(`Invalid setLineWidth: ${thickness}`);\n              continue;\n            }\n            args[0] = Math.abs(thickness);\n            break;\n          }\n          case OPS.setDash: {\n            const dashPhase = args[1];\n            if (typeof dashPhase !== \"number\") {\n              warn(`Invalid setDash: ${dashPhase}`);\n              continue;\n            }\n            const dashArray = args[0];\n            if (!Array.isArray(dashArray)) {\n              warn(`Invalid setDash: ${dashArray}`);\n              continue;\n            }\n            if (dashArray.some(x => typeof x !== \"number\")) {\n              args[0] = dashArray.filter(x => typeof x === \"number\");\n            }\n            break;\n          }\n          case OPS.moveTo:\n          case OPS.lineTo:\n          case OPS.curveTo:\n          case OPS.curveTo2:\n          case OPS.curveTo3:\n          case OPS.closePath:\n          case OPS.rectangle:\n            self.buildPath(fn, args, stateManager.state);\n            continue;\n          case OPS.stroke:\n          case OPS.closeStroke:\n          case OPS.fill:\n          case OPS.eoFill:\n          case OPS.fillStroke:\n          case OPS.eoFillStroke:\n          case OPS.closeFillStroke:\n          case OPS.closeEOFillStroke:\n          case OPS.endPath: {\n            const {\n              state: { pathBuffer, pathMinMax },\n            } = stateManager;\n            if (\n              fn === OPS.closeStroke ||\n              fn === OPS.closeFillStroke ||\n              fn === OPS.closeEOFillStroke\n            ) {\n              pathBuffer.push(DrawOPS.closePath);\n            }\n            if (pathBuffer.length === 0) {\n              operatorList.addOp(OPS.constructPath, [fn, [null], null]);\n            } else {\n              operatorList.addOp(OPS.constructPath, [\n                fn,\n                [new Float32Array(pathBuffer)],\n                pathMinMax.slice(),\n              ]);\n              pathBuffer.length = 0;\n              pathMinMax.set(BBOX_INIT, 0);\n            }\n            continue;\n          }\n          case OPS.setTextMatrix:\n            operatorList.addOp(fn, [new Float32Array(args)]);\n            continue;\n          case OPS.markPoint:\n          case OPS.markPointProps:\n          case OPS.beginCompat:\n          case OPS.endCompat:\n            // Ignore operators where the corresponding handlers are known to\n            // be no-op in CanvasGraphics (display/canvas.js). This prevents\n            // serialization errors and is also a bit more efficient.\n            // We could also try to serialize all objects in a general way,\n            // e.g. as done in https://github.com/mozilla/pdf.js/pull/6266,\n            // but doing so is meaningless without knowing the semantics.\n            continue;\n          case OPS.beginMarkedContentProps:\n            if (!(args[0] instanceof Name)) {\n              warn(`Expected name for beginMarkedContentProps arg0=${args[0]}`);\n              operatorList.addOp(OPS.beginMarkedContentProps, [\"OC\", null]);\n              continue;\n            }\n            if (args[0].name === \"OC\") {\n              next(\n                self\n                  .parseMarkedContentProps(args[1], resources)\n                  .then(data => {\n                    operatorList.addOp(OPS.beginMarkedContentProps, [\n                      \"OC\",\n                      data,\n                    ]);\n                  })\n                  .catch(reason => {\n                    if (reason instanceof AbortException) {\n                      return;\n                    }\n                    if (self.options.ignoreErrors) {\n                      warn(\n                        `getOperatorList - ignoring beginMarkedContentProps: \"${reason}\".`\n                      );\n                      operatorList.addOp(OPS.beginMarkedContentProps, [\n                        \"OC\",\n                        null,\n                      ]);\n                      return;\n                    }\n                    throw reason;\n                  })\n              );\n              return;\n            }\n            // Other marked content types aren't supported yet.\n            args = [\n              args[0].name,\n              args[1] instanceof Dict ? args[1].get(\"MCID\") : null,\n            ];\n\n            break;\n          case OPS.beginMarkedContent:\n          case OPS.endMarkedContent:\n          default:\n            // Note: Ignore the operator if it has `Dict` arguments, since\n            // those are non-serializable, otherwise postMessage will throw\n            // \"An object could not be cloned.\".\n            if (args !== null) {\n              for (i = 0, ii = args.length; i < ii; i++) {\n                if (args[i] instanceof Dict) {\n                  break;\n                }\n              }\n              if (i < ii) {\n                warn(\"getOperatorList - ignoring operator: \" + fn);\n                continue;\n              }\n            }\n        }\n        operatorList.addOp(fn, args);\n      }\n      if (stop) {\n        next(deferred);\n        return;\n      }\n      // Some PDFs don't close all restores inside object/form.\n      // Closing those for them.\n      closePendingRestoreOPS();\n      resolve();\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return;\n      }\n      if (this.options.ignoreErrors) {\n        warn(\n          `getOperatorList - ignoring errors during \"${task.name}\" ` +\n            `task: \"${reason}\".`\n        );\n\n        closePendingRestoreOPS();\n        return;\n      }\n      throw reason;\n    });\n  }\n\n  async getTextContent({\n    stream,\n    task,\n    resources,\n    stateManager = null,\n    includeMarkedContent = false,\n    sink,\n    seenStyles = new Set(),\n    viewBox,\n    lang = null,\n    markedContentData = null,\n    disableNormalization = false,\n    keepWhiteSpace = false,\n    prevRefs = null,\n    intersector = null,\n  }) {\n    if (stream.isAsync) {\n      const bytes = await stream.asyncGetBytes();\n      if (bytes) {\n        stream = new Stream(bytes, 0, bytes.length, stream.dict);\n      }\n    }\n    sink ??= textSinkWrapper(null);\n\n    const objId = stream.dict?.objId;\n    const seenRefs = new RefSet(prevRefs);\n\n    if (objId) {\n      if (prevRefs?.has(objId)) {\n        throw new Error(\n          `getTextContent - ignoring circular reference: ${objId}`\n        );\n      }\n      seenRefs.put(objId);\n    }\n    // Ensure that `resources`/`stateManager` is correctly initialized,\n    // even if the provided parameter is e.g. `null`.\n    resources ||= Dict.empty;\n    stateManager ||= new StateManager(new TextState());\n\n    if (includeMarkedContent) {\n      markedContentData ||= { level: 0 };\n    }\n\n    const textContent = {\n      items: [],\n      styles: Object.create(null),\n      lang,\n    };\n    const textContentItem = {\n      initialized: false,\n      str: [],\n      totalWidth: 0,\n      totalHeight: 0,\n      width: 0,\n      height: 0,\n      vertical: false,\n      prevTransform: null,\n      prevTextRise: 0,\n      textAdvanceScale: 0,\n      spaceInFlowMin: 0,\n      spaceInFlowMax: 0,\n      trackingSpaceMin: Infinity,\n      negativeSpaceMax: -Infinity,\n      notASpace: -Infinity,\n      transform: null,\n      fontName: null,\n      hasEOL: false,\n    };\n\n    // Use a circular buffer (length === 2) to save the last chars in the\n    // text stream.\n    // This implementation of the circular buffer is using a fixed array\n    // and the position of the next element:\n    // function addElement(x) {\n    //   buffer[pos] = x;\n    //   pos = (pos + 1) % buffer.length;\n    // }\n    // It's a way faster than:\n    // function addElement(x) {\n    //   buffer.push(x);\n    //   buffer.shift();\n    // }\n    //\n    // It's useful to know when we need to add a whitespace in the\n    // text chunk.\n    const twoLastChars = [\" \", \" \"];\n    let twoLastCharsPos = 0;\n\n    /**\n     * Save the last char.\n     * @param {string} char\n     * @returns {boolean} true when the two last chars before adding the new one\n     * are a non-whitespace followed by a whitespace.\n     */\n    function saveLastChar(char) {\n      const nextPos = (twoLastCharsPos + 1) % 2;\n      const ret =\n        twoLastChars[twoLastCharsPos] !== \" \" && twoLastChars[nextPos] === \" \";\n      twoLastChars[twoLastCharsPos] = char;\n      twoLastCharsPos = nextPos;\n\n      return !keepWhiteSpace && ret;\n    }\n\n    function shouldAddWhitepsace() {\n      return (\n        !keepWhiteSpace &&\n        twoLastChars[twoLastCharsPos] !== \" \" &&\n        twoLastChars[(twoLastCharsPos + 1) % 2] === \" \"\n      );\n    }\n\n    function resetLastChars() {\n      twoLastChars[0] = twoLastChars[1] = \" \";\n      twoLastCharsPos = 0;\n    }\n\n    // Used in addFakeSpaces.\n\n    // A white <= fontSize * TRACKING_SPACE_FACTOR is a tracking space\n    // so it doesn't count as a space.\n    const TRACKING_SPACE_FACTOR = 0.102;\n\n    // When a white <= fontSize * NOT_A_SPACE_FACTOR, there is no space\n    // even if one is present in the text stream.\n    const NOT_A_SPACE_FACTOR = 0.03;\n\n    // A negative white < fontSize * NEGATIVE_SPACE_FACTOR induces\n    // a break (a new chunk of text is created).\n    // It doesn't change anything when the text is copied but\n    // it improves potential mismatch between text layer and canvas.\n    const NEGATIVE_SPACE_FACTOR = -0.2;\n\n    // A white with a width in [fontSize * MIN_FACTOR; fontSize * MAX_FACTOR]\n    // is a space which will be inserted in the current flow of words.\n    // If the width is outside of this range then the flow is broken\n    // (which means a new span in the text layer).\n    // It's useful to adjust the best as possible the span in the layer\n    // to what is displayed in the canvas.\n    const SPACE_IN_FLOW_MIN_FACTOR = 0.102;\n    const SPACE_IN_FLOW_MAX_FACTOR = 0.6;\n\n    // If a char is too high/too low compared to the previous we just create\n    // a new chunk.\n    // If the advance isn't in the +/-VERTICAL_SHIFT_RATIO * height range then\n    // a new chunk is created.\n    const VERTICAL_SHIFT_RATIO = 0.25;\n\n    const self = this;\n    const xref = this.xref;\n    const showSpacedTextBuffer = [];\n\n    // The xobj is parsed iff it's needed, e.g. if there is a `DO` cmd.\n    let xobjs = null;\n    const emptyXObjectCache = new LocalImageCache();\n    const emptyGStateCache = new LocalGStateCache();\n\n    const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\n\n    let textState, currentTextState;\n\n    function pushWhitespace({\n      width = 0,\n      height = 0,\n      transform = textContentItem.prevTransform,\n      fontName = textContentItem.fontName,\n    }) {\n      intersector?.addExtraChar(\" \");\n      textContent.items.push({\n        str: \" \",\n        dir: \"ltr\",\n        width,\n        height,\n        transform,\n        fontName,\n        hasEOL: false,\n      });\n    }\n\n    function getCurrentTextTransform() {\n      // 9.4.4 Text Space Details\n      const font = textState.font;\n      const tsm = [\n        textState.fontSize * textState.textHScale,\n        0,\n        0,\n        textState.fontSize,\n        0,\n        textState.textRise,\n      ];\n\n      if (\n        font.isType3Font &&\n        (textState.fontSize <= 1 || font.isCharBBox) &&\n        !isArrayEqual(textState.fontMatrix, FONT_IDENTITY_MATRIX)\n      ) {\n        const glyphHeight = font.bbox[3] - font.bbox[1];\n        if (glyphHeight > 0) {\n          tsm[3] *= glyphHeight * textState.fontMatrix[3];\n        }\n      }\n\n      return Util.transform(\n        textState.ctm,\n        Util.transform(textState.textMatrix, tsm)\n      );\n    }\n\n    function ensureTextContentItem() {\n      if (textContentItem.initialized) {\n        return textContentItem;\n      }\n      const { font, loadedName } = textState;\n      if (!seenStyles.has(loadedName)) {\n        seenStyles.add(loadedName);\n        textContent.styles[loadedName] = {\n          fontFamily: font.fallbackName,\n          ascent: font.ascent,\n          descent: font.descent,\n          vertical: font.vertical,\n        };\n        if (self.options.fontExtraProperties && font.systemFontInfo) {\n          const style = textContent.styles[loadedName];\n          style.fontSubstitution = font.systemFontInfo.css;\n          style.fontSubstitutionLoadedName = font.systemFontInfo.loadedName;\n        }\n      }\n      textContentItem.fontName = loadedName;\n\n      const trm = (textContentItem.transform = getCurrentTextTransform());\n      if (!font.vertical) {\n        textContentItem.width = textContentItem.totalWidth = 0;\n        textContentItem.height = textContentItem.totalHeight = Math.hypot(\n          trm[2],\n          trm[3]\n        );\n        textContentItem.vertical = false;\n      } else {\n        textContentItem.width = textContentItem.totalWidth = Math.hypot(\n          trm[0],\n          trm[1]\n        );\n        textContentItem.height = textContentItem.totalHeight = 0;\n        textContentItem.vertical = true;\n      }\n\n      const scaleLineX = Math.hypot(\n        textState.textLineMatrix[0],\n        textState.textLineMatrix[1]\n      );\n      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);\n      textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;\n\n      const { fontSize } = textState;\n      textContentItem.trackingSpaceMin = fontSize * TRACKING_SPACE_FACTOR;\n      textContentItem.notASpace = fontSize * NOT_A_SPACE_FACTOR;\n      textContentItem.negativeSpaceMax = fontSize * NEGATIVE_SPACE_FACTOR;\n      textContentItem.spaceInFlowMin = fontSize * SPACE_IN_FLOW_MIN_FACTOR;\n      textContentItem.spaceInFlowMax = fontSize * SPACE_IN_FLOW_MAX_FACTOR;\n      textContentItem.hasEOL = false;\n\n      textContentItem.initialized = true;\n      return textContentItem;\n    }\n\n    function updateAdvanceScale() {\n      if (!textContentItem.initialized) {\n        return;\n      }\n\n      const scaleLineX = Math.hypot(\n        textState.textLineMatrix[0],\n        textState.textLineMatrix[1]\n      );\n      const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);\n      const scaleFactor = scaleCtmX * scaleLineX;\n      if (scaleFactor === textContentItem.textAdvanceScale) {\n        return;\n      }\n\n      if (!textContentItem.vertical) {\n        textContentItem.totalWidth +=\n          textContentItem.width * textContentItem.textAdvanceScale;\n        textContentItem.width = 0;\n      } else {\n        textContentItem.totalHeight +=\n          textContentItem.height * textContentItem.textAdvanceScale;\n        textContentItem.height = 0;\n      }\n\n      textContentItem.textAdvanceScale = scaleFactor;\n    }\n\n    function runBidiTransform(textChunk) {\n      let text = textChunk.str.join(\"\");\n      if (!disableNormalization) {\n        text = normalizeUnicode(text);\n      }\n      const bidiResult = bidi(text, -1, textChunk.vertical);\n      return {\n        str: bidiResult.str,\n        dir: bidiResult.dir,\n        width: Math.abs(textChunk.totalWidth),\n        height: Math.abs(textChunk.totalHeight),\n        transform: textChunk.transform,\n        fontName: textChunk.fontName,\n        hasEOL: textChunk.hasEOL,\n      };\n    }\n\n    async function handleSetFont(fontName, fontRef) {\n      const translated = await self.loadFont(\n        fontName,\n        fontRef,\n        resources,\n        task,\n        /* fallbackFontDict = */ null,\n        /* cssFontInfo = */ null,\n        seenRefs\n      );\n\n      textState.loadedName = translated.loadedName;\n      textState.font = translated.font;\n      textState.fontMatrix = translated.font.fontMatrix || FONT_IDENTITY_MATRIX;\n    }\n\n    function applyInverseRotation(x, y, matrix) {\n      const scale = Math.hypot(matrix[0], matrix[1]);\n      return [\n        (matrix[0] * x + matrix[1] * y) / scale,\n        (matrix[2] * x + matrix[3] * y) / scale,\n      ];\n    }\n\n    function compareWithLastPosition(glyphWidth) {\n      const currentTransform = getCurrentTextTransform();\n      let posX = currentTransform[4];\n      let posY = currentTransform[5];\n\n      // Check if the glyph is in the viewbox.\n      if (textState.font?.vertical) {\n        if (\n          posX < viewBox[0] ||\n          posX > viewBox[2] ||\n          posY + glyphWidth < viewBox[1] ||\n          posY > viewBox[3]\n        ) {\n          return false;\n        }\n      } else if (\n        posX + glyphWidth < viewBox[0] ||\n        posX > viewBox[2] ||\n        posY < viewBox[1] ||\n        posY > viewBox[3]\n      ) {\n        return false;\n      }\n\n      if (!textState.font || !textContentItem.prevTransform) {\n        return true;\n      }\n\n      let lastPosX = textContentItem.prevTransform[4];\n      let lastPosY = textContentItem.prevTransform[5];\n\n      if (lastPosX === posX && lastPosY === posY) {\n        return true;\n      }\n\n      let rotate = -1;\n      // Take into account the rotation is the current transform.\n      if (\n        currentTransform[0] &&\n        currentTransform[1] === 0 &&\n        currentTransform[2] === 0\n      ) {\n        rotate = currentTransform[0] > 0 ? 0 : 180;\n      } else if (\n        currentTransform[1] &&\n        currentTransform[0] === 0 &&\n        currentTransform[3] === 0\n      ) {\n        rotate = currentTransform[1] > 0 ? 90 : 270;\n      }\n\n      switch (rotate) {\n        case 0:\n          break;\n        case 90:\n          [posX, posY] = [posY, posX];\n          [lastPosX, lastPosY] = [lastPosY, lastPosX];\n          break;\n        case 180:\n          [posX, posY, lastPosX, lastPosY] = [\n            -posX,\n            -posY,\n            -lastPosX,\n            -lastPosY,\n          ];\n          break;\n        case 270:\n          [posX, posY] = [-posY, -posX];\n          [lastPosX, lastPosY] = [-lastPosY, -lastPosX];\n          break;\n        default:\n          // This is not a 0, 90, 180, 270 rotation so:\n          //  - remove the scale factor from the matrix to get a rotation matrix\n          //  - apply the inverse (which is the transposed) to the positions\n          // and we can then compare positions of the glyphs to detect\n          // a whitespace.\n          [posX, posY] = applyInverseRotation(posX, posY, currentTransform);\n          [lastPosX, lastPosY] = applyInverseRotation(\n            lastPosX,\n            lastPosY,\n            textContentItem.prevTransform\n          );\n      }\n\n      if (textState.font.vertical) {\n        const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale;\n        const advanceX = posX - lastPosX;\n\n        // When the total height of the current chunk is negative\n        // then we're writing from bottom to top.\n        const textOrientation = Math.sign(\n          textContentItem.height || textContentItem.totalHeight\n        );\n        if (advanceY < textOrientation * textContentItem.negativeSpaceMax) {\n          if (\n            Math.abs(advanceX) >\n            0.5 * textContentItem.width /* not the same column */\n          ) {\n            appendEOL();\n            return true;\n          }\n\n          resetLastChars();\n          flushTextContentItem();\n          return true;\n        }\n\n        if (Math.abs(advanceX) > textContentItem.width) {\n          appendEOL();\n          return true;\n        }\n\n        if (advanceY <= textOrientation * textContentItem.notASpace) {\n          // The real spacing between 2 consecutive chars is thin enough to be\n          // considered a non-space.\n          resetLastChars();\n        }\n\n        if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) {\n          if (shouldAddWhitepsace()) {\n            // The space is very thin, hence it deserves to have its own span in\n            // order to avoid too much shift between the canvas and the text\n            // layer.\n            resetLastChars();\n            flushTextContentItem();\n            pushWhitespace({ height: Math.abs(advanceY) });\n          } else {\n            textContentItem.height += advanceY;\n          }\n        } else if (\n          !addFakeSpaces(\n            advanceY,\n            textContentItem.prevTransform,\n            textOrientation\n          )\n        ) {\n          if (textContentItem.str.length === 0) {\n            resetLastChars();\n            pushWhitespace({ height: Math.abs(advanceY) });\n          } else {\n            textContentItem.height += advanceY;\n          }\n        }\n\n        if (Math.abs(advanceX) > textContentItem.width * VERTICAL_SHIFT_RATIO) {\n          flushTextContentItem();\n        }\n\n        return true;\n      }\n\n      const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale;\n      const advanceY = posY - lastPosY;\n\n      // When the total width of the current chunk is negative\n      // then we're writing from right to left.\n      const textOrientation = Math.sign(\n        textContentItem.width || textContentItem.totalWidth\n      );\n      if (advanceX < textOrientation * textContentItem.negativeSpaceMax) {\n        if (\n          Math.abs(advanceY) >\n          0.5 * textContentItem.height /* not the same line */\n        ) {\n          appendEOL();\n          return true;\n        }\n\n        // We're moving back so in case the last char was a whitespace\n        // we cancel it: it doesn't make sense to insert it.\n        resetLastChars();\n        flushTextContentItem();\n        return true;\n      }\n\n      // Compensate for a textRise change (e.g. superscript/subscript dropping\n      // back to baseline): textRise is baked into posY/lastPosY via tsm[5] in\n      // getCurrentTextTransform(), scaled by the Y component of the CTM×TM\n      // product, which equals currentTransform[3] / textState.fontSize.\n      // Without this correction a superscript whose textRise exceeds the line\n      // height triggers a spurious EOL when the rise returns to 0.\n      const textRiseDelta = textState.textRise - textContentItem.prevTextRise;\n      const advanceYCorrected =\n        textRiseDelta === 0\n          ? advanceY\n          : advanceY -\n            (currentTransform[3] / textState.fontSize) * textRiseDelta;\n      if (Math.abs(advanceYCorrected) > textContentItem.height) {\n        appendEOL();\n        return true;\n      }\n\n      if (advanceX <= textOrientation * textContentItem.notASpace) {\n        // The real spacing between 2 consecutive chars is thin enough to be\n        // considered a non-space.\n        resetLastChars();\n      }\n\n      if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) {\n        if (shouldAddWhitepsace()) {\n          // The space is very thin, hence it deserves to have its own span in\n          // order to avoid too much shift between the canvas and the text\n          // layer.\n          resetLastChars();\n          flushTextContentItem();\n          pushWhitespace({ width: Math.abs(advanceX) });\n        } else {\n          textContentItem.width += advanceX;\n        }\n      } else if (\n        !addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation)\n      ) {\n        if (textContentItem.str.length === 0) {\n          resetLastChars();\n          pushWhitespace({ width: Math.abs(advanceX) });\n        } else {\n          textContentItem.width += advanceX;\n        }\n      }\n\n      if (Math.abs(advanceY) > textContentItem.height * VERTICAL_SHIFT_RATIO) {\n        flushTextContentItem();\n      }\n\n      return true;\n    }\n\n    function buildTextContentItem({ chars, extraSpacing }) {\n      if (\n        currentTextState !== textState &&\n        (currentTextState.fontSize !== textState.fontSize ||\n          (currentTextState.fontName !== textState.fontName &&\n            (currentTextState.font.name !== textState.font.name ||\n              currentTextState.font.vertical !== textState.font.vertical)))\n      ) {\n        flushTextContentItem();\n        currentTextState = textState.clone();\n      }\n\n      const font = textState.font;\n      const baseCharSpacing = font.vertical\n        ? -textState.charSpacing\n        : textState.charSpacing;\n      if (!chars) {\n        // Just move according to the space we have.\n        const charSpacing = baseCharSpacing + extraSpacing;\n        if (charSpacing) {\n          if (!font.vertical) {\n            textState.translateTextMatrix(\n              charSpacing * textState.textHScale,\n              0\n            );\n          } else {\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n        }\n\n        if (keepWhiteSpace) {\n          compareWithLastPosition(0);\n        }\n\n        return;\n      }\n\n      const glyphs = font.charsToGlyphs(chars);\n      const scale = textState.fontMatrix[0] * textState.fontSize;\n\n      for (let i = 0, ii = glyphs.length; i < ii; i++) {\n        const glyph = glyphs[i];\n        const { category, originalCharCode } = glyph;\n\n        if (category.isInvisibleFormatMark) {\n          continue;\n        }\n        let charSpacing = baseCharSpacing + (i + 1 === ii ? extraSpacing : 0);\n\n        let glyphWidth = glyph.width;\n        if (font.vertical) {\n          glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth;\n        }\n        let scaledDim = glyphWidth * scale;\n\n        if (originalCharCode === 0x20) {\n          charSpacing += textState.wordSpacing;\n        }\n\n        if (!keepWhiteSpace && category.isWhitespace) {\n          // Don't push a \" \" in the textContentItem\n          // (except when it's between two non-spaces chars),\n          // it will be done (if required) in next call to\n          // compareWithLastPosition.\n          // This way we can merge real spaces and spaces due to cursor moves.\n          if (!font.vertical) {\n            charSpacing += scaledDim;\n            textState.translateTextMatrix(\n              charSpacing * textState.textHScale,\n              0\n            );\n          } else {\n            charSpacing += -scaledDim;\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n          saveLastChar(\" \");\n          continue;\n        }\n\n        if (\n          !category.isZeroWidthDiacritic &&\n          !compareWithLastPosition(scaledDim)\n        ) {\n          // The glyph is not in page so just skip it but move the cursor.\n          if (!font.vertical) {\n            textState.translateTextMatrix(scaledDim * textState.textHScale, 0);\n          } else {\n            textState.translateTextMatrix(0, scaledDim);\n          }\n          continue;\n        }\n\n        // Must be called after compareWithLastPosition because\n        // the textContentItem could have been flushed.\n        const textChunk = ensureTextContentItem();\n        if (category.isZeroWidthDiacritic) {\n          scaledDim = 0;\n        }\n\n        if (!font.vertical) {\n          scaledDim *= textState.textHScale;\n          intersector?.addGlyph(\n            getCurrentTextTransform(),\n            scaledDim,\n            0,\n            glyph.unicode\n          );\n          textState.translateTextMatrix(scaledDim, 0);\n          textChunk.width += scaledDim;\n        } else {\n          intersector?.addGlyph(\n            getCurrentTextTransform(),\n            0,\n            scaledDim,\n            glyph.unicode\n          );\n          textState.translateTextMatrix(0, scaledDim);\n          scaledDim = Math.abs(scaledDim);\n          textChunk.height += scaledDim;\n        }\n\n        if (scaledDim) {\n          // Save the position of the last visible character.\n          textChunk.prevTransform = getCurrentTextTransform();\n          textChunk.prevTextRise = textState.textRise;\n        }\n\n        const glyphUnicode = glyph.unicode;\n        if (saveLastChar(glyphUnicode)) {\n          // The two last chars are a non-whitespace followed by a whitespace\n          // and then this non-whitespace, so we insert a whitespace here.\n          // Replaces all whitespaces with standard spaces (0x20), to avoid\n          // alignment issues between the textLayer and the canvas if the text\n          // contains e.g. tabs (fixes issue6612.pdf).\n          textChunk.str.push(\" \");\n          intersector?.addExtraChar(\" \");\n        }\n\n        if (!intersector) {\n          textChunk.str.push(glyphUnicode);\n        }\n\n        if (charSpacing) {\n          if (!font.vertical) {\n            textState.translateTextMatrix(\n              charSpacing * textState.textHScale,\n              0\n            );\n          } else {\n            textState.translateTextMatrix(0, -charSpacing);\n          }\n        }\n      }\n    }\n\n    function appendEOL() {\n      intersector?.addExtraChar(\"\\n\");\n      resetLastChars();\n      if (textContentItem.initialized) {\n        textContentItem.hasEOL = true;\n        flushTextContentItem();\n      } else {\n        textContent.items.push({\n          str: \"\",\n          dir: \"ltr\",\n          width: 0,\n          height: 0,\n          transform: getCurrentTextTransform(),\n          fontName: textState.loadedName,\n          hasEOL: true,\n        });\n      }\n    }\n\n    function addFakeSpaces(width, transf, textOrientation) {\n      if (\n        textOrientation * textContentItem.spaceInFlowMin <= width &&\n        width <= textOrientation * textContentItem.spaceInFlowMax\n      ) {\n        if (textContentItem.initialized) {\n          resetLastChars();\n          textContentItem.str.push(\" \");\n          intersector?.addExtraChar(\" \");\n        }\n        return false;\n      }\n\n      const fontName = textContentItem.fontName;\n\n      let height = 0;\n      if (textContentItem.vertical) {\n        height = width;\n        width = 0;\n      }\n\n      flushTextContentItem();\n      resetLastChars();\n      pushWhitespace({\n        width: Math.abs(width),\n        height: Math.abs(height),\n        transform: transf || getCurrentTextTransform(),\n        fontName,\n      });\n\n      return true;\n    }\n\n    function flushTextContentItem() {\n      if (!textContentItem.initialized || !textContentItem.str) {\n        return;\n      }\n\n      // Do final text scaling.\n      if (!textContentItem.vertical) {\n        textContentItem.totalWidth +=\n          textContentItem.width * textContentItem.textAdvanceScale;\n      } else {\n        textContentItem.totalHeight +=\n          textContentItem.height * textContentItem.textAdvanceScale;\n      }\n\n      textContent.items.push(runBidiTransform(textContentItem));\n      textContentItem.initialized = false;\n      textContentItem.str.length = 0;\n    }\n\n    function enqueueChunk(batch = false) {\n      const length = textContent.items.length;\n      if (length === 0) {\n        return;\n      }\n      if (batch && length < TEXT_CHUNK_BATCH_SIZE) {\n        return;\n      }\n      sink.enqueue(textContent, length);\n      textContent.items = [];\n      textContent.styles = Object.create(null);\n    }\n\n    const timeSlotManager = new TimeSlotManager();\n\n    return new Promise(function promiseBody(resolve, reject) {\n      const next = function (promise) {\n        enqueueChunk(/* batch = */ true);\n        Promise.all([promise, sink.ready]).then(function () {\n          try {\n            promiseBody(resolve, reject);\n          } catch (ex) {\n            reject(ex);\n          }\n        }, reject);\n      };\n      task.ensureNotTerminated();\n      timeSlotManager.reset();\n\n      const operation = {};\n      let stop,\n        name,\n        isValidName,\n        args = [];\n      while (!(stop = timeSlotManager.check())) {\n        // The arguments parsed by read() are not used beyond this loop, so\n        // we can reuse the same array on every iteration, thus avoiding\n        // unnecessary allocations.\n        args.length = 0;\n        operation.args = args;\n        if (!preprocessor.read(operation)) {\n          break;\n        }\n\n        // preprocessor.read() already handles save, restore and transform\n        // operations, so we don't need to worry about them here.\n\n        textState = stateManager.state;\n        currentTextState ||= textState.clone();\n        const fn = operation.fn;\n        args = operation.args;\n\n        switch (fn | 0) {\n          case OPS.setFont:\n            // Optimization to ignore multiple identical Tf commands.\n            const fontNameArg = args[0].name,\n              fontSizeArg = args[1];\n            if (\n              textState.font &&\n              fontNameArg === textState.fontName &&\n              fontSizeArg === textState.fontSize\n            ) {\n              break;\n            }\n\n            textState.fontName = fontNameArg;\n            textState.fontSize = fontSizeArg;\n            next(handleSetFont(fontNameArg, null));\n            return;\n          case OPS.setTextRise:\n            textState.textRise = args[0];\n            break;\n          case OPS.setHScale:\n            textState.textHScale = args[0] / 100;\n            break;\n          case OPS.setLeading:\n            textState.leading = args[0];\n            break;\n          case OPS.moveText:\n            textState.translateTextLineMatrix(args[0], args[1]);\n            textState.textMatrix = textState.textLineMatrix.slice();\n            break;\n          case OPS.setLeadingMoveText:\n            textState.leading = -args[1];\n            textState.translateTextLineMatrix(args[0], args[1]);\n            textState.textMatrix = textState.textLineMatrix.slice();\n            break;\n          case OPS.nextLine:\n            textState.carriageReturn();\n            break;\n          case OPS.setTextMatrix:\n            textState.setTextMatrix(\n              args[0],\n              args[1],\n              args[2],\n              args[3],\n              args[4],\n              args[5]\n            );\n            textState.setTextLineMatrix(\n              args[0],\n              args[1],\n              args[2],\n              args[3],\n              args[4],\n              args[5]\n            );\n            updateAdvanceScale();\n            break;\n          case OPS.setCharSpacing:\n            textState.charSpacing = args[0];\n            break;\n          case OPS.setWordSpacing:\n            textState.wordSpacing = args[0];\n            break;\n          case OPS.beginText:\n            textState.textMatrix = IDENTITY_MATRIX.slice();\n            textState.textLineMatrix = IDENTITY_MATRIX.slice();\n            break;\n          case OPS.showSpacedText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n\n            const spaceFactor =\n              ((textState.font.vertical ? 1 : -1) * textState.fontSize) / 1000;\n            for (const item of args[0]) {\n              if (typeof item === \"string\") {\n                showSpacedTextBuffer.push(item);\n              } else if (typeof item === \"number\" && item !== 0) {\n                // PDF Specification 5.3.2 states:\n                // The number is expressed in thousandths of a unit of text\n                // space.\n                // This amount is subtracted from the current horizontal or\n                // vertical coordinate, depending on the writing mode.\n                // In the default coordinate system, a positive adjustment\n                // has the effect of moving the next glyph painted either to\n                // the left or down by the given amount.\n                const str = showSpacedTextBuffer.join(\"\");\n                showSpacedTextBuffer.length = 0;\n                buildTextContentItem({\n                  chars: str,\n                  extraSpacing: item * spaceFactor,\n                });\n              }\n            }\n\n            if (showSpacedTextBuffer.length > 0) {\n              const str = showSpacedTextBuffer.join(\"\");\n              showSpacedTextBuffer.length = 0;\n              buildTextContentItem({\n                chars: str,\n                extraSpacing: 0,\n              });\n            }\n            break;\n          case OPS.showText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            buildTextContentItem({\n              chars: args[0],\n              extraSpacing: 0,\n            });\n            break;\n          case OPS.nextLineShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            textState.carriageReturn();\n            buildTextContentItem({\n              chars: args[0],\n              extraSpacing: 0,\n            });\n            break;\n          case OPS.nextLineSetSpacingShowText:\n            if (!stateManager.state.font) {\n              self.ensureStateFont(stateManager.state);\n              continue;\n            }\n            textState.wordSpacing = args[0];\n            textState.charSpacing = args[1];\n            textState.carriageReturn();\n            buildTextContentItem({\n              chars: args[2],\n              extraSpacing: 0,\n            });\n            break;\n          case OPS.paintXObject:\n            flushTextContentItem();\n            xobjs ??= resources.get(\"XObject\") || Dict.empty;\n\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n\n            if (isValidName && emptyXObjectCache.getByName(name)) {\n              break;\n            }\n\n            next(\n              new Promise(function (resolveXObject, rejectXObject) {\n                if (!isValidName) {\n                  throw new FormatError(\"XObject must be referred to by name.\");\n                }\n\n                let xobj = xobjs.getRaw(name);\n                if (xobj instanceof Ref) {\n                  if (emptyXObjectCache.getByRef(xobj)) {\n                    resolveXObject();\n                    return;\n                  }\n\n                  const globalImage = self.globalImageCache.getData(\n                    xobj,\n                    self.pageIndex\n                  );\n                  if (globalImage) {\n                    resolveXObject();\n                    return;\n                  }\n\n                  xobj = xref.fetch(xobj);\n                }\n\n                if (!(xobj instanceof BaseStream)) {\n                  throw new FormatError(\"XObject should be a stream\");\n                }\n                const { dict } = xobj;\n\n                const type = dict.get(\"Subtype\");\n                if (!(type instanceof Name)) {\n                  throw new FormatError(\"XObject should have a Name subtype\");\n                }\n\n                if (type.name !== \"Form\") {\n                  emptyXObjectCache.set(name, dict.objId, true);\n\n                  resolveXObject();\n                  return;\n                }\n\n                // Use a new `StateManager` to prevent incorrect positioning\n                // of textItems *after* the Form XObject, since errors in the\n                // data can otherwise prevent `restore` operators from\n                // executing.\n                // NOTE: Only an issue when `options.ignoreErrors === true`.\n                const currentState = stateManager.state.clone();\n                const xObjStateManager = new StateManager(currentState);\n\n                const matrix = lookupMatrix(dict.getArray(\"Matrix\"), null);\n                if (matrix) {\n                  xObjStateManager.transform(matrix);\n                }\n\n                const localResources = dict.get(\"Resources\");\n\n                // Enqueue the `textContent` chunk before parsing the /Form\n                // XObject.\n                enqueueChunk();\n                const sinkWrapper = textSinkWrapper(sink);\n\n                self\n                  .getTextContent({\n                    stream: xobj,\n                    task,\n                    resources:\n                      localResources instanceof Dict\n                        ? localResources\n                        : resources,\n                    stateManager: xObjStateManager,\n                    includeMarkedContent,\n                    sink: sinkWrapper,\n                    seenStyles,\n                    viewBox,\n                    lang,\n                    markedContentData,\n                    disableNormalization,\n                    keepWhiteSpace,\n                    prevRefs: seenRefs,\n                  })\n                  .then(function () {\n                    if (!sinkWrapper.enqueueInvoked) {\n                      emptyXObjectCache.set(name, dict.objId, true);\n                    }\n                    resolveXObject();\n                  }, rejectXObject);\n              }).catch(function (reason) {\n                if (reason instanceof AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  // Error(s) in the XObject -- allow text-extraction to\n                  // continue.\n                  warn(`getTextContent - ignoring XObject: \"${reason}\".`);\n                  return;\n                }\n                throw reason;\n              })\n            );\n            return;\n          case OPS.setGState:\n            isValidName = args[0] instanceof Name;\n            name = args[0].name;\n\n            if (isValidName && emptyGStateCache.getByName(name)) {\n              break;\n            }\n\n            next(\n              new Promise(function (resolveGState, rejectGState) {\n                if (!isValidName) {\n                  throw new FormatError(\"GState must be referred to by name.\");\n                }\n\n                const extGState = resources.get(\"ExtGState\");\n                if (!(extGState instanceof Dict)) {\n                  throw new FormatError(\"ExtGState should be a dictionary.\");\n                }\n\n                const gState = extGState.get(name);\n                // TODO: Attempt to lookup cached GStates by reference as well,\n                //       if and only if there are PDF documents where doing so\n                //       would significantly improve performance.\n                if (!(gState instanceof Dict)) {\n                  throw new FormatError(\"GState should be a dictionary.\");\n                }\n\n                const gStateFont = gState.get(\"Font\");\n                if (!gStateFont) {\n                  emptyGStateCache.set(name, gState.objId, true);\n\n                  resolveGState();\n                  return;\n                }\n                flushTextContentItem();\n\n                textState.fontName = null;\n                textState.fontSize = gStateFont[1];\n                handleSetFont(null, gStateFont[0]).then(\n                  resolveGState,\n                  rejectGState\n                );\n              }).catch(function (reason) {\n                if (reason instanceof AbortException) {\n                  return;\n                }\n                if (self.options.ignoreErrors) {\n                  // Error(s) in the ExtGState -- allow text-extraction to\n                  // continue.\n                  warn(`getTextContent - ignoring ExtGState: \"${reason}\".`);\n                  return;\n                }\n                throw reason;\n              })\n            );\n            return;\n          case OPS.beginMarkedContent:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              markedContentData.level++;\n\n              textContent.items.push({\n                type: \"beginMarkedContent\",\n                tag: args[0] instanceof Name ? args[0].name : null,\n              });\n            }\n            break;\n          case OPS.beginMarkedContentProps:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              markedContentData.level++;\n\n              const mcid = args[1] instanceof Dict ? args[1].get(\"MCID\") : null;\n              textContent.items.push({\n                type: \"beginMarkedContentProps\",\n                id: Number.isInteger(mcid)\n                  ? `${self.idFactory.getPageObjId()}_mc${mcid}`\n                  : null,\n                tag: args[0] instanceof Name ? args[0].name : null,\n              });\n            }\n            break;\n          case OPS.endMarkedContent:\n            flushTextContentItem();\n            if (includeMarkedContent) {\n              if (markedContentData.level === 0) {\n                // Handle unbalanced beginMarkedContent/endMarkedContent\n                // operators (fixes issue15629.pdf).\n                break;\n              }\n              markedContentData.level--;\n\n              textContent.items.push({\n                type: \"endMarkedContent\",\n              });\n            }\n            break;\n        } // switch\n        if (textContent.items.length >= sink.desiredSize) {\n          // Wait for ready, if we reach highWaterMark.\n          stop = true;\n          break;\n        }\n      } // while\n      if (stop) {\n        next(deferred);\n        return;\n      }\n      flushTextContentItem();\n      enqueueChunk();\n      resolve();\n    }).catch(reason => {\n      if (reason instanceof AbortException) {\n        return;\n      }\n      if (this.options.ignoreErrors) {\n        // Error(s) in the TextContent -- allow text-extraction to continue.\n        warn(\n          `getTextContent - ignoring errors during \"${task.name}\" ` +\n            `task: \"${reason}\".`\n        );\n\n        flushTextContentItem();\n        enqueueChunk();\n        return;\n      }\n      throw reason;\n    });\n  }\n\n  async extractDataStructures(dict, properties) {\n    const xref = this.xref;\n    let cidToGidBytes;\n    // 9.10.2\n    const toUnicodePromise = this.readToUnicode(properties.toUnicode);\n\n    if (properties.composite) {\n      // CIDSystemInfo helps to match CID to glyphs\n      const cidSystemInfo = dict.get(\"CIDSystemInfo\");\n      if (cidSystemInfo instanceof Dict && !properties.cidSystemInfo) {\n        properties.cidSystemInfo = {\n          registry: stringToPDFString(cidSystemInfo.get(\"Registry\")),\n          ordering: stringToPDFString(cidSystemInfo.get(\"Ordering\")),\n          supplement: cidSystemInfo.get(\"Supplement\"),\n        };\n      }\n\n      try {\n        const cidToGidMap = dict.get(\"CIDToGIDMap\");\n        if (cidToGidMap instanceof BaseStream) {\n          cidToGidBytes = cidToGidMap.getBytes();\n        }\n      } catch (ex) {\n        if (!this.options.ignoreErrors) {\n          throw ex;\n        }\n        warn(`extractDataStructures - ignoring CIDToGIDMap data: \"${ex}\".`);\n      }\n    }\n\n    // Based on 9.6.6 of the spec the encoding can come from multiple places\n    // and depends on the font type. The base encoding and differences are\n    // read here, but the encoding that is actually used is chosen during\n    // glyph mapping in the font.\n    // TODO: Loading the built in encoding in the font would allow the\n    // differences to be merged in here not require us to hold on to it.\n    const differences = [];\n    let baseEncodingName = null;\n    let encoding;\n    if (dict.has(\"Encoding\")) {\n      encoding = dict.get(\"Encoding\");\n      if (encoding instanceof Dict) {\n        baseEncodingName = encoding.get(\"BaseEncoding\");\n        baseEncodingName =\n          baseEncodingName instanceof Name ? baseEncodingName.name : null;\n        // Load the differences between the base and original\n        if (encoding.has(\"Differences\")) {\n          const diffEncoding = encoding.get(\"Differences\");\n          let index = 0;\n          for (const entry of diffEncoding) {\n            const data = xref.fetchIfRef(entry);\n            if (typeof data === \"number\") {\n              index = data;\n            } else if (data instanceof Name) {\n              differences[index++] = data.name;\n            } else {\n              throw new FormatError(\n                `Invalid entry in 'Differences' array: ${data}`\n              );\n            }\n          }\n        }\n      } else if (encoding instanceof Name) {\n        baseEncodingName = encoding.name;\n      } else {\n        const msg = \"Encoding is not a Name nor a Dict\";\n\n        if (!this.options.ignoreErrors) {\n          throw new FormatError(msg);\n        }\n        warn(msg);\n      }\n      // According to table 114 if the encoding is a named encoding it must be\n      // one of these predefined encodings.\n      if (\n        baseEncodingName !== \"MacRomanEncoding\" &&\n        baseEncodingName !== \"MacExpertEncoding\" &&\n        baseEncodingName !== \"WinAnsiEncoding\"\n      ) {\n        baseEncodingName = null;\n      }\n    }\n\n    const nonEmbeddedFont = !properties.file || properties.isInternalFont,\n      isSymbolsFontName = getSymbolsFonts()[properties.name];\n    // Ignore an incorrectly specified named encoding for non-embedded\n    // symbol fonts (fixes issue16464.pdf).\n    if (baseEncodingName && nonEmbeddedFont && isSymbolsFontName) {\n      baseEncodingName = null;\n    }\n\n    // Ignore incorrectly specified WinAnsiEncoding for non-embedded CJK fonts\n    // (fixes issue20489). Some chinese fonts often have WinAnsiEncoding in the\n    // PDF even though they should use Identity-H or GB-EUC-H encoding.\n    if (\n      baseEncodingName === \"WinAnsiEncoding\" &&\n      nonEmbeddedFont &&\n      properties.name?.charCodeAt(0) >= 0xb7\n    ) {\n      const fontName = properties.name;\n      // This list is built from some names from Pdfium and mupdf:\n      //  - https://pdfium.googlesource.com/pdfium/+/master/core/fpdfapi/font/cpdf_font.cpp#41\n      //  - https://fossies.org/linux/mupdf/source/pdf/pdf-font.c#l_820\n      const chineseFontNames = [\n        \"\\xCB\\xCE\\xCC\\xE5\", // SimSun\n        \"\\xBA\\xDA\\xCC\\xE5\", // SimHei\n        \"\\xBF\\xAC\\xCC\\xE5\", // SimKai\n        \"\\xB7\\xC2\\xCB\\xCE\", // SimFang\n        \"\\xBF\\xAC\\xCC\\xE5_GB2312\", // SimKai\n        \"\\xB7\\xC2\\xCB\\xCE_GB2312\", // SimFang\n        \"\\xC1\\xA5\\xCA\\xE9\", // SimLi\n        \"\\xD0\\xC2\\xCB\\xCE\", // SimSun\n        \"\\xB7\\xC2\\xCB\\xCE\\xCC\\xE5\", // SimFang variant\n        \"\\xD0\\xA1\\xB1\\xEA\\xCB\\xCE\", // XiaoBiaoSong\n      ];\n\n      // Check for common Chinese font names and their GBK-encoded equivalents\n      // (which may appear as Latin-1 when incorrectly decoded).\n      if (chineseFontNames.includes(fontName)) {\n        baseEncodingName = null;\n        properties.defaultEncoding = \"Adobe-GB1-UCS2\";\n        properties.composite = true;\n        properties.cidEncoding = Name.get(\"GBK-EUC-H\");\n        const cMap = await CMapFactory.create({\n          encoding: properties.cidEncoding,\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n          useCMap: null,\n        });\n        properties.cMap = cMap;\n        properties.vertical = properties.cMap.vertical;\n        properties.cidSystemInfo = {\n          registry: \"Adobe\",\n          ordering: \"GB1\",\n          supplement: 0,\n        };\n      }\n    }\n\n    if (baseEncodingName) {\n      properties.defaultEncoding = getEncoding(baseEncodingName);\n    } else {\n      let isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\n      const isNonsymbolicFont = !!(properties.flags & FontFlags.Nonsymbolic);\n\n      // The PDF specs state that the flags Symbolic and Nonsymbolic must be\n      // mutually exclusive. However, some fonts are marked as both.\n      // In that case we ignore the Symbolic flag when there is a Differences\n      // entry (which indicates that the font is used as a non-symbolic\n      // font).\n      if (\n        properties.type === \"TrueType\" &&\n        isSymbolicFont &&\n        isNonsymbolicFont &&\n        differences.length !== 0\n      ) {\n        properties.flags &= ~FontFlags.Symbolic;\n        isSymbolicFont = false;\n      }\n\n      // According to \"Table 114\" in section \"9.6.6.1 General\" (under\n      // \"9.6.6 Character Encoding\") of the PDF specification, a Nonsymbolic\n      // font should use the `StandardEncoding` if no encoding is specified.\n      encoding = StandardEncoding;\n      if (properties.type === \"TrueType\" && !isNonsymbolicFont) {\n        encoding = WinAnsiEncoding;\n      }\n      // The Symbolic attribute can be misused for regular fonts\n      // Heuristic: we have to check if the font is a standard one also\n      if (isSymbolicFont || isSymbolsFontName) {\n        encoding = MacRomanEncoding;\n        if (nonEmbeddedFont) {\n          if (/Symbol/i.test(properties.name)) {\n            encoding = SymbolSetEncoding;\n          } else if (/Dingbats/i.test(properties.name)) {\n            encoding = ZapfDingbatsEncoding;\n          } else if (/Wingdings/i.test(properties.name)) {\n            encoding = WinAnsiEncoding;\n          }\n        }\n      }\n      properties.defaultEncoding = encoding;\n    }\n\n    properties.differences = differences;\n    properties.baseEncodingName = baseEncodingName;\n    properties.hasEncoding = !!baseEncodingName || differences.length > 0;\n    properties.dict = dict;\n\n    properties.toUnicode = await toUnicodePromise;\n\n    const builtToUnicode = await this.buildToUnicode(properties);\n    properties.toUnicode = builtToUnicode;\n\n    if (cidToGidBytes) {\n      properties.cidToGidMap = this.readCidToGidMap(\n        cidToGidBytes,\n        builtToUnicode\n      );\n    }\n    return properties;\n  }\n\n  /**\n   * @returns {Array}\n   * @private\n   */\n  _simpleFontToUnicode(properties, forceGlyphs = false) {\n    assert(!properties.composite, \"Must be a simple font.\");\n\n    const toUnicode = [];\n    const encoding = properties.defaultEncoding.slice();\n    const baseEncodingName = properties.baseEncodingName;\n    // Merge in the differences array.\n    const differences = properties.differences;\n    for (const charcode in differences) {\n      const glyphName = differences[charcode];\n      if (glyphName === \".notdef\") {\n        // Skip .notdef to prevent rendering errors, e.g. boxes appearing\n        // where there should be spaces (fixes issue5256.pdf).\n        continue;\n      }\n      encoding[charcode] = glyphName;\n    }\n    const glyphsUnicodeMap = getGlyphsUnicode();\n    for (const charcode in encoding) {\n      // a) Map the character code to a character name.\n      let glyphName = encoding[charcode];\n      if (glyphName === \"\") {\n        continue;\n      }\n      // b) Look up the character name in the Adobe Glyph List (see the\n      //    Bibliography) to obtain the corresponding Unicode value.\n      let unicode = glyphsUnicodeMap[glyphName];\n      if (unicode !== undefined) {\n        toUnicode[charcode] = String.fromCharCode(unicode);\n        continue;\n      }\n      // (undocumented) c) Few heuristics to recognize unknown glyphs\n      // NOTE: Adobe Reader does not do this step, but OSX Preview does\n      let code = 0;\n      switch (glyphName[0]) {\n        case \"G\": // Gxx glyph\n          if (glyphName.length === 3) {\n            code = parseInt(glyphName.substring(1), 16);\n          }\n          break;\n        case \"g\": // g00xx glyph\n          if (glyphName.length === 5) {\n            code = parseInt(glyphName.substring(1), 16);\n          }\n          break;\n        case \"C\": // Cdd{d} glyph\n        case \"c\": // cdd{d} glyph\n          if (glyphName.length >= 3 && glyphName.length <= 4) {\n            const codeStr = glyphName.substring(1);\n\n            if (forceGlyphs) {\n              code = parseInt(codeStr, 16);\n              break;\n            }\n            // Normally the Cdd{d}/cdd{d} glyphName format will contain\n            // regular, i.e. base 10, charCodes (see issue4550.pdf)...\n            code = +codeStr;\n\n            // ... however some PDF generators violate that assumption by\n            // containing glyph, i.e. base 16, codes instead.\n            // In that case we need to re-parse the *entire* encoding to\n            // prevent broken text-selection (fixes issue9655_reduced.pdf).\n            if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {\n              return this._simpleFontToUnicode(\n                properties,\n                /* forceGlyphs */ true\n              );\n            }\n          }\n          break;\n        case \"u\": // 'uniXXXX'/'uXXXX{XX}' glyphs\n          unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);\n          if (unicode !== -1) {\n            code = unicode;\n          }\n          break;\n        default:\n          // Support (some) non-standard ligatures.\n          switch (glyphName) {\n            case \"f_h\":\n            case \"f_t\":\n            case \"T_h\":\n              toUnicode[charcode] = glyphName.replaceAll(\"_\", \"\");\n              continue;\n          }\n          break;\n      }\n      if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {\n        // If `baseEncodingName` is one the predefined encodings, and `code`\n        // equals `charcode`, using the glyph defined in the baseEncoding\n        // seems to yield a better `toUnicode` mapping (fixes issue 5070).\n        if (baseEncodingName && code === +charcode) {\n          const baseEncoding = getEncoding(baseEncodingName);\n          if (baseEncoding && (glyphName = baseEncoding[charcode])) {\n            toUnicode[charcode] = String.fromCharCode(\n              glyphsUnicodeMap[glyphName]\n            );\n            continue;\n          }\n        }\n        toUnicode[charcode] = String.fromCodePoint(code);\n      }\n    }\n    return toUnicode;\n  }\n\n  /**\n   * Builds a char code to unicode map based on section 9.10 of the spec.\n   * @param {Object} properties Font properties object.\n   * @returns {Promise} A Promise that is resolved with a\n   *   {ToUnicodeMap|IdentityToUnicodeMap} object.\n   */\n  async buildToUnicode(properties) {\n    properties.hasIncludedToUnicodeMap = properties.toUnicode?.length > 0;\n\n    // Section 9.10.2 Mapping Character Codes to Unicode Values\n    if (properties.hasIncludedToUnicodeMap) {\n      // Some fonts contain incomplete ToUnicode data, causing issues with\n      // text-extraction. For simple fonts, containing encoding information,\n      // use a fallback ToUnicode map to improve this (fixes issue8229.pdf).\n      if (!properties.composite && properties.hasEncoding) {\n        properties.fallbackToUnicode = this._simpleFontToUnicode(properties);\n      }\n      return properties.toUnicode;\n    }\n\n    // According to the spec if the font is a simple font we should only map\n    // to unicode if the base encoding is MacRoman, MacExpert, or WinAnsi or\n    // the differences array only contains adobe standard or symbol set names,\n    // in practice it seems better to always try to create a toUnicode map\n    // based of the default encoding.\n    if (!properties.composite /* is simple font */) {\n      return new ToUnicodeMap(this._simpleFontToUnicode(properties));\n    }\n\n    // If the font is a composite font that uses one of the predefined CMaps\n    // listed in Table 118 (except Identity–H and Identity–V) or whose\n    // descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, Adobe-Japan1, or\n    // Adobe-Korea1 character collection:\n    if (\n      properties.composite &&\n      ((properties.cMap.builtInCMap &&\n        !(properties.cMap instanceof IdentityCMap)) ||\n        // The font is supposed to have a CIDSystemInfo dictionary, but some\n        // PDFs don't include it (fixes issue 17689), hence the `?'.\n        (properties.cidSystemInfo?.registry === \"Adobe\" &&\n          (properties.cidSystemInfo.ordering === \"GB1\" ||\n            properties.cidSystemInfo.ordering === \"CNS1\" ||\n            properties.cidSystemInfo.ordering === \"Japan1\" ||\n            properties.cidSystemInfo.ordering === \"Korea1\")))\n    ) {\n      // Then:\n      // a) Map the character code to a character identifier (CID) according\n      // to the font’s CMap.\n      // b) Obtain the registry and ordering of the character collection used\n      // by the font’s CMap (for example, Adobe and Japan1) from its\n      // CIDSystemInfo dictionary.\n      const { registry, ordering } = properties.cidSystemInfo;\n      // c) Construct a second CMap name by concatenating the registry and\n      // ordering obtained in step (b) in the format registry–ordering–UCS2\n      // (for example, Adobe–Japan1–UCS2).\n      const ucs2CMapName = Name.get(`${registry}-${ordering}-UCS2`);\n      // d) Obtain the CMap with the name constructed in step (c) (available\n      // from the ASN Web site; see the Bibliography).\n      const ucs2CMap = await CMapFactory.create({\n        encoding: ucs2CMapName,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null,\n      });\n      const toUnicode = [],\n        buf = [];\n      properties.cMap.forEach(function (charcode, cid) {\n        if (cid > 0xffff) {\n          throw new FormatError(\"Max size of CID is 65,535\");\n        }\n        // e) Map the CID obtained in step (a) according to the CMap\n        // obtained in step (d), producing a Unicode value.\n        const ucs2 = ucs2CMap.lookup(cid);\n        if (ucs2) {\n          buf.length = 0;\n          // Support multi-byte entries (fixes issue16176.pdf).\n          for (let i = 0, ii = ucs2.length; i < ii; i += 2) {\n            buf.push((ucs2.charCodeAt(i) << 8) + ucs2.charCodeAt(i + 1));\n          }\n          toUnicode[charcode] = String.fromCharCode(...buf);\n        }\n      });\n      return new ToUnicodeMap(toUnicode);\n    }\n\n    // The viewer's choice, just use an identity map.\n    return new IdentityToUnicodeMap(properties.firstChar, properties.lastChar);\n  }\n\n  async readToUnicode(cmapObj) {\n    if (!cmapObj) {\n      return null;\n    }\n    if (cmapObj instanceof Name) {\n      const cmap = await CMapFactory.create({\n        encoding: cmapObj,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null,\n      });\n\n      if (cmap instanceof IdentityCMap) {\n        return new IdentityToUnicodeMap(0, 0xffff);\n      }\n      return new ToUnicodeMap(cmap.getMap());\n    }\n    if (cmapObj instanceof BaseStream) {\n      try {\n        const cmap = await CMapFactory.create({\n          encoding: cmapObj,\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n          useCMap: null,\n        });\n\n        if (cmap instanceof IdentityCMap) {\n          return new IdentityToUnicodeMap(0, 0xffff);\n        }\n        const map = new Array(cmap.length);\n        // Convert UTF-16BE\n        // NOTE: cmap can be a sparse array, so use forEach instead of\n        // `for(;;)` to iterate over all keys.\n        cmap.forEach(function (charCode, token) {\n          // Some cmaps contain *only* CID characters (fixes issue9367.pdf).\n          if (typeof token === \"number\") {\n            map[charCode] = String.fromCodePoint(token);\n            return;\n          }\n          // Add back omitted leading zeros on odd length tokens\n          // (fixes issue #18099)\n          if (token.length % 2 !== 0) {\n            token = \"\\u0000\" + token;\n          }\n          const str = [];\n          for (let k = 0; k < token.length; k += 2) {\n            const w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);\n            if ((w1 & 0xf800) !== 0xd800) {\n              // w1 < 0xD800 || w1 > 0xDFFF\n              str.push(w1);\n              continue;\n            }\n            k += 2;\n            const w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);\n            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);\n          }\n          map[charCode] = String.fromCodePoint(...str);\n        });\n        return new ToUnicodeMap(map);\n      } catch (reason) {\n        if (reason instanceof AbortException) {\n          return null;\n        }\n        if (this.options.ignoreErrors) {\n          warn(`readToUnicode - ignoring ToUnicode data: \"${reason}\".`);\n          return null;\n        }\n        throw reason;\n      }\n    }\n    return null;\n  }\n\n  readCidToGidMap(glyphsData, toUnicode) {\n    // Extract the encoding from the CIDToGIDMap\n\n    // Set encoding 0 to later verify the font has an encoding\n    const result = [];\n    for (let j = 0, jj = glyphsData.length; j < jj; j++) {\n      const glyphID = (glyphsData[j++] << 8) | glyphsData[j];\n      const code = j >> 1;\n      if (glyphID === 0 && !toUnicode.has(code)) {\n        continue;\n      }\n      result[code] = glyphID;\n    }\n    return result;\n  }\n\n  extractWidths(dict, descriptor, properties) {\n    const xref = this.xref;\n    let glyphsWidths = [];\n    let defaultWidth = 0;\n    const glyphsVMetrics = [];\n    let defaultVMetrics;\n    if (properties.composite) {\n      const dw = dict.get(\"DW\");\n      defaultWidth = typeof dw === \"number\" ? Math.ceil(dw) : 1000;\n\n      const widths = dict.get(\"W\");\n      if (Array.isArray(widths)) {\n        for (let i = 0, ii = widths.length; i < ii; i++) {\n          let start = xref.fetchIfRef(widths[i++]);\n          if (!Number.isInteger(start)) {\n            break; // Invalid /W data.\n          }\n          const code = xref.fetchIfRef(widths[i]);\n\n          if (Array.isArray(code)) {\n            for (const c of code) {\n              const width = xref.fetchIfRef(c);\n              if (typeof width === \"number\") {\n                glyphsWidths[start] = width;\n              }\n              start++;\n            }\n          } else if (Number.isInteger(code)) {\n            const width = xref.fetchIfRef(widths[++i]);\n            if (typeof width !== \"number\") {\n              continue;\n            }\n            for (let j = start; j <= code; j++) {\n              glyphsWidths[j] = width;\n            }\n          } else {\n            break; // Invalid /W data.\n          }\n        }\n      }\n\n      if (properties.vertical) {\n        const dw2 = dict.getArray(\"DW2\");\n        let vmetrics = isNumberArray(dw2, 2) ? dw2 : [880, -1000];\n        defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];\n        vmetrics = dict.get(\"W2\");\n        if (Array.isArray(vmetrics)) {\n          for (let i = 0, ii = vmetrics.length; i < ii; i++) {\n            let start = xref.fetchIfRef(vmetrics[i++]);\n            if (!Number.isInteger(start)) {\n              break; // Invalid /W2 data.\n            }\n            const code = xref.fetchIfRef(vmetrics[i]);\n\n            if (Array.isArray(code)) {\n              for (let j = 0, jj = code.length; j < jj; j++) {\n                const vmetric = [\n                  xref.fetchIfRef(code[j++]),\n                  xref.fetchIfRef(code[j++]),\n                  xref.fetchIfRef(code[j]),\n                ];\n                if (isNumberArray(vmetric, null)) {\n                  glyphsVMetrics[start] = vmetric;\n                }\n                start++;\n              }\n            } else if (Number.isInteger(code)) {\n              const vmetric = [\n                xref.fetchIfRef(vmetrics[++i]),\n                xref.fetchIfRef(vmetrics[++i]),\n                xref.fetchIfRef(vmetrics[++i]),\n              ];\n              if (!isNumberArray(vmetric, null)) {\n                continue;\n              }\n              for (let j = start; j <= code; j++) {\n                glyphsVMetrics[j] = vmetric;\n              }\n            } else {\n              break; // Invalid /W2 data.\n            }\n          }\n        }\n      }\n    } else {\n      const widths = dict.get(\"Widths\");\n      if (Array.isArray(widths)) {\n        let j = properties.firstChar;\n        for (const w of widths) {\n          const width = xref.fetchIfRef(w);\n          if (typeof width === \"number\") {\n            glyphsWidths[j] = width;\n          }\n          j++;\n        }\n        const missingWidth = descriptor.get(\"MissingWidth\");\n        defaultWidth = typeof missingWidth === \"number\" ? missingWidth : 0;\n      } else {\n        // Trying get the BaseFont metrics (see comment above).\n        const baseFontName = dict.get(\"BaseFont\");\n        if (baseFontName instanceof Name) {\n          const metrics = this.getBaseFontMetrics(baseFontName.name);\n\n          glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);\n          defaultWidth = metrics.defaultWidth;\n        }\n      }\n    }\n\n    // Heuristic: detection of monospace font by checking all non-zero widths\n    let isMonospace = true;\n    let firstWidth = defaultWidth;\n    for (const glyph in glyphsWidths) {\n      const glyphWidth = glyphsWidths[glyph];\n      if (!glyphWidth) {\n        continue;\n      }\n      if (!firstWidth) {\n        firstWidth = glyphWidth;\n        continue;\n      }\n      if (firstWidth !== glyphWidth) {\n        isMonospace = false;\n        break;\n      }\n    }\n    if (isMonospace) {\n      properties.flags |= FontFlags.FixedPitch;\n    } else {\n      // Clear the flag.\n      properties.flags &= ~FontFlags.FixedPitch;\n    }\n\n    properties.defaultWidth = defaultWidth;\n    properties.widths = glyphsWidths;\n    properties.defaultVMetrics = defaultVMetrics;\n    properties.vmetrics = glyphsVMetrics;\n  }\n\n  isSerifFont(baseFontName) {\n    // Simulating descriptor flags attribute\n    const fontNameWoStyle = baseFontName.split(\"-\", 1)[0];\n    return fontNameWoStyle in getSerifFonts() || /serif/i.test(fontNameWoStyle);\n  }\n\n  getBaseFontMetrics(name) {\n    let defaultWidth = 0;\n    let widths = Object.create(null);\n    let monospace = false;\n\n    let fontName = normalizeFontName(name);\n    const stdFontMap = getStdFontMap();\n    fontName = stdFontMap[fontName] || fontName;\n    const Metrics = getMetrics();\n\n    const glyphWidths =\n      Metrics[fontName] ??\n      // Use default fonts for looking up font metrics if the passed\n      // font is not a base font\n      Metrics[this.isSerifFont(name) ? \"Times-Roman\" : \"Helvetica\"];\n\n    if (typeof glyphWidths === \"number\") {\n      defaultWidth = glyphWidths;\n      monospace = true;\n    } else {\n      widths = glyphWidths(); // expand lazy widths array\n    }\n\n    return {\n      defaultWidth,\n      monospace,\n      widths,\n    };\n  }\n\n  buildCharCodeToWidth(widthsByGlyphName, properties) {\n    const widths = Object.create(null);\n    const differences = properties.differences;\n    const encoding = properties.defaultEncoding;\n    for (let charCode = 0; charCode < 256; charCode++) {\n      if (charCode in differences && widthsByGlyphName[differences[charCode]]) {\n        widths[charCode] = widthsByGlyphName[differences[charCode]];\n        continue;\n      }\n      if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {\n        widths[charCode] = widthsByGlyphName[encoding[charCode]];\n        continue;\n      }\n    }\n    return widths;\n  }\n\n  preEvaluateFont(dict) {\n    const baseDict = dict;\n    let type = dict.get(\"Subtype\");\n    if (!(type instanceof Name)) {\n      throw new FormatError(\"invalid font Subtype\");\n    }\n\n    let composite = false;\n    let hash;\n    if (type.name === \"Type0\") {\n      // If font is a composite\n      //  - get the descendant font\n      //  - set the type according to the descendant font\n      //  - get the FontDescriptor from the descendant font\n      const df = dict.get(\"DescendantFonts\");\n      if (!df) {\n        throw new FormatError(\"Descendant fonts are not specified\");\n      }\n      dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;\n\n      if (!(dict instanceof Dict)) {\n        throw new FormatError(\"Descendant font is not a dictionary.\");\n      }\n      type = dict.get(\"Subtype\");\n      if (!(type instanceof Name)) {\n        throw new FormatError(\"invalid font Subtype\");\n      }\n      composite = true;\n    }\n\n    let firstChar = dict.get(\"FirstChar\");\n    if (!Number.isInteger(firstChar)) {\n      firstChar = 0;\n    }\n    let lastChar = dict.get(\"LastChar\");\n    if (!Number.isInteger(lastChar)) {\n      lastChar = composite ? 0xffff : 0xff;\n    }\n    const descriptor = dict.get(\"FontDescriptor\");\n    const toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\n\n    if (descriptor) {\n      hash = new MurmurHash3_64();\n\n      const encoding = baseDict.getRaw(\"Encoding\");\n      if (encoding instanceof Name) {\n        hash.update(encoding.name);\n      } else if (encoding instanceof Ref) {\n        hash.update(encoding.toString());\n      } else if (encoding instanceof Dict) {\n        for (const entry of encoding.getRawValues()) {\n          if (entry instanceof Name) {\n            hash.update(entry.name);\n          } else if (entry instanceof Ref) {\n            hash.update(entry.toString());\n          } else if (Array.isArray(entry)) {\n            // 'Differences' array (fixes bug1157493.pdf).\n            const diffLength = entry.length,\n              diffBuf = new Array(diffLength);\n\n            for (let j = 0; j < diffLength; j++) {\n              const diffEntry = entry[j];\n              if (diffEntry instanceof Name) {\n                diffBuf[j] = diffEntry.name;\n              } else if (\n                typeof diffEntry === \"number\" ||\n                diffEntry instanceof Ref\n              ) {\n                diffBuf[j] = diffEntry.toString();\n              }\n            }\n            hash.update(diffBuf.join());\n          }\n        }\n      }\n\n      hash.update(`${firstChar}-${lastChar}`); // Fixes issue10665_reduced.pdf\n\n      if (toUnicode instanceof BaseStream) {\n        const stream = toUnicode.stream || toUnicode;\n        const uint8array = stream.buffer\n          ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength)\n          : new Uint8Array(\n              stream.bytes.buffer,\n              stream.start,\n              stream.end - stream.start\n            );\n        hash.update(uint8array);\n      } else if (toUnicode instanceof Name) {\n        hash.update(toUnicode.name);\n      }\n\n      const widths = dict.get(\"Widths\") || baseDict.get(\"Widths\");\n      if (Array.isArray(widths)) {\n        const widthsBuf = [];\n        for (const entry of widths) {\n          if (typeof entry === \"number\" || entry instanceof Ref) {\n            widthsBuf.push(entry.toString());\n          }\n        }\n        hash.update(widthsBuf.join());\n      }\n\n      if (composite) {\n        hash.update(\"compositeFont\");\n\n        const compositeWidths = dict.get(\"W\") || baseDict.get(\"W\");\n        if (Array.isArray(compositeWidths)) {\n          const widthsBuf = [];\n          for (const entry of compositeWidths) {\n            if (typeof entry === \"number\" || entry instanceof Ref) {\n              widthsBuf.push(entry.toString());\n            } else if (Array.isArray(entry)) {\n              const subWidthsBuf = [];\n              for (const element of entry) {\n                if (typeof element === \"number\" || element instanceof Ref) {\n                  subWidthsBuf.push(element.toString());\n                }\n              }\n              widthsBuf.push(`[${subWidthsBuf.join()}]`);\n            }\n          }\n          hash.update(widthsBuf.join());\n        }\n\n        const cidToGidMap =\n          dict.getRaw(\"CIDToGIDMap\") || baseDict.getRaw(\"CIDToGIDMap\");\n        if (cidToGidMap instanceof Name) {\n          hash.update(cidToGidMap.name);\n        } else if (cidToGidMap instanceof Ref) {\n          hash.update(cidToGidMap.toString());\n        } else if (cidToGidMap instanceof BaseStream) {\n          hash.update(cidToGidMap.peekBytes());\n        }\n      }\n\n      if (type.name === \"Type3\") {\n        // Type3 fonts with the same metrics/encoding but different CharProcs\n        // must not be aliased, since their glyphs may render completely\n        // differently (e.g. one font uses SMask glyph programs, another uses\n        // plain paths, see issue 19634).\n        const charProcs = baseDict.get(\"CharProcs\");\n        if (charProcs instanceof Dict) {\n          for (const [key, entry] of charProcs.getRawEntries()) {\n            hash.update(entry instanceof Ref ? `${key}\\0${entry}` : key);\n          }\n        }\n      }\n    }\n\n    return {\n      descriptor,\n      dict,\n      baseDict,\n      composite,\n      type: type.name,\n      firstChar,\n      lastChar,\n      toUnicode,\n      hash: hash ? hash.hexdigest() : \"\",\n    };\n  }\n\n  async translateFont({\n    descriptor,\n    dict,\n    baseDict,\n    composite,\n    type,\n    firstChar,\n    lastChar,\n    toUnicode,\n    cssFontInfo,\n  }) {\n    const isType3Font = type === \"Type3\";\n\n    if (!descriptor) {\n      if (isType3Font) {\n        // FontDescriptor is only required for Type3 fonts when the document\n        // is a tagged pdf.\n        descriptor = Dict.empty;\n      } else if (composite) {\n        // Some PDFs omit the FontDescriptor on the descendant CIDFont when\n        // referencing one of the standard Acrobat CJK fonts via a predefined\n        // CMap (e.g. /Encoding /90ms-RKSJ-H with /BaseFont /HeiseiMin-W3).\n        // Fall through so the CMap is loaded by the composite-font path\n        // below; otherwise multi-byte codes would be decoded byte-by-byte.\n        descriptor = Dict.empty;\n      } else {\n        // Before PDF 1.5 if the font was one of the base 14 fonts, having a\n        // FontDescriptor was not required.\n        // This case is here for compatibility.\n        let baseFontName = dict.get(\"BaseFont\");\n        if (!(baseFontName instanceof Name)) {\n          throw new FormatError(\"Base font is not specified\");\n        }\n\n        // Using base font name as a font name.\n        baseFontName = normalizeFontName(baseFontName.name);\n        const metrics = this.getBaseFontMetrics(baseFontName);\n\n        // Simulating descriptor flags attribute\n        const fontNameWoStyle = baseFontName.split(\"-\", 1)[0];\n        const flags =\n          (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) |\n          (metrics.monospace ? FontFlags.FixedPitch : 0) |\n          (getSymbolsFonts()[fontNameWoStyle]\n            ? FontFlags.Symbolic\n            : FontFlags.Nonsymbolic);\n\n        const properties = {\n          type,\n          name: baseFontName,\n          loadedName: baseDict.loadedName,\n          systemFontInfo: null,\n          widths: metrics.widths,\n          defaultWidth: metrics.defaultWidth,\n          isSimulatedFlags: true,\n          flags,\n          firstChar,\n          lastChar,\n          toUnicode,\n          xHeight: 0,\n          capHeight: 0,\n          italicAngle: 0,\n          isType3Font,\n        };\n        const widths = dict.get(\"Widths\");\n\n        const standardFontName = getStandardFontName(baseFontName);\n        let file = null;\n        if (standardFontName) {\n          file = await this.fetchStandardFontData(standardFontName);\n          properties.isInternalFont = !!file;\n        }\n        if (!properties.isInternalFont && this.options.useSystemFonts) {\n          properties.systemFontInfo = getFontSubstitution(\n            this.systemFontCache,\n            this.idFactory,\n            this.options.standardFontDataUrl,\n            baseFontName,\n            standardFontName,\n            type\n          );\n        }\n\n        const newProperties = await this.extractDataStructures(\n          dict,\n          properties\n        );\n        if (Array.isArray(widths)) {\n          const glyphWidths = [];\n          let j = firstChar;\n          for (const w of widths) {\n            const width = this.xref.fetchIfRef(w);\n            if (typeof width === \"number\") {\n              glyphWidths[j] = width;\n            }\n            j++;\n          }\n          newProperties.widths = glyphWidths;\n        } else {\n          newProperties.widths = this.buildCharCodeToWidth(\n            metrics.widths,\n            newProperties\n          );\n        }\n        return new Font(baseFontName, file, newProperties, this.options);\n      }\n    }\n\n    // According to the spec if 'FontDescriptor' is declared, 'FirstChar',\n    // 'LastChar' and 'Widths' should exist too, but some PDF encoders seem\n    // to ignore this rule when a variant of a standard font is used.\n    // TODO Fill the width array depending on which of the base font this is\n    // a variant.\n\n    let fontName = descriptor.get(\"FontName\");\n    let baseFont = dict.get(\"BaseFont\");\n    // Some bad PDFs have a string as the font name.\n    if (typeof fontName === \"string\") {\n      fontName = Name.get(fontName);\n    }\n    if (typeof baseFont === \"string\") {\n      baseFont = Name.get(baseFont);\n    }\n\n    const fontNameStr = fontName?.name;\n    const baseFontStr = baseFont?.name;\n    if (isType3Font) {\n      if (!fontNameStr) {\n        // Since the /FontDescriptor is optional in Type3 fonts, ensure that we\n        // always have a \"valid\" /FontName (fixes issue19954.pdf).\n        fontName = Name.get(type);\n      }\n    } else if (fontNameStr !== baseFontStr) {\n      info(\n        `The FontDescriptor's FontName is \"${fontNameStr}\" but ` +\n          `should be the same as the Font's BaseFont \"${baseFontStr}\".`\n      );\n      // - Workaround for cases where e.g. fontNameStr = 'Arial' and\n      //   baseFontStr = 'Arial,Bold' (needed when no font file is embedded).\n      //\n      // - Workaround for cases where e.g. fontNameStr = 'wg09np' and\n      //   baseFontStr = 'Wingdings-Regular' (fixes issue7454.pdf).\n      if (\n        fontNameStr &&\n        baseFontStr &&\n        (baseFontStr.startsWith(fontNameStr) ||\n          (!isKnownFontName(fontNameStr) && isKnownFontName(baseFontStr)))\n      ) {\n        fontName = null;\n      }\n      fontName ||= baseFont;\n    }\n\n    if (!(fontName instanceof Name)) {\n      throw new FormatError(\"invalid font name\");\n    }\n\n    let fontFile, fontFileN, subtype, length1, length2, length3;\n    try {\n      for (const n of [\"FontFile\", \"FontFile2\", \"FontFile3\"]) {\n        fontFile = descriptor.get(n);\n        if (fontFile) {\n          fontFileN = n;\n          break;\n        }\n      }\n\n      if (fontFile) {\n        if (!(fontFile instanceof BaseStream)) {\n          throw new FormatError(\"FontFile should be a stream\");\n        } else {\n          if (fontFile.isAsync) {\n            const bytes = await fontFile.asyncGetBytes();\n            if (bytes) {\n              fontFile = new Stream(bytes, 0, bytes.length, fontFile.dict);\n            }\n          }\n          if (fontFile.isEmpty) {\n            throw new FormatError(\"FontFile is empty\");\n          }\n        }\n      }\n    } catch (ex) {\n      if (!this.options.ignoreErrors) {\n        throw ex;\n      }\n      warn(`translateFont - fetching \"${fontName.name}\" font file: \"${ex}\".`);\n      fontFile = null;\n    }\n    let isInternalFont = false;\n    let glyphScaleFactors = null;\n    let systemFontInfo = null;\n    if (fontFile) {\n      if (fontFile.dict) {\n        const subtypeEntry = fontFile.dict.get(\"Subtype\");\n        if (subtypeEntry instanceof Name) {\n          subtype = subtypeEntry.name;\n        }\n        length1 = fontFile.dict.get(\"Length1\");\n        length2 = fontFile.dict.get(\"Length2\");\n        length3 = fontFile.dict.get(\"Length3\");\n      }\n    } else if (cssFontInfo) {\n      // We've a missing XFA font.\n      const standardFontName = getXfaFontName(fontName.name);\n      if (standardFontName) {\n        cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`;\n        cssFontInfo.metrics = standardFontName.metrics || null;\n        glyphScaleFactors = standardFontName.factors || null;\n        fontFile = await this.fetchStandardFontData(standardFontName.name);\n        isInternalFont = !!fontFile;\n\n        // We're using a substitution font but for example widths (if any)\n        // are related to the glyph positions in the font.\n        // So we overwrite everything here to be sure that widths are\n        // correct.\n        baseDict = dict = getXfaFontDict(fontName.name);\n        composite = true;\n      }\n    } else if (!isType3Font) {\n      const standardFontName = getStandardFontName(fontName.name);\n      if (standardFontName) {\n        fontFile = await this.fetchStandardFontData(standardFontName);\n        isInternalFont = !!fontFile;\n      }\n      if (!isInternalFont && this.options.useSystemFonts) {\n        systemFontInfo = getFontSubstitution(\n          this.systemFontCache,\n          this.idFactory,\n          this.options.standardFontDataUrl,\n          fontName.name,\n          standardFontName,\n          type\n        );\n      }\n    }\n\n    const fontMatrix = lookupMatrix(\n      dict.getArray(\"FontMatrix\"),\n      FONT_IDENTITY_MATRIX\n    );\n    const bbox = lookupNormalRect(\n      descriptor.getArray(\"FontBBox\") || dict.getArray(\"FontBBox\"),\n      isType3Font ? [0, 0, 0, 0] : undefined\n    );\n    let ascent = descriptor.get(\"Ascent\");\n    if (typeof ascent !== \"number\") {\n      ascent = undefined;\n    }\n    let descent = descriptor.get(\"Descent\");\n    if (typeof descent !== \"number\") {\n      descent = undefined;\n    }\n    let xHeight = descriptor.get(\"XHeight\");\n    if (typeof xHeight !== \"number\") {\n      xHeight = 0;\n    }\n    let capHeight = descriptor.get(\"CapHeight\");\n    if (typeof capHeight !== \"number\") {\n      capHeight = 0;\n    }\n    let flags = descriptor.get(\"Flags\");\n    if (!Number.isInteger(flags)) {\n      flags = 0;\n    }\n    let italicAngle = descriptor.get(\"ItalicAngle\");\n    if (typeof italicAngle !== \"number\") {\n      italicAngle = 0;\n    }\n\n    const properties = {\n      type,\n      name: fontName.name,\n      subtype,\n      file: fontFile,\n      fontFileN,\n      length1,\n      length2,\n      length3,\n      isInternalFont,\n      loadedName: baseDict.loadedName,\n      composite,\n      fixedPitch: false,\n      fontMatrix,\n      firstChar,\n      lastChar,\n      toUnicode,\n      bbox,\n      ascent,\n      descent,\n      xHeight,\n      capHeight,\n      flags,\n      italicAngle,\n      isType3Font,\n      cssFontInfo,\n      scaleFactors: glyphScaleFactors,\n      systemFontInfo,\n    };\n\n    if (composite) {\n      const cidEncoding = baseDict.get(\"Encoding\");\n      if (cidEncoding instanceof Name) {\n        properties.cidEncoding = cidEncoding.name;\n      }\n      const cMap = await CMapFactory.create({\n        encoding: cidEncoding,\n        fetchBuiltInCMap: this._fetchBuiltInCMapBound,\n        useCMap: null,\n      });\n      properties.cMap = cMap;\n      properties.vertical = properties.cMap.vertical;\n    }\n\n    const newProperties = await this.extractDataStructures(dict, properties);\n    this.extractWidths(dict, descriptor, newProperties);\n\n    const font = new Font(fontName.name, fontFile, newProperties, this.options);\n    // The embedded font may have been too corrupt to parse, in which case\n    // we ended up in the fallback path without a substitution selected.\n    // Try the substitution map now so text renders in a font close to what\n    // the document asked for (issue 7625).\n    if (\n      font.missingFile &&\n      !font.systemFontInfo &&\n      !isType3Font &&\n      this.options.useSystemFonts\n    ) {\n      const standardFontName = getStandardFontName(fontName.name);\n      const substitution = getFontSubstitution(\n        this.systemFontCache,\n        this.idFactory,\n        this.options.standardFontDataUrl,\n        fontName.name,\n        standardFontName,\n        type\n      );\n      if (substitution) {\n        if (substitution.guessFallback) {\n          substitution.guessFallback = false;\n          substitution.css += `,${font.fallbackName}`;\n        }\n        font.systemFontInfo = substitution;\n      }\n    }\n    return font;\n  }\n\n  static buildFontPaths(font, glyphs, handler, evaluatorOptions) {\n    function buildPath(fontChar) {\n      const glyphName = `${font.loadedName}_path_${fontChar}`;\n      try {\n        const buffer = font.renderer.getPath(fontChar);\n        if (!buffer) {\n          return; // Previously compiled, and sent to the main-thread.\n        }\n        handler.send(\"commonobj\", [glyphName, \"FontPath\", buffer], [buffer]);\n      } catch (reason) {\n        if (evaluatorOptions.ignoreErrors) {\n          warn(`buildFontPaths - ignoring ${glyphName} glyph: \"${reason}\".`);\n          return;\n        }\n        throw reason;\n      }\n    }\n\n    for (const glyph of glyphs) {\n      buildPath(glyph.fontChar);\n\n      // If the glyph has an accent we need to build a path for its\n      // fontChar too, otherwise CanvasGraphics_paintChar will fail.\n      const accent = glyph.accent;\n      if (accent?.fontChar) {\n        buildPath(accent.fontChar);\n      }\n    }\n  }\n\n  static get fallbackFontDict() {\n    const dict = new Dict();\n    dict.set(\"BaseFont\", Name.get(\"Helvetica\"));\n    dict.set(\"Type\", Name.get(\"FallbackType\"));\n    dict.set(\"Subtype\", Name.get(\"FallbackType\"));\n    dict.set(\"Encoding\", Name.get(\"WinAnsiEncoding\"));\n\n    return shadow(this, \"fallbackFontDict\", dict);\n  }\n}\n\nclass TranslatedFont {\n  #sent = false;\n\n  #type3Loaded = null;\n\n  constructor({ loadedName, font, dict }) {\n    this.loadedName = loadedName;\n    this.font = font;\n    this.dict = dict;\n    this.type3Dependencies = font.isType3Font ? new Set() : null;\n  }\n\n  send(handler) {\n    if (this.#sent) {\n      return;\n    }\n    this.#sent = true;\n\n    const fontData = this.font.exportData(),\n      transfers = fontData.buffer ? [fontData.buffer] : null;\n\n    handler.send(\"commonobj\", [this.loadedName, \"Font\", fontData], transfers);\n    // future path: switch to a SharedArrayBuffer\n    // const sab = new SharedArrayBuffer(data.byteLength);\n    // const view = new Uint8Array(sab);\n    // view.set(new Uint8Array(data));\n    // handler.send(\"commonobj\", [this.loadedName, \"Font\", sab]);\n  }\n\n  fallback(handler, evaluatorOptions) {\n    if (!this.font.data) {\n      return;\n    }\n    // When font loading failed, fall back to the built-in font renderer.\n    this.font.disableFontFace = true;\n    // An arbitrary number of text rendering operators could have been\n    // encountered between the point in time when the 'Font' message was sent\n    // to the main-thread, and the point in time when the 'FontFallback'\n    // message was received on the worker-thread.\n    // To ensure that all 'FontPath's are available on the main-thread, when\n    // font loading failed, attempt to resend *all* previously parsed glyphs.\n    PartialEvaluator.buildFontPaths(\n      this.font,\n      /* glyphs = */ this.font.glyphCacheValues,\n      handler,\n      evaluatorOptions\n    );\n  }\n\n  loadType3Data(evaluator, resources, task, seenRefs = null) {\n    if (this.#type3Loaded) {\n      return this.#type3Loaded;\n    }\n    const { font, type3Dependencies } = this;\n    assert(font.isType3Font, \"Must be a Type3 font.\");\n\n    // When parsing Type3 glyphs, always ignore them if there are errors.\n    // Compared to the parsing of e.g. an entire page, it doesn't really\n    // make sense to only be able to render a Type3 glyph partially.\n    const type3Evaluator = evaluator.clone({ ignoreErrors: false });\n    // Prevent circular references in Type3 fonts.\n    const type3FontRefs = new RefSet(evaluator.type3FontRefs);\n    if (this.dict.objId && !type3FontRefs.has(this.dict.objId)) {\n      type3FontRefs.put(this.dict.objId);\n    }\n    type3Evaluator.type3FontRefs = type3FontRefs;\n\n    let loadCharProcsPromise = Promise.resolve();\n    const charProcs = this.dict.get(\"CharProcs\");\n    const fontResources = this.dict.get(\"Resources\") || resources;\n    const charProcOperatorList = Object.create(null);\n\n    const [x0, y0, x1, y1] = font.bbox,\n      width = x1 - x0,\n      height = y1 - y0;\n    const fontBBoxSize = Math.hypot(width, height);\n\n    for (const key of charProcs.getKeys()) {\n      loadCharProcsPromise = loadCharProcsPromise.then(() => {\n        const glyphStream = charProcs.get(key);\n        const operatorList = new OperatorList();\n        return type3Evaluator\n          .getOperatorList({\n            stream: glyphStream,\n            task,\n            resources: fontResources,\n            operatorList,\n            prevRefs: seenRefs,\n          })\n          .then(() => {\n            // According to the PDF specification, section \"9.6.5 Type 3 Fonts\"\n            // and \"Table 113\":\n            //  \"A glyph description that begins with the d1 operator should\n            //   not execute any operators that set the colour (or other\n            //   colour-related parameters) in the graphics state;\n            //   any use of such operators shall be ignored.\"\n            switch (operatorList.fnArray[0]) {\n              case OPS.setCharWidthAndBounds:\n                this.#removeType3ColorOperators(operatorList, fontBBoxSize);\n                break;\n              case OPS.setCharWidth:\n                if (!fontBBoxSize) {\n                  this.#guessType3FontBBox(operatorList);\n                }\n                break;\n            }\n            charProcOperatorList[key] = operatorList.getIR();\n\n            for (const dependency of operatorList.dependencies) {\n              type3Dependencies.add(dependency);\n            }\n          })\n          .catch(function (reason) {\n            warn(`Type3 font resource \"${key}\" is not available.`);\n            const dummyOperatorList = new OperatorList();\n            charProcOperatorList[key] = dummyOperatorList.getIR();\n          });\n      });\n    }\n    this.#type3Loaded = loadCharProcsPromise.then(() => {\n      font.charProcOperatorList = charProcOperatorList;\n      if (this._bbox) {\n        font.isCharBBox = true;\n        font.bbox = this._bbox;\n      }\n    });\n    return this.#type3Loaded;\n  }\n\n  #removeType3ColorOperators(operatorList, fontBBoxSize = NaN) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        operatorList.fnArray[0] === OPS.setCharWidthAndBounds,\n        \"Type3 glyph shall start with the d1 operator.\"\n      );\n    }\n    const charBBox = Util.normalizeRect(operatorList.argsArray[0].slice(2)),\n      width = charBBox[2] - charBBox[0],\n      height = charBBox[3] - charBBox[1];\n    const charBBoxSize = Math.hypot(width, height);\n\n    if (width === 0 || height === 0) {\n      // Skip the d1 operator when its bounds are bogus (fixes issue14953.pdf).\n      operatorList.fnArray.splice(0, 1);\n      operatorList.argsArray.splice(0, 1);\n    } else if (\n      fontBBoxSize === 0 ||\n      Math.round(charBBoxSize / fontBBoxSize) >= 10\n    ) {\n      // Override the fontBBox when it's undefined/empty, or when it's at least\n      // (approximately) one order of magnitude smaller than the charBBox\n      // (fixes issue14999_reduced.pdf).\n      this._bbox ??= BBOX_INIT.slice();\n      Util.rectBoundingBox(...charBBox, this._bbox);\n    }\n\n    let i = 0,\n      ii = operatorList.length;\n    while (i < ii) {\n      switch (operatorList.fnArray[i]) {\n        case OPS.setCharWidthAndBounds:\n          break; // Handled above.\n        case OPS.setStrokeColorSpace:\n        case OPS.setFillColorSpace:\n        case OPS.setStrokeColor:\n        case OPS.setStrokeColorN:\n        case OPS.setFillColor:\n        case OPS.setFillColorN:\n        case OPS.setStrokeGray:\n        case OPS.setFillGray:\n        case OPS.setStrokeRGBColor:\n        case OPS.setFillRGBColor:\n        case OPS.setStrokeCMYKColor:\n        case OPS.setFillCMYKColor:\n        case OPS.shadingFill:\n        case OPS.setRenderingIntent:\n          operatorList.fnArray.splice(i, 1);\n          operatorList.argsArray.splice(i, 1);\n          ii--;\n          continue;\n\n        case OPS.setGState:\n          const [gStateObj] = operatorList.argsArray[i];\n          let j = 0,\n            jj = gStateObj.length;\n          while (j < jj) {\n            const [gStateKey] = gStateObj[j];\n            switch (gStateKey) {\n              case \"TR\":\n              case \"TR2\":\n              case \"HT\":\n              case \"BG\":\n              case \"BG2\":\n              case \"UCR\":\n              case \"UCR2\":\n                gStateObj.splice(j, 1);\n                jj--;\n                continue;\n            }\n            j++;\n          }\n          break;\n      }\n      i++;\n    }\n  }\n\n  #guessType3FontBBox(operatorList) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        operatorList.fnArray[0] === OPS.setCharWidth,\n        \"Type3 glyph shall start with the d0 operator.\"\n      );\n    }\n\n    let i = 1;\n    const ii = operatorList.length;\n    while (i < ii) {\n      switch (operatorList.fnArray[i]) {\n        case OPS.constructPath:\n          const minMax = operatorList.argsArray[i][2];\n          // Override the fontBBox when it's undefined/empty (fixes 19624.pdf).\n          this._bbox ??= BBOX_INIT.slice();\n          Util.rectBoundingBox(...minMax, this._bbox);\n          break;\n      }\n      i++;\n    }\n  }\n}\n\nclass StateManager {\n  constructor(initialState = new EvalState()) {\n    this.state = initialState;\n    this.stateStack = [];\n  }\n\n  save() {\n    const old = this.state;\n    this.stateStack.push(this.state);\n    this.state = old.clone();\n  }\n\n  restore() {\n    const prev = this.stateStack.pop();\n    if (prev) {\n      this.state = prev;\n    }\n  }\n\n  transform(args) {\n    this.state.ctm = Util.transform(this.state.ctm, args);\n  }\n}\n\nclass TextState {\n  ctm = new Float32Array(IDENTITY_MATRIX);\n\n  fontName = null;\n\n  fontSize = 0;\n\n  loadedName = null;\n\n  font = null;\n\n  fontMatrix = FONT_IDENTITY_MATRIX;\n\n  textMatrix = IDENTITY_MATRIX.slice();\n\n  textLineMatrix = IDENTITY_MATRIX.slice();\n\n  charSpacing = 0;\n\n  wordSpacing = 0;\n\n  leading = 0;\n\n  textHScale = 1;\n\n  textRise = 0;\n\n  setTextMatrix(a, b, c, d, e, f) {\n    const m = this.textMatrix;\n    m[0] = a;\n    m[1] = b;\n    m[2] = c;\n    m[3] = d;\n    m[4] = e;\n    m[5] = f;\n  }\n\n  setTextLineMatrix(a, b, c, d, e, f) {\n    const m = this.textLineMatrix;\n    m[0] = a;\n    m[1] = b;\n    m[2] = c;\n    m[3] = d;\n    m[4] = e;\n    m[5] = f;\n  }\n\n  translateTextMatrix(x, y) {\n    const m = this.textMatrix;\n    m[4] = m[0] * x + m[2] * y + m[4];\n    m[5] = m[1] * x + m[3] * y + m[5];\n  }\n\n  translateTextLineMatrix(x, y) {\n    const m = this.textLineMatrix;\n    m[4] = m[0] * x + m[2] * y + m[4];\n    m[5] = m[1] * x + m[3] * y + m[5];\n  }\n\n  carriageReturn() {\n    this.translateTextLineMatrix(0, -this.leading);\n    this.textMatrix = this.textLineMatrix.slice();\n  }\n\n  clone() {\n    const clone = Object.assign(Object.create(this), this);\n    clone.textMatrix = this.textMatrix.slice();\n    clone.textLineMatrix = this.textLineMatrix.slice();\n    clone.fontMatrix = this.fontMatrix.slice();\n    return clone;\n  }\n}\n\nclass EvalState {\n  ctm = new Float32Array(IDENTITY_MATRIX);\n\n  font = null;\n\n  textRenderingMode = TextRenderingMode.FILL;\n\n  _fillColorSpace = ColorSpaceUtils.gray;\n\n  _strokeColorSpace = ColorSpaceUtils.gray;\n\n  patternFillColorSpace = null;\n\n  patternStrokeColorSpace = null;\n\n  // Path stuff.\n  currentPointX = 0;\n\n  currentPointY = 0;\n\n  pathMinMax = F32_BBOX_INIT.slice();\n\n  pathBuffer = [];\n\n  get fillColorSpace() {\n    return this._fillColorSpace;\n  }\n\n  set fillColorSpace(colorSpace) {\n    this._fillColorSpace = this.patternFillColorSpace = colorSpace;\n  }\n\n  get strokeColorSpace() {\n    return this._strokeColorSpace;\n  }\n\n  set strokeColorSpace(colorSpace) {\n    this._strokeColorSpace = this.patternStrokeColorSpace = colorSpace;\n  }\n\n  clone({ newPath = false } = {}) {\n    const clone = Object.create(this);\n    if (newPath) {\n      clone.pathBuffer = [];\n      clone.pathMinMax = F32_BBOX_INIT.slice();\n    }\n    return clone;\n  }\n}\n\nclass EvaluatorPreprocessor {\n  static get opMap() {\n    // Specifies properties for each command\n    //\n    // If variableArgs === true: [0, `numArgs`] expected\n    // If variableArgs === false: exactly `numArgs` expected\n    return shadow(\n      this,\n      \"opMap\",\n      Object.assign(Object.create(null), {\n        // Graphic state\n        w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },\n        J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },\n        j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },\n        M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },\n        d: { id: OPS.setDash, numArgs: 2, variableArgs: false },\n        ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },\n        i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },\n        gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },\n        q: { id: OPS.save, numArgs: 0, variableArgs: false },\n        Q: { id: OPS.restore, numArgs: 0, variableArgs: false },\n        cm: { id: OPS.transform, numArgs: 6, variableArgs: false },\n\n        // Path\n        m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },\n        l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },\n        c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },\n        v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },\n        y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },\n        h: { id: OPS.closePath, numArgs: 0, variableArgs: false },\n        re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },\n        S: { id: OPS.stroke, numArgs: 0, variableArgs: false },\n        s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },\n        f: { id: OPS.fill, numArgs: 0, variableArgs: false },\n        F: { id: OPS.fill, numArgs: 0, variableArgs: false },\n        \"f*\": { id: OPS.eoFill, numArgs: 0, variableArgs: false },\n        B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },\n        \"B*\": { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },\n        b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },\n        \"b*\": { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },\n        n: { id: OPS.endPath, numArgs: 0, variableArgs: false },\n\n        // Clipping\n        W: { id: OPS.clip, numArgs: 0, variableArgs: false },\n        \"W*\": { id: OPS.eoClip, numArgs: 0, variableArgs: false },\n\n        // Text\n        BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },\n        ET: { id: OPS.endText, numArgs: 0, variableArgs: false },\n        Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },\n        Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },\n        Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },\n        TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },\n        Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },\n        Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },\n        Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },\n        Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },\n        TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },\n        Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },\n        \"T*\": { id: OPS.nextLine, numArgs: 0, variableArgs: false },\n        Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },\n        TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },\n        \"'\": { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },\n        '\"': {\n          id: OPS.nextLineSetSpacingShowText,\n          numArgs: 3,\n          variableArgs: false,\n        },\n\n        // Type3 fonts\n        d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },\n        d1: {\n          id: OPS.setCharWidthAndBounds,\n          numArgs: 6,\n          variableArgs: false,\n        },\n\n        // Color\n        CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },\n        cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },\n        SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },\n        SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },\n        sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },\n        scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },\n        G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },\n        g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },\n        RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },\n        rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },\n        K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },\n        k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },\n\n        // Shading\n        sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },\n\n        // Images\n        BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },\n        ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },\n        EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },\n\n        // XObjects\n        Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },\n        MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },\n        DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },\n        BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },\n        BDC: {\n          id: OPS.beginMarkedContentProps,\n          numArgs: 2,\n          variableArgs: false,\n        },\n        EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },\n\n        // Compatibility\n        BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },\n        EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false },\n\n        // (reserved partial commands for the lexer)\n        BM: null,\n        BD: null,\n        true: null,\n        fa: null,\n        fal: null,\n        fals: null,\n        false: null,\n        nu: null,\n        nul: null,\n        null: null,\n      })\n    );\n  }\n\n  static MAX_INVALID_PATH_OPS = 10;\n\n  constructor(stream, xref, stateManager = new StateManager()) {\n    // TODO(mduan): pass array of knownCommands rather than this.opMap\n    // dictionary\n    this.parser = new Parser({\n      lexer: new Lexer(stream, EvaluatorPreprocessor.opMap),\n      xref,\n    });\n    this.stateManager = stateManager;\n    this.nonProcessedArgs = [];\n    this._isPathOp = false;\n    this._numInvalidPathOPS = 0;\n  }\n\n  get savedStatesDepth() {\n    return this.stateManager.stateStack.length;\n  }\n\n  // |operation| is an object with two fields:\n  //\n  // - |fn| is an out param.\n  //\n  // - |args| is an inout param. On entry, it should have one of two values.\n  //\n  //   - An empty array. This indicates that the caller is providing the\n  //     array in which the args will be stored in. The caller should use\n  //     this value if it can reuse a single array for each call to read().\n  //\n  //   - |null|. This indicates that the caller needs this function to create\n  //     the array in which any args are stored in. If there are zero args,\n  //     this function will leave |operation.args| as |null| (thus avoiding\n  //     allocations that would occur if we used an empty array to represent\n  //     zero arguments). Otherwise, it will replace |null| with a new array\n  //     containing the arguments. The caller should use this value if it\n  //     cannot reuse an array for each call to read().\n  //\n  // These two modes are present because this function is very hot and so\n  // avoiding allocations where possible is worthwhile.\n  //\n  read(operation) {\n    let args = operation.args;\n    while (true) {\n      const obj = this.parser.getObj();\n      if (obj instanceof Cmd) {\n        const cmd = obj.cmd;\n        // Check that the command is valid\n        const opSpec = EvaluatorPreprocessor.opMap[cmd];\n        if (!opSpec) {\n          warn(`Unknown command \"${cmd}\".`);\n          continue;\n        }\n\n        const fn = opSpec.id;\n        const numArgs = opSpec.numArgs;\n        let argsLength = args !== null ? args.length : 0;\n\n        // If the *previous* command wasn't a path operator, reset the heuristic\n        // used with incomplete path operators below (fixes issue14917.pdf).\n        if (!this._isPathOp) {\n          this._numInvalidPathOPS = 0;\n        }\n        this._isPathOp = fn >= OPS.moveTo && fn <= OPS.endPath;\n\n        if (!opSpec.variableArgs) {\n          // Postscript commands can be nested, e.g. /F2 /GS2 gs 5.711 Tf\n          if (argsLength !== numArgs) {\n            const nonProcessedArgs = this.nonProcessedArgs;\n            while (argsLength > numArgs) {\n              nonProcessedArgs.push(args.shift());\n              argsLength--;\n            }\n            while (argsLength < numArgs && nonProcessedArgs.length !== 0) {\n              if (args === null) {\n                args = [];\n              }\n              args.unshift(nonProcessedArgs.pop());\n              argsLength++;\n            }\n          }\n\n          if (argsLength < numArgs) {\n            const partialMsg =\n              `command ${cmd}: expected ${numArgs} args, ` +\n              `but received ${argsLength} args.`;\n\n            // Incomplete path operators, in particular, can result in fairly\n            // chaotic rendering artifacts. Hence the following heuristics is\n            // used to error, rather than just warn, once a number of invalid\n            // path operators have been encountered (fixes bug1443140.pdf).\n            if (\n              this._isPathOp &&\n              ++this._numInvalidPathOPS >\n                EvaluatorPreprocessor.MAX_INVALID_PATH_OPS\n            ) {\n              throw new FormatError(`Invalid ${partialMsg}`);\n            }\n            // If we receive too few arguments, it's not possible to execute\n            // the command, hence we skip the command.\n            warn(`Skipping ${partialMsg}`);\n            if (args !== null) {\n              args.length = 0;\n            }\n            continue;\n          }\n        } else if (argsLength > numArgs) {\n          info(\n            `Command ${cmd}: expected [0, ${numArgs}] args, ` +\n              `but received ${argsLength} args.`\n          );\n        }\n\n        // TODO figure out how to type-check vararg functions\n        this.preprocessCommand(fn, args);\n\n        operation.fn = fn;\n        operation.args = args;\n        return true;\n      }\n      if (obj === EOF) {\n        return false; // no more commands\n      }\n      // argument\n      if (obj !== null) {\n        if (args === null) {\n          args = [];\n        }\n        args.push(obj);\n        if (args.length > 33) {\n          throw new FormatError(\"Too many arguments\");\n        }\n      }\n    }\n  }\n\n  preprocessCommand(fn, args) {\n    switch (fn | 0) {\n      case OPS.save:\n        this.stateManager.save();\n        break;\n      case OPS.restore:\n        this.stateManager.restore();\n        break;\n      case OPS.transform:\n        this.stateManager.transform(args);\n        break;\n    }\n  }\n}\n\nexport { EvaluatorPreprocessor, PartialEvaluator };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  codePointIter,\n  escapePDFName,\n  getRotationMatrix,\n  numberToString,\n} from \"./core_utils.js\";\nimport { Dict, Name } from \"./primitives.js\";\nimport {\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  OPS,\n  shadow,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { EvaluatorPreprocessor } from \"./evaluator.js\";\nimport { LocalColorSpaceCache } from \"./image_utils.js\";\nimport { PDFFunctionFactory } from \"./function.js\";\nimport { StringStream } from \"./stream.js\";\nimport { stringToUTF16HexString } from \"./string_utils.js\";\n\nclass DefaultAppearanceEvaluator extends EvaluatorPreprocessor {\n  constructor(str) {\n    super(new StringStream(str));\n  }\n\n  parse() {\n    const operation = {\n      fn: 0,\n      args: [],\n    };\n    const result = {\n      fontSize: 0,\n      fontName: \"\",\n      fontColor: /* black = */ new Uint8ClampedArray(3),\n    };\n\n    try {\n      while (true) {\n        operation.args.length = 0; // Ensure that `args` it's always reset.\n\n        if (!this.read(operation)) {\n          break;\n        }\n        if (this.savedStatesDepth !== 0) {\n          continue; // Don't get info in save/restore sections.\n        }\n        const { fn, args } = operation;\n\n        switch (fn | 0) {\n          case OPS.setFont:\n            const [fontName, fontSize] = args;\n            if (fontName instanceof Name) {\n              result.fontName = fontName.name;\n            }\n            if (typeof fontSize === \"number\" && fontSize > 0) {\n              result.fontSize = fontSize;\n            }\n            break;\n          case OPS.setFillRGBColor:\n            ColorSpaceUtils.rgb.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillGray:\n            ColorSpaceUtils.gray.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillCMYKColor:\n            ColorSpaceUtils.cmyk.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n        }\n      }\n    } catch (reason) {\n      warn(`parseDefaultAppearance - ignoring errors: \"${reason}\".`);\n    }\n\n    return result;\n  }\n}\n\n// Parse DA to extract font and color information.\nfunction parseDefaultAppearance(str) {\n  return new DefaultAppearanceEvaluator(str).parse();\n}\n\nclass AppearanceStreamEvaluator extends EvaluatorPreprocessor {\n  constructor(stream, xref, globalColorSpaceCache) {\n    super(stream);\n    this.stream = stream;\n    this.xref = xref;\n    this.globalColorSpaceCache = globalColorSpaceCache;\n\n    this.resources = stream.dict?.get(\"Resources\");\n  }\n\n  parse() {\n    const operation = {\n      fn: 0,\n      args: [],\n    };\n    let result = {\n      scaleFactor: 1,\n      fontSize: 0,\n      fontName: \"\",\n      fontColor: /* black = */ new Uint8ClampedArray(3),\n      fillColorSpace: ColorSpaceUtils.gray,\n    };\n    let breakLoop = false;\n    const stack = [];\n\n    try {\n      while (true) {\n        operation.args.length = 0; // Ensure that `args` it's always reset.\n\n        if (breakLoop || !this.read(operation)) {\n          break;\n        }\n        const { fn, args } = operation;\n\n        switch (fn | 0) {\n          case OPS.save:\n            stack.push({\n              scaleFactor: result.scaleFactor,\n              fontSize: result.fontSize,\n              fontName: result.fontName,\n              fontColor: result.fontColor.slice(),\n              fillColorSpace: result.fillColorSpace,\n            });\n            break;\n          case OPS.restore:\n            result = stack.pop() || result;\n            break;\n          case OPS.setTextMatrix:\n            const tm = Util.transform(this.stateManager.state.ctm, args);\n            result.scaleFactor *= Math.hypot(tm[0], tm[1]);\n            break;\n          case OPS.setFont:\n            const [fontName, fontSize] = args;\n            if (fontName instanceof Name) {\n              result.fontName = fontName.name;\n            }\n            if (typeof fontSize === \"number\" && fontSize > 0) {\n              result.fontSize = fontSize;\n            }\n            break;\n          case OPS.setFillColorSpace:\n            result.fillColorSpace = ColorSpaceUtils.parse({\n              cs: args[0],\n              xref: this.xref,\n              resources: this.resources,\n              pdfFunctionFactory: this._pdfFunctionFactory,\n              globalColorSpaceCache: this.globalColorSpaceCache,\n              localColorSpaceCache: this._localColorSpaceCache,\n            });\n            break;\n          case OPS.setFillColor:\n            const cs = result.fillColorSpace;\n            cs.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillRGBColor:\n            ColorSpaceUtils.rgb.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillGray:\n            ColorSpaceUtils.gray.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.setFillCMYKColor:\n            ColorSpaceUtils.cmyk.getRgbItem(args, 0, result.fontColor, 0);\n            break;\n          case OPS.showText:\n          case OPS.showSpacedText:\n          case OPS.nextLineShowText:\n          case OPS.nextLineSetSpacingShowText:\n            // The font (Tf) and the text matrix (Tm) can be set in any order,\n            // so the scale factor is applied here, when text is actually shown\n            // and both are known to be in effect.\n            result.fontSize *= result.scaleFactor;\n            breakLoop = true;\n            break;\n        }\n      }\n    } catch (reason) {\n      warn(`parseAppearanceStream - ignoring errors: \"${reason}\".`);\n    }\n    this.stream.reset();\n    delete result.scaleFactor;\n    delete result.fillColorSpace;\n\n    return result;\n  }\n\n  get _localColorSpaceCache() {\n    return shadow(this, \"_localColorSpaceCache\", new LocalColorSpaceCache());\n  }\n\n  get _pdfFunctionFactory() {\n    return shadow(\n      this,\n      \"_pdfFunctionFactory\",\n      new PDFFunctionFactory({ xref: this.xref })\n    );\n  }\n}\n\n// Parse appearance stream to extract font and color information.\n// It returns the font properties used to render the first text object.\nfunction parseAppearanceStream(stream, xref, globalColorSpaceCache) {\n  return new AppearanceStreamEvaluator(\n    stream,\n    xref,\n    globalColorSpaceCache\n  ).parse();\n}\n\nfunction getPdfColor(color, isFill) {\n  if (color[0] === color[1] && color[1] === color[2]) {\n    const gray = color[0] / 255;\n    return `${numberToString(gray)} ${isFill ? \"g\" : \"G\"}`;\n  }\n  return (\n    Array.from(color, c => numberToString(c / 255)).join(\" \") +\n    ` ${isFill ? \"rg\" : \"RG\"}`\n  );\n}\n\n// Create default appearance string from some information.\nfunction createDefaultAppearance({ fontSize, fontName, fontColor }) {\n  return `/${escapePDFName(fontName)} ${fontSize} Tf ${getPdfColor(\n    fontColor,\n    /* isFill */ true\n  )}`;\n}\n\nclass FakeUnicodeFont {\n  static #fontNameId = 1;\n\n  constructor(xref, fontFamily) {\n    this.xref = xref;\n    this.widths = null;\n    this.firstChar = Infinity;\n    this.lastChar = -Infinity;\n    this.fontFamily = fontFamily;\n\n    const canvas = new OffscreenCanvas(1, 1);\n    this.ctxMeasure = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n    this.fontName = Name.get(\n      `InvalidPDFjsFont_${fontFamily}_${FakeUnicodeFont.#fontNameId++}`\n    );\n  }\n\n  get fontDescriptorRef() {\n    if (!FakeUnicodeFont._fontDescriptorRef) {\n      const fontDescriptor = new Dict(this.xref);\n      fontDescriptor.setIfName(\"Type\", \"FontDescriptor\");\n      fontDescriptor.set(\"FontName\", this.fontName);\n      fontDescriptor.set(\"FontFamily\", \"MyriadPro Regular\");\n      fontDescriptor.set(\"FontBBox\", [0, 0, 0, 0]);\n      fontDescriptor.setIfName(\"FontStretch\", \"Normal\");\n      fontDescriptor.set(\"FontWeight\", 400);\n      fontDescriptor.set(\"ItalicAngle\", 0);\n\n      FakeUnicodeFont._fontDescriptorRef =\n        this.xref.getNewPersistentRef(fontDescriptor);\n    }\n\n    return FakeUnicodeFont._fontDescriptorRef;\n  }\n\n  get descendantFontRef() {\n    const descendantFont = new Dict(this.xref);\n    descendantFont.set(\"BaseFont\", this.fontName);\n    descendantFont.setIfName(\"Type\", \"Font\");\n    descendantFont.setIfName(\"Subtype\", \"CIDFontType0\");\n    descendantFont.setIfName(\"CIDToGIDMap\", \"Identity\");\n    descendantFont.set(\"FirstChar\", this.firstChar);\n    descendantFont.set(\"LastChar\", this.lastChar);\n    descendantFont.set(\"FontDescriptor\", this.fontDescriptorRef);\n    descendantFont.set(\"DW\", 1000);\n\n    const widths = [];\n    const chars = [...this.widths].sort();\n    let currentChar = null;\n    let currentWidths = null;\n    for (const [char, width] of chars) {\n      if (!currentChar) {\n        currentChar = char;\n        currentWidths = [width];\n        continue;\n      }\n      if (char === currentChar + currentWidths.length) {\n        currentWidths.push(width);\n      } else {\n        widths.push(currentChar, currentWidths);\n        currentChar = char;\n        currentWidths = [width];\n      }\n    }\n\n    if (currentChar) {\n      widths.push(currentChar, currentWidths);\n    }\n\n    descendantFont.set(\"W\", widths);\n\n    const cidSystemInfo = new Dict(this.xref);\n    cidSystemInfo.set(\"Ordering\", \"Identity\");\n    cidSystemInfo.set(\"Registry\", \"Adobe\");\n    cidSystemInfo.set(\"Supplement\", 0);\n    descendantFont.set(\"CIDSystemInfo\", cidSystemInfo);\n\n    return this.xref.getNewPersistentRef(descendantFont);\n  }\n\n  get baseFontRef() {\n    const baseFont = new Dict(this.xref);\n    baseFont.set(\"BaseFont\", this.fontName);\n    baseFont.setIfName(\"Type\", \"Font\");\n    baseFont.setIfName(\"Subtype\", \"Type0\");\n    baseFont.setIfName(\"Encoding\", \"Identity-H\");\n    baseFont.set(\"DescendantFonts\", [this.descendantFontRef]);\n    baseFont.setIfName(\"ToUnicode\", \"Identity-H\");\n\n    return this.xref.getNewPersistentRef(baseFont);\n  }\n\n  get resources() {\n    const resources = new Dict(this.xref);\n    const font = new Dict(this.xref);\n    font.set(this.fontName.name, this.baseFontRef);\n    resources.set(\"Font\", font);\n\n    return resources;\n  }\n\n  _createContext() {\n    this.widths = new Map();\n    this.ctxMeasure.font = `1000px ${this.fontFamily}`;\n\n    return this.ctxMeasure;\n  }\n\n  createFontResources(text) {\n    const ctx = this._createContext();\n    for (const line of text.split(/\\r\\n?|\\n/)) {\n      for (const char of line.split(\"\")) {\n        const code = char.charCodeAt(0);\n        if (this.widths.has(code)) {\n          continue;\n        }\n        const metrics = ctx.measureText(char);\n        const width = Math.ceil(metrics.width);\n        this.widths.set(code, width);\n        this.firstChar = Math.min(code, this.firstChar);\n        this.lastChar = Math.max(code, this.lastChar);\n      }\n    }\n\n    return this.resources;\n  }\n\n  static getFirstPositionInfo(rect, rotation, fontSize) {\n    // Get the position of the first char in the rect.\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineDescent = LINE_DESCENT_FACTOR * fontSize;\n\n    return {\n      coords: [0, h + lineDescent - lineHeight],\n      bbox: [0, 0, w, h],\n      matrix:\n        rotation !== 0 ? getRotationMatrix(rotation, h, lineHeight) : undefined,\n    };\n  }\n\n  createAppearance(text, rect, rotation, fontSize, bgColor, strokeAlpha) {\n    const ctx = this._createContext();\n    const lines = [];\n    let maxWidth = -Infinity;\n    for (const line of text.split(/\\r\\n?|\\n/)) {\n      lines.push(line);\n      // The line width isn't the sum of the char widths, because in some\n      // languages, like arabic, it'd be wrong because of ligatures.\n      const lineWidth = ctx.measureText(line).width;\n      maxWidth = Math.max(maxWidth, lineWidth);\n      for (const code of codePointIter(line)) {\n        const char = String.fromCodePoint(code);\n        let width = this.widths.get(code);\n        if (width === undefined) {\n          const metrics = ctx.measureText(char);\n          width = Math.ceil(metrics.width);\n          this.widths.set(code, width);\n          this.firstChar = Math.min(code, this.firstChar);\n          this.lastChar = Math.max(code, this.lastChar);\n        }\n      }\n    }\n    maxWidth *= fontSize / 1000;\n\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n\n    const hscale = maxWidth > w ? w / maxWidth : 1;\n    let vscale = 1;\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineDescent = LINE_DESCENT_FACTOR * fontSize;\n    const maxHeight = lineHeight * lines.length;\n    if (maxHeight > h) {\n      vscale = h / maxHeight;\n    }\n    const fscale = Math.min(hscale, vscale);\n    const newFontSize = fontSize * fscale;\n\n    const buffer = [\n      \"q\",\n      `0 0 ${numberToString(w)} ${numberToString(h)} re W n`,\n      `BT`,\n      `1 0 0 1 0 ${numberToString(h + lineDescent)} Tm 0 Tc ${getPdfColor(\n        bgColor,\n        /* isFill */ true\n      )}`,\n      `/${this.fontName.name} ${numberToString(newFontSize)} Tf`,\n    ];\n\n    const { resources } = this;\n    strokeAlpha =\n      typeof strokeAlpha === \"number\" && strokeAlpha >= 0 && strokeAlpha <= 1\n        ? strokeAlpha\n        : 1;\n\n    if (strokeAlpha !== 1) {\n      buffer.push(\"/R0 gs\");\n      const extGState = new Dict(this.xref);\n      const r0 = new Dict(this.xref);\n      r0.set(\"ca\", strokeAlpha);\n      r0.set(\"CA\", strokeAlpha);\n      r0.setIfName(\"Type\", \"ExtGState\");\n      extGState.set(\"R0\", r0);\n      resources.set(\"ExtGState\", extGState);\n    }\n\n    const vShift = numberToString(lineHeight);\n    for (const line of lines) {\n      buffer.push(`0 -${vShift} Td <${stringToUTF16HexString(line)}> Tj`);\n    }\n    buffer.push(\"ET\", \"Q\");\n    const appearance = buffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(this.xref);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", [0, 0, w, h]);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n    appearanceStreamDict.set(\"Resources\", resources);\n\n    if (rotation) {\n      const matrix = getRotationMatrix(rotation, w, h);\n      appearanceStreamDict.set(\"Matrix\", matrix);\n    }\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n}\n\nexport {\n  createDefaultAppearance,\n  FakeUnicodeFont,\n  getPdfColor,\n  parseAppearanceStream,\n  parseDefaultAppearance,\n};\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * PLEASE NOTE: This file is currently imported in both the `../display/` and\n *              `../scripting_api/` folders, hence be EXTREMELY careful about\n *              introducing any dependencies here since that can lead to an\n *              unexpected/unnecessary size increase of the *built* files.\n */\n\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\nfunction makeColorComp(n) {\n  return Math.floor(MathClamp(n, 0, 1) * 255)\n    .toString(16)\n    .padStart(2, \"0\");\n}\n\nfunction scaleAndClamp(x) {\n  return MathClamp(x, 0, 1) * 255;\n}\n\n// PDF specifications section 10.3\nclass ColorConverters {\n  static CMYK_G([c, y, m, k]) {\n    return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n  }\n\n  static G_CMYK([g]) {\n    return [\"CMYK\", 0, 0, 0, 1 - g];\n  }\n\n  static G_RGB([g]) {\n    return [\"RGB\", g, g, g];\n  }\n\n  static G_rgb([g]) {\n    g = scaleAndClamp(g);\n    return [g, g, g];\n  }\n\n  static G_HTML([g]) {\n    const G = makeColorComp(g);\n    return `#${G}${G}${G}`;\n  }\n\n  static RGB_G([r, g, b]) {\n    return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n  }\n\n  static RGB_rgb(color) {\n    return color.map(scaleAndClamp);\n  }\n\n  static RGB_HTML(color) {\n    return `#${color.map(makeColorComp).join(\"\")}`;\n  }\n\n  static T_HTML() {\n    return \"#00000000\";\n  }\n\n  static T_rgb() {\n    return [null];\n  }\n\n  static CMYK_RGB([c, y, m, k]) {\n    return [\n      \"RGB\",\n      1 - Math.min(1, c + k),\n      1 - Math.min(1, m + k),\n      1 - Math.min(1, y + k),\n    ];\n  }\n\n  static CMYK_rgb([c, y, m, k]) {\n    return [\n      scaleAndClamp(1 - Math.min(1, c + k)),\n      scaleAndClamp(1 - Math.min(1, m + k)),\n      scaleAndClamp(1 - Math.min(1, y + k)),\n    ];\n  }\n\n  static CMYK_HTML(components) {\n    const rgb = this.CMYK_RGB(components).slice(1);\n    return this.RGB_HTML(rgb);\n  }\n\n  static RGB_CMYK([r, g, b]) {\n    const c = 1 - r;\n    const m = 1 - g;\n    const y = 1 - b;\n    const k = Math.min(c, m, y);\n    return [\"CMYK\", c, m, y, k];\n  }\n}\n\nconst DateFormats = [\n  \"m/d\",\n  \"m/d/yy\",\n  \"mm/dd/yy\",\n  \"mm/yy\",\n  \"d-mmm\",\n  \"d-mmm-yy\",\n  \"dd-mmm-yy\",\n  \"yy-mm-dd\",\n  \"mmm-yy\",\n  \"mmmm-yy\",\n  \"mmm d, yyyy\",\n  \"mmmm d, yyyy\",\n  \"m/d/yy h:MM tt\",\n  \"m/d/yy HH:MM\",\n];\nconst TimeFormats = [\"HH:MM\", \"h:MM tt\", \"HH:MM:ss\", \"h:MM:ss tt\"];\n\nexport { ColorConverters, DateFormats, TimeFormats };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dict, Ref, RefSet } from \"./primitives.js\";\nimport { FormatError, unreachable, warn } from \"../shared/util.js\";\n\n/**\n * A NameTree/NumberTree is like a Dict but has some advantageous properties,\n * see the specification (7.9.6 and 7.9.7) for additional details.\n * TODO: implement all the Dict functions and make this more efficient.\n */\nclass NameOrNumberTree {\n  constructor(root, xref, type) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === NameOrNumberTree\n    ) {\n      unreachable(\"Cannot initialize NameOrNumberTree.\");\n    }\n    this.root = root;\n    this.xref = xref;\n    this._type = type;\n  }\n\n  getAll(isRaw = false) {\n    const map = new Map();\n    if (!this.root) {\n      return map;\n    }\n    const xref = this.xref;\n    // Reading Name/Number tree.\n    const processed = new RefSet();\n    if (this.root instanceof Ref) {\n      processed.put(this.root);\n    }\n    const queue = [this.root];\n    for (const node of queue) {\n      const obj = xref.fetchIfRef(node);\n      if (!(obj instanceof Dict)) {\n        continue;\n      }\n      if (obj.has(\"Kids\")) {\n        const kids = obj.get(\"Kids\");\n        if (!Array.isArray(kids)) {\n          continue;\n        }\n        for (const kid of kids) {\n          if (kid instanceof Ref) {\n            if (processed.has(kid)) {\n              throw new FormatError(`Duplicate entry in \"${this._type}\" tree.`);\n            }\n            processed.put(kid);\n          }\n          queue.push(kid);\n        }\n        continue;\n      }\n      const entries = obj.get(this._type);\n      if (!Array.isArray(entries)) {\n        continue;\n      }\n      for (let i = 0, ii = entries.length; i < ii; i += 2) {\n        map.set(\n          isRaw ? entries[i] : xref.fetchIfRef(entries[i]),\n          isRaw ? entries[i + 1] : xref.fetchIfRef(entries[i + 1])\n        );\n      }\n    }\n    return map;\n  }\n\n  getRaw(key) {\n    if (!this.root) {\n      return null;\n    }\n    const xref = this.xref;\n    let kidsOrEntries = xref.fetchIfRef(this.root);\n    let loopCount = 0;\n    const MAX_LEVELS = 10;\n\n    // Perform a binary search to quickly find the entry that\n    // contains the key we are looking for.\n    while (kidsOrEntries.has(\"Kids\")) {\n      if (++loopCount > MAX_LEVELS) {\n        warn(`Search depth limit reached for \"${this._type}\" tree.`);\n        return null;\n      }\n\n      const kids = kidsOrEntries.get(\"Kids\");\n      if (!Array.isArray(kids)) {\n        return null;\n      }\n\n      let l = 0,\n        r = kids.length - 1;\n      while (l <= r) {\n        const m = (l + r) >> 1;\n        const kid = xref.fetchIfRef(kids[m]);\n        const limits = kid.get(\"Limits\");\n\n        if (key < xref.fetchIfRef(limits[0])) {\n          r = m - 1;\n        } else if (key > xref.fetchIfRef(limits[1])) {\n          l = m + 1;\n        } else {\n          kidsOrEntries = kid;\n          break;\n        }\n      }\n      if (l > r) {\n        return null;\n      }\n    }\n\n    // If we get here, then we have found the right entry. Now go through the\n    // entries in the dictionary until we find the key we're looking for.\n    const entries = kidsOrEntries.get(this._type);\n    if (Array.isArray(entries)) {\n      // Perform a binary search to reduce the lookup time.\n      let l = 0,\n        r = entries.length - 2;\n      while (l <= r) {\n        // Check only even indices (0, 2, 4, ...) because the\n        // odd indices contain the actual data.\n        const tmp = (l + r) >> 1,\n          m = tmp + (tmp & 1);\n        const currentKey = xref.fetchIfRef(entries[m]);\n        if (key < currentKey) {\n          r = m - 2;\n        } else if (key > currentKey) {\n          l = m + 2;\n        } else {\n          return entries[m + 1];\n        }\n      }\n    }\n    return null;\n  }\n\n  get(key) {\n    return this.xref.fetchIfRef(this.getRaw(key));\n  }\n}\n\nclass NameTree extends NameOrNumberTree {\n  constructor(root, xref) {\n    super(root, xref, \"Names\");\n  }\n}\n\nclass NumberTree extends NameOrNumberTree {\n  constructor(root, xref) {\n    super(root, xref, \"Nums\");\n  }\n}\n\nexport { NameTree, NumberTree };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { clearPatternCaches } from \"./pattern.js\";\nimport { clearPrimitiveCaches } from \"./primitives.js\";\nimport { clearUnicodeCaches } from \"./unicode.js\";\nimport { WasmImage } from \"./wasm_image.js\";\n\nfunction clearGlobalCaches() {\n  clearPatternCaches();\n  clearPrimitiveCaches();\n  clearUnicodeCaches();\n\n  // Remove the global `WasmImage` instances,\n  // since they may hold references to the WebAssembly modules.\n  WasmImage.cleanup();\n}\n\nexport { clearGlobalCaches };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  PasswordException,\n  PasswordResponses,\n  stripPath,\n  warn,\n} from \"../shared/util.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { Dict } from \"./primitives.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\n\n/**\n * @import { CatalogAttachmentContent } from \"./catalog.js\";\n */\n\n/**\n * \"A PDF file can refer to the contents of another file by using a File\n * Specification (PDF 1.1)\", see the spec (7.11) for more details.\n * NOTE: Only embedded files are supported (as part of the attachments support)\n * TODO: support the 'URL' file system (with caching if !/V), portable\n * collections attributes and related files (/RF)\n */\nclass FileSpec {\n  /**\n   * @param {Dict | null | undefined} root\n   *   File specification dictionary.\n   */\n  constructor(root) {\n    if (!(root instanceof Dict)) {\n      return;\n    }\n    this.root = root;\n    if (root.has(\"FS\")) {\n      this.fs = root.get(\"FS\");\n    }\n    if (root.has(\"RF\")) {\n      warn(\"Related file specifications are not supported\");\n    }\n  }\n\n  get filename() {\n    const item = FileSpec.pickPlatformItem(this.root);\n    if (item && typeof item === \"string\") {\n      // NOTE: The following replacement order is INTENTIONAL, regardless of\n      //       what some static code analysers (e.g. CodeQL) may claim.\n      return stringToPDFString(item, /* keepEscapeSequence = */ true)\n        .replaceAll(\"\\\\\\\\\", \"\\\\\")\n        .replaceAll(\"\\\\/\", \"/\")\n        .replaceAll(\"\\\\\", \"/\");\n    }\n    return \"\";\n  }\n\n  get description() {\n    const desc = this.root?.get(\"Desc\");\n    if (desc && typeof desc === \"string\") {\n      return stringToPDFString(desc);\n    }\n    return \"\";\n  }\n\n  get serializable() {\n    const { filename, description } = this;\n    return {\n      rawFilename: filename,\n      filename: stripPath(filename) || \"unnamed\",\n      description,\n    };\n  }\n\n  /**\n   * Get a platform-specific item from a file-spec dictionary.\n   *\n   * Search order follows the PDF platform keys: `UF`, `F`, `Unix`, `Mac`,\n   * `DOS`.\n   *\n   * @param {Dict | null | undefined} dict\n   *   Dictionary.\n   * @param {boolean} [raw]\n   *   Return the raw (possibly indirect) value rather than the resolved one.\n   * @returns {unknown}\n   *   Matching dictionary value or `null` when no key is found.\n   */\n  static pickPlatformItem(dict, raw = false) {\n    if (dict instanceof Dict) {\n      // Look for the filename in this order: UF, F, Unix, Mac, DOS\n      for (const key of [\"UF\", \"F\", \"Unix\", \"Mac\", \"DOS\"]) {\n        if (dict.has(key)) {\n          return raw ? dict.getRaw(key) : dict.get(key);\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Whether a file specification carries an embedded file we can read.\n   *\n   * @param {Dict} fileSpecDict\n   * @returns {boolean}\n   */\n  static hasEmbeddedFile(fileSpecDict) {\n    return this.pickPlatformItem(fileSpecDict.get(\"EF\")) instanceof BaseStream;\n  }\n\n  /**\n   * Read attachment bytes from a file-spec dictionary.\n   *\n   * @param {Dict | null | undefined} dict\n   *   File-spec dictionary containing an `EF` entry.\n   * @returns {CatalogAttachmentContent}\n   *   Attachment bytes when available; otherwise `null`.\n   * @throws {PasswordException}\n   *   When attachment bytes are encrypted and no key is available.\n   */\n  static readContent(dict) {\n    if (!(dict instanceof Dict)) {\n      return null;\n    }\n    const ef = this.pickPlatformItem(dict.get(\"EF\"));\n    if (!(ef instanceof BaseStream)) {\n      warn(\n        \"Embedded file specification points to non-existing/invalid content\"\n      );\n      return null;\n    }\n    return this.readStreamContent(ef);\n  }\n\n  /**\n   * Read the bytes of an embedded-file stream.\n   *\n   * @param {BaseStream} stream\n   *   Embedded-file stream.\n   * @returns {CatalogAttachmentContent}\n   *   Attachment bytes.\n   * @throws {PasswordException}\n   *   When the bytes are encrypted and no key is available.\n   */\n  static readStreamContent(stream) {\n    // Throw if we need a password but don’t have one.\n    const encrypt = stream.dict?.xref?.encrypt;\n    if (encrypt?.encryptionKey === null) {\n      throw new PasswordException(\n        \"No password given\",\n        PasswordResponses.NEED_PASSWORD\n      );\n    }\n    return stream.getBytes();\n  }\n}\n\nexport { FileSpec };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// The code for XMLParserBase copied from\n// https://github.com/mozilla/shumway/blob/16451d8836fa85f4b16eeda8b4bda2fa9e2b22b0/src/avm2/natives/xml.ts\n\nimport { encodeToXmlString } from \"./core_utils.js\";\nimport { shadow } from \"../shared/util.js\";\n\nconst XMLParserErrorCode = {\n  NoError: 0,\n  EndOfDocument: -1,\n  UnterminatedCdat: -2,\n  UnterminatedXmlDeclaration: -3,\n  UnterminatedDoctypeDeclaration: -4,\n  UnterminatedComment: -5,\n  MalformedElement: -6,\n  OutOfMemory: -7,\n  UnterminatedAttributeValue: -8,\n  UnterminatedElement: -9,\n  ElementNeverBegun: -10,\n};\n\nfunction isWhitespace(s, index) {\n  const ch = s[index];\n  return ch === \" \" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\t\";\n}\n\nfunction isWhitespaceString(s) {\n  for (let i = 0, ii = s.length; i < ii; i++) {\n    if (!isWhitespace(s, i)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nclass XMLParserBase {\n  static get _entityRegex() {\n    return shadow(this, \"_entityRegex\", /&(?:#x([^;]+)|#([^;]+)|([^;]+));/g);\n  }\n\n  _resolveEntities(s) {\n    return s.replaceAll(XMLParserBase._entityRegex, (_, hex, dec, entity) => {\n      if (hex) {\n        return String.fromCodePoint(parseInt(hex, 16));\n      }\n      if (dec) {\n        return String.fromCodePoint(parseInt(dec, 10));\n      }\n      switch (entity) {\n        case \"lt\":\n          return \"<\";\n        case \"gt\":\n          return \">\";\n        case \"amp\":\n          return \"&\";\n        case \"quot\":\n          return '\"';\n        case \"apos\":\n          return \"'\";\n      }\n      return this.onResolveEntity(entity);\n    });\n  }\n\n  _parseContent(s, start) {\n    const attributes = [];\n    let pos = start;\n\n    function skipWs() {\n      while (pos < s.length && isWhitespace(s, pos)) {\n        ++pos;\n      }\n    }\n\n    while (\n      pos < s.length &&\n      !isWhitespace(s, pos) &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"/\"\n    ) {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    while (\n      pos < s.length &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"/\" &&\n      s[pos] !== \"?\"\n    ) {\n      skipWs();\n      let attrName = \"\",\n        attrValue = \"\";\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\n        attrName += s[pos];\n        ++pos;\n      }\n      skipWs();\n      if (s[pos] !== \"=\") {\n        return null;\n      }\n      ++pos;\n      skipWs();\n      const attrEndChar = s[pos];\n      if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\n        return null;\n      }\n      const attrEndIndex = s.indexOf(attrEndChar, ++pos);\n      if (attrEndIndex < 0) {\n        return null;\n      }\n      attrValue = s.substring(pos, attrEndIndex);\n      attributes.push({\n        name: attrName,\n        value: this._resolveEntities(attrValue),\n      });\n      pos = attrEndIndex + 1;\n      skipWs();\n    }\n    return {\n      name,\n      attributes,\n      parsed: pos - start,\n    };\n  }\n\n  _parseProcessingInstruction(s, start) {\n    let pos = start;\n\n    function skipWs() {\n      while (pos < s.length && isWhitespace(s, pos)) {\n        ++pos;\n      }\n    }\n\n    while (\n      pos < s.length &&\n      !isWhitespace(s, pos) &&\n      s[pos] !== \">\" &&\n      s[pos] !== \"?\" &&\n      s[pos] !== \"/\"\n    ) {\n      ++pos;\n    }\n    const name = s.substring(start, pos);\n    skipWs();\n    const attrStart = pos;\n    while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\n      ++pos;\n    }\n    const value = s.substring(attrStart, pos);\n    return {\n      name,\n      value,\n      parsed: pos - start,\n    };\n  }\n\n  parseXml(s) {\n    let i = 0;\n    while (i < s.length) {\n      const ch = s[i];\n      let j = i;\n      if (ch === \"<\") {\n        ++j;\n        const ch2 = s[j];\n        let q;\n        switch (ch2) {\n          case \"/\":\n            ++j;\n            q = s.indexOf(\">\", j);\n            if (q < 0) {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\n            }\n            this.onEndElement(s.substring(j, q));\n            j = q + 1;\n            break;\n          case \"?\":\n            ++j;\n            const pi = this._parseProcessingInstruction(s, j);\n            if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\n              this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\n              return;\n            }\n            this.onPi(pi.name, pi.value);\n            j += pi.parsed + 2;\n            break;\n          case \"!\":\n            if (s.substring(j + 1, j + 3) === \"--\") {\n              q = s.indexOf(\"-->\", j + 3);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedComment);\n                return;\n              }\n              this.onComment(s.substring(j + 3, q));\n              j = q + 3;\n            } else if (s.substring(j + 1, j + 8) === \"[CDATA[\") {\n              q = s.indexOf(\"]]>\", j + 8);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedCdat);\n                return;\n              }\n              this.onCdata(s.substring(j + 8, q));\n              j = q + 3;\n            } else if (s.substring(j + 1, j + 8) === \"DOCTYPE\") {\n              const q2 = s.indexOf(\"[\", j + 8);\n              let complexDoctype = false;\n              q = s.indexOf(\">\", j + 8);\n              if (q < 0) {\n                this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\n                return;\n              }\n              if (q2 > 0 && q > q2) {\n                q = s.indexOf(\"]>\", j + 8);\n                if (q < 0) {\n                  this.onError(\n                    XMLParserErrorCode.UnterminatedDoctypeDeclaration\n                  );\n                  return;\n                }\n                complexDoctype = true;\n              }\n              const doctypeContent = s.substring(\n                j + 8,\n                q + (complexDoctype ? 1 : 0)\n              );\n              this.onDoctype(doctypeContent);\n              j = q + (complexDoctype ? 2 : 1);\n            } else {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            break;\n          default:\n            const content = this._parseContent(s, j);\n            if (content === null) {\n              this.onError(XMLParserErrorCode.MalformedElement);\n              return;\n            }\n            let isClosed = false;\n            if (\n              s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\"\n            ) {\n              isClosed = true;\n            } else if (\n              s.substring(j + content.parsed, j + content.parsed + 1) !== \">\"\n            ) {\n              this.onError(XMLParserErrorCode.UnterminatedElement);\n              return;\n            }\n            this.onBeginElement(content.name, content.attributes, isClosed);\n            j += content.parsed + (isClosed ? 2 : 1);\n            break;\n        }\n      } else {\n        while (j < s.length && s[j] !== \"<\") {\n          j++;\n        }\n        const text = s.substring(i, j);\n        this.onText(this._resolveEntities(text));\n      }\n      i = j;\n    }\n  }\n\n  onResolveEntity(name) {\n    return `&${name};`;\n  }\n\n  onPi(name, value) {}\n\n  onComment(text) {}\n\n  onCdata(text) {}\n\n  onDoctype(doctypeContent) {}\n\n  onText(text) {}\n\n  onBeginElement(name, attributes, isEmpty) {}\n\n  onEndElement(name) {}\n\n  onError(code) {}\n}\n\nclass SimpleDOMNode {\n  constructor(nodeName, nodeValue) {\n    this.nodeName = nodeName;\n    this.nodeValue = nodeValue;\n\n    Object.defineProperty(this, \"parentNode\", { value: null, writable: true });\n  }\n\n  get firstChild() {\n    return this.childNodes?.[0];\n  }\n\n  get nextSibling() {\n    const childNodes = this.parentNode.childNodes;\n    if (!childNodes) {\n      return undefined;\n    }\n    const index = childNodes.indexOf(this);\n    if (index === -1) {\n      return undefined;\n    }\n    return childNodes[index + 1];\n  }\n\n  get textContent() {\n    if (!this.childNodes) {\n      return this.nodeValue || \"\";\n    }\n    return this.childNodes.map(child => child.textContent).join(\"\");\n  }\n\n  get children() {\n    return this.childNodes || [];\n  }\n\n  hasChildNodes() {\n    return this.childNodes?.length > 0;\n  }\n\n  /**\n   * Search a node in the tree with the given path\n   * foo.bar[nnn], i.e. find the nnn-th node named\n   * bar under a node named foo.\n   *\n   * @param {Array} paths - an array of objects as\n   * returned by {parseXFAPath}.\n   * @param {number} pos - the current position in\n   * the paths array.\n   * @returns {SimpleDOMNode} The node corresponding\n   * to the path or null if not found.\n   */\n  searchNode(paths, pos) {\n    if (pos >= paths.length) {\n      return this;\n    }\n\n    const component = paths[pos];\n    if (component.name.startsWith(\"#\") && pos < paths.length - 1) {\n      // If it starts with a # then it's a class which is not a concept for\n      // datasets elements (https://www.pdfa.org/norm-refs/XFA-3_3.pdf#page=96).\n      return this.searchNode(paths, pos + 1);\n    }\n    const stack = [];\n    let node = this;\n\n    while (true) {\n      if (component.name === node.nodeName) {\n        if (component.pos === 0) {\n          const res = node.searchNode(paths, pos + 1);\n          if (res !== null) {\n            return res;\n          }\n        } else if (stack.length === 0) {\n          return null;\n        } else {\n          const [parent] = stack.pop();\n          let siblingPos = 0;\n          for (const child of parent.childNodes) {\n            if (component.name === child.nodeName) {\n              if (siblingPos === component.pos) {\n                return child.searchNode(paths, pos + 1);\n              }\n              siblingPos++;\n            }\n          }\n          // We didn't find the correct sibling\n          // so just return the first found node\n          return node.searchNode(paths, pos + 1);\n        }\n      }\n\n      if (node.childNodes?.length > 0) {\n        stack.push([node, 0]);\n        node = node.childNodes[0];\n      } else if (stack.length === 0) {\n        return null;\n      } else {\n        while (stack.length !== 0) {\n          const [parent, currentPos] = stack.pop();\n          const newPos = currentPos + 1;\n          if (newPos < parent.childNodes.length) {\n            stack.push([parent, newPos]);\n            node = parent.childNodes[newPos];\n            break;\n          }\n        }\n        if (stack.length === 0) {\n          return null;\n        }\n      }\n    }\n  }\n\n  dump(buffer) {\n    if (this.nodeName === \"#text\") {\n      buffer.push(encodeToXmlString(this.nodeValue));\n      return;\n    }\n\n    buffer.push(`<${this.nodeName}`);\n    if (this.attributes) {\n      for (const attribute of this.attributes) {\n        buffer.push(\n          ` ${attribute.name}=\"${encodeToXmlString(attribute.value)}\"`\n        );\n      }\n    }\n    if (this.hasChildNodes()) {\n      buffer.push(\">\");\n      for (const child of this.childNodes) {\n        child.dump(buffer);\n      }\n      buffer.push(`</${this.nodeName}>`);\n    } else if (this.nodeValue) {\n      buffer.push(`>${encodeToXmlString(this.nodeValue)}</${this.nodeName}>`);\n    } else {\n      buffer.push(\"/>\");\n    }\n  }\n}\n\nclass SimpleXMLParser extends XMLParserBase {\n  constructor({ hasAttributes = false, lowerCaseName = false }) {\n    super();\n    this._currentFragment = null;\n    this._stack = null;\n    this._errorCode = XMLParserErrorCode.NoError;\n    this._hasAttributes = hasAttributes;\n    this._lowerCaseName = lowerCaseName;\n  }\n\n  parseFromString(data) {\n    this._currentFragment = [];\n    this._stack = [];\n    this._errorCode = XMLParserErrorCode.NoError;\n\n    this.parseXml(data);\n\n    if (this._errorCode !== XMLParserErrorCode.NoError) {\n      return undefined; // return undefined on error\n    }\n\n    // We should only have one root.\n    const [documentElement] = this._currentFragment;\n    if (!documentElement) {\n      return undefined; // Return undefined if no root was found.\n    }\n    return { documentElement };\n  }\n\n  onText(text) {\n    if (isWhitespaceString(text)) {\n      return;\n    }\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n\n  onCdata(text) {\n    const node = new SimpleDOMNode(\"#text\", text);\n    this._currentFragment.push(node);\n  }\n\n  onBeginElement(name, attributes, isEmpty) {\n    if (this._lowerCaseName) {\n      name = name.toLowerCase();\n    }\n    const node = new SimpleDOMNode(name);\n    node.childNodes = [];\n    if (this._hasAttributes) {\n      node.attributes = attributes;\n    }\n    this._currentFragment.push(node);\n    if (isEmpty) {\n      return;\n    }\n    this._stack.push(this._currentFragment);\n    this._currentFragment = node.childNodes;\n  }\n\n  onEndElement(name) {\n    this._currentFragment = this._stack.pop() || [];\n    const lastElement = this._currentFragment.at(-1);\n    if (!lastElement) {\n      return null;\n    }\n    for (const childNode of lastElement.childNodes) {\n      childNode.parentNode = lastElement;\n    }\n    return lastElement;\n  }\n\n  onError(code) {\n    this._errorCode = code;\n  }\n}\n\nexport { SimpleDOMNode, SimpleXMLParser, XMLParserBase, XMLParserErrorCode };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SimpleXMLParser } from \"./xml_parser.js\";\n\nclass MetadataParser {\n  constructor(data) {\n    // Ghostscript may produce invalid metadata, so try to repair that first.\n    data = this._repair(data);\n\n    // Convert the string to an XML document.\n    const parser = new SimpleXMLParser({ lowerCaseName: true });\n    const xmlDocument = parser.parseFromString(data);\n\n    this._metadataMap = new Map();\n    this._data = data;\n\n    if (xmlDocument) {\n      this._parse(xmlDocument);\n    }\n  }\n\n  _repair(data) {\n    // Start by removing any \"junk\" before the first tag (see issue 10395).\n    return data\n      .replace(/^[^<]+/, \"\")\n      .replaceAll(/>\\\\376\\\\377([^<]+)/g, function (all, codes) {\n        const bytes = codes\n          .replaceAll(/\\\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {\n            return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\n          })\n          .replaceAll(/&(amp|apos|gt|lt|quot);/g, function (str, name) {\n            switch (name) {\n              case \"amp\":\n                return \"&\";\n              case \"apos\":\n                return \"'\";\n              case \"gt\":\n                return \">\";\n              case \"lt\":\n                return \"<\";\n              case \"quot\":\n                return '\"';\n            }\n            throw new Error(`_repair: ${name} isn't defined.`);\n          });\n\n        const charBuf = [\">\"];\n        for (let i = 0, ii = bytes.length; i < ii; i += 2) {\n          const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\n          if (\n            code >= /* Space = */ 32 &&\n            code < /* Delete = */ 127 &&\n            code !== /* '<' = */ 60 &&\n            code !== /* '>' = */ 62 &&\n            code !== /* '&' = */ 38\n          ) {\n            charBuf.push(String.fromCharCode(code));\n          } else {\n            charBuf.push(\n              \"&#x\" + (0x10000 + code).toString(16).substring(1) + \";\"\n            );\n          }\n        }\n        return charBuf.join(\"\");\n      });\n  }\n\n  _getSequence(entry) {\n    const name = entry.nodeName;\n    if (name !== \"rdf:bag\" && name !== \"rdf:seq\" && name !== \"rdf:alt\") {\n      return null;\n    }\n    return entry.childNodes.filter(node => node.nodeName === \"rdf:li\");\n  }\n\n  _parseArray(entry) {\n    if (!entry.hasChildNodes()) {\n      return;\n    }\n    // Child must be a Bag (unordered array) or a Seq.\n    const [seqNode] = entry.childNodes;\n    const sequence = this._getSequence(seqNode) || [];\n\n    this._metadataMap.set(\n      entry.nodeName,\n      sequence.map(node => node.textContent.trim())\n    );\n  }\n\n  _parse(xmlDocument) {\n    let rdf = xmlDocument.documentElement;\n\n    if (rdf.nodeName !== \"rdf:rdf\") {\n      // Wrapped in <xmpmeta>\n      rdf = rdf.firstChild;\n      while (rdf && rdf.nodeName !== \"rdf:rdf\") {\n        rdf = rdf.nextSibling;\n      }\n    }\n\n    if (!rdf || rdf.nodeName !== \"rdf:rdf\" || !rdf.hasChildNodes()) {\n      return;\n    }\n\n    for (const desc of rdf.childNodes) {\n      if (desc.nodeName !== \"rdf:description\") {\n        continue;\n      }\n\n      for (const entry of desc.childNodes) {\n        const name = entry.nodeName;\n        switch (name) {\n          case \"#text\":\n            continue;\n          case \"dc:creator\":\n          case \"dc:subject\":\n            this._parseArray(entry);\n            continue;\n        }\n        this._metadataMap.set(name, entry.textContent.trim());\n      }\n    }\n  }\n\n  get serializable() {\n    return {\n      parsedData: this._metadataMap,\n      rawData: this._data,\n    };\n  }\n}\n\nexport { MetadataParser };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Name } from \"./primitives.js\";\nimport { stringToBytes } from \"../shared/util.js\";\n\n// Size, in bytes, of the canonical 44-byte WAV header (RIFF + fmt + data\n// chunk headers) that precedes the sample data.\nconst WAV_HEADER_SIZE = 44;\n\n/**\n * Helpers for PDF sound objects (ISO 32000-1, 12.5.6.16).\n *\n * Sound streams contain samples described by /R, /C, /B, /E, and optional /CO.\n * We wrap supported uncompressed PCM (Raw/Signed, 8/16-bit, mono/stereo) in WAV\n * for playback.\n *\n * @import { BaseStream } from \"./base_stream.js\";\n * @import { Dict } from \"./primitives.js\";\n */\n\n/**\n * Return a supported uncompressed sample format.\n *\n * @param {Dict} [dict] The sound object's stream dictionary.\n * @returns {{\n *   channels: number,\n *   sampleRate: number,\n *   bitsPerSample: number,\n *   encoding: string,\n * } | null}\n */\nfunction getSoundFormat(dict) {\n  // `/CO` compression is beyond PDF stream filters and isn't decoded here.\n  if (!dict || dict.has(\"CO\")) {\n    return null;\n  }\n  const sampleRate = dict.get(\"R\");\n  if (!Number.isInteger(sampleRate) || sampleRate <= 0) {\n    return null;\n  }\n  const channels = dict.get(\"C\") ?? 1;\n  if (!Number.isInteger(channels) || channels < 1 || channels > 2) {\n    return null;\n  }\n  const bitsPerSample = dict.get(\"B\") ?? 8;\n  if (bitsPerSample !== 8 && bitsPerSample !== 16) {\n    return null;\n  }\n  // `/E` is optional and defaults to Raw; a present-but-malformed value (one\n  // that isn't a name) is rejected rather than silently treated as Raw.\n  const e = dict.get(\"E\");\n  let encoding = \"Raw\";\n  if (e !== undefined) {\n    encoding = e instanceof Name ? e.name : null;\n  }\n  if (encoding !== \"Raw\" && encoding !== \"Signed\") {\n    return null;\n  }\n  return { channels, sampleRate, bitsPerSample, encoding };\n}\n\n/**\n * Build a WAV file from supported PDF sound samples.\n *\n * PDF 16-bit samples are big-endian; WAV uses little-endian, unsigned 8-bit\n * samples, and signed 16-bit samples. The data chunk is trimmed to a whole\n * number of frames (a multiple of the block alignment); a stream with no\n * complete frame produces no WAV.\n *\n * @param {BaseStream} stream The sound object stream.\n * @param {Uint8Array} samples Raw sample bytes from the stream.\n * @returns {Uint8Array | null}\n */\nfunction soundStreamToWav(stream, samples) {\n  const format = getSoundFormat(stream.dict);\n  if (!format) {\n    return null;\n  }\n  const { channels, sampleRate, bitsPerSample, encoding } = format;\n  const blockAlign = channels * (bitsPerSample >> 3);\n  // Keep only whole frames, dropping a trailing partial frame; bail out when\n  // there isn't a single complete frame to play.\n  const dataLength = samples.length - (samples.length % blockAlign);\n  if (dataLength === 0) {\n    return null;\n  }\n\n  const wav = new Uint8Array(WAV_HEADER_SIZE + dataLength);\n  const view = new DataView(wav.buffer);\n  wav.set(stringToBytes(\"RIFF\"), 0);\n  // File size minus the first 8 bytes (the \"RIFF\" tag and this field).\n  view.setUint32(4, WAV_HEADER_SIZE - 8 + dataLength, true);\n  wav.set(stringToBytes(\"WAVE\"), 8);\n  wav.set(stringToBytes(\"fmt \"), 12);\n  view.setUint32(16, 16, true); // PCM fmt-chunk size.\n  view.setUint16(20, 1 /* = WAVE_FORMAT_PCM */, true);\n  view.setUint16(22, channels, true);\n  view.setUint32(24, sampleRate, true);\n  view.setUint32(28, sampleRate * blockAlign, true); // Byte rate.\n  view.setUint16(32, blockAlign, true);\n  view.setUint16(34, bitsPerSample, true);\n  wav.set(stringToBytes(\"data\"), 36);\n  view.setUint32(40, dataLength, true);\n\n  // Transcode the samples straight into the WAV data region (right after the\n  // header) so we never allocate or copy a separate sample buffer.\n  if (bitsPerSample === 16) {\n    const signed = encoding === \"Signed\";\n    for (let i = 0; i < dataLength; i += 2) {\n      let value = (samples[i] << 8) | samples[i + 1];\n      if (signed) {\n        if (value >= 0x8000) {\n          value -= 0x10000;\n        }\n      } else {\n        value -= 0x8000;\n      }\n      view.setInt16(WAV_HEADER_SIZE + i, value, /* littleEndian = */ true);\n    }\n  } else if (encoding === \"Signed\") {\n    for (let i = 0; i < dataLength; i++) {\n      wav[WAV_HEADER_SIZE + i] = (samples[i] + 128) & 0xff;\n    }\n  } else {\n    wav.set(samples.subarray(0, dataLength), WAV_HEADER_SIZE);\n  }\n\n  return wav;\n}\n\nexport { getSoundFormat, soundStreamToWav };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationPrefix,\n  makeArr,\n  stringToUTF8String,\n  warn,\n} from \"../shared/util.js\";\nimport { Dict, isDict, isName, Name, Ref, RefSetCache } from \"./primitives.js\";\nimport { lookupNormalRect, MissingDataException } from \"./core_utils.js\";\nimport { stringToAsciiOrUTF16BE, stringToPDFString } from \"./string_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { FileSpec } from \"./file_spec.js\";\nimport { NumberTree } from \"./name_number_tree.js\";\n\nconst MAX_DEPTH = 40;\n\nconst StructElementType = {\n  PAGE_CONTENT: 1,\n  STREAM_CONTENT: 2,\n  OBJECT: 3,\n  ANNOTATION: 4,\n  ELEMENT: 5,\n};\n\nclass StructTreeRoot {\n  kidRefToPosition = undefined;\n\n  parentTree = null;\n\n  roleMap = new Map();\n\n  structParentIds = null;\n\n  constructor(xref, rootDict, rootRef) {\n    this.xref = xref;\n    this.dict = rootDict;\n    this.ref = rootRef instanceof Ref ? rootRef : null;\n\n    const roleMap = rootDict.get(\"RoleMap\");\n    if (roleMap instanceof Dict) {\n      for (const [key, value] of roleMap) {\n        if (value instanceof Name) {\n          this.roleMap.set(key, value.name);\n        }\n      }\n    }\n    const parentTree = rootDict.getRaw(\"ParentTree\");\n    if (parentTree) {\n      this.parentTree = new NumberTree(parentTree, xref);\n    }\n  }\n\n  getKidPosition(kidRef) {\n    if (this.kidRefToPosition === undefined) {\n      const obj = this.dict.get(\"K\");\n      if (Array.isArray(obj)) {\n        const map = (this.kidRefToPosition = new Map());\n        for (let i = 0, ii = obj.length; i < ii; i++) {\n          const ref = obj[i];\n          if (ref) {\n            map.set(ref.toString(), i);\n          }\n        }\n      } else if (obj instanceof Dict) {\n        this.kidRefToPosition = new Map([[obj.objId, 0]]);\n      } else if (!obj) {\n        this.kidRefToPosition = new Map();\n      } else {\n        this.kidRefToPosition = null;\n      }\n    }\n    return this.kidRefToPosition\n      ? (this.kidRefToPosition.get(kidRef) ?? NaN)\n      : -1;\n  }\n\n  #addIdToPage(pageRef, id, type) {\n    if (!(pageRef instanceof Ref) || id < 0) {\n      return;\n    }\n    this.structParentIds ||= new RefSetCache();\n    this.structParentIds.getOrPutComputed(pageRef, makeArr).push([id, type]);\n  }\n\n  addAnnotationIdToPage(pageRef, id) {\n    this.#addIdToPage(pageRef, id, StructElementType.ANNOTATION);\n  }\n\n  static async canCreateStructureTree({\n    catalogRef,\n    pdfManager,\n    newAnnotationsByPage,\n  }) {\n    if (!(catalogRef instanceof Ref)) {\n      warn(\"Cannot save the struct tree: no catalog reference.\");\n      return false;\n    }\n\n    let nextKey = 0;\n    let hasNothingToUpdate = true;\n\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const { ref: pageRef } = await pdfManager.getPage(pageIndex);\n      if (!(pageRef instanceof Ref)) {\n        warn(`Cannot save the struct tree: page ${pageIndex} has no ref.`);\n        hasNothingToUpdate = true;\n        break;\n      }\n      for (const element of elements) {\n        if (element.accessibilityData?.type) {\n          // Each tag must have a structure type.\n          element.parentTreeId = nextKey++;\n          hasNothingToUpdate = false;\n        }\n      }\n    }\n\n    if (hasNothingToUpdate) {\n      for (const elements of newAnnotationsByPage.values()) {\n        for (const element of elements) {\n          delete element.parentTreeId;\n        }\n      }\n      return false;\n    }\n\n    return true;\n  }\n\n  static async createStructureTree({\n    newAnnotationsByPage,\n    xref,\n    catalogRef,\n    pdfManager,\n    changes,\n  }) {\n    const root = await pdfManager.ensureCatalog(\"cloneDict\");\n    const cache = new RefSetCache();\n    cache.put(catalogRef, root);\n\n    const structTreeRootRef = xref.getNewTemporaryRef();\n    root.set(\"StructTreeRoot\", structTreeRootRef);\n\n    const structTreeRoot = new Dict(xref);\n    structTreeRoot.set(\"Type\", Name.get(\"StructTreeRoot\"));\n    const parentTreeRef = xref.getNewTemporaryRef();\n    structTreeRoot.set(\"ParentTree\", parentTreeRef);\n    const kids = [];\n    structTreeRoot.set(\"K\", kids);\n    cache.put(structTreeRootRef, structTreeRoot);\n\n    const parentTree = new Dict(xref);\n    const nums = [];\n    parentTree.set(\"Nums\", nums);\n\n    const nextKey = await this.#writeKids({\n      newAnnotationsByPage,\n      structTreeRootRef,\n      structTreeRoot: null,\n      kids,\n      nums,\n      xref,\n      pdfManager,\n      changes,\n      cache,\n    });\n    structTreeRoot.set(\"ParentTreeNextKey\", nextKey);\n\n    cache.put(parentTreeRef, parentTree);\n\n    for (const [ref, obj] of cache.items()) {\n      changes.put(ref, {\n        data: obj,\n      });\n    }\n  }\n\n  async canUpdateStructTree({ pdfManager, newAnnotationsByPage }) {\n    if (!this.ref) {\n      warn(\"Cannot update the struct tree: no root reference.\");\n      return false;\n    }\n\n    let nextKey = this.dict.get(\"ParentTreeNextKey\");\n    if (!Number.isInteger(nextKey) || nextKey < 0) {\n      warn(\"Cannot update the struct tree: invalid next key.\");\n      return false;\n    }\n\n    const parentTree = this.dict.get(\"ParentTree\");\n    if (!(parentTree instanceof Dict)) {\n      warn(\"Cannot update the struct tree: ParentTree isn't a dict.\");\n      return false;\n    }\n    const nums = parentTree.get(\"Nums\");\n    if (!Array.isArray(nums)) {\n      warn(\"Cannot update the struct tree: nums isn't an array.\");\n      return false;\n    }\n    const numberTree = new NumberTree(parentTree, this.xref);\n\n    for (const pageIndex of newAnnotationsByPage.keys()) {\n      const { pageDict } = await pdfManager.getPage(pageIndex);\n      if (!pageDict.has(\"StructParents\")) {\n        // StructParents is required when the content stream has some tagged\n        // contents but a page can just have tagged annotations.\n        continue;\n      }\n      const id = pageDict.get(\"StructParents\");\n      if (!Number.isInteger(id) || !Array.isArray(numberTree.get(id))) {\n        warn(`Cannot save the struct tree: page ${pageIndex} has a wrong id.`);\n        return false;\n      }\n    }\n\n    let hasNothingToUpdate = true;\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const { pageDict } = await pdfManager.getPage(pageIndex);\n      StructTreeRoot.#collectParents({\n        elements,\n        xref: this.xref,\n        pageDict,\n        numberTree,\n      });\n\n      for (const element of elements) {\n        if (element.accessibilityData?.type) {\n          // structParent can be undefined and in this case the positivity check\n          // will fail (it's why the expression isn't equivalent to a `.<.`).\n          if (!(element.accessibilityData.structParent >= 0)) {\n            // Each tag must have a structure type.\n            element.parentTreeId = nextKey++;\n          }\n          hasNothingToUpdate = false;\n        }\n      }\n    }\n\n    if (hasNothingToUpdate) {\n      for (const elements of newAnnotationsByPage.values()) {\n        for (const element of elements) {\n          delete element.parentTreeId;\n          delete element.structTreeParent;\n        }\n      }\n      return false;\n    }\n\n    return true;\n  }\n\n  async updateStructureTree({ newAnnotationsByPage, pdfManager, changes }) {\n    const { ref: structTreeRootRef, xref } = this;\n    const structTreeRoot = this.dict.clone();\n    const cache = new RefSetCache();\n    cache.put(structTreeRootRef, structTreeRoot);\n\n    let parentTreeRef = structTreeRoot.getRaw(\"ParentTree\");\n    let parentTree;\n    if (parentTreeRef instanceof Ref) {\n      parentTree = xref.fetch(parentTreeRef);\n    } else {\n      parentTree = parentTreeRef;\n      parentTreeRef = xref.getNewTemporaryRef();\n      structTreeRoot.set(\"ParentTree\", parentTreeRef);\n    }\n    parentTree = parentTree.clone();\n    cache.put(parentTreeRef, parentTree);\n\n    let nums = parentTree.getRaw(\"Nums\");\n    let numsRef = null;\n    if (nums instanceof Ref) {\n      numsRef = nums;\n      nums = xref.fetch(numsRef);\n    }\n    nums = nums.slice();\n    if (!numsRef) {\n      parentTree.set(\"Nums\", nums);\n    }\n\n    const newNextKey = await StructTreeRoot.#writeKids({\n      newAnnotationsByPage,\n      structTreeRootRef,\n      structTreeRoot: this,\n      kids: null,\n      nums,\n      xref,\n      pdfManager,\n      changes,\n      cache,\n    });\n\n    if (newNextKey === -1) {\n      // No new tags were added.\n      return;\n    }\n\n    structTreeRoot.set(\"ParentTreeNextKey\", newNextKey);\n\n    if (numsRef) {\n      cache.put(numsRef, nums);\n    }\n\n    for (const [ref, obj] of cache.items()) {\n      changes.put(ref, {\n        data: obj,\n      });\n    }\n  }\n\n  static async #writeKids({\n    newAnnotationsByPage,\n    structTreeRootRef,\n    structTreeRoot,\n    kids,\n    nums,\n    xref,\n    pdfManager,\n    changes,\n    cache,\n  }) {\n    const objr = Name.get(\"OBJR\");\n    let nextKey = -1;\n    let structTreePageObjs;\n\n    for (const [pageIndex, elements] of newAnnotationsByPage) {\n      const page = await pdfManager.getPage(pageIndex);\n      const { ref: pageRef } = page;\n      const isPageRef = pageRef instanceof Ref;\n      for (const {\n        accessibilityData,\n        ref,\n        parentTreeId,\n        structTreeParent,\n      } of elements) {\n        if (!accessibilityData?.type) {\n          continue;\n        }\n\n        // We've some accessibility data, so we need to create a new tag or\n        // update an existing one.\n        const { structParent } = accessibilityData;\n\n        if (\n          structTreeRoot &&\n          Number.isInteger(structParent) &&\n          structParent >= 0\n        ) {\n          let objs = (structTreePageObjs ||= new Map()).get(pageIndex);\n          if (objs === undefined) {\n            // We need to collect the objects for the page.\n            const structTreePage = new StructTreePage(\n              structTreeRoot,\n              page.pageDict\n            );\n            objs = structTreePage.collectObjects(pageRef);\n            structTreePageObjs.set(pageIndex, objs);\n          }\n          const objRef = objs?.get(structParent);\n          if (objRef) {\n            // We update the existing tag.\n            const tagDict = xref.fetch(objRef).clone();\n            StructTreeRoot.#writeProperties(tagDict, accessibilityData);\n            changes.put(objRef, {\n              data: tagDict,\n            });\n            continue;\n          }\n        }\n        nextKey = Math.max(nextKey, parentTreeId);\n\n        const tagRef = xref.getNewTemporaryRef();\n        const tagDict = new Dict(xref);\n\n        StructTreeRoot.#writeProperties(tagDict, accessibilityData);\n\n        await this.#updateParentTag({\n          structTreeParent,\n          tagDict,\n          newTagRef: tagRef,\n          structTreeRootRef,\n          fallbackKids: kids,\n          xref,\n          cache,\n        });\n\n        const objDict = new Dict(xref);\n        tagDict.set(\"K\", objDict);\n        objDict.set(\"Type\", objr);\n        if (isPageRef) {\n          // Pg is optional.\n          objDict.set(\"Pg\", pageRef);\n        }\n        objDict.set(\"Obj\", ref);\n\n        cache.put(tagRef, tagDict);\n        nums.push(parentTreeId, tagRef);\n      }\n    }\n    return nextKey + 1;\n  }\n\n  static #writeProperties(\n    tagDict,\n    { type, title, lang, alt, expanded, actualText }\n  ) {\n    // The structure type is required.\n    tagDict.set(\"S\", Name.get(type));\n\n    if (title) {\n      tagDict.set(\"T\", stringToAsciiOrUTF16BE(title));\n    }\n    if (lang) {\n      tagDict.set(\"Lang\", stringToAsciiOrUTF16BE(lang));\n    }\n    if (alt) {\n      tagDict.set(\"Alt\", stringToAsciiOrUTF16BE(alt));\n    }\n    if (expanded) {\n      tagDict.set(\"E\", stringToAsciiOrUTF16BE(expanded));\n    }\n    if (actualText) {\n      tagDict.set(\"ActualText\", stringToAsciiOrUTF16BE(actualText));\n    }\n  }\n\n  static #collectParents({ elements, xref, pageDict, numberTree }) {\n    const idToElements = new Map();\n    for (const element of elements) {\n      if (element.structTreeParentId) {\n        const id = parseInt(element.structTreeParentId.split(\"_mc\")[1], 10);\n        idToElements.getOrInsertComputed(id, makeArr).push(element);\n      }\n    }\n\n    const id = pageDict.get(\"StructParents\");\n    if (!Number.isInteger(id)) {\n      return;\n    }\n    // The parentArray type has already been checked by the caller.\n    const parentArray = numberTree.get(id);\n\n    const updateElement = (kid, pageKid, kidRef) => {\n      const elems = idToElements.get(kid);\n      if (elems) {\n        const parentRef = pageKid.getRaw(\"P\");\n        const parentDict = xref.fetchIfRef(parentRef);\n        if (parentRef instanceof Ref && parentDict instanceof Dict) {\n          // It should always the case, but we check just in case.\n          const params = { ref: kidRef, dict: pageKid };\n          for (const element of elems) {\n            element.structTreeParent = params;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n    for (const kidRef of parentArray) {\n      if (!(kidRef instanceof Ref)) {\n        continue;\n      }\n      const pageKid = xref.fetch(kidRef);\n      const k = pageKid.get(\"K\");\n      if (Number.isInteger(k)) {\n        updateElement(k, pageKid, kidRef);\n        continue;\n      }\n\n      if (!Array.isArray(k)) {\n        continue;\n      }\n      for (let kid of k) {\n        kid = xref.fetchIfRef(kid);\n        if (Number.isInteger(kid) && updateElement(kid, pageKid, kidRef)) {\n          break;\n        }\n        if (!(kid instanceof Dict)) {\n          continue;\n        }\n        if (!isName(kid.get(\"Type\"), \"MCR\")) {\n          break;\n        }\n        const mcid = kid.get(\"MCID\");\n        if (Number.isInteger(mcid) && updateElement(mcid, pageKid, kidRef)) {\n          break;\n        }\n      }\n    }\n  }\n\n  static async #updateParentTag({\n    structTreeParent,\n    tagDict,\n    newTagRef,\n    structTreeRootRef,\n    fallbackKids,\n    xref,\n    cache,\n  }) {\n    let ref = null;\n    let parentRef;\n    if (structTreeParent) {\n      ({ ref } = structTreeParent);\n\n      // We get the parent of the tag.\n      parentRef = structTreeParent.dict.getRaw(\"P\") || structTreeRootRef;\n    } else {\n      parentRef = structTreeRootRef;\n    }\n\n    tagDict.set(\"P\", parentRef);\n\n    // We get the kids in order to insert a new tag at the right position.\n    const parentDict = xref.fetchIfRef(parentRef);\n    if (!parentDict) {\n      fallbackKids.push(newTagRef);\n      return;\n    }\n\n    const cachedParentDict = cache.getOrPutComputed(parentRef, () =>\n      parentDict.clone()\n    );\n    const parentKidsRaw = cachedParentDict.getRaw(\"K\");\n    let cachedParentKids =\n      parentKidsRaw instanceof Ref ? cache.get(parentKidsRaw) : null;\n    if (!cachedParentKids) {\n      cachedParentKids = xref.fetchIfRef(parentKidsRaw);\n      cachedParentKids = Array.isArray(cachedParentKids)\n        ? cachedParentKids.slice()\n        : [parentKidsRaw];\n      const parentKidsRef = xref.getNewTemporaryRef();\n      cachedParentDict.set(\"K\", parentKidsRef);\n      cache.put(parentKidsRef, cachedParentKids);\n    }\n\n    const index = cachedParentKids.indexOf(ref);\n    cachedParentKids.splice(\n      index >= 0 ? index + 1 : cachedParentKids.length,\n      0,\n      newTagRef\n    );\n  }\n}\n\n/**\n * Instead of loading the whole tree we load just the page's relevant structure\n * elements, which means we need a wrapper structure to represent the tree.\n */\nclass StructElementNode {\n  constructor(tree, dict) {\n    this.tree = tree;\n    this.xref = tree.xref;\n    this.dict = dict;\n    this.kids = [];\n    this.parseKids();\n  }\n\n  get role() {\n    const nameObj = this.dict.get(\"S\");\n    const name = nameObj instanceof Name ? nameObj.name : \"\";\n    const { root } = this.tree;\n    return root.roleMap.get(name) ?? name;\n  }\n\n  get mathML() {\n    let AFs = this.dict.get(\"AF\") || [];\n    if (!Array.isArray(AFs)) {\n      AFs = [AFs];\n    }\n    for (let af of AFs) {\n      af = this.xref.fetchIfRef(af);\n      if (\n        !isDict(af, \"Filespec\") ||\n        !isName(af.get(\"AFRelationship\"), \"Supplement\")\n      ) {\n        continue;\n      }\n      const fileStream = FileSpec.pickPlatformItem(af.get(\"EF\"));\n      if (\n        !(fileStream instanceof BaseStream) ||\n        !isDict(fileStream.dict, \"EmbeddedFile\") ||\n        !isName(fileStream.dict.get(\"Subtype\"), \"application/mathml+xml\")\n      ) {\n        continue;\n      }\n      // The default encoding for xml files is UTF-8.\n      return stringToUTF8String(fileStream.getString());\n    }\n    const A = this.dict.get(\"A\");\n    if (A instanceof Dict) {\n      // This stuff isn't in the spec, but MS Office seems to use it.\n      const O = A.get(\"O\");\n      if (isName(O, \"MSFT_Office\")) {\n        const mathml = A.get(\"MSFT_MathML\");\n        return mathml ? stringToPDFString(mathml) : null;\n      }\n    }\n    return null;\n  }\n\n  parseKids() {\n    let pageObjId = null;\n    const objRef = this.dict.getRaw(\"Pg\");\n    if (objRef instanceof Ref) {\n      pageObjId = objRef.toString();\n    }\n    const kids = this.dict.get(\"K\");\n    if (Array.isArray(kids)) {\n      for (const kid of kids) {\n        const element = this.parseKid(pageObjId, this.xref.fetchIfRef(kid));\n        if (element) {\n          this.kids.push(element);\n        }\n      }\n    } else {\n      const element = this.parseKid(pageObjId, kids);\n      if (element) {\n        this.kids.push(element);\n      }\n    }\n  }\n\n  parseKid(pageObjId, kid) {\n    // A direct link to content, the integer is an mcid.\n    if (Number.isInteger(kid)) {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n\n      return new StructElement({\n        type: StructElementType.PAGE_CONTENT,\n        mcid: kid,\n        pageObjId,\n      });\n    }\n\n    if (!(kid instanceof Dict)) {\n      return null;\n    }\n\n    const pageRef = kid.getRaw(\"Pg\");\n    if (pageRef instanceof Ref) {\n      pageObjId = pageRef.toString();\n    }\n\n    const type = kid.get(\"Type\") instanceof Name ? kid.get(\"Type\").name : null;\n    if (type === \"MCR\") {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n      const kidRef = kid.getRaw(\"Stm\");\n      return new StructElement({\n        type: StructElementType.STREAM_CONTENT,\n        refObjId: kidRef instanceof Ref ? kidRef.toString() : null,\n        pageObjId,\n        mcid: kid.get(\"MCID\"),\n      });\n    }\n\n    if (type === \"OBJR\") {\n      if (this.tree.pageDict.objId !== pageObjId) {\n        return null;\n      }\n      const kidRef = kid.getRaw(\"Obj\");\n      return new StructElement({\n        type: StructElementType.OBJECT,\n        refObjId: kidRef instanceof Ref ? kidRef.toString() : null,\n        pageObjId,\n      });\n    }\n\n    return new StructElement({\n      type: StructElementType.ELEMENT,\n      dict: kid,\n    });\n  }\n}\n\nclass StructElement {\n  constructor({\n    type,\n    dict = null,\n    mcid = null,\n    pageObjId = null,\n    refObjId = null,\n  }) {\n    this.type = type;\n    this.dict = dict;\n    this.mcid = mcid;\n    this.pageObjId = pageObjId;\n    this.refObjId = refObjId;\n    this.parentNode = null;\n  }\n}\n\nclass StructTreePage {\n  constructor(structTreeRoot, pageDict) {\n    this.root = structTreeRoot;\n    this.xref = structTreeRoot?.xref ?? null;\n    this.rootDict = structTreeRoot?.dict ?? null;\n    this.pageDict = pageDict;\n    this.nodes = [];\n  }\n\n  /**\n   * Collect all the objects (i.e. tag) that are part of the page and return a\n   * map of the structure element id to the object reference.\n   * @param {Ref} pageRef\n   * @returns {Map<number, Ref>}\n   */\n  collectObjects(pageRef) {\n    if (!this.root || !this.rootDict || !(pageRef instanceof Ref)) {\n      return null;\n    }\n\n    const parentTree = this.rootDict.get(\"ParentTree\");\n    if (!parentTree) {\n      return null;\n    }\n    const ids = this.root.structParentIds?.get(pageRef);\n    if (!ids) {\n      return null;\n    }\n\n    const map = new Map();\n    const numberTree = new NumberTree(parentTree, this.xref);\n\n    for (const [elemId] of ids) {\n      const obj = numberTree.getRaw(elemId);\n      if (obj instanceof Ref) {\n        map.set(elemId, obj);\n      }\n    }\n    return map;\n  }\n\n  parse(pageRef) {\n    if (!this.root || !this.rootDict || !(pageRef instanceof Ref)) {\n      return;\n    }\n\n    const { parentTree } = this.root;\n    if (!parentTree) {\n      return;\n    }\n    const id = this.pageDict.get(\"StructParents\");\n    const ids = this.root.structParentIds?.get(pageRef);\n    if (!Number.isInteger(id) && !ids) {\n      return;\n    }\n\n    const map = new Map();\n\n    if (Number.isInteger(id)) {\n      const parentArray = parentTree.get(id);\n      if (Array.isArray(parentArray)) {\n        for (const ref of parentArray) {\n          if (ref instanceof Ref) {\n            this.addNode(this.xref.fetch(ref), map);\n          }\n        }\n      }\n    }\n\n    if (!ids) {\n      return;\n    }\n    for (const [elemId, type] of ids) {\n      const obj = parentTree.get(elemId);\n      if (obj) {\n        const elem = this.addNode(this.xref.fetchIfRef(obj), map);\n        if (\n          elem?.kids?.length === 1 &&\n          elem.kids[0].type === StructElementType.OBJECT\n        ) {\n          // The node in the struct tree is wrapping an object (annotation\n          // or xobject), so we need to update the type of the node to match\n          // the type of the object.\n          elem.kids[0].type = type;\n        }\n      }\n    }\n  }\n\n  addNode(dict, map, level = 0) {\n    if (level > MAX_DEPTH) {\n      warn(\"StructTree MAX_DEPTH reached.\");\n      return null;\n    }\n    if (!(dict instanceof Dict)) {\n      return null;\n    }\n\n    if (map.has(dict)) {\n      return map.get(dict);\n    }\n\n    const element = new StructElementNode(this, dict);\n    map.set(dict, element);\n    switch (element.role) {\n      case \"L\":\n      case \"LBody\":\n      case \"LI\":\n      case \"Table\":\n      case \"THead\":\n      case \"TBody\":\n      case \"TFoot\":\n      case \"TR\": {\n        // Always collect all child nodes of lists and tables, even empty ones\n        for (const kid of element.kids) {\n          if (kid.type === StructElementType.ELEMENT) {\n            this.addNode(kid.dict, map, level - 1);\n          }\n        }\n      }\n    }\n\n    const parent = dict.get(\"P\");\n\n    if (\n      !(parent instanceof Dict) ||\n      isName(parent.get(\"Type\"), \"StructTreeRoot\")\n    ) {\n      if (!this.addTopLevelNode(dict, element)) {\n        map.delete(dict);\n      }\n      return element;\n    }\n\n    const parentNode = this.addNode(parent, map, level + 1);\n    if (!parentNode) {\n      return element;\n    }\n    let save = false;\n    for (const kid of parentNode.kids) {\n      if (kid.type === StructElementType.ELEMENT && kid.dict === dict) {\n        kid.parentNode = element;\n        save = true;\n      }\n    }\n    if (!save) {\n      map.delete(dict);\n    }\n    return element;\n  }\n\n  addTopLevelNode(dict, element) {\n    const index = this.root.getKidPosition(dict.objId);\n    if (isNaN(index)) {\n      return false;\n    }\n    if (index !== -1) {\n      this.nodes[index] = element;\n    }\n    return true;\n  }\n\n  /**\n   * Convert the tree structure into a simplified object literal that can\n   * be sent to the main thread.\n   * @returns {Object}\n   */\n  get serializable() {\n    function nodeToSerializable(node, parent, level = 0) {\n      if (level > MAX_DEPTH) {\n        warn(\"StructTree too deep to be fully serialized.\");\n        return;\n      }\n      const obj = Object.create(null);\n      obj.role = node.role;\n      obj.children = [];\n      parent.children.push(obj);\n      let alt = node.dict.get(\"Alt\");\n      if (typeof alt !== \"string\") {\n        alt = node.dict.get(\"ActualText\");\n      }\n      if (typeof alt === \"string\") {\n        obj.alt = stringToPDFString(alt);\n      }\n      if (obj.role === \"Formula\") {\n        try {\n          const { mathML } = node;\n          if (mathML) {\n            obj.mathML = mathML;\n          }\n        } catch (ex) {\n          if (ex instanceof MissingDataException) {\n            throw ex;\n          }\n          warn(`Ignoring mathML: \"${ex}\".`);\n        }\n      }\n\n      const a = node.dict.get(\"A\");\n      if (a instanceof Dict) {\n        const bbox = lookupNormalRect(a.getArray(\"BBox\"), null);\n        if (bbox) {\n          obj.bbox = bbox;\n        } else {\n          const width = a.get(\"Width\");\n          const height = a.get(\"Height\");\n          if (\n            typeof width === \"number\" &&\n            width > 0 &&\n            typeof height === \"number\" &&\n            height > 0\n          ) {\n            obj.bbox = [0, 0, width, height];\n          }\n        }\n        // TODO: If the bbox is not available, we should try to get it from\n        // the content stream.\n        // For example when rendering on the canvas the commands between the\n        // beginning and the end of the marked-content sequence, we can\n        // compute the overall bbox.\n      }\n\n      const lang = node.dict.get(\"Lang\");\n      if (typeof lang === \"string\") {\n        obj.lang = stringToPDFString(lang);\n      }\n\n      for (const kid of node.kids) {\n        const kidElement =\n          kid.type === StructElementType.ELEMENT ? kid.parentNode : null;\n        if (kidElement) {\n          nodeToSerializable(kidElement, obj, level + 1);\n          continue;\n        } else if (\n          kid.type === StructElementType.PAGE_CONTENT ||\n          kid.type === StructElementType.STREAM_CONTENT\n        ) {\n          obj.children.push({\n            type: \"content\",\n            id: `p${kid.pageObjId}_mc${kid.mcid}`,\n          });\n        } else if (kid.type === StructElementType.OBJECT) {\n          obj.children.push({\n            type: \"object\",\n            id: kid.refObjId,\n          });\n        } else if (kid.type === StructElementType.ANNOTATION) {\n          obj.children.push({\n            type: \"annotation\",\n            id: `${AnnotationPrefix}${kid.refObjId}`,\n          });\n        }\n      }\n    }\n\n    const root = Object.create(null);\n    root.children = [];\n    root.role = \"Root\";\n    for (const child of this.nodes) {\n      if (!child) {\n        continue;\n      }\n      nodeToSerializable(child, root);\n    }\n    return root;\n  }\n}\n\nexport { StructTreePage, StructTreeRoot };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  _isValidExplicitDest,\n  createValidAbsoluteUrl,\n  DocumentActionEventType,\n  FormatError,\n  info,\n  PermissionFlag,\n  shadow,\n  stringToUTF8String,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  collectActions,\n  isNumberArray,\n  lookupRect,\n  MissingDataException,\n  PDF_VERSION_REGEXP,\n  recoverJsURL,\n  toRomanNumerals,\n  XRefEntryException,\n} from \"./core_utils.js\";\nimport {\n  Dict,\n  isDict,\n  isName,\n  isRefsEqual,\n  Name,\n  Ref,\n  RefSet,\n  RefSetCache,\n} from \"./primitives.js\";\nimport { GlobalColorSpaceCache, GlobalImageCache } from \"./image_utils.js\";\nimport { NameTree, NumberTree } from \"./name_number_tree.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { clearGlobalCaches } from \"./cleanup_helper.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { FileSpec } from \"./file_spec.js\";\nimport { MetadataParser } from \"./metadata_parser.js\";\nimport { soundStreamToWav } from \"./sound.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\nimport { StructTreeRoot } from \"./struct_tree.js\";\n\n/**\n * @import {XRef} from \"./xref.js\";\n */\n\n/**\n * @callback GetAttachmentContent\n *   Callback used to lazily fetch attachment content.\n * @param {string} id\n *   Unique attachment identifier.\n * @returns {CatalogAttachmentContent}\n *   Result.\n */\n\n/**\n * @typedef {Uint8Array | null} CatalogAttachmentContent\n *   Attachment value.\n */\n\n/**\n * @typedef CatalogAttachment\n *   Attachment metadata.\n * @property {CatalogAttachmentContent | undefined} [content]\n *   Value, when already available.\n * @property {string} description\n *   Description.\n * @property {string} filename\n *   Filename (just the basename) for display.\n * @property {string} rawFilename\n *   File path.\n */\n\nconst isRef = v => v instanceof Ref;\n\nconst isValidExplicitDest = _isValidExplicitDest.bind(\n  null,\n  /* validRef = */ isRef,\n  /* validName = */ isName\n);\n\nfunction fetchDest(dest) {\n  if (dest instanceof Dict) {\n    dest = dest.get(\"D\");\n  }\n  return isValidExplicitDest(dest) ? dest : null;\n}\n\nfunction fetchRemoteDest(action) {\n  let dest = action.get(\"D\");\n  if (dest) {\n    if (dest instanceof Name) {\n      dest = dest.name;\n    }\n    if (typeof dest === \"string\") {\n      return stringToPDFString(dest, /* keepEscapeSequence = */ true);\n    } else if (isValidExplicitDest(dest)) {\n      return JSON.stringify(dest);\n    }\n  }\n  return null;\n}\n\nclass Catalog {\n  #actualNumPages = null;\n\n  #annotationAttachmentIdByRef = new RefSetCache();\n\n  #annotationAttachmentRefById = new Map();\n\n  #soundAttachmentIds = new Set();\n\n  #catDict = null;\n\n  builtInCMapCache = new Map();\n\n  fontCache = new RefSetCache();\n\n  globalColorSpaceCache = new GlobalColorSpaceCache();\n\n  globalImageCache = new GlobalImageCache();\n\n  nonBlendModesSet = new RefSet();\n\n  pageDictCache = new RefSetCache();\n\n  pageIndexCache = new RefSetCache();\n\n  pageKidsCountCache = new RefSetCache();\n\n  standardFontDataCache = new Map();\n\n  systemFontCache = new Map();\n\n  constructor(pdfManager, xref) {\n    this.pdfManager = pdfManager;\n    this.xref = xref;\n\n    this.#catDict = xref.getCatalogObj();\n    if (!(this.#catDict instanceof Dict)) {\n      throw new FormatError(\"Catalog object is not a dictionary.\");\n    }\n    // Given that `XRef.parse` will both fetch *and* validate the /Pages-entry,\n    // the following call must always succeed here:\n    this.toplevelPagesDict; // eslint-disable-line no-unused-expressions\n  }\n\n  cloneDict() {\n    return this.#catDict.clone();\n  }\n\n  /**\n   * Create an id for an attachment from a FileAttachment annotation.\n   *\n   * The id is registered here rather than parsed from a public string prefix in\n   * `attachmentContent`, since catalog attachment names can be arbitrary PDF\n   * strings and may otherwise collide with annotation-local ids.\n   *\n   * @param {Ref} ref\n   *   File-spec or embedded-file stream reference.\n   * @param {boolean} [isSound]\n   *   When set, the referenced stream holds raw PDF sound samples that\n   *   `attachmentContent` wraps in a WAV container on fetch.\n   * @returns {string}\n   *   Attachment id.\n   */\n  getAttachmentIdForAnnotation(ref, isSound = false) {\n    let id = this.#annotationAttachmentIdByRef.get(ref);\n    if (!id) {\n      const baseId = `attachmentRef:${ref.toString()}`;\n      id = baseId;\n\n      let i = 1;\n      while (\n        this.#annotationAttachmentRefById.has(id) ||\n        this.attachments?.has(id)\n      ) {\n        id = `${baseId}-${i++}`;\n      }\n\n      this.#annotationAttachmentIdByRef.put(ref, id);\n      this.#annotationAttachmentRefById.set(id, ref);\n    }\n    if (isSound) {\n      this.#soundAttachmentIds.add(id);\n    }\n    return id;\n  }\n\n  get version() {\n    const version = this.#catDict.get(\"Version\");\n    if (version instanceof Name) {\n      if (PDF_VERSION_REGEXP.test(version.name)) {\n        return shadow(this, \"version\", version.name);\n      }\n      warn(`Invalid PDF catalog version: ${version.name}`);\n    }\n    return shadow(this, \"version\", null);\n  }\n\n  get lang() {\n    const lang = this.#catDict.get(\"Lang\");\n    return shadow(\n      this,\n      \"lang\",\n      lang && typeof lang === \"string\" ? stringToPDFString(lang) : null\n    );\n  }\n\n  /**\n   * @type {boolean} `true` for pure XFA documents,\n   *   `false` for XFA Foreground documents.\n   */\n  get needsRendering() {\n    const needsRendering = this.#catDict.get(\"NeedsRendering\");\n    return shadow(\n      this,\n      \"needsRendering\",\n      typeof needsRendering === \"boolean\" ? needsRendering : false\n    );\n  }\n\n  get collection() {\n    let collection = null;\n    try {\n      const obj = this.#catDict.get(\"Collection\");\n      if (obj instanceof Dict && obj.size > 0) {\n        collection = obj;\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(\"Cannot fetch Collection entry; assuming no collection is present.\");\n    }\n    return shadow(this, \"collection\", collection);\n  }\n\n  get acroForm() {\n    let acroForm = null;\n    try {\n      const obj = this.#catDict.get(\"AcroForm\");\n      if (obj instanceof Dict && obj.size > 0) {\n        acroForm = obj;\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(\"Cannot fetch AcroForm entry; assuming no forms are present.\");\n    }\n    return shadow(this, \"acroForm\", acroForm);\n  }\n\n  get acroFormRef() {\n    const value = this.#catDict.getRaw(\"AcroForm\");\n    return shadow(this, \"acroFormRef\", value instanceof Ref ? value : null);\n  }\n\n  get metadata() {\n    const streamRef = this.#catDict.getRaw(\"Metadata\");\n    if (!(streamRef instanceof Ref)) {\n      return shadow(this, \"metadata\", null);\n    }\n\n    let metadata = null;\n    try {\n      const stream = this.xref.fetch(\n        streamRef,\n        /* suppressEncryption = */ !this.xref.encrypt?.encryptMetadata\n      );\n\n      if (\n        stream instanceof BaseStream &&\n        isDict(stream.dict, \"Metadata\") &&\n        isName(stream.dict.get(\"Subtype\"), \"XML\")\n      ) {\n        // XXX: This should examine the charset the XML document defines,\n        // however since there are currently no real means to decode arbitrary\n        // charsets, let's just hope that the author of the PDF was reasonable\n        // enough to stick with the XML default charset, which is UTF-8.\n        const data = stringToUTF8String(stream.getString());\n        if (data) {\n          metadata = new MetadataParser(data).serializable;\n        }\n      }\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      info(`Skipping invalid Metadata: \"${ex}\".`);\n    }\n    return shadow(this, \"metadata\", metadata);\n  }\n\n  get markInfo() {\n    let markInfo = null;\n    try {\n      markInfo = this.#readMarkInfo();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read mark info.\");\n    }\n    return shadow(this, \"markInfo\", markInfo);\n  }\n\n  #readMarkInfo() {\n    const obj = this.#catDict.get(\"MarkInfo\");\n    if (!(obj instanceof Dict)) {\n      return null;\n    }\n\n    const markInfo = {\n      Marked: false,\n      UserProperties: false,\n      Suspects: false,\n    };\n    for (const key in markInfo) {\n      const value = obj.get(key);\n      if (typeof value === \"boolean\") {\n        markInfo[key] = value;\n      }\n    }\n\n    return markInfo;\n  }\n\n  get hasStructTree() {\n    return this.#catDict.has(\"StructTreeRoot\");\n  }\n\n  get structTreeRoot() {\n    let structTree = null;\n    try {\n      structTree = this.#readStructTreeRoot();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable read to structTreeRoot info.\");\n    }\n    return shadow(this, \"structTreeRoot\", structTree);\n  }\n\n  #readStructTreeRoot() {\n    const rawObj = this.#catDict.getRaw(\"StructTreeRoot\"),\n      obj = this.xref.fetchIfRef(rawObj);\n    return obj instanceof Dict\n      ? new StructTreeRoot(this.xref, obj, rawObj)\n      : null;\n  }\n\n  get toplevelPagesDict() {\n    const pagesObj = this.#catDict.get(\"Pages\");\n    if (!(pagesObj instanceof Dict)) {\n      throw new FormatError(\"Invalid top-level pages dictionary.\");\n    }\n    return shadow(this, \"toplevelPagesDict\", pagesObj);\n  }\n\n  get documentOutline() {\n    let obj = null;\n    try {\n      obj = this.#readDocumentOutline();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read document outline.\");\n    }\n    return shadow(this, \"documentOutline\", obj);\n  }\n\n  #readDocumentOutline(options = {}) {\n    let obj = this.#catDict.get(\"Outlines\");\n    if (!(obj instanceof Dict)) {\n      return null;\n    }\n    obj = obj.getRaw(\"First\");\n    if (!(obj instanceof Ref)) {\n      return null;\n    }\n\n    const root = { items: [] };\n    const queue = [{ obj, parent: root }];\n    // To avoid recursion, keep track of the already processed items.\n    const processed = new RefSet();\n    processed.put(obj);\n    const xref = this.xref,\n      blackColor = new Uint8ClampedArray(3);\n\n    while (queue.length > 0) {\n      const i = queue.shift();\n      const outlineDict = xref.fetchIfRef(i.obj);\n      if (outlineDict === null) {\n        continue;\n      }\n      if (!outlineDict.has(\"Title\")) {\n        warn(\"Invalid outline item encountered.\");\n      }\n\n      const data = { url: null, dest: null, action: null };\n      Catalog.parseDestDictionary({\n        destDict: outlineDict,\n        resultObj: data,\n        docBaseUrl: this.baseUrl,\n        docAttachments: this.attachments,\n      });\n      const title = outlineDict.get(\"Title\");\n      const flags = outlineDict.get(\"F\") || 0;\n      const color = outlineDict.getArray(\"C\");\n      const count = outlineDict.get(\"Count\");\n      let rgbColor = blackColor;\n\n      // We only need to parse the color when it's valid, and non-default.\n      if (\n        isNumberArray(color, 3) &&\n        (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)\n      ) {\n        rgbColor = ColorSpaceUtils.rgb.getRgb(color, 0);\n      }\n\n      const outlineItem = {\n        action: data.action,\n        attachmentId: data.attachmentId,\n        attachment: data.attachment,\n        dest: data.dest,\n        url: data.url,\n        unsafeUrl: data.unsafeUrl,\n        newWindow: data.newWindow,\n        setOCGState: data.setOCGState,\n        title: typeof title === \"string\" ? stringToPDFString(title) : \"\",\n        color: rgbColor,\n        count: Number.isInteger(count) ? count : undefined,\n        bold: !!(flags & 2),\n        italic: !!(flags & 1),\n        items: [],\n      };\n\n      if (options.keepRawDict) {\n        outlineItem.rawDict = outlineDict;\n      }\n\n      i.parent.items.push(outlineItem);\n      obj = outlineDict.getRaw(\"First\");\n      if (obj instanceof Ref && !processed.has(obj)) {\n        queue.push({ obj, parent: outlineItem });\n        processed.put(obj);\n      }\n      obj = outlineDict.getRaw(\"Next\");\n      if (obj instanceof Ref && !processed.has(obj)) {\n        queue.push({ obj, parent: i.parent });\n        processed.put(obj);\n      }\n    }\n    return root.items.length > 0 ? root.items : null;\n  }\n\n  get documentOutlineForEditor() {\n    let obj = null;\n    try {\n      obj = this.#readDocumentOutline({ keepRawDict: true });\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read document outline.\");\n    }\n    return shadow(this, \"documentOutlineForEditor\", obj);\n  }\n\n  get permissions() {\n    let permissions = null;\n    try {\n      permissions = this.#readPermissions();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read permissions.\");\n    }\n    return shadow(this, \"permissions\", permissions);\n  }\n\n  #readPermissions() {\n    const encrypt = this.xref.trailer.get(\"Encrypt\");\n    if (!(encrypt instanceof Dict)) {\n      return null;\n    }\n\n    let flags = encrypt.get(\"P\");\n    if (typeof flags !== \"number\") {\n      return null;\n    }\n\n    // PDF integer objects are represented internally in signed 2's complement\n    // form. Therefore, convert the signed decimal integer to a signed 2's\n    // complement binary integer so we can use regular bitwise operations on it.\n    flags += 2 ** 32;\n\n    const permissions = [];\n    for (const key in PermissionFlag) {\n      const value = PermissionFlag[key];\n      if (flags & value) {\n        permissions.push(value);\n      }\n    }\n    return permissions;\n  }\n\n  get optionalContentConfig() {\n    let config = null;\n    try {\n      const properties = this.#catDict.get(\"OCProperties\");\n      if (!properties) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const defaultConfig = properties.get(\"D\");\n      if (!defaultConfig) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const groupsData = properties.get(\"OCGs\");\n      if (!Array.isArray(groupsData)) {\n        return shadow(this, \"optionalContentConfig\", null);\n      }\n      const groupRefCache = new RefSetCache();\n      // Ensure all the optional content groups are valid.\n      for (const groupRef of groupsData) {\n        if (!(groupRef instanceof Ref) || groupRefCache.has(groupRef)) {\n          continue;\n        }\n        groupRefCache.put(groupRef, this.#readOptionalContentGroup(groupRef));\n      }\n      config = this.#readOptionalContentConfig(defaultConfig, groupRefCache);\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Unable to read optional content config: ${ex}`);\n    }\n    return shadow(this, \"optionalContentConfig\", config);\n  }\n\n  #readOptionalContentGroup(groupRef) {\n    const group = this.xref.fetch(groupRef);\n    const obj = {\n      id: groupRef.toString(),\n      name: null,\n      intent: null,\n      usage: {\n        print: null,\n        view: null,\n      },\n      rbGroups: [],\n    };\n\n    const name = group.get(\"Name\");\n    if (typeof name === \"string\") {\n      obj.name = stringToPDFString(name);\n    }\n\n    let intent = group.getArray(\"Intent\");\n    if (!Array.isArray(intent)) {\n      intent = [intent];\n    }\n    if (intent.every(i => i instanceof Name)) {\n      obj.intent = intent.map(i => i.name);\n    }\n\n    const usage = group.get(\"Usage\");\n    if (!(usage instanceof Dict)) {\n      return obj;\n    }\n    const usageObj = obj.usage;\n\n    const print = usage.get(\"Print\");\n    if (print instanceof Dict) {\n      const printState = print.get(\"PrintState\");\n      if (printState instanceof Name) {\n        switch (printState.name) {\n          case \"ON\":\n          case \"OFF\":\n            usageObj.print = { printState: printState.name };\n        }\n      }\n    }\n\n    const view = usage.get(\"View\");\n    if (view instanceof Dict) {\n      const viewState = view.get(\"ViewState\");\n      if (viewState instanceof Name) {\n        switch (viewState.name) {\n          case \"ON\":\n          case \"OFF\":\n            usageObj.view = { viewState: viewState.name };\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  #readOptionalContentConfig(config, groupRefCache) {\n    function parseOnOff(refs) {\n      const onParsed = [];\n      if (Array.isArray(refs)) {\n        for (const value of refs) {\n          if (value instanceof Ref && groupRefCache.has(value)) {\n            onParsed.push(value.toString());\n          }\n        }\n      }\n      return onParsed;\n    }\n\n    function parseOrder(refs, nestedLevels = 0) {\n      if (!Array.isArray(refs)) {\n        return null;\n      }\n      const order = [];\n\n      for (const value of refs) {\n        if (value instanceof Ref && groupRefCache.has(value)) {\n          parsedOrderRefs.put(value); // Handle \"hidden\" groups, see below.\n\n          order.push(value.toString());\n          continue;\n        }\n        // Handle nested /Order arrays (see e.g. issue 9462 and bug 1240641).\n        const nestedOrder = parseNestedOrder(value, nestedLevels);\n        if (nestedOrder) {\n          order.push(nestedOrder);\n        }\n      }\n\n      if (nestedLevels > 0) {\n        return order;\n      }\n      const hiddenGroups = [];\n      for (const [groupRef] of groupRefCache.items()) {\n        if (parsedOrderRefs.has(groupRef)) {\n          continue;\n        }\n        hiddenGroups.push(groupRef.toString());\n      }\n      if (hiddenGroups.length) {\n        order.push({ name: null, order: hiddenGroups });\n      }\n\n      return order;\n    }\n\n    function parseNestedOrder(ref, nestedLevels) {\n      if (++nestedLevels > MAX_NESTED_LEVELS) {\n        warn(\"parseNestedOrder - reached MAX_NESTED_LEVELS.\");\n        return null;\n      }\n      const value = xref.fetchIfRef(ref);\n      if (!Array.isArray(value)) {\n        return null;\n      }\n      const nestedName = xref.fetchIfRef(value[0]);\n      if (typeof nestedName !== \"string\") {\n        return null;\n      }\n      const nestedOrder = parseOrder(value.slice(1), nestedLevels);\n      if (!nestedOrder?.length) {\n        return null;\n      }\n      return { name: stringToPDFString(nestedName), order: nestedOrder };\n    }\n\n    function parseRBGroups(rbGroups) {\n      if (!Array.isArray(rbGroups)) {\n        return;\n      }\n\n      for (const value of rbGroups) {\n        const rbGroup = xref.fetchIfRef(value);\n        if (!Array.isArray(rbGroup) || !rbGroup.length) {\n          continue;\n        }\n        const parsedRbGroup = new Set();\n\n        for (const ref of rbGroup) {\n          if (\n            ref instanceof Ref &&\n            groupRefCache.has(ref) &&\n            !parsedRbGroup.has(ref.toString())\n          ) {\n            parsedRbGroup.add(ref.toString());\n            // Keep a record of which RB groups the current OCG belongs to.\n            groupRefCache.get(ref).rbGroups.push(parsedRbGroup);\n          }\n        }\n      }\n    }\n\n    const xref = this.xref,\n      parsedOrderRefs = new RefSet(),\n      MAX_NESTED_LEVELS = 10;\n\n    parseRBGroups(config.get(\"RBGroups\"));\n\n    return {\n      name:\n        typeof config.get(\"Name\") === \"string\"\n          ? stringToPDFString(config.get(\"Name\"))\n          : null,\n      creator:\n        typeof config.get(\"Creator\") === \"string\"\n          ? stringToPDFString(config.get(\"Creator\"))\n          : null,\n      baseState:\n        config.get(\"BaseState\") instanceof Name\n          ? config.get(\"BaseState\").name\n          : null,\n      on: parseOnOff(config.get(\"ON\")),\n      off: parseOnOff(config.get(\"OFF\")),\n      order: parseOrder(config.get(\"Order\")),\n      groups: [...groupRefCache],\n    };\n  }\n\n  setActualNumPages(num = null) {\n    this.#actualNumPages = num;\n  }\n\n  get hasActualNumPages() {\n    return this.#actualNumPages !== null;\n  }\n\n  get _pagesCount() {\n    const obj = this.toplevelPagesDict.get(\"Count\");\n    if (!Number.isInteger(obj)) {\n      throw new FormatError(\n        \"Page count in top-level pages dictionary is not an integer.\"\n      );\n    }\n    return shadow(this, \"_pagesCount\", obj);\n  }\n\n  get numPages() {\n    return this.#actualNumPages ?? this._pagesCount;\n  }\n\n  get destinations() {\n    const dests = new Map();\n\n    for (const obj of this.#readDests()) {\n      if (obj instanceof NameTree) {\n        for (const [key, value] of obj.getAll()) {\n          const dest = fetchDest(value);\n          if (dest) {\n            dests.set(\n              stringToPDFString(key, /* keepEscapeSequence = */ true),\n              dest\n            );\n          }\n        }\n      } else if (obj instanceof Dict) {\n        for (const [key, value] of obj) {\n          const dest = fetchDest(value);\n          if (dest) {\n            // Always let the NameTree take precedence.\n            dests.getOrInsert(\n              stringToPDFString(key, /* keepEscapeSequence = */ true),\n              dest\n            );\n          }\n        }\n      }\n    }\n    return shadow(this, \"destinations\", dests);\n  }\n\n  getDestination(id) {\n    // Avoid extra lookup/parsing when all destinations are already available.\n    if (Object.hasOwn(this, \"destinations\")) {\n      return this.destinations.get(id) ?? null;\n    }\n\n    for (const obj of this.#readDests()) {\n      if (obj instanceof NameTree || obj instanceof Dict) {\n        const dest = fetchDest(obj.get(id));\n        if (dest) {\n          return dest;\n        }\n      }\n    }\n\n    // Always fallback to checking all destinations, in order to support:\n    //  - PDF documents with out-of-order NameTrees (fixes issue 10272).\n    //  - Destination keys that use PDFDocEncoding (fixes issue 19835).\n    return this.destinations.get(id) ?? null;\n  }\n\n  #readDests() {\n    const obj = this.#catDict.get(\"Names\");\n    const rawDests = [];\n    if (obj?.has(\"Dests\")) {\n      rawDests.push(new NameTree(obj.getRaw(\"Dests\"), this.xref));\n    }\n    if (this.#catDict.has(\"Dests\")) {\n      // Simple destination dictionary.\n      rawDests.push(this.#catDict.get(\"Dests\"));\n    }\n    return rawDests;\n  }\n\n  get rawPageLabels() {\n    const obj = this.#catDict.getRaw(\"PageLabels\");\n    if (!obj) {\n      return null;\n    }\n\n    const numberTree = new NumberTree(obj, this.xref);\n    return numberTree.getAll();\n  }\n\n  get pageLabels() {\n    let obj = null;\n    try {\n      obj = this.#readPageLabels();\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(\"Unable to read page labels.\");\n    }\n    return shadow(this, \"pageLabels\", obj);\n  }\n\n  #readPageLabels() {\n    const nums = this.rawPageLabels;\n    if (!nums) {\n      return null;\n    }\n\n    const pageLabels = new Array(this.numPages);\n    let style = null,\n      prefix = \"\";\n\n    let currentLabel = \"\",\n      currentIndex = 1;\n\n    for (let i = 0, ii = this.numPages; i < ii; i++) {\n      const labelDict = nums.get(i);\n\n      if (labelDict !== undefined) {\n        if (!(labelDict instanceof Dict)) {\n          throw new FormatError(\"PageLabel is not a dictionary.\");\n        }\n\n        if (\n          labelDict.has(\"Type\") &&\n          !isName(labelDict.get(\"Type\"), \"PageLabel\")\n        ) {\n          throw new FormatError(\"Invalid type in PageLabel dictionary.\");\n        }\n\n        if (labelDict.has(\"S\")) {\n          const s = labelDict.get(\"S\");\n          if (!(s instanceof Name)) {\n            throw new FormatError(\"Invalid style in PageLabel dictionary.\");\n          }\n          style = s.name;\n        } else {\n          style = null;\n        }\n\n        if (labelDict.has(\"P\")) {\n          const p = labelDict.get(\"P\");\n          if (typeof p !== \"string\") {\n            throw new FormatError(\"Invalid prefix in PageLabel dictionary.\");\n          }\n          prefix = stringToPDFString(p);\n        } else {\n          prefix = \"\";\n        }\n\n        if (labelDict.has(\"St\")) {\n          const st = labelDict.get(\"St\");\n          if (!(Number.isInteger(st) && st >= 1)) {\n            throw new FormatError(\"Invalid start in PageLabel dictionary.\");\n          }\n          currentIndex = st;\n        } else {\n          currentIndex = 1;\n        }\n      }\n\n      switch (style) {\n        case \"D\":\n          currentLabel = currentIndex;\n          break;\n        case \"R\":\n        case \"r\":\n          currentLabel = toRomanNumerals(currentIndex, style === \"r\");\n          break;\n        case \"A\":\n        case \"a\":\n          const LIMIT = 26; // Use only the characters A-Z, or a-z.\n          const A_UPPER_CASE = 0x41,\n            A_LOWER_CASE = 0x61;\n\n          const baseCharCode = style === \"a\" ? A_LOWER_CASE : A_UPPER_CASE;\n          const letterIndex = currentIndex - 1;\n          const character = String.fromCharCode(\n            baseCharCode + (letterIndex % LIMIT)\n          );\n          currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1);\n          break;\n        default:\n          if (style) {\n            throw new FormatError(\n              `Invalid style \"${style}\" in PageLabel dictionary.`\n            );\n          }\n          currentLabel = \"\";\n      }\n\n      pageLabels[i] = prefix + currentLabel;\n      currentIndex++;\n    }\n    return pageLabels;\n  }\n\n  get pageLayout() {\n    const obj = this.#catDict.get(\"PageLayout\");\n    // Purposely use a non-standard default value, rather than 'SinglePage', to\n    // allow differentiating between `undefined` and /SinglePage since that does\n    // affect the Scroll mode (continuous/non-continuous) used in Adobe Reader.\n    let pageLayout = \"\";\n\n    if (obj instanceof Name) {\n      switch (obj.name) {\n        case \"SinglePage\":\n        case \"OneColumn\":\n        case \"TwoColumnLeft\":\n        case \"TwoColumnRight\":\n        case \"TwoPageLeft\":\n        case \"TwoPageRight\":\n          pageLayout = obj.name;\n      }\n    }\n    return shadow(this, \"pageLayout\", pageLayout);\n  }\n\n  get pageMode() {\n    const obj = this.#catDict.get(\"PageMode\");\n    let pageMode = \"UseNone\"; // Default value.\n\n    if (obj instanceof Name) {\n      switch (obj.name) {\n        case \"UseNone\":\n        case \"UseOutlines\":\n        case \"UseThumbs\":\n        case \"FullScreen\":\n        case \"UseOC\":\n        case \"UseAttachments\":\n          pageMode = obj.name;\n      }\n    }\n    return shadow(this, \"pageMode\", pageMode);\n  }\n\n  get viewerPreferences() {\n    const obj = this.#catDict.get(\"ViewerPreferences\");\n    if (!(obj instanceof Dict)) {\n      return shadow(this, \"viewerPreferences\", null);\n    }\n    let prefs = null;\n\n    for (const [key, value] of obj) {\n      let prefValue;\n\n      switch (key) {\n        case \"HideToolbar\":\n        case \"HideMenubar\":\n        case \"HideWindowUI\":\n        case \"FitWindow\":\n        case \"CenterWindow\":\n        case \"DisplayDocTitle\":\n        case \"PickTrayByPDFSize\":\n          if (typeof value === \"boolean\") {\n            prefValue = value;\n          }\n          break;\n        case \"NonFullScreenPageMode\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"UseNone\":\n              case \"UseOutlines\":\n              case \"UseThumbs\":\n              case \"UseOC\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"UseNone\";\n            }\n          }\n          break;\n        case \"Direction\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"L2R\":\n              case \"R2L\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"L2R\";\n            }\n          }\n          break;\n        case \"ViewArea\":\n        case \"ViewClip\":\n        case \"PrintArea\":\n        case \"PrintClip\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"MediaBox\":\n              case \"CropBox\":\n              case \"BleedBox\":\n              case \"TrimBox\":\n              case \"ArtBox\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"CropBox\";\n            }\n          }\n          break;\n        case \"PrintScaling\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"None\":\n              case \"AppDefault\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"AppDefault\";\n            }\n          }\n          break;\n        case \"Duplex\":\n          if (value instanceof Name) {\n            switch (value.name) {\n              case \"Simplex\":\n              case \"DuplexFlipShortEdge\":\n              case \"DuplexFlipLongEdge\":\n                prefValue = value.name;\n                break;\n              default:\n                prefValue = \"None\";\n            }\n          }\n          break;\n        case \"PrintPageRange\":\n          // The number of elements must be even.\n          if (\n            Array.isArray(value) &&\n            value.length % 2 === 0 &&\n            value.every(\n              (page, i, arr) =>\n                Number.isInteger(page) &&\n                page > 0 &&\n                (i === 0 || page >= arr[i - 1]) &&\n                page <= this.numPages\n            )\n          ) {\n            prefValue = value;\n          }\n          break;\n        case \"NumCopies\":\n          if (Number.isInteger(value) && value > 0) {\n            prefValue = value;\n          }\n          break;\n        default:\n          warn(`Ignoring non-standard key in ViewerPreferences: ${key}.`);\n          continue;\n      }\n\n      if (prefValue === undefined) {\n        warn(`Bad value, for key \"${key}\", in ViewerPreferences: ${value}.`);\n        continue;\n      }\n      (prefs ??= new Map()).set(key, prefValue);\n    }\n    return shadow(this, \"viewerPreferences\", prefs);\n  }\n\n  get openAction() {\n    const obj = this.#catDict.get(\"OpenAction\");\n    const openAction = new Map();\n\n    if (obj instanceof Dict) {\n      // Convert the OpenAction dictionary into a format that works with\n      // `parseDestDictionary`, to avoid having to re-implement those checks.\n      const destDict = new Dict(this.xref);\n      destDict.set(\"A\", obj);\n\n      const resultObj = { url: null, dest: null, action: null };\n      Catalog.parseDestDictionary({ destDict, resultObj });\n\n      if (Array.isArray(resultObj.dest)) {\n        openAction.set(\"dest\", resultObj.dest);\n      } else if (resultObj.action) {\n        openAction.set(\"action\", resultObj.action);\n      }\n    } else if (isValidExplicitDest(obj)) {\n      openAction.set(\"dest\", obj);\n    }\n    return shadow(this, \"openAction\", openAction.size ? openAction : null);\n  }\n\n  /**\n   * Get attachments.\n   *\n   * @returns {Map<string, CatalogAttachment> | null}\n   *   Attachments.\n   */\n  get attachments() {\n    const obj = this.#catDict.get(\"Names\");\n    /** @type {Map<string, CatalogAttachment> | null} */\n    let attachments = null;\n\n    if (obj instanceof Dict && obj.has(\"EmbeddedFiles\")) {\n      const nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        (attachments ??= new Map()).set(\n          stringToPDFString(key, /* keepEscapeSequence = */ true),\n          new FileSpec(value).serializable\n        );\n      }\n    }\n    return shadow(this, \"attachments\", attachments);\n  }\n\n  /**\n   * @param {string} id\n   *   Unique attachment identifier.\n   * @returns {CatalogAttachmentContent | undefined}\n   *   Content, or `undefined` when no named attachment exists for the id.\n   */\n  #attachmentContentByName(id) {\n    const obj = this.#catDict.get(\"Names\");\n    if (obj instanceof Dict && obj.has(\"EmbeddedFiles\")) {\n      const nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        if (stringToPDFString(key, /* keepEscapeSequence = */ true) === id) {\n          return FileSpec.readContent(value);\n        }\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Get content for an attachment.\n   *\n   * @param {string} id\n   *   Unique attachment identifier (required).\n   * @returns {CatalogAttachmentContent}\n   *   Content.\n   */\n  attachmentContent(id) {\n    const namedContent = this.#attachmentContentByName(id);\n    if (namedContent !== undefined) {\n      return namedContent;\n    }\n\n    // Annotation-local attachments register the reference of their embedded\n    // content in the catalog, so it's re-fetched from the xref on demand\n    // instead of being cached (which would then need to survive `cleanup`).\n    // The reference points either at the file-spec dictionary or, for an inline\n    // file-spec, straight at the embedded-file stream.\n    const ref = this.#annotationAttachmentRefById.get(id);\n    if (ref) {\n      const target = this.xref.fetch(ref);\n      if (target instanceof BaseStream) {\n        const content = FileSpec.readStreamContent(target);\n        if (this.#soundAttachmentIds.has(id)) {\n          return soundStreamToWav(target, content) ?? content;\n        }\n        return content;\n      }\n      return target instanceof Dict ? FileSpec.readContent(target) : null;\n    }\n    return null;\n  }\n\n  get rawEmbeddedFiles() {\n    const obj = this.#catDict.get(\"Names\");\n    if (!(obj instanceof Dict) || !obj.has(\"EmbeddedFiles\")) {\n      return null;\n    }\n    const nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\n    return nameTree.getAll(/* isRaw = */ true);\n  }\n\n  get xfaImages() {\n    const obj = this.#catDict.get(\"Names\");\n    let xfaImages = null;\n\n    if (obj instanceof Dict && obj.has(\"XFAImages\")) {\n      const nameTree = new NameTree(obj.getRaw(\"XFAImages\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        if (value instanceof BaseStream) {\n          xfaImages ??= new Map();\n          xfaImages.set(\n            stringToPDFString(key, /* keepEscapeSequence = */ true),\n            value.getBytes()\n          );\n        }\n      }\n    }\n    return shadow(this, \"xfaImages\", xfaImages);\n  }\n\n  #collectJavaScript() {\n    const obj = this.#catDict.get(\"Names\");\n    let javaScript = null;\n\n    function appendIfJavaScriptDict(name, jsDict) {\n      if (!(jsDict instanceof Dict) || !isName(jsDict.get(\"S\"), \"JavaScript\")) {\n        return;\n      }\n      let js = jsDict.get(\"JS\");\n      if (js instanceof BaseStream) {\n        js = js.getString();\n      } else if (typeof js !== \"string\") {\n        return;\n      }\n      js = stringToPDFString(js, /* keepEscapeSequence = */ true).replaceAll(\n        \"\\x00\",\n        \"\"\n      );\n      // Skip empty entries, similar to the `_collectJS` function.\n      if (js) {\n        (javaScript ??= new Map()).set(name, js);\n      }\n    }\n\n    if (obj instanceof Dict && obj.has(\"JavaScript\")) {\n      const nameTree = new NameTree(obj.getRaw(\"JavaScript\"), this.xref);\n      for (const [key, value] of nameTree.getAll()) {\n        appendIfJavaScriptDict(\n          stringToPDFString(key, /* keepEscapeSequence = */ true),\n          value\n        );\n      }\n    }\n    // Append OpenAction \"JavaScript\" actions, if any, to the JavaScript map.\n    const openAction = this.#catDict.get(\"OpenAction\");\n    if (openAction) {\n      appendIfJavaScriptDict(\"OpenAction\", openAction);\n    }\n\n    return javaScript;\n  }\n\n  get jsActions() {\n    const javaScript = this.#collectJavaScript();\n    let actions = collectActions(\n      this.xref,\n      this.#catDict,\n      DocumentActionEventType\n    );\n\n    if (javaScript) {\n      actions ??= Object.create(null);\n\n      for (const [key, val] of javaScript) {\n        (actions[key] ??= []).push(val);\n      }\n    }\n    return shadow(this, \"jsActions\", actions);\n  }\n\n  async cleanup(manuallyTriggered = false) {\n    clearGlobalCaches();\n    this.globalColorSpaceCache.clear();\n    this.globalImageCache.clear(/* onlyData = */ manuallyTriggered);\n    this.pageKidsCountCache.clear();\n    this.pageIndexCache.clear();\n    this.pageDictCache.clear();\n    this.nonBlendModesSet.clear();\n\n    for (const { dict } of await Promise.all(this.fontCache)) {\n      delete dict.cacheKey;\n    }\n    this.fontCache.clear();\n    this.builtInCMapCache.clear();\n    this.standardFontDataCache.clear();\n    this.systemFontCache.clear();\n  }\n\n  async getPageDict(pageIndex) {\n    const nodesToVisit = [this.toplevelPagesDict];\n    const visitedNodes = new RefSet();\n\n    const pagesRef = this.#catDict.getRaw(\"Pages\");\n    if (pagesRef instanceof Ref) {\n      visitedNodes.put(pagesRef);\n    }\n    const xref = this.xref,\n      pageKidsCountCache = this.pageKidsCountCache,\n      pageIndexCache = this.pageIndexCache,\n      pageDictCache = this.pageDictCache;\n    let currentPageIndex = 0;\n\n    while (nodesToVisit.length) {\n      const currentNode = nodesToVisit.pop();\n\n      if (currentNode instanceof Ref) {\n        const count = pageKidsCountCache.get(currentNode);\n        // Skip nodes where the page can't be.\n        if (count >= 0 && currentPageIndex + count <= pageIndex) {\n          currentPageIndex += count;\n          continue;\n        }\n        // Prevent circular references in the /Pages tree.\n        if (visitedNodes.has(currentNode)) {\n          throw new FormatError(\"Pages tree contains circular reference.\");\n        }\n        visitedNodes.put(currentNode);\n\n        const obj = await (pageDictCache.get(currentNode) ||\n          xref.fetchAsync(currentNode));\n        if (obj instanceof Dict) {\n          let type = obj.getRaw(\"Type\");\n          if (type instanceof Ref) {\n            type = await xref.fetchAsync(type);\n          }\n          if (isName(type, \"Page\") || !obj.has(\"Kids\")) {\n            // Cache the Page reference, since it can *greatly* improve\n            // performance by reducing redundant lookups in long documents\n            // where all nodes are found at *one* level of the tree.\n            if (!pageKidsCountCache.has(currentNode)) {\n              pageKidsCountCache.put(currentNode, 1);\n            }\n            // Help improve performance of the `getPageIndex` method.\n            if (!pageIndexCache.has(currentNode)) {\n              pageIndexCache.put(currentNode, currentPageIndex);\n            }\n\n            if (currentPageIndex === pageIndex) {\n              return [obj, currentNode];\n            }\n            currentPageIndex++;\n            continue;\n          }\n        }\n        nodesToVisit.push(obj);\n        continue;\n      }\n\n      // Must be a child page dictionary.\n      if (!(currentNode instanceof Dict)) {\n        throw new FormatError(\n          \"Page dictionary kid reference points to wrong type of object.\"\n        );\n      }\n      const { objId } = currentNode;\n\n      let count = currentNode.getRaw(\"Count\");\n      if (count instanceof Ref) {\n        count = await xref.fetchAsync(count);\n      }\n      if (Number.isInteger(count) && count >= 0) {\n        // Cache the Kids count, since it can reduce redundant lookups in\n        // documents where all nodes are found at *one* level of the tree.\n        if (objId && !pageKidsCountCache.has(objId)) {\n          pageKidsCountCache.put(objId, count);\n        }\n\n        // Skip nodes where the page can't be.\n        if (currentPageIndex + count <= pageIndex) {\n          currentPageIndex += count;\n          continue;\n        }\n      }\n\n      let kids = currentNode.getRaw(\"Kids\");\n      if (kids instanceof Ref) {\n        kids = await xref.fetchAsync(kids);\n      }\n      if (!Array.isArray(kids)) {\n        // Prevent errors in corrupt PDF documents that violate the\n        // specification by *inlining* Page dicts directly in the Kids\n        // array, rather than using indirect objects (fixes issue9540.pdf).\n        let type = currentNode.getRaw(\"Type\");\n        if (type instanceof Ref) {\n          type = await xref.fetchAsync(type);\n        }\n        if (isName(type, \"Page\") || !currentNode.has(\"Kids\")) {\n          if (currentPageIndex === pageIndex) {\n            return [currentNode, null];\n          }\n          currentPageIndex++;\n          continue;\n        }\n\n        throw new FormatError(\"Page dictionary kids object is not an array.\");\n      }\n\n      // Always check all `Kids` nodes, to avoid getting stuck in an empty\n      // node further down in the tree (see issue5644.pdf, issue8088.pdf),\n      // and to ensure that we actually find the correct `Page` dict.\n      for (let last = kids.length - 1; last >= 0; last--) {\n        const lastKid = kids[last];\n        nodesToVisit.push(lastKid);\n\n        // Launch all requests in parallel so we don't wait for each one in turn\n        // when looking for a page near the end, if all the pages are top level.\n        if (\n          currentNode === this.toplevelPagesDict &&\n          lastKid instanceof Ref &&\n          !pageDictCache.has(lastKid)\n        ) {\n          pageDictCache.put(lastKid, xref.fetchAsync(lastKid));\n        }\n      }\n    }\n\n    throw new Error(`Page index ${pageIndex} not found.`);\n  }\n\n  /**\n   * Eagerly fetches the entire /Pages-tree; should ONLY be used as a fallback.\n   * @returns {Promise<Map>}\n   */\n  async getAllPageDicts(recoveryMode = false) {\n    const { ignoreErrors } = this.pdfManager.evaluatorOptions;\n\n    const queue = [{ currentNode: this.toplevelPagesDict, posInKids: 0 }];\n    const visitedNodes = new RefSet();\n\n    const pagesRef = this.#catDict.getRaw(\"Pages\");\n    if (pagesRef instanceof Ref) {\n      visitedNodes.put(pagesRef);\n    }\n    const map = new Map(),\n      xref = this.xref,\n      pageIndexCache = this.pageIndexCache;\n    let pageIndex = 0;\n\n    function addPageDict(pageDict, pageRef) {\n      // Help improve performance of the `getPageIndex` method.\n      if (pageRef && !pageIndexCache.has(pageRef)) {\n        pageIndexCache.put(pageRef, pageIndex);\n      }\n\n      map.set(pageIndex++, [pageDict, pageRef]);\n    }\n    function addPageError(error) {\n      if (error instanceof XRefEntryException && !recoveryMode) {\n        throw error;\n      }\n      if (recoveryMode && ignoreErrors && pageIndex === 0) {\n        // Ensure that the viewer will always load (fixes issue15590.pdf).\n        warn(`getAllPageDicts - Skipping invalid first page: \"${error}\".`);\n        error = Dict.empty;\n      }\n\n      map.set(pageIndex++, [error, null]);\n    }\n\n    while (queue.length > 0) {\n      const queueItem = queue.at(-1);\n      const { currentNode, posInKids } = queueItem;\n\n      let kids = currentNode.getRaw(\"Kids\");\n      if (kids instanceof Ref) {\n        try {\n          kids = await xref.fetchAsync(kids);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      }\n      if (!Array.isArray(kids)) {\n        // Prevent errors in corrupt PDF documents that violate the\n        // specification by *inlining* Page dicts (fixes issue21436.pdf).\n        let type = currentNode.getRaw(\"Type\");\n        if (type instanceof Ref) {\n          try {\n            type = await xref.fetchAsync(type);\n          } catch (ex) {\n            addPageError(ex);\n            break;\n          }\n        }\n        if (isName(type, \"Page\") || !currentNode.has(\"Kids\")) {\n          addPageDict(currentNode, null);\n          break;\n        }\n\n        addPageError(\n          new FormatError(\"Page dictionary kids object is not an array.\")\n        );\n        break;\n      }\n\n      if (posInKids >= kids.length) {\n        queue.pop();\n        continue;\n      }\n\n      const kidObj = kids[posInKids];\n      let obj;\n      if (kidObj instanceof Ref) {\n        // Prevent circular references in the /Pages tree.\n        if (visitedNodes.has(kidObj)) {\n          addPageError(\n            new FormatError(\"Pages tree contains circular reference.\")\n          );\n          break;\n        }\n        visitedNodes.put(kidObj);\n\n        try {\n          obj = await xref.fetchAsync(kidObj);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      } else {\n        // Prevent errors in corrupt PDF documents that violate the\n        // specification by *inlining* Page dicts directly in the Kids\n        // array, rather than using indirect objects (see issue9540.pdf).\n        obj = kidObj;\n      }\n      if (!(obj instanceof Dict)) {\n        addPageError(\n          new FormatError(\n            \"Page dictionary kid reference points to wrong type of object.\"\n          )\n        );\n        break;\n      }\n\n      let type = obj.getRaw(\"Type\");\n      if (type instanceof Ref) {\n        try {\n          type = await xref.fetchAsync(type);\n        } catch (ex) {\n          addPageError(ex);\n          break;\n        }\n      }\n      if (isName(type, \"Page\") || !obj.has(\"Kids\")) {\n        addPageDict(obj, kidObj instanceof Ref ? kidObj : null);\n      } else {\n        queue.push({ currentNode: obj, posInKids: 0 });\n      }\n      queueItem.posInKids++;\n    }\n    return map;\n  }\n\n  async getPageIndex(pageRef) {\n    const cachedPageIndex = this.pageIndexCache.get(pageRef);\n    if (cachedPageIndex !== undefined) {\n      return cachedPageIndex;\n    }\n\n    // The page tree nodes have the count of all the leaves below them. To get\n    // how many pages are before we just have to walk up the tree and keep\n    // adding the count of siblings to the left of the node.\n    const xref = this.xref;\n    let total = 0,\n      ref = pageRef;\n    // Prevent circular references in the /Pages tree.\n    const visited = new RefSet();\n    visited.put(pageRef);\n\n    while (true) {\n      const node = await xref.fetchAsync(ref);\n      if (\n        isRefsEqual(ref, pageRef) &&\n        !isDict(node, \"Page\") &&\n        !(node instanceof Dict && !node.has(\"Type\") && node.has(\"Contents\"))\n      ) {\n        throw new FormatError(\n          \"The reference does not point to a /Page dictionary.\"\n        );\n      }\n      if (!node) {\n        break;\n      }\n      if (!(node instanceof Dict)) {\n        throw new FormatError(\"Node must be a dictionary.\");\n      }\n      const parentRef = node.getRaw(\"Parent\");\n      if (parentRef instanceof Ref) {\n        if (visited.has(parentRef)) {\n          throw new FormatError(\"Pages tree contains circular reference.\");\n        }\n        visited.put(parentRef);\n      }\n\n      const parent = await node.getAsync(\"Parent\");\n      if (!parent) {\n        break;\n      }\n      if (!(parent instanceof Dict)) {\n        throw new FormatError(\"Parent must be a dictionary.\");\n      }\n\n      const kids = await parent.getAsync(\"Kids\");\n      if (!kids) {\n        break;\n      }\n      if (!Array.isArray(kids)) {\n        throw new FormatError(\"Kids must be an array.\");\n      }\n\n      const kidPromises = [];\n      let found = false;\n      for (const kid of kids) {\n        if (!(kid instanceof Ref)) {\n          throw new FormatError(\"Kid must be a reference.\");\n        }\n        if (isRefsEqual(kid, ref)) {\n          found = true;\n          break;\n        }\n        kidPromises.push(\n          xref.fetchAsync(kid).then(obj => {\n            if (!(obj instanceof Dict)) {\n              throw new FormatError(\"Kid node must be a dictionary.\");\n            }\n            if (obj.has(\"Count\")) {\n              const count = obj.get(\"Count\");\n              if (Number.isInteger(count) && count >= 0) {\n                total += count;\n                return;\n              }\n              throw new FormatError(\"Count must be a (positive) integer.\");\n            }\n            // Page leaf node.\n            total++;\n          })\n        );\n      }\n      if (!found) {\n        throw new FormatError(\"Kid reference not found in parent's kids.\");\n      }\n      await Promise.all(kidPromises);\n      ref = parentRef;\n    }\n\n    this.pageIndexCache.put(pageRef, total);\n    return total;\n  }\n\n  get baseUrl() {\n    const uri = this.#catDict.get(\"URI\");\n    if (uri instanceof Dict) {\n      const base = uri.get(\"Base\");\n      if (typeof base === \"string\") {\n        const absoluteUrl = createValidAbsoluteUrl(base, null, {\n          tryConvertEncoding: true,\n        });\n        if (absoluteUrl) {\n          return shadow(this, \"baseUrl\", absoluteUrl.href);\n        }\n      }\n    }\n    return shadow(this, \"baseUrl\", this.pdfManager.docBaseUrl);\n  }\n\n  /**\n   * @typedef {Object} ParseDestDictionaryParameters\n   * @property {Dict} destDict - The dictionary containing the destination.\n   * @property {Object} resultObj - The object where the parsed destination\n   *   properties will be placed.\n   * @property {string} [docBaseUrl] - The document base URL that is used when\n   *   attempting to recover valid absolute URLs from relative ones.\n   * @property {Record<string, CatalogAttachment> | null} [docAttachments] - The\n   *   document attachments (may not exist in most PDF documents).\n   */\n\n  /**\n   * Derive a destination array from a Structure Element reference.\n   * Walks the SE dict to find its page (Pg) and optional bounding box (A.BBox),\n   * then returns an XYZ destination array that can be used for navigation.\n   * @param {XRef} xref\n   * @param {Ref} seRef\n   * @returns {Array|null}\n   */\n  static #getDestFromStructElement(xref, seRef) {\n    const seDict = xref.fetchIfRef(seRef);\n    if (!(seDict instanceof Dict)) {\n      return null;\n    }\n\n    // Try to find the page reference for this structure element.\n    // Search order: the element itself, its descendants down to leaf nodes,\n    // then ancestor elements via the P entry (up).\n    let pageRef = null;\n\n    // Check the element directly.\n    const directPg = seDict.getRaw(\"Pg\");\n    if (directPg instanceof Ref) {\n      pageRef = directPg;\n    }\n\n    // Walk down into descendants (BFS) until a Pg is found or leaves are\n    // reached (e.g. integer MCIDs or MCR/OBJR dicts without further K).\n    if (!pageRef) {\n      const queue = [seDict];\n      // Prevent circular references in the structure tree.\n      const visited = new RefSet();\n      visited.put(seRef);\n      while (queue.length > 0 && !pageRef) {\n        const node = queue.shift();\n        let kids = node.getRaw(\"K\");\n        if (kids instanceof Ref) {\n          if (visited.has(kids)) {\n            continue;\n          }\n          visited.put(kids);\n          kids = xref.fetch(kids);\n        }\n        let kidsArr;\n        if (Array.isArray(kids)) {\n          kidsArr = kids;\n        } else if (kids) {\n          kidsArr = [kids];\n        } else {\n          continue;\n        }\n        for (const kid of kidsArr) {\n          if (kid instanceof Ref) {\n            if (visited.has(kid)) {\n              continue;\n            }\n            visited.put(kid);\n          }\n          const kidObj = xref.fetchIfRef(kid);\n          if (!(kidObj instanceof Dict)) {\n            continue; // integer MCID – leaf node, no Pg here\n          }\n          const pg = kidObj.getRaw(\"Pg\");\n          if (pg instanceof Ref) {\n            pageRef = pg;\n            break;\n          }\n          queue.push(kidObj);\n        }\n      }\n    }\n\n    // Walk up the parent chain if still not found.\n    if (!pageRef) {\n      const MAX_DEPTH = 40;\n      let current = seDict;\n      for (let depth = 0; depth < MAX_DEPTH; depth++) {\n        const parentRaw = current.getRaw(\"P\");\n        if (!(parentRaw instanceof Ref)) {\n          break;\n        }\n        const parentDict = xref.fetch(parentRaw);\n        if (!(parentDict instanceof Dict)) {\n          break;\n        }\n        if (isName(parentDict.get(\"Type\"), \"StructTreeRoot\")) {\n          break;\n        }\n        const pg = parentDict.getRaw(\"Pg\");\n        if (pg instanceof Ref) {\n          pageRef = pg;\n          break;\n        }\n        current = parentDict;\n      }\n    }\n\n    if (!pageRef) {\n      return null;\n    }\n\n    // Try to obtain precise coordinates from the element's attribute BBox.\n    let x = null,\n      y = null;\n    const attrs = seDict.get(\"A\");\n    if (attrs instanceof Dict) {\n      const bbox = lookupRect(attrs.getArray(\"BBox\"), null);\n      if (bbox) {\n        x = bbox[0];\n        y = bbox[3]; // top of the bbox in PDF page coordinates\n      }\n    }\n\n    return [pageRef, { name: \"XYZ\" }, x, y, null];\n  }\n\n  /**\n   * Helper function used to parse the contents of destination dictionaries.\n   * @param {ParseDestDictionaryParameters} params\n   */\n  static parseDestDictionary({\n    destDict,\n    resultObj,\n    docBaseUrl = null,\n    docAttachments = null,\n  }) {\n    if (!(destDict instanceof Dict)) {\n      warn(\"parseDestDictionary: `destDict` must be a dictionary.\");\n      return;\n    }\n\n    let action = destDict.get(\"A\"),\n      url,\n      dest;\n    if (!(action instanceof Dict)) {\n      if (destDict.has(\"Dest\")) {\n        // A /Dest entry should *only* contain a Name or an Array, but some bad\n        // PDF generators ignore that and treat it as an /A entry.\n        action = destDict.get(\"Dest\");\n      } else {\n        action = destDict.get(\"AA\");\n        if (action instanceof Dict) {\n          if (action.has(\"D\")) {\n            // MouseDown\n            action = action.get(\"D\");\n          } else if (action.has(\"U\")) {\n            // MouseUp\n            action = action.get(\"U\");\n          }\n        }\n      }\n    }\n\n    if (action instanceof Dict) {\n      const actionType = action.get(\"S\");\n      if (!(actionType instanceof Name)) {\n        warn(\"parseDestDictionary: Invalid type in Action dictionary.\");\n        return;\n      }\n      const actionName = actionType.name;\n\n      switch (actionName) {\n        case \"ResetForm\":\n          const flags = action.get(\"Flags\");\n          const include = ((typeof flags === \"number\" ? flags : 0) & 1) === 0;\n          const fields = [];\n          const refs = [];\n          for (const obj of action.get(\"Fields\") || []) {\n            if (obj instanceof Ref) {\n              refs.push(obj.toString());\n            } else if (typeof obj === \"string\") {\n              fields.push(stringToPDFString(obj));\n            }\n          }\n          resultObj.resetForm = { fields, refs, include };\n          break;\n        case \"URI\":\n          url = action.get(\"URI\");\n          if (url instanceof Name) {\n            // Some bad PDFs do not put parentheses around relative URLs.\n            url = \"/\" + url.name;\n          }\n          break;\n\n        case \"GoTo\":\n          dest = action.get(\"D\");\n          break;\n\n        case \"Launch\":\n        // We neither want, nor can, support arbitrary 'Launch' actions.\n        // However, in practice they are mostly used for linking to other PDF\n        // files, which we thus attempt to support (utilizing `docBaseUrl`).\n        /* falls through */\n\n        case \"GoToR\":\n          const urlDict = action.get(\"F\");\n          if (urlDict instanceof Dict) {\n            url = new FileSpec(urlDict).filename;\n          } else if (typeof urlDict === \"string\") {\n            url = urlDict;\n          } else {\n            break;\n          }\n\n          // NOTE: the destination is relative to the *remote* document.\n          const remoteDest = fetchRemoteDest(action);\n          if (remoteDest) {\n            // NOTE: We don't use the `updateUrlHash` function here, since\n            // the `createValidAbsoluteUrl` function (see below) already handles\n            // parsing/validation of the final URL and manual splitting also\n            // ensures that the `unsafeUrl` property will be available/correct.\n            url = /* baseUrl = */ url.split(\"#\", 1)[0] + \"#\" + remoteDest;\n          }\n          // The 'NewWindow' property, equal to `LinkTarget.BLANK`.\n          const newWindow = action.get(\"NewWindow\");\n          if (typeof newWindow === \"boolean\") {\n            resultObj.newWindow = newWindow;\n          }\n          break;\n\n        case \"GoToE\":\n          const target = action.get(\"T\");\n          /** @type {string | null} */\n          let id = null;\n\n          if (target instanceof Dict) {\n            const relationship = target.get(\"R\");\n            const name = target.get(\"N\");\n\n            if (isName(relationship, \"C\") && typeof name === \"string\") {\n              id = stringToPDFString(name, /* keepEscapeSequence = */ true);\n            }\n          }\n\n          if (docAttachments && id) {\n            resultObj.attachmentId = id;\n            resultObj.attachment = docAttachments.get(id);\n\n            // NOTE: the destination is relative to the *attachment*.\n            const attachmentDest = fetchRemoteDest(action);\n            if (attachmentDest) {\n              resultObj.attachmentDest = attachmentDest;\n            }\n          } else {\n            warn(`parseDestDictionary - unimplemented \"GoToE\" action.`);\n          }\n          break;\n\n        case \"Named\":\n          const namedAction = action.get(\"N\");\n          if (namedAction instanceof Name) {\n            resultObj.action = namedAction.name;\n          }\n          break;\n\n        case \"SetOCGState\":\n          const state = action.get(\"State\");\n          const preserveRB = action.get(\"PreserveRB\");\n\n          if (!Array.isArray(state) || state.length === 0) {\n            break;\n          }\n          const stateArr = [];\n\n          for (const elem of state) {\n            if (elem instanceof Name) {\n              switch (elem.name) {\n                case \"ON\":\n                case \"OFF\":\n                case \"Toggle\":\n                  stateArr.push(elem.name);\n                  break;\n              }\n            } else if (elem instanceof Ref) {\n              stateArr.push(elem.toString());\n            }\n          }\n\n          if (stateArr.length !== state.length) {\n            break; // Some of the original entries are not valid.\n          }\n          resultObj.setOCGState = {\n            state: stateArr,\n            preserveRB: typeof preserveRB === \"boolean\" ? preserveRB : true,\n          };\n          break;\n\n        case \"JavaScript\":\n          const jsAction = action.get(\"JS\");\n          let js;\n\n          if (jsAction instanceof BaseStream) {\n            js = jsAction.getString();\n          } else if (typeof jsAction === \"string\") {\n            js = jsAction;\n          }\n\n          const jsURL =\n            js &&\n            recoverJsURL(\n              stringToPDFString(js, /* keepEscapeSequence = */ true)\n            );\n          if (jsURL) {\n            url = jsURL.url;\n            resultObj.newWindow = jsURL.newWindow;\n            break;\n          }\n        /* falls through */\n        default:\n          if (actionName === \"JavaScript\" || actionName === \"SubmitForm\") {\n            // Don't bother the user with a warning for actions that require\n            // scripting support, since those will be handled separately.\n            break;\n          }\n          warn(`parseDestDictionary - unsupported action: \"${actionName}\".`);\n          break;\n      }\n    } else if (destDict.has(\"Dest\")) {\n      // Simple destination.\n      dest = destDict.get(\"Dest\");\n    }\n\n    if (typeof url === \"string\") {\n      const absoluteUrl = createValidAbsoluteUrl(url, docBaseUrl, {\n        addDefaultProtocol: true,\n        tryConvertEncoding: true,\n      });\n      if (absoluteUrl) {\n        resultObj.url = absoluteUrl.href;\n      }\n      resultObj.unsafeUrl = url;\n    }\n    if (dest) {\n      if (dest instanceof Name) {\n        dest = dest.name;\n      }\n      if (typeof dest === \"string\") {\n        resultObj.dest = stringToPDFString(\n          dest,\n          /* keepEscapeSequence = */ true\n        );\n      } else if (isValidExplicitDest(dest)) {\n        resultObj.dest = dest;\n      }\n    }\n\n    // Handle SE (Structure Element) entry: when no other destination has been\n    // found, derive one from the structure element's page and optional bbox.\n    if (\n      !resultObj.dest &&\n      !resultObj.url &&\n      !resultObj.action &&\n      !resultObj.attachment &&\n      !resultObj.setOCGState &&\n      !resultObj.resetForm\n    ) {\n      const seRef = destDict.getRaw(\"SE\");\n      if (seRef instanceof Ref) {\n        try {\n          const seDest = Catalog.#getDestFromStructElement(\n            destDict.xref,\n            seRef\n          );\n          if (seDest) {\n            resultObj.dest = seDest;\n          }\n        } catch (ex) {\n          if (ex instanceof MissingDataException) {\n            throw ex;\n          }\n          info(\"SE parsing failed.\");\n        }\n      }\n    }\n  }\n}\n\nexport { Catalog };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dict, Name } from \"../primitives.js\";\nimport { FeatureTest } from \"../../shared/util.js\";\nimport { Stream } from \"../stream.js\";\n\n// Below this many distinct RGB triples, Flate+Predictor 15 (PNG-style) is\n// generally smaller than JPEG at visually equivalent quality, since the data\n// is dominated by flat regions and sharp edges where JPEG performs poorly.\nconst FLATE_COLOR_COUNT_THRESHOLD = 16384;\n\nfunction createImageDict(xref, width, height, colorSpace) {\n  const image = new Dict(xref);\n  image.set(\"Type\", Name.get(\"XObject\"));\n  image.set(\"Subtype\", Name.get(\"Image\"));\n  image.set(\"BitsPerComponent\", 8);\n  image.setIfName(\"ColorSpace\", colorSpace);\n  image.set(\"Width\", width);\n  image.set(\"Height\", height);\n\n  return image;\n}\n\nfunction createRawImage(buffer, dict) {\n  return new Stream(buffer, 0, buffer.length, dict);\n}\n\nfunction paethPredictor(left, above, upperLeft) {\n  const p = left + above - upperLeft;\n  const pa = Math.abs(p - left);\n  const pb = Math.abs(p - above);\n  const pc = Math.abs(p - upperLeft);\n  if (pa <= pb && pa <= pc) {\n    return left;\n  }\n  return pb <= pc ? above : upperLeft;\n}\n\nfunction applyPNGOptimumFilter(data, width, height, bytesPerPixel) {\n  const rowSize = width * bytesPerPixel;\n  const out = new Uint8Array(height * (rowSize + 1));\n  const candidates = [\n    new Uint8Array(rowSize), // 0: None\n    new Uint8Array(rowSize), // 1: Sub\n    new Uint8Array(rowSize), // 2: Up\n    new Uint8Array(rowSize), // 3: Average\n    new Uint8Array(rowSize), // 4: Paeth\n  ];\n\n  for (let y = 0; y < height; y++) {\n    const rowOffset = y * rowSize;\n    const prevRowOffset = rowOffset - rowSize;\n    const scores = [0, 0, 0, 0, 0];\n    for (let x = 0; x < rowSize; x++) {\n      const offset = rowOffset + x;\n      const cur = data[offset];\n      const left = x >= bytesPerPixel ? data[offset - bytesPerPixel] : 0;\n      const above = y > 0 ? data[prevRowOffset + x] : 0;\n      const upperLeft =\n        y > 0 && x >= bytesPerPixel\n          ? data[prevRowOffset + x - bytesPerPixel]\n          : 0;\n      candidates[0][x] = cur;\n      candidates[1][x] = (cur - left) & 0xff;\n      candidates[2][x] = (cur - above) & 0xff;\n      candidates[3][x] = (cur - ((left + above) >> 1)) & 0xff;\n      candidates[4][x] = (cur - paethPredictor(left, above, upperLeft)) & 0xff;\n      // Sum of absolute signed-byte values: the standard \"minimum sum\"\n      // heuristic for picking the best filter per row.\n      for (let f = 0; f < 5; f++) {\n        const v = candidates[f][x];\n        scores[f] += v < 128 ? v : 256 - v;\n      }\n    }\n\n    let bestFilter = 0;\n    for (let f = 1; f < 5; f++) {\n      if (scores[f] < scores[bestFilter]) {\n        bestFilter = f;\n      }\n    }\n\n    const outOffset = y * (rowSize + 1);\n    out[outOffset] = bestFilter;\n    out.set(candidates[bestFilter], outOffset + 1);\n  }\n\n  return out;\n}\n\nasync function deflate(bytes) {\n  const cs = new CompressionStream(\"deflate\");\n  const writer = cs.writable.getWriter();\n  const writePromise = (async () => {\n    try {\n      await writer.ready;\n      await writer.write(bytes);\n      await writer.ready;\n      await writer.close();\n    } catch (reason) {\n      await writer.abort(reason).catch(() => {});\n      throw reason;\n    }\n  })();\n  const [compressed] = await Promise.all([\n    new Response(cs.readable).bytes(),\n    writePromise.then(() => null),\n  ]);\n  return compressed;\n}\n\nasync function createPNGLikeImage(buffer, width, height, dict) {\n  const bytesPerPixel = buffer.length / (width * height);\n  let compressed;\n  if (typeof CompressionStream === \"function\") {\n    try {\n      const filtered = applyPNGOptimumFilter(\n        buffer,\n        width,\n        height,\n        bytesPerPixel\n      );\n      compressed = await deflate(filtered);\n    } catch {}\n  }\n\n  if (!compressed) {\n    return createRawImage(buffer, dict);\n  }\n\n  dict.setIfName(\"Filter\", \"FlateDecode\");\n  const decodeParms = new Dict(dict.xref);\n  decodeParms.set(\"Predictor\", 15);\n  decodeParms.set(\"Columns\", width);\n  decodeParms.set(\"Colors\", bytesPerPixel);\n  decodeParms.set(\"BitsPerComponent\", 8);\n  dict.set(\"DecodeParms\", decodeParms);\n\n  return createRawImage(compressed, dict);\n}\n\nasync function createImage(bitmap, xref, { closeBitmap = false } = {}) {\n  // TODO: when printing, we could have a specific internal colorspace\n  // (e.g. something like DeviceRGBA) in order avoid any conversion (i.e. no\n  // jpeg, no rgba to rgb conversion, etc...)\n\n  const { width, height } = bitmap;\n  if (\n    !Number.isInteger(width) ||\n    !Number.isInteger(height) ||\n    width <= 0 ||\n    height <= 0\n  ) {\n    if (closeBitmap) {\n      bitmap.close?.();\n    }\n    throw new Error(\n      `createImage: invalid bitmap dimensions ${width}x${height}`\n    );\n  }\n  const canvas = new OffscreenCanvas(width, height);\n  const ctx = canvas.getContext(\"2d\", {\n    alpha: true,\n    willReadFrequently: true,\n  });\n\n  let data;\n  try {\n    ctx.drawImage(bitmap, 0, 0);\n    data = ctx.getImageData(0, 0, width, height).data;\n  } finally {\n    if (closeBitmap) {\n      bitmap.close?.();\n    }\n  }\n  const buf32 = new Uint32Array(\n    data.buffer,\n    data.byteOffset,\n    data.byteLength >> 2\n  );\n\n  // Bitwise masks are signed in JS, so extracting alpha via `(v & 0xff000000)`\n  // would misclassify every opaque pixel as transparent on little-endian\n  // platforms — use the byte-level shift/mask instead.\n  const isLE = FeatureTest.isLittleEndian;\n  const rgbMask = isLE ? 0x00ffffff : 0xffffff00;\n  const colorCounter = new Set();\n  let hasAlpha = false;\n  let useFlate = true;\n  for (const v of buf32) {\n    if ((isLE ? v >>> 24 : v & 0xff) !== 0xff) {\n      hasAlpha = true;\n      break;\n    }\n    if (useFlate) {\n      colorCounter.add((v & rgbMask) >>> 0);\n      if (colorCounter.size > FLATE_COLOR_COUNT_THRESHOLD) {\n        useFlate = false;\n        colorCounter.clear();\n      }\n    }\n  }\n\n  if (hasAlpha) {\n    // JPEG can bleed hidden/edge RGB into semi-transparent pixels. Keep alpha\n    // images lossless instead.\n    useFlate = true;\n  }\n\n  const image = createImageDict(xref, width, height, \"DeviceRGB\");\n\n  let imageStreamPromise;\n  let imageRenderStream = null;\n  if (useFlate) {\n    // Pack RGB triples without compositing over white: the SMask carries the\n    // original alpha and the lossless RGB stream stays exact.\n    const rgbBuffer = new Uint8Array(width * height * 3);\n    for (let i = 0, j = 0, ii = data.length; i < ii; i += 4, j += 3) {\n      rgbBuffer[j] = data[i];\n      rgbBuffer[j + 1] = data[i + 1];\n      rgbBuffer[j + 2] = data[i + 2];\n    }\n    imageStreamPromise = createPNGLikeImage(rgbBuffer, width, height, image);\n    imageRenderStream = createRawImage(\n      rgbBuffer,\n      createImageDict(xref, width, height, \"DeviceRGB\")\n    );\n  } else {\n    image.setIfName(\"Filter\", \"DCTDecode\");\n    imageStreamPromise = canvas\n      .convertToBlob({ type: \"image/jpeg\", quality: 1 })\n      .then(blob => blob.bytes())\n      .then(bytes => createRawImage(bytes, image));\n  }\n\n  let smaskStreamPromise = Promise.resolve(null);\n  let smaskRenderStream = null;\n  if (hasAlpha) {\n    const alphaBuffer = new Uint8Array(buf32.length);\n    if (isLE) {\n      for (let i = 0, ii = buf32.length; i < ii; i++) {\n        alphaBuffer[i] = buf32[i] >>> 24;\n      }\n    } else {\n      for (let i = 0, ii = buf32.length; i < ii; i++) {\n        alphaBuffer[i] = buf32[i] & 0xff;\n      }\n    }\n\n    const smask = createImageDict(xref, width, height, \"DeviceGray\");\n    const smaskRenderDict = createImageDict(xref, width, height, \"DeviceGray\");\n\n    smaskStreamPromise = createPNGLikeImage(alphaBuffer, width, height, smask);\n    smaskRenderStream = createRawImage(alphaBuffer, smaskRenderDict);\n  }\n\n  const [imageStream, smaskStream] = await Promise.all([\n    imageStreamPromise,\n    smaskStreamPromise,\n  ]);\n\n  return {\n    imageStream,\n    imageRenderStream,\n    smaskStream,\n    smaskRenderStream,\n    width,\n    height,\n  };\n}\n\nexport { createImage };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Dict, Ref, RefSet } from \"./primitives.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { MissingDataException } from \"./core_utils.js\";\nimport { warn } from \"../shared/util.js\";\n\nfunction mayHaveChildren(value) {\n  return (\n    value instanceof Ref ||\n    value instanceof Dict ||\n    value instanceof BaseStream ||\n    Array.isArray(value)\n  );\n}\n\nfunction addChildren(node, nodesToVisit) {\n  if (node instanceof Dict) {\n    node = node.getRawValues();\n  } else if (node instanceof BaseStream) {\n    node = node.dict.getRawValues();\n  } else if (!Array.isArray(node)) {\n    return;\n  }\n  for (const rawValue of node) {\n    if (mayHaveChildren(rawValue)) {\n      nodesToVisit.push(rawValue);\n    }\n  }\n}\n\n/**\n * A helper for loading missing data in `Dict` graphs. It traverses the graph\n * depth first and queues up any objects that have missing data. Once it has\n * has traversed as many objects that are available it attempts to bundle the\n * missing data requests and then resume from the nodes that weren't ready.\n *\n * NOTE: It provides protection from circular references by keeping track of\n * loaded references. However, you must be careful not to load any graphs\n * that have references to the catalog or other pages since that will cause the\n * entire PDF document object graph to be traversed.\n */\nclass ObjectLoader {\n  refSet = new RefSet();\n\n  constructor(dict, keys, xref) {\n    this.dict = dict;\n    this.keys = keys;\n    this.xref = xref;\n  }\n\n  async load() {\n    const { keys, dict } = this;\n    // Setup the initial nodes to visit.\n    const nodesToVisit = [];\n    for (const key of keys) {\n      const rawValue = dict.getRaw(key);\n      // Skip nodes that are guaranteed to be empty.\n      if (rawValue !== undefined) {\n        nodesToVisit.push(rawValue);\n      }\n    }\n    await this.#walk(nodesToVisit);\n\n    this.refSet = null; // Everything is loaded, clear the cache.\n  }\n\n  async #walk(nodesToVisit) {\n    const nodesToRevisit = [];\n    const pendingRequests = [];\n    // DFS walk of the object graph.\n    while (nodesToVisit.length) {\n      let currentNode = nodesToVisit.pop();\n\n      // Only references or chunked streams can cause missing data exceptions.\n      if (currentNode instanceof Ref) {\n        // Skip nodes that have already been visited.\n        if (this.refSet.has(currentNode)) {\n          continue;\n        }\n        try {\n          this.refSet.put(currentNode);\n          currentNode = this.xref.fetch(currentNode);\n        } catch (ex) {\n          if (!(ex instanceof MissingDataException)) {\n            warn(`ObjectLoader.#walk - requesting all data: \"${ex}\".`);\n\n            await this.xref.stream.manager.requestAllChunks();\n            return;\n          }\n          nodesToRevisit.push(currentNode);\n          pendingRequests.push({ begin: ex.begin, end: ex.end });\n        }\n      }\n      if (currentNode instanceof BaseStream) {\n        const baseStreams = currentNode.getBaseStreams();\n        if (baseStreams) {\n          let foundMissingData = false;\n          for (const stream of baseStreams) {\n            if (stream.isDataLoaded) {\n              continue;\n            }\n            foundMissingData = true;\n            pendingRequests.push({ begin: stream.start, end: stream.end });\n          }\n          if (foundMissingData) {\n            nodesToRevisit.push(currentNode);\n          }\n        }\n      }\n\n      addChildren(currentNode, nodesToVisit);\n    }\n\n    if (pendingRequests.length) {\n      await this.xref.stream.manager.requestRanges(pendingRequests);\n\n      for (const node of nodesToRevisit) {\n        // Remove any reference nodes from the current `RefSet` so they\n        // aren't skipped when we revist them.\n        if (node instanceof Ref) {\n          this.refSet.remove(node);\n        }\n      }\n      await this.#walk(nodesToRevisit);\n    }\n  }\n\n  static async load(obj, keys, xref) {\n    // Don't walk the graph if all the data is already loaded.\n    if (xref.stream.isDataLoaded) {\n      return;\n    }\n    // eslint-disable-next-line no-restricted-syntax\n    const objLoader = new ObjectLoader(obj, keys, xref);\n    await objLoader.load();\n  }\n}\n\nexport { ObjectLoader };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// We use these symbols to avoid name conflict between tags\n// and properties/methods names.\nconst $acceptWhitespace = Symbol();\nconst $addHTML = Symbol();\nconst $appendChild = Symbol();\nconst $childrenToHTML = Symbol();\nconst $clean = Symbol();\nconst $cleanPage = Symbol();\nconst $cleanup = Symbol();\nconst $clone = Symbol();\nconst $consumed = Symbol();\nconst $content = Symbol(\"content\");\nconst $data = Symbol(\"data\");\nconst $dump = Symbol();\nconst $extra = Symbol(\"extra\");\nconst $finalize = Symbol();\nconst $flushHTML = Symbol();\nconst $getAttributeIt = Symbol();\nconst $getAttributes = Symbol();\nconst $getAvailableSpace = Symbol();\nconst $getChildrenByClass = Symbol();\nconst $getChildrenByName = Symbol();\nconst $getChildrenByNameIt = Symbol();\nconst $getDataValue = Symbol();\nconst $getExtra = Symbol();\nconst $getRealChildrenByNameIt = Symbol();\nconst $getChildren = Symbol();\nconst $getContainedChildren = Symbol();\nconst $getNextPage = Symbol();\nconst $getSubformParent = Symbol();\nconst $getParent = Symbol();\nconst $getTemplateRoot = Symbol();\nconst $globalData = Symbol();\nconst $hasSettableValue = Symbol();\nconst $ids = Symbol();\nconst $indexOf = Symbol();\nconst $insertAt = Symbol();\nconst $isCDATAXml = Symbol();\nconst $isBindable = Symbol();\nconst $isDataValue = Symbol();\nconst $isDescendent = Symbol();\nconst $isNsAgnostic = Symbol();\nconst $isSplittable = Symbol();\nconst $isThereMoreWidth = Symbol();\nconst $isTransparent = Symbol();\nconst $isUsable = Symbol();\nconst $lastAttribute = Symbol();\nconst $namespaceId = Symbol(\"namespaceId\");\nconst $nodeName = Symbol(\"nodeName\");\nconst $nsAttributes = Symbol();\nconst $onChild = Symbol();\nconst $onChildCheck = Symbol();\nconst $onText = Symbol();\nconst $pushGlyphs = Symbol();\nconst $popPara = Symbol();\nconst $pushPara = Symbol();\nconst $removeChild = Symbol();\nconst $root = Symbol(\"root\");\nconst $resolvePrototypes = Symbol();\nconst $searchNode = Symbol();\nconst $setId = Symbol();\nconst $setSetAttributes = Symbol();\nconst $setValue = Symbol();\nconst $tabIndex = Symbol();\nconst $text = Symbol();\nconst $toPages = Symbol();\nconst $toHTML = Symbol();\nconst $toString = Symbol();\nconst $toStyle = Symbol();\nconst $uid = Symbol(\"uid\");\n\nexport {\n  $acceptWhitespace,\n  $addHTML,\n  $appendChild,\n  $childrenToHTML,\n  $clean,\n  $cleanPage,\n  $cleanup,\n  $clone,\n  $consumed,\n  $content,\n  $data,\n  $dump,\n  $extra,\n  $finalize,\n  $flushHTML,\n  $getAttributeIt,\n  $getAttributes,\n  $getAvailableSpace,\n  $getChildren,\n  $getChildrenByClass,\n  $getChildrenByName,\n  $getChildrenByNameIt,\n  $getContainedChildren,\n  $getDataValue,\n  $getExtra,\n  $getNextPage,\n  $getParent,\n  $getRealChildrenByNameIt,\n  $getSubformParent,\n  $getTemplateRoot,\n  $globalData,\n  $hasSettableValue,\n  $ids,\n  $indexOf,\n  $insertAt,\n  $isBindable,\n  $isCDATAXml,\n  $isDataValue,\n  $isDescendent,\n  $isNsAgnostic,\n  $isSplittable,\n  $isThereMoreWidth,\n  $isTransparent,\n  $isUsable,\n  $lastAttribute,\n  $namespaceId,\n  $nodeName,\n  $nsAttributes,\n  $onChild,\n  $onChildCheck,\n  $onText,\n  $popPara,\n  $pushGlyphs,\n  $pushPara,\n  $removeChild,\n  $resolvePrototypes,\n  $root,\n  $searchNode,\n  $setId,\n  $setSetAttributes,\n  $setValue,\n  $tabIndex,\n  $text,\n  $toHTML,\n  $toPages,\n  $toString,\n  $toStyle,\n  $uid,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst $buildXFAObject = Symbol();\n\nconst NamespaceIds = {\n  config: {\n    id: 0,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xci/\"),\n  },\n  connectionSet: {\n    id: 1,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-connection-set/\"),\n  },\n  datasets: {\n    id: 2,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-data/\"),\n  },\n  form: {\n    id: 3,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-form/\"),\n  },\n  localeSet: {\n    id: 4,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-locale-set/\"),\n  },\n  pdf: {\n    id: 5,\n    check: ns => ns === \"http://ns.adobe.com/xdp/pdf/\",\n  },\n  signature: {\n    id: 6,\n    check: ns => ns === \"http://www.w3.org/2000/09/xmldsig#\",\n  },\n  sourceSet: {\n    id: 7,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-source-set/\"),\n  },\n  stylesheet: {\n    id: 8,\n    check: ns => ns === \"http://www.w3.org/1999/XSL/Transform\",\n  },\n  template: {\n    id: 9,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xfa-template/\"),\n  },\n  xdc: {\n    id: 10,\n    check: ns => ns.startsWith(\"http://www.xfa.org/schema/xdc/\"),\n  },\n  xdp: {\n    id: 11,\n    check: ns => ns === \"http://ns.adobe.com/xdp/\",\n  },\n  xfdf: {\n    id: 12,\n    check: ns => ns === \"http://ns.adobe.com/xfdf/\",\n  },\n  xhtml: {\n    id: 13,\n    check: ns => ns === \"http://www.w3.org/1999/xhtml\",\n  },\n  xmpmeta: {\n    id: 14,\n    check: ns => ns === \"http://ns.adobe.com/xmpmeta/\",\n  },\n};\n\nexport { $buildXFAObject, NamespaceIds };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp } from \"../../shared/math_clamp.js\";\nimport { shadow } from \"../../shared/util.js\";\n\nconst dimConverters = {\n  pt: x => x,\n  cm: x => (x / 2.54) * 72,\n  mm: x => (x / (10 * 2.54)) * 72,\n  in: x => x * 72,\n  px: x => x,\n};\nconst measurementPattern = /([+-]?\\d+\\.?\\d*)(.*)/;\n\nfunction stripQuotes(str) {\n  if (str.startsWith(\"'\") || str.startsWith('\"')) {\n    return str.slice(1, -1);\n  }\n  return str;\n}\n\nfunction getInteger({ data, defaultValue, validate }) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  const n = parseInt(data, 10);\n  if (!isNaN(n) && validate(n)) {\n    return n;\n  }\n  return defaultValue;\n}\n\nfunction getFloat({ data, defaultValue, validate }) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  const n = parseFloat(data);\n  if (!isNaN(n) && validate(n)) {\n    return n;\n  }\n  return defaultValue;\n}\n\nfunction getKeyword({ data, defaultValue, validate }) {\n  if (!data) {\n    return defaultValue;\n  }\n  data = data.trim();\n  if (validate(data)) {\n    return data;\n  }\n  return defaultValue;\n}\n\nfunction getStringOption(data, options) {\n  return getKeyword({\n    data,\n    defaultValue: options[0],\n    validate: k => options.includes(k),\n  });\n}\n\nfunction getMeasurement(str, def = \"0\") {\n  def ||= \"0\";\n  if (!str) {\n    return getMeasurement(def);\n  }\n  const match = str.trim().match(measurementPattern);\n  if (!match) {\n    return getMeasurement(def);\n  }\n  const [, valueStr, unit] = match;\n  const value = parseFloat(valueStr);\n  if (isNaN(value)) {\n    return getMeasurement(def);\n  }\n\n  if (value === 0) {\n    return 0;\n  }\n\n  const conv = dimConverters[unit];\n  if (conv) {\n    return conv(value);\n  }\n\n  return value;\n}\n\nfunction getRatio(data) {\n  if (!data) {\n    return { num: 1, den: 1 };\n  }\n  const ratio = data\n    .split(\":\", 2)\n    .map(x => parseFloat(x.trim()))\n    .filter(x => !isNaN(x));\n  if (ratio.length === 1) {\n    ratio.push(1);\n  }\n\n  if (ratio.length === 0) {\n    return { num: 1, den: 1 };\n  }\n\n  const [num, den] = ratio;\n  return { num, den };\n}\n\nfunction getRelevant(data) {\n  if (!data) {\n    return [];\n  }\n  return data\n    .trim()\n    .split(/\\s+/)\n    .map(e => ({\n      excluded: e[0] === \"-\",\n      viewname: e.substring(1),\n    }));\n}\n\nfunction getColor(data, def = [0, 0, 0]) {\n  let [r, g, b] = def;\n  if (!data) {\n    return { r, g, b };\n  }\n  const color = data\n    .split(\",\", 3)\n    .map(c => MathClamp(parseInt(c.trim(), 10), 0, 255))\n    .map(c => (isNaN(c) ? 0 : c));\n\n  if (color.length < 3) {\n    return { r, g, b };\n  }\n\n  [r, g, b] = color;\n  return { r, g, b };\n}\n\nfunction getBBox(data) {\n  const def = -1;\n  if (!data) {\n    return { x: def, y: def, width: def, height: def };\n  }\n  const bbox = data.split(\",\", 4).map(m => getMeasurement(m.trim(), \"-1\"));\n\n  if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) {\n    return { x: def, y: def, width: def, height: def };\n  }\n\n  const [x, y, width, height] = bbox;\n  return { x, y, width, height };\n}\n\nclass HTMLResult {\n  static get FAILURE() {\n    return shadow(this, \"FAILURE\", new HTMLResult(false, null, null, null));\n  }\n\n  static get EMPTY() {\n    return shadow(this, \"EMPTY\", new HTMLResult(true, null, null, null));\n  }\n\n  constructor(success, html, bbox, breakNode) {\n    this.success = success;\n    this.html = html;\n    this.bbox = bbox;\n    this.breakNode = breakNode;\n  }\n\n  isBreak() {\n    return !!this.breakNode;\n  }\n\n  static breakNode(node) {\n    return new HTMLResult(false, null, null, node);\n  }\n\n  static success(html, bbox = null) {\n    return new HTMLResult(true, html, bbox, null);\n  }\n}\n\nexport {\n  getBBox,\n  getColor,\n  getFloat,\n  getInteger,\n  getKeyword,\n  getMeasurement,\n  getRatio,\n  getRelevant,\n  getStringOption,\n  HTMLResult,\n  stripQuotes,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeObj, warn } from \"../../shared/util.js\";\nimport { $globalData } from \"./symbol_utils.js\";\nimport { stripQuotes } from \"./utils.js\";\n\nclass FontFinder {\n  constructor(pdfFonts) {\n    this.fonts = new Map();\n    this.cache = new Map();\n    this.warned = new Set();\n    this.defaultFont = null;\n    this.add(pdfFonts);\n  }\n\n  add(pdfFonts, reallyMissingFonts = null) {\n    for (const pdfFont of pdfFonts) {\n      this.addPdfFont(pdfFont);\n    }\n    for (const pdfFont of this.fonts.values()) {\n      pdfFont.regular ||= pdfFont.italic || pdfFont.bold || pdfFont.bolditalic;\n    }\n\n    if (!reallyMissingFonts || reallyMissingFonts.size === 0) {\n      return;\n    }\n    const myriad = this.fonts.get(\"PdfJS-Fallback-PdfJS-XFA\");\n    for (const missing of reallyMissingFonts) {\n      this.fonts.set(missing, myriad);\n    }\n  }\n\n  addPdfFont(pdfFont) {\n    const cssFontInfo = pdfFont.cssFontInfo;\n    const name = cssFontInfo.fontFamily;\n    const font = this.fonts.getOrInsertComputed(name, makeObj);\n    this.defaultFont ??= font;\n\n    let property = \"\";\n    const fontWeight = parseFloat(cssFontInfo.fontWeight);\n    if (parseFloat(cssFontInfo.italicAngle) !== 0) {\n      property = fontWeight >= 700 ? \"bolditalic\" : \"italic\";\n    } else if (fontWeight >= 700) {\n      property = \"bold\";\n    }\n\n    if (!property) {\n      if (pdfFont.name.includes(\"Bold\") || pdfFont.psName?.includes(\"Bold\")) {\n        property = \"bold\";\n      }\n      if (\n        pdfFont.name.includes(\"Italic\") ||\n        pdfFont.name.endsWith(\"It\") ||\n        pdfFont.psName?.includes(\"Italic\") ||\n        pdfFont.psName?.endsWith(\"It\")\n      ) {\n        property += \"italic\";\n      }\n    }\n    property ||= \"regular\";\n\n    font[property] = pdfFont;\n  }\n\n  getDefault() {\n    return this.defaultFont;\n  }\n\n  find(fontName, mustWarn = true) {\n    let font = this.fonts.get(fontName) || this.cache.get(fontName);\n    if (font) {\n      return font;\n    }\n\n    const pattern = /[,\\-_ ]|bolditalic|bold|italic|regular|it/gi;\n    let name = fontName.replaceAll(pattern, \"\");\n    font = this.fonts.get(name);\n    if (font) {\n      this.cache.set(fontName, font);\n      return font;\n    }\n    name = name.toLowerCase();\n\n    const maybe = [];\n    for (const [family, pdfFont] of this.fonts) {\n      if (family.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n        maybe.push(pdfFont);\n      }\n    }\n\n    if (maybe.length === 0) {\n      for (const pdfFont of this.fonts.values()) {\n        if (\n          pdfFont.regular.name\n            ?.replaceAll(pattern, \"\")\n            .toLowerCase()\n            .startsWith(name)\n        ) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n\n    if (maybe.length === 0) {\n      name = name.replaceAll(/psmt|mt/gi, \"\");\n      for (const [family, pdfFont] of this.fonts) {\n        if (family.replaceAll(pattern, \"\").toLowerCase().startsWith(name)) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n\n    if (maybe.length === 0) {\n      for (const pdfFont of this.fonts.values()) {\n        if (\n          pdfFont.regular.name\n            ?.replaceAll(pattern, \"\")\n            .toLowerCase()\n            .startsWith(name)\n        ) {\n          maybe.push(pdfFont);\n        }\n      }\n    }\n\n    if (maybe.length >= 1) {\n      if (maybe.length !== 1 && mustWarn) {\n        warn(`XFA - Too many choices to guess the correct font: ${fontName}`);\n      }\n      this.cache.set(fontName, maybe[0]);\n      return maybe[0];\n    }\n\n    if (mustWarn && !this.warned.has(fontName)) {\n      this.warned.add(fontName);\n      warn(`XFA - Cannot find the font: ${fontName}`);\n    }\n    return null;\n  }\n}\n\nfunction selectFont(xfaFont, typeface) {\n  if (xfaFont.posture === \"italic\") {\n    if (xfaFont.weight === \"bold\") {\n      return typeface.bolditalic;\n    }\n    return typeface.italic;\n  } else if (xfaFont.weight === \"bold\") {\n    return typeface.bold;\n  }\n\n  return typeface.regular;\n}\n\nfunction getMetrics(xfaFont, real = false) {\n  let pdfFont = null;\n  if (xfaFont) {\n    const name = stripQuotes(xfaFont.typeface);\n    const typeface = xfaFont[$globalData].fontFinder.find(name);\n    pdfFont = selectFont(xfaFont, typeface);\n  }\n\n  if (!pdfFont) {\n    return {\n      lineHeight: 12,\n      lineGap: 2,\n      lineNoGap: 10,\n    };\n  }\n\n  const size = xfaFont.size || 10;\n  const lineHeight = pdfFont.lineHeight\n    ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight)\n    : 1.2;\n  const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;\n  return {\n    lineHeight: lineHeight * size,\n    lineGap: lineGap * size,\n    lineNoGap: Math.max(1, lineHeight - lineGap) * size,\n  };\n}\n\nexport { FontFinder, getMetrics, selectFont };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { selectFont } from \"./fonts.js\";\n\nconst WIDTH_FACTOR = 1.02;\n\nclass FontInfo {\n  constructor(xfaFont, margin, lineHeight, fontFinder) {\n    this.lineHeight = lineHeight;\n    this.paraMargin = margin || {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0,\n    };\n\n    if (!xfaFont) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n      return;\n    }\n\n    this.xfaFont = {\n      typeface: xfaFont.typeface,\n      posture: xfaFont.posture,\n      weight: xfaFont.weight,\n      size: xfaFont.size,\n      letterSpacing: xfaFont.letterSpacing,\n    };\n    const typeface = fontFinder.find(xfaFont.typeface);\n    if (!typeface) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n      return;\n    }\n\n    this.pdfFont = selectFont(xfaFont, typeface);\n\n    if (!this.pdfFont) {\n      [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);\n    }\n  }\n\n  defaultFont(fontFinder) {\n    // TODO: Add a default font based on Liberation.\n    const font =\n      fontFinder.find(\"Helvetica\", false) ||\n      fontFinder.find(\"Myriad Pro\", false) ||\n      fontFinder.find(\"Arial\", false) ||\n      fontFinder.getDefault();\n    if (font?.regular) {\n      const pdfFont = font.regular;\n      const info = pdfFont.cssFontInfo;\n      const xfaFont = {\n        typeface: info.fontFamily,\n        posture: \"normal\",\n        weight: \"normal\",\n        size: 10,\n        letterSpacing: 0,\n      };\n      return [pdfFont, xfaFont];\n    }\n\n    const xfaFont = {\n      typeface: \"Courier\",\n      posture: \"normal\",\n      weight: \"normal\",\n      size: 10,\n      letterSpacing: 0,\n    };\n    return [null, xfaFont];\n  }\n}\n\nclass FontSelector {\n  constructor(\n    defaultXfaFont,\n    defaultParaMargin,\n    defaultLineHeight,\n    fontFinder\n  ) {\n    this.fontFinder = fontFinder;\n    this.stack = [\n      new FontInfo(\n        defaultXfaFont,\n        defaultParaMargin,\n        defaultLineHeight,\n        fontFinder\n      ),\n    ];\n  }\n\n  pushData(xfaFont, margin, lineHeight) {\n    const lastFont = this.stack.at(-1);\n    for (const name of [\n      \"typeface\",\n      \"posture\",\n      \"weight\",\n      \"size\",\n      \"letterSpacing\",\n    ]) {\n      xfaFont[name] ||= lastFont.xfaFont[name];\n    }\n\n    for (const name of [\"top\", \"bottom\", \"left\", \"right\"]) {\n      if (isNaN(margin[name])) {\n        margin[name] = lastFont.paraMargin[name];\n      }\n    }\n\n    const fontInfo = new FontInfo(\n      xfaFont,\n      margin,\n      lineHeight || lastFont.lineHeight,\n      this.fontFinder\n    );\n    fontInfo.pdfFont ||= lastFont.pdfFont;\n\n    this.stack.push(fontInfo);\n  }\n\n  popFont() {\n    this.stack.pop();\n  }\n\n  topFont() {\n    return this.stack.at(-1);\n  }\n}\n\n/**\n * Compute a text area dimensions based on font metrics.\n */\nclass TextMeasure {\n  constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) {\n    this.glyphs = [];\n    this.fontSelector = new FontSelector(\n      defaultXfaFont,\n      defaultParaMargin,\n      defaultLineHeight,\n      fonts\n    );\n    this.extraHeight = 0;\n  }\n\n  pushData(xfaFont, margin, lineHeight) {\n    this.fontSelector.pushData(xfaFont, margin, lineHeight);\n  }\n\n  popFont(xfaFont) {\n    return this.fontSelector.popFont();\n  }\n\n  addPara() {\n    const lastFont = this.fontSelector.topFont();\n    this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom;\n  }\n\n  addString(str) {\n    if (!str) {\n      return;\n    }\n\n    const lastFont = this.fontSelector.topFont();\n    const fontSize = lastFont.xfaFont.size;\n    if (lastFont.pdfFont) {\n      const letterSpacing = lastFont.xfaFont.letterSpacing;\n      const pdfFont = lastFont.pdfFont;\n      const fontLineHeight = pdfFont.lineHeight || 1.2;\n      const lineHeight =\n        lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize;\n      const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap;\n      const noGap = fontLineHeight - lineGap;\n      const firstLineHeight = Math.max(1, noGap) * fontSize;\n      const scale = fontSize / 1000;\n      const fallbackWidth =\n        pdfFont.defaultWidth || pdfFont.charsToGlyphs(\" \")[0].width;\n\n      for (const line of str.split(/[\\u2029\\n]/)) {\n        const encodedLine = pdfFont.encodeString(line).join(\"\");\n        const glyphs = pdfFont.charsToGlyphs(encodedLine);\n\n        for (const glyph of glyphs) {\n          const width = glyph.width || fallbackWidth;\n          this.glyphs.push([\n            width * scale + letterSpacing,\n            lineHeight,\n            firstLineHeight,\n            glyph.unicode,\n            false,\n          ]);\n        }\n\n        this.glyphs.push([0, 0, 0, \"\\n\", true]);\n      }\n      this.glyphs.pop();\n      return;\n    }\n\n    // When we have no font in the pdf, just use the font size as default width.\n    for (const line of str.split(/[\\u2029\\n]/)) {\n      for (const char of line.split(\"\")) {\n        this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]);\n      }\n\n      this.glyphs.push([0, 0, 0, \"\\n\", true]);\n    }\n    this.glyphs.pop();\n  }\n\n  compute(maxWidth) {\n    let lastSpacePos = -1,\n      lastSpaceWidth = 0,\n      width = 0,\n      height = 0,\n      currentLineWidth = 0,\n      currentLineHeight = 0;\n    let isBroken = false;\n    let isFirstLine = true;\n\n    for (let i = 0, ii = this.glyphs.length; i < ii; i++) {\n      const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] =\n        this.glyphs[i];\n      const isSpace = char === \" \";\n      const glyphHeight = isFirstLine ? firstLineHeight : lineHeight;\n      if (isEOL) {\n        width = Math.max(width, currentLineWidth);\n        currentLineWidth = 0;\n        height += currentLineHeight;\n        currentLineHeight = glyphHeight;\n        lastSpacePos = -1;\n        lastSpaceWidth = 0;\n        isFirstLine = false;\n        continue;\n      }\n\n      if (isSpace) {\n        if (currentLineWidth + glyphWidth > maxWidth) {\n          // We can break here but the space is not taken into account.\n          width = Math.max(width, currentLineWidth);\n          currentLineWidth = 0;\n          height += currentLineHeight;\n          currentLineHeight = glyphHeight;\n          lastSpacePos = -1;\n          lastSpaceWidth = 0;\n          isBroken = true;\n          isFirstLine = false;\n        } else {\n          currentLineHeight = Math.max(glyphHeight, currentLineHeight);\n          lastSpaceWidth = currentLineWidth;\n          currentLineWidth += glyphWidth;\n          lastSpacePos = i;\n        }\n        continue;\n      }\n\n      if (currentLineWidth + glyphWidth > maxWidth) {\n        // We must break to the last white position (if available)\n        height += currentLineHeight;\n        currentLineHeight = glyphHeight;\n        if (lastSpacePos !== -1) {\n          i = lastSpacePos;\n          width = Math.max(width, lastSpaceWidth);\n          currentLineWidth = 0;\n          lastSpacePos = -1;\n          lastSpaceWidth = 0;\n        } else {\n          // Just break in the middle of the word\n          width = Math.max(width, currentLineWidth);\n          currentLineWidth = glyphWidth;\n        }\n        isBroken = true;\n        isFirstLine = false;\n\n        continue;\n      }\n\n      currentLineWidth += glyphWidth;\n      currentLineHeight = Math.max(glyphHeight, currentLineHeight);\n    }\n\n    width = Math.max(width, currentLineWidth);\n    height += currentLineHeight + this.extraHeight;\n\n    return { width: WIDTH_FACTOR * width, height, isBroken };\n  }\n}\n\nexport { TextMeasure };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $getChildren,\n  $getChildrenByClass,\n  $getChildrenByName,\n  $getParent,\n} from \"./symbol_utils.js\";\nimport { makeMap, warn } from \"../../shared/util.js\";\n\nconst namePattern = /^[^.[]+/;\nconst indexPattern = /^[^\\]]+/;\nconst operators = {\n  dot: 0,\n  dotDot: 1,\n  dotHash: 2,\n  dotBracket: 3,\n  dotParen: 4,\n};\n\nconst shortcuts = new Map([\n  [\"$data\", (root, current) => (root.datasets ? root.datasets.data : root)],\n  [\n    \"$record\",\n    (root, current) =>\n      (root.datasets ? root.datasets.data : root)[$getChildren]()[0],\n  ],\n  [\"$template\", (root, current) => root.template],\n  [\"$connectionSet\", (root, current) => root.connectionSet],\n  [\"$form\", (root, current) => root.form],\n  [\"$layout\", (root, current) => root.layout],\n  [\"$host\", (root, current) => root.host],\n  [\"$dataWindow\", (root, current) => root.dataWindow],\n  [\"$event\", (root, current) => root.event],\n  [\"!\", (root, current) => root.datasets],\n  [\"$xfa\", (root, current) => root],\n  [\"xfa\", (root, current) => root],\n  [\"$\", (root, current) => current],\n]);\n\nconst somCache = new WeakMap();\n\nfunction parseIndex(index) {\n  index = index.trim();\n  if (index === \"*\") {\n    return Infinity;\n  }\n  return parseInt(index, 10) || 0;\n}\n\n// For now expressions containing .[...] or .(...) are not\n// evaluated so don't parse them.\n// TODO: implement that stuff and the remove the noExpr param.\nfunction parseExpression(expr, dotDotAllowed, noExpr = true) {\n  let match = expr.match(namePattern);\n  if (!match) {\n    return null;\n  }\n\n  let [name] = match;\n  const parsed = [\n    {\n      name,\n      cacheName: \".\" + name,\n      index: 0,\n      js: null,\n      formCalc: null,\n      operator: operators.dot,\n    },\n  ];\n\n  let pos = name.length;\n\n  while (pos < expr.length) {\n    const spos = pos;\n    const char = expr.charAt(pos++);\n    if (char === \"[\") {\n      match = expr.slice(pos).match(indexPattern);\n      if (!match) {\n        warn(\"XFA - Invalid index in SOM expression\");\n        return null;\n      }\n      parsed.at(-1).index = parseIndex(match[0]);\n      pos += match[0].length + 1;\n      continue;\n    }\n\n    let operator;\n    switch (expr.charAt(pos)) {\n      case \".\":\n        if (!dotDotAllowed) {\n          return null;\n        }\n        pos++;\n        operator = operators.dotDot;\n        break;\n      case \"#\":\n        pos++;\n        operator = operators.dotHash;\n        break;\n      case \"[\":\n        if (noExpr) {\n          warn(\n            \"XFA - SOM expression contains a FormCalc subexpression which is not supported for now.\"\n          );\n          return null;\n        }\n        // TODO: FormCalc expression so need to use the parser\n        operator = operators.dotBracket;\n        break;\n      case \"(\":\n        if (noExpr) {\n          warn(\n            \"XFA - SOM expression contains a JavaScript subexpression which is not supported for now.\"\n          );\n          return null;\n        }\n        // TODO:\n        // JavaScript expression: should be a boolean operation with a path\n        // so maybe we can have our own parser for that stuff or\n        // maybe use the formcalc one.\n        operator = operators.dotParen;\n        break;\n      default:\n        operator = operators.dot;\n        break;\n    }\n\n    match = expr.slice(pos).match(namePattern);\n    if (!match) {\n      break;\n    }\n\n    [name] = match;\n    pos += name.length;\n    parsed.push({\n      name,\n      cacheName: expr.slice(spos, pos),\n      operator,\n      index: 0,\n      js: null,\n      formCalc: null,\n    });\n  }\n  return parsed;\n}\n\nfunction searchNode(\n  root,\n  container,\n  expr,\n  dotDotAllowed = true,\n  useCache = true\n) {\n  const parsed = parseExpression(expr, dotDotAllowed);\n  if (!parsed) {\n    return null;\n  }\n\n  const fn = shortcuts.get(parsed[0].name);\n  let i = 0;\n  let isQualified;\n  if (fn) {\n    isQualified = true;\n    root = [fn(root, container)];\n    i = 1;\n  } else {\n    isQualified = container === null;\n    root = [container || root];\n  }\n\n  for (let ii = parsed.length; i < ii; i++) {\n    const { name, cacheName, operator, index } = parsed[i];\n    const nodes = [];\n    for (const node of root) {\n      if (!node.isXFAObject) {\n        continue;\n      }\n\n      let children, cached;\n\n      if (useCache) {\n        cached = somCache.getOrInsertComputed(node, makeMap);\n        children = cached.get(cacheName);\n      }\n\n      if (!children) {\n        switch (operator) {\n          case operators.dot:\n            children = node[$getChildrenByName](name, false);\n            break;\n          case operators.dotDot:\n            children = node[$getChildrenByName](name, true);\n            break;\n          case operators.dotHash:\n            children = node[$getChildrenByClass](name);\n            children = children.isXFAObjectArray\n              ? children.children\n              : [children];\n            break;\n          default:\n            break;\n        }\n        if (useCache) {\n          cached.set(cacheName, children);\n        }\n      }\n\n      if (children.length > 0) {\n        nodes.push(children);\n      }\n    }\n\n    if (nodes.length === 0 && !isQualified && i === 0) {\n      // We've an unqualified expression and we didn't find anything\n      // so look at container and siblings of container and so on.\n      // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.364.2157&rep=rep1&type=pdf#page=114\n      const parent = container[$getParent]();\n      container = parent;\n      if (!container) {\n        return null;\n      }\n      i = -1;\n      root = [container];\n      continue;\n    }\n\n    root = isFinite(index)\n      ? nodes.filter(node => index < node.length).map(node => node[index])\n      : nodes.flat();\n  }\n\n  if (root.length === 0) {\n    return null;\n  }\n\n  return root;\n}\n\nfunction createDataNode(root, container, expr) {\n  const parsed = parseExpression(expr);\n  if (!parsed) {\n    return null;\n  }\n\n  if (parsed.some(x => x.operator === operators.dotDot)) {\n    return null;\n  }\n\n  const fn = shortcuts.get(parsed[0].name);\n  let i = 0;\n  if (fn) {\n    root = fn(root, container);\n    i = 1;\n  } else {\n    root = container || root;\n  }\n\n  for (let ii = parsed.length; i < ii; i++) {\n    const { name, operator, index } = parsed[i];\n    if (!isFinite(index)) {\n      parsed[i].index = 0;\n      return root.createNodes(parsed.slice(i));\n    }\n\n    let children;\n    switch (operator) {\n      case operators.dot:\n        children = root[$getChildrenByName](name, false);\n        break;\n      case operators.dotDot:\n        children = root[$getChildrenByName](name, true);\n        break;\n      case operators.dotHash:\n        children = root[$getChildrenByClass](name);\n        children = children.isXFAObjectArray ? children.children : [children];\n        break;\n      default:\n        break;\n    }\n\n    if (children.length === 0) {\n      return root.createNodes(parsed.slice(i));\n    }\n\n    if (index < children.length) {\n      const child = children[index];\n      if (!child.isXFAObject) {\n        warn(`XFA - Cannot create a node.`);\n        return null;\n      }\n      root = child;\n    } else {\n      parsed[i].index = index - children.length;\n      return root.createNodes(parsed.slice(i));\n    }\n  }\n  return null;\n}\n\nexport { createDataNode, searchNode };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $acceptWhitespace,\n  $addHTML,\n  $appendChild,\n  $childrenToHTML,\n  $clean,\n  $cleanup,\n  $clone,\n  $consumed,\n  $content,\n  $dump,\n  $extra,\n  $finalize,\n  $flushHTML,\n  $getAttributeIt,\n  $getAttributes,\n  $getAvailableSpace,\n  $getChildren,\n  $getChildrenByClass,\n  $getChildrenByName,\n  $getChildrenByNameIt,\n  $getContainedChildren,\n  $getDataValue,\n  $getParent,\n  $getRealChildrenByNameIt,\n  $getSubformParent,\n  $getTemplateRoot,\n  $globalData,\n  $hasSettableValue,\n  $indexOf,\n  $insertAt,\n  $isBindable,\n  $isCDATAXml,\n  $isDataValue,\n  $isDescendent,\n  $isNsAgnostic,\n  $isSplittable,\n  $isThereMoreWidth,\n  $isTransparent,\n  $lastAttribute,\n  $namespaceId,\n  $nodeName,\n  $nsAttributes,\n  $onChild,\n  $onChildCheck,\n  $onText,\n  $popPara,\n  $pushPara,\n  $removeChild,\n  $resolvePrototypes,\n  $root,\n  $setId,\n  $setSetAttributes,\n  $setValue,\n  $text,\n  $toHTML,\n  $toString,\n  $toStyle,\n  $uid,\n} from \"./symbol_utils.js\";\nimport { getInteger, getKeyword, HTMLResult } from \"./utils.js\";\nimport { shadow, utf8StringToString, warn } from \"../../shared/util.js\";\nimport { encodeToXmlString } from \"../core_utils.js\";\nimport { NamespaceIds } from \"./namespaces.js\";\nimport { searchNode } from \"./som.js\";\n\nconst _applyPrototype = Symbol();\nconst _attributes = Symbol();\nconst _attributeNames = Symbol();\nconst _children = Symbol(\"_children\");\nconst _cloneAttribute = Symbol();\nconst _dataValue = Symbol();\nconst _defaultValue = Symbol();\nconst _filteredChildrenGenerator = Symbol();\nconst _getPrototype = Symbol();\nconst _getUnsetAttributes = Symbol();\nconst _hasChildren = Symbol();\nconst _max = Symbol();\nconst _options = Symbol();\nconst _parent = Symbol(\"parent\");\nconst _resolvePrototypesHelper = Symbol();\nconst _setAttributes = Symbol();\nconst _validator = Symbol();\n\nlet uid = 0;\n\nconst NS_DATASETS = NamespaceIds.datasets.id;\n\nclass XFAObject {\n  constructor(nsId, name, hasChildren = false) {\n    this[$namespaceId] = nsId;\n    this[$nodeName] = name;\n    this[_hasChildren] = hasChildren;\n    this[_parent] = null;\n    this[_children] = [];\n    this[$uid] = `${name}${uid++}`;\n    this[$globalData] = null;\n  }\n\n  get isXFAObject() {\n    return true;\n  }\n\n  get isXFAObjectArray() {\n    return false;\n  }\n\n  createNodes(path) {\n    let root = this,\n      node = null;\n    for (const { name, index } of path) {\n      for (let i = 0, ii = isFinite(index) ? index : 0; i <= ii; i++) {\n        const nsId =\n          root[$namespaceId] === NS_DATASETS ? -1 : root[$namespaceId];\n        node = new XmlObject(nsId, name);\n        root[$appendChild](node);\n      }\n      root = node;\n    }\n    return node;\n  }\n\n  [$onChild](child) {\n    if (!this[_hasChildren] || !this[$onChildCheck](child)) {\n      return false;\n    }\n\n    const name = child[$nodeName];\n    const node = this[name];\n\n    if (node instanceof XFAObjectArray) {\n      if (node.push(child)) {\n        this[$appendChild](child);\n        return true;\n      }\n    } else {\n      // IRL it's possible to already have a node.\n      // So just replace it with the last version.\n      if (node !== null) {\n        this[$removeChild](node);\n      }\n      this[name] = child;\n      this[$appendChild](child);\n      return true;\n    }\n\n    let id = \"\";\n    if (this.id) {\n      id = ` (id: ${this.id})`;\n    } else if (this.name) {\n      id = ` (name: ${this.name} ${this.h.value})`;\n    }\n    warn(`XFA - node \"${this[$nodeName]}\"${id} has already enough \"${name}\"!`);\n    return false;\n  }\n\n  [$onChildCheck](child) {\n    return (\n      Object.hasOwn(this, child[$nodeName]) &&\n      child[$namespaceId] === this[$namespaceId]\n    );\n  }\n\n  [$isNsAgnostic]() {\n    return false;\n  }\n\n  [$acceptWhitespace]() {\n    return false;\n  }\n\n  [$isCDATAXml]() {\n    return false;\n  }\n\n  [$isBindable]() {\n    return false;\n  }\n\n  [$popPara]() {\n    if (this.para) {\n      this[$getTemplateRoot]()[$extra].paraStack.pop();\n    }\n  }\n\n  [$pushPara]() {\n    this[$getTemplateRoot]()[$extra].paraStack.push(this.para);\n  }\n\n  [$setId](ids) {\n    if (this.id && this[$namespaceId] === NamespaceIds.template.id) {\n      ids.set(this.id, this);\n    }\n  }\n\n  [$getTemplateRoot]() {\n    return this[$globalData].template;\n  }\n\n  [$isSplittable]() {\n    return false;\n  }\n\n  /**\n     Return true if this node (typically a container)\n     can provide more width during layout.\n     The goal is to help to know what a descendant must\n     do in case of horizontal overflow.\n   */\n  [$isThereMoreWidth]() {\n    return false;\n  }\n\n  [$appendChild](child) {\n    child[_parent] = this;\n    this[_children].push(child);\n    if (!child[$globalData] && this[$globalData]) {\n      child[$globalData] = this[$globalData];\n    }\n  }\n\n  [$removeChild](child) {\n    const i = this[_children].indexOf(child);\n    this[_children].splice(i, 1);\n  }\n\n  [$hasSettableValue]() {\n    return Object.hasOwn(this, \"value\");\n  }\n\n  [$setValue](_) {}\n\n  [$onText](_) {}\n\n  [$finalize]() {}\n\n  [$clean](builder) {\n    delete this[_hasChildren];\n    if (this[$cleanup]) {\n      builder.clean(this[$cleanup]);\n      delete this[$cleanup];\n    }\n  }\n\n  [$indexOf](child) {\n    return this[_children].indexOf(child);\n  }\n\n  [$insertAt](i, child) {\n    child[_parent] = this;\n    this[_children].splice(i, 0, child);\n    if (!child[$globalData] && this[$globalData]) {\n      child[$globalData] = this[$globalData];\n    }\n  }\n\n  /**\n   * If true the element is transparent when searching a node using\n   * a SOM expression which means that looking for \"foo.bar\" in\n   * <... name=\"foo\"><toto><titi><... name=\"bar\"></titi></toto>...\n   * is fine because toto and titi are transparent.\n   */\n  [$isTransparent]() {\n    return !this.name;\n  }\n\n  [$lastAttribute]() {\n    return \"\";\n  }\n\n  [$text]() {\n    if (this[_children].length === 0) {\n      return this[$content];\n    }\n    return this[_children].map(c => c[$text]()).join(\"\");\n  }\n\n  get [_attributeNames]() {\n    // Lazily get attributes names\n    const proto = Object.getPrototypeOf(this);\n    if (!proto._attributes) {\n      const attributes = (proto._attributes = new Set());\n      for (const name of Object.getOwnPropertyNames(this)) {\n        if (\n          this[name] === null ||\n          this[name] instanceof XFAObject ||\n          this[name] instanceof XFAObjectArray\n        ) {\n          break;\n        }\n        attributes.add(name);\n      }\n    }\n    return shadow(this, _attributeNames, proto._attributes);\n  }\n\n  [$isDescendent](parent) {\n    let node = this;\n    while (node) {\n      if (node === parent) {\n        return true;\n      }\n      node = node[$getParent]();\n    }\n    return false;\n  }\n\n  [$getParent]() {\n    return this[_parent];\n  }\n\n  [$getSubformParent]() {\n    return this[$getParent]();\n  }\n\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n\n    return this[name];\n  }\n\n  [$dump]() {\n    const dumped = Object.create(null);\n    if (this[$content]) {\n      dumped.$content = this[$content];\n    }\n\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const value = this[name];\n      if (value === null) {\n        continue;\n      }\n      if (value instanceof XFAObject) {\n        dumped[name] = value[$dump]();\n      } else if (value instanceof XFAObjectArray) {\n        if (!value.isEmpty()) {\n          dumped[name] = value.dump();\n        }\n      } else {\n        dumped[name] = value;\n      }\n    }\n\n    return dumped;\n  }\n\n  [$toStyle]() {\n    return null;\n  }\n\n  [$toHTML]() {\n    return HTMLResult.EMPTY;\n  }\n\n  *[$getContainedChildren]() {\n    // This function is overriden in Subform and SubformSet.\n    for (const node of this[$getChildren]()) {\n      yield node;\n    }\n  }\n\n  *[_filteredChildrenGenerator](filter, include) {\n    for (const node of this[$getContainedChildren]()) {\n      if (!filter || include === filter.has(node[$nodeName])) {\n        const availableSpace = this[$getAvailableSpace]();\n        const res = node[$toHTML](availableSpace);\n        if (!res.success) {\n          this[$extra].failingNode = node;\n        }\n        yield res;\n      }\n    }\n  }\n\n  [$flushHTML]() {\n    return null;\n  }\n\n  [$addHTML](html, bbox) {\n    this[$extra].children.push(html);\n  }\n\n  [$getAvailableSpace]() {}\n\n  [$childrenToHTML]({ filter = null, include = true }) {\n    if (!this[$extra].generator) {\n      this[$extra].generator = this[_filteredChildrenGenerator](\n        filter,\n        include\n      );\n    } else {\n      const availableSpace = this[$getAvailableSpace]();\n      const res = this[$extra].failingNode[$toHTML](availableSpace);\n      if (!res.success) {\n        return res;\n      }\n      if (res.html) {\n        this[$addHTML](res.html, res.bbox);\n      }\n      delete this[$extra].failingNode;\n    }\n\n    while (true) {\n      const gen = this[$extra].generator.next();\n      if (gen.done) {\n        break;\n      }\n      const res = gen.value;\n      if (!res.success) {\n        return res;\n      }\n      if (res.html) {\n        this[$addHTML](res.html, res.bbox);\n      }\n    }\n\n    this[$extra].generator = null;\n\n    return HTMLResult.EMPTY;\n  }\n\n  [$setSetAttributes](attributes) {\n    // Just keep set attributes because it can be used in a proto.\n    this[_setAttributes] = new Set(Object.keys(attributes));\n  }\n\n  /**\n   * Get attribute names which have been set in the proto but not in this.\n   */\n  [_getUnsetAttributes](protoAttributes) {\n    const allAttr = this[_attributeNames];\n    const setAttr = this[_setAttributes];\n    return protoAttributes\n      .keys()\n      .filter(x => allAttr.has(x) && !setAttr.has(x))\n      .toArray();\n  }\n\n  /**\n   * Update the node with properties coming from a prototype and apply\n   * this function recursively to all children.\n   */\n  [$resolvePrototypes](ids, ancestors = new Set()) {\n    for (const child of this[_children]) {\n      child[_resolvePrototypesHelper](ids, ancestors);\n    }\n  }\n\n  [_resolvePrototypesHelper](ids, ancestors) {\n    const proto = this[_getPrototype](ids, ancestors);\n    if (proto) {\n      // _applyPrototype will apply $resolvePrototypes with correct ancestors\n      // to avoid infinite loop.\n      this[_applyPrototype](proto, ids, ancestors);\n    } else {\n      this[$resolvePrototypes](ids, ancestors);\n    }\n  }\n\n  [_getPrototype](ids, ancestors) {\n    const { use, usehref } = this;\n    if (!use && !usehref) {\n      return null;\n    }\n\n    let proto = null;\n    let somExpression = null;\n    let id = null;\n    let ref = use;\n\n    // If usehref and use are non-empty then use usehref.\n    if (usehref) {\n      ref = usehref;\n      // Href can be one of the following:\n      // - #ID\n      // - URI#ID\n      // - #som(expression)\n      // - URI#som(expression)\n      // - URI\n      // For now we don't handle URI other than \".\" (current document).\n      if (usehref.startsWith(\"#som(\") && usehref.endsWith(\")\")) {\n        somExpression = usehref.slice(\"#som(\".length, -1);\n      } else if (usehref.startsWith(\".#som(\") && usehref.endsWith(\")\")) {\n        somExpression = usehref.slice(\".#som(\".length, -1);\n      } else if (usehref.startsWith(\"#\")) {\n        id = usehref.slice(1);\n      } else if (usehref.startsWith(\".#\")) {\n        id = usehref.slice(2);\n      }\n    } else if (use.startsWith(\"#\")) {\n      id = use.slice(1);\n    } else {\n      somExpression = use;\n    }\n\n    this.use = this.usehref = \"\";\n    if (id) {\n      proto = ids.get(id);\n    } else {\n      proto = searchNode(\n        ids.get($root),\n        this,\n        somExpression,\n        true /* = dotDotAllowed */,\n        false /* = useCache */\n      );\n      proto &&= proto[0];\n    }\n\n    if (!proto) {\n      warn(`XFA - Invalid prototype reference: ${ref}.`);\n      return null;\n    }\n\n    if (proto[$nodeName] !== this[$nodeName]) {\n      warn(\n        `XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`\n      );\n      return null;\n    }\n\n    if (ancestors.has(proto)) {\n      // We've a cycle so break it.\n      warn(`XFA - Cycle detected in prototypes use.`);\n      return null;\n    }\n\n    ancestors.add(proto);\n\n    // The prototype can have a \"use\" attribute itself.\n    const protoProto = proto[_getPrototype](ids, ancestors);\n    if (protoProto) {\n      proto[_applyPrototype](protoProto, ids, ancestors);\n    }\n\n    // The prototype can have a child which itself has a \"use\" property.\n    proto[$resolvePrototypes](ids, ancestors);\n\n    ancestors.delete(proto);\n\n    return proto;\n  }\n\n  [_applyPrototype](proto, ids, ancestors) {\n    if (ancestors.has(proto)) {\n      // We've a cycle so break it.\n      warn(`XFA - Cycle detected in prototypes use.`);\n      return;\n    }\n\n    if (!this[$content] && proto[$content]) {\n      this[$content] = proto[$content];\n    }\n\n    const newAncestors = new Set(ancestors);\n    newAncestors.add(proto);\n\n    for (const unsetAttrName of this[_getUnsetAttributes](\n      proto[_setAttributes]\n    )) {\n      this[unsetAttrName] = proto[unsetAttrName];\n      if (this[_setAttributes]) {\n        this[_setAttributes].add(unsetAttrName);\n      }\n    }\n\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (this[_attributeNames].has(name)) {\n        continue;\n      }\n      const value = this[name];\n      const protoValue = proto[name];\n\n      if (value instanceof XFAObjectArray) {\n        for (const child of value[_children]) {\n          child[_resolvePrototypesHelper](ids, ancestors);\n        }\n\n        for (\n          let i = value[_children].length, ii = protoValue[_children].length;\n          i < ii;\n          i++\n        ) {\n          const child = proto[_children][i][$clone]();\n          if (value.push(child)) {\n            child[_parent] = this;\n            this[_children].push(child);\n            child[_resolvePrototypesHelper](ids, ancestors);\n          } else {\n            // No need to continue: other nodes will be rejected.\n            break;\n          }\n        }\n        continue;\n      }\n\n      if (value !== null) {\n        value[$resolvePrototypes](ids, ancestors);\n        if (protoValue) {\n          // protoValue must be treated as a prototype for value.\n          value[_applyPrototype](protoValue, ids, ancestors);\n        }\n        continue;\n      }\n\n      if (protoValue !== null) {\n        const child = protoValue[$clone]();\n        child[_parent] = this;\n        this[name] = child;\n        this[_children].push(child);\n        child[_resolvePrototypesHelper](ids, ancestors);\n      }\n    }\n  }\n\n  static [_cloneAttribute](obj) {\n    if (Array.isArray(obj)) {\n      return obj.map(x => XFAObject[_cloneAttribute](x));\n    }\n    if (typeof obj === \"object\" && obj !== null) {\n      return Object.assign({}, obj);\n    }\n    return obj;\n  }\n\n  [$clone]() {\n    const clone = Object.create(Object.getPrototypeOf(this));\n    for (const $symbol of Object.getOwnPropertySymbols(this)) {\n      try {\n        clone[$symbol] = this[$symbol];\n      } catch {\n        shadow(clone, $symbol, this[$symbol]);\n      }\n    }\n    clone[$uid] = `${clone[$nodeName]}${uid++}`;\n    clone[_children] = [];\n\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (this[_attributeNames].has(name)) {\n        clone[name] = XFAObject[_cloneAttribute](this[name]);\n        continue;\n      }\n      const value = this[name];\n      clone[name] =\n        value instanceof XFAObjectArray\n          ? new XFAObjectArray(value[_max])\n          : null;\n    }\n\n    for (const child of this[_children]) {\n      const name = child[$nodeName];\n      const clonedChild = child[$clone]();\n      clone[_children].push(clonedChild);\n      clonedChild[_parent] = clone;\n      if (clone[name] === null) {\n        clone[name] = clonedChild;\n      } else {\n        clone[name][_children].push(clonedChild);\n      }\n    }\n\n    return clone;\n  }\n\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n\n    return this[_children].filter(c => c[$nodeName] === name);\n  }\n\n  [$getChildrenByClass](name) {\n    return this[name];\n  }\n\n  [$getChildrenByName](name, allTransparent, first = true) {\n    return Array.from(this[$getChildrenByNameIt](name, allTransparent, first));\n  }\n\n  *[$getChildrenByNameIt](name, allTransparent, first = true) {\n    if (name === \"parent\") {\n      yield this[_parent];\n      return;\n    }\n\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name) {\n        yield child;\n      }\n\n      if (child.name === name) {\n        yield child;\n      }\n\n      if (allTransparent || child[$isTransparent]()) {\n        yield* child[$getChildrenByNameIt](name, allTransparent, false);\n      }\n    }\n\n    if (first && this[_attributeNames].has(name)) {\n      yield new XFAAttribute(this, name, this[name]);\n    }\n  }\n}\n\nclass XFAObjectArray {\n  constructor(max = Infinity) {\n    this[_max] = max;\n    this[_children] = [];\n  }\n\n  get isXFAObject() {\n    return false;\n  }\n\n  get isXFAObjectArray() {\n    return true;\n  }\n\n  push(child) {\n    const len = this[_children].length;\n    if (len <= this[_max]) {\n      this[_children].push(child);\n      return true;\n    }\n    warn(\n      `XFA - node \"${child[$nodeName]}\" accepts no more than ${this[_max]} children`\n    );\n    return false;\n  }\n\n  isEmpty() {\n    return this[_children].length === 0;\n  }\n\n  dump() {\n    return this[_children].length === 1\n      ? this[_children][0][$dump]()\n      : this[_children].map(x => x[$dump]());\n  }\n\n  [$clone]() {\n    const clone = new XFAObjectArray(this[_max]);\n    clone[_children] = this[_children].map(c => c[$clone]());\n    return clone;\n  }\n\n  get children() {\n    return this[_children];\n  }\n\n  clear() {\n    this[_children].length = 0;\n  }\n}\n\nclass XFAAttribute {\n  constructor(node, name, value) {\n    this[_parent] = node;\n    this[$nodeName] = name;\n    this[$content] = value;\n    this[$consumed] = false;\n    this[$uid] = `attribute${uid++}`;\n  }\n\n  [$getParent]() {\n    return this[_parent];\n  }\n\n  [$isDataValue]() {\n    return true;\n  }\n\n  [$getDataValue]() {\n    return this[$content].trim();\n  }\n\n  [$setValue](value) {\n    value = value.value || \"\";\n    this[$content] = value.toString();\n  }\n\n  [$text]() {\n    return this[$content];\n  }\n\n  [$isDescendent](parent) {\n    return this[_parent] === parent || this[_parent][$isDescendent](parent);\n  }\n}\n\nclass XmlObject extends XFAObject {\n  constructor(nsId, name, attributes = {}) {\n    super(nsId, name);\n    this[$content] = \"\";\n    this[_dataValue] = null;\n    if (name !== \"#text\") {\n      const map = new Map();\n      this[_attributes] = map;\n      for (const [attrName, value] of Object.entries(attributes)) {\n        map.set(attrName, new XFAAttribute(this, attrName, value));\n      }\n      if (Object.hasOwn(attributes, $nsAttributes)) {\n        // XFA attributes.\n        const dataNode = attributes[$nsAttributes].xfa.dataNode;\n        if (dataNode !== undefined) {\n          if (dataNode === \"dataGroup\") {\n            this[_dataValue] = false;\n          } else if (dataNode === \"dataValue\") {\n            this[_dataValue] = true;\n          }\n        }\n      }\n    }\n    this[$consumed] = false;\n  }\n\n  [$toString](buf) {\n    const tagName = this[$nodeName];\n    if (tagName === \"#text\") {\n      buf.push(encodeToXmlString(this[$content]));\n      return;\n    }\n    const utf8TagName = utf8StringToString(tagName);\n    const prefix = this[$namespaceId] === NS_DATASETS ? \"xfa:\" : \"\";\n    buf.push(`<${prefix}${utf8TagName}`);\n    for (const [name, value] of this[_attributes]) {\n      const utf8Name = utf8StringToString(name);\n      buf.push(` ${utf8Name}=\"${encodeToXmlString(value[$content])}\"`);\n    }\n    if (this[_dataValue] !== null) {\n      if (this[_dataValue]) {\n        buf.push(` xfa:dataNode=\"dataValue\"`);\n      } else {\n        buf.push(` xfa:dataNode=\"dataGroup\"`);\n      }\n    }\n    if (!this[$content] && this[_children].length === 0) {\n      buf.push(\"/>\");\n      return;\n    }\n\n    buf.push(\">\");\n    if (this[$content]) {\n      if (typeof this[$content] === \"string\") {\n        buf.push(encodeToXmlString(this[$content]));\n      } else {\n        this[$content][$toString](buf);\n      }\n    } else {\n      for (const child of this[_children]) {\n        child[$toString](buf);\n      }\n    }\n    buf.push(`</${prefix}${utf8TagName}>`);\n  }\n\n  [$onChild](child) {\n    if (this[$content]) {\n      const node = new XmlObject(this[$namespaceId], \"#text\");\n      this[$appendChild](node);\n      node[$content] = this[$content];\n      this[$content] = \"\";\n    }\n    this[$appendChild](child);\n    return true;\n  }\n\n  [$onText](str) {\n    this[$content] += str;\n  }\n\n  [$finalize]() {\n    if (this[$content] && this[_children].length > 0) {\n      const node = new XmlObject(this[$namespaceId], \"#text\");\n      this[$appendChild](node);\n      node[$content] = this[$content];\n      delete this[$content];\n    }\n  }\n\n  [$toHTML]() {\n    if (this[$nodeName] === \"#text\") {\n      return HTMLResult.success({\n        name: \"#text\",\n        value: this[$content],\n      });\n    }\n\n    return HTMLResult.EMPTY;\n  }\n\n  [$getChildren](name = null) {\n    if (!name) {\n      return this[_children];\n    }\n\n    return this[_children].filter(c => c[$nodeName] === name);\n  }\n\n  [$getAttributes]() {\n    return this[_attributes];\n  }\n\n  [$getChildrenByClass](name) {\n    const value = this[_attributes].get(name);\n    if (value !== undefined) {\n      return value;\n    }\n    return this[$getChildren](name);\n  }\n\n  *[$getChildrenByNameIt](name, allTransparent) {\n    const value = this[_attributes].get(name);\n    if (value) {\n      yield value;\n    }\n\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name) {\n        yield child;\n      }\n\n      if (allTransparent) {\n        yield* child[$getChildrenByNameIt](name, allTransparent);\n      }\n    }\n  }\n\n  *[$getAttributeIt](name, skipConsumed) {\n    const value = this[_attributes].get(name);\n    if (value && (!skipConsumed || !value[$consumed])) {\n      yield value;\n    }\n    for (const child of this[_children]) {\n      yield* child[$getAttributeIt](name, skipConsumed);\n    }\n  }\n\n  *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) {\n    for (const child of this[_children]) {\n      if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) {\n        yield child;\n      }\n\n      if (allTransparent) {\n        yield* child[$getRealChildrenByNameIt](\n          name,\n          allTransparent,\n          skipConsumed\n        );\n      }\n    }\n  }\n\n  [$isDataValue]() {\n    if (this[_dataValue] === null) {\n      return (\n        this[_children].length === 0 ||\n        this[_children][0][$namespaceId] === NamespaceIds.xhtml.id\n      );\n    }\n    return this[_dataValue];\n  }\n\n  [$getDataValue]() {\n    if (this[_dataValue] === null) {\n      if (this[_children].length === 0) {\n        return this[$content].trim();\n      }\n      if (this[_children][0][$namespaceId] === NamespaceIds.xhtml.id) {\n        return this[_children][0][$text]().trim();\n      }\n      return null;\n    }\n    return this[$content].trim();\n  }\n\n  [$setValue](value) {\n    value = value.value || \"\";\n    this[$content] = value.toString();\n  }\n\n  [$dump](hasNS = false) {\n    const dumped = Object.create(null);\n    if (hasNS) {\n      dumped.$ns = this[$namespaceId];\n    }\n    if (this[$content]) {\n      dumped.$content = this[$content];\n    }\n    dumped.$name = this[$nodeName];\n\n    dumped.children = [];\n    for (const child of this[_children]) {\n      dumped.children.push(child[$dump](hasNS));\n    }\n\n    dumped.attributes = Object.create(null);\n    for (const [name, value] of this[_attributes]) {\n      dumped.attributes[name] = value[$content];\n    }\n\n    return dumped;\n  }\n}\n\nclass ContentObject extends XFAObject {\n  constructor(nsId, name) {\n    super(nsId, name);\n    this[$content] = \"\";\n  }\n\n  [$onText](text) {\n    this[$content] += text;\n  }\n\n  [$finalize]() {}\n}\n\nclass OptionObject extends ContentObject {\n  constructor(nsId, name, options) {\n    super(nsId, name);\n    this[_options] = options;\n  }\n\n  [$finalize]() {\n    this[$content] = getKeyword({\n      data: this[$content],\n      defaultValue: this[_options][0],\n      validate: k => this[_options].includes(k),\n    });\n  }\n\n  [$clean](builder) {\n    super[$clean](builder);\n    delete this[_options];\n  }\n}\n\nclass StringObject extends ContentObject {\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n  }\n}\n\nclass IntegerObject extends ContentObject {\n  constructor(nsId, name, defaultValue, validator) {\n    super(nsId, name);\n    this[_defaultValue] = defaultValue;\n    this[_validator] = validator;\n  }\n\n  [$finalize]() {\n    this[$content] = getInteger({\n      data: this[$content],\n      defaultValue: this[_defaultValue],\n      validate: this[_validator],\n    });\n  }\n\n  [$clean](builder) {\n    super[$clean](builder);\n    delete this[_defaultValue];\n    delete this[_validator];\n  }\n}\n\nclass Option01 extends IntegerObject {\n  constructor(nsId, name) {\n    super(nsId, name, 0, n => n === 1);\n  }\n}\n\nclass Option10 extends IntegerObject {\n  constructor(nsId, name) {\n    super(nsId, name, 1, n => n === 0);\n  }\n}\n\nexport {\n  ContentObject,\n  IntegerObject,\n  Option01,\n  Option10,\n  OptionObject,\n  StringObject,\n  XFAAttribute,\n  XFAObject,\n  XFAObjectArray,\n  XmlObject,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $content,\n  $extra,\n  $getParent,\n  $getSubformParent,\n  $getTemplateRoot,\n  $globalData,\n  $nodeName,\n  $pushGlyphs,\n  $text,\n  $toStyle,\n} from \"./symbol_utils.js\";\nimport { createValidAbsoluteUrl, warn } from \"../../shared/util.js\";\nimport { getMeasurement, stripQuotes } from \"./utils.js\";\nimport { selectFont } from \"./fonts.js\";\nimport { TextMeasure } from \"./text.js\";\nimport { XFAObject } from \"./xfa_object.js\";\n\nfunction measureToString(m) {\n  if (typeof m === \"string\") {\n    return \"0px\";\n  }\n\n  return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`;\n}\n\nconst converters = {\n  anchorType(node, style) {\n    const parent = node[$getSubformParent]();\n    if (!parent || (parent.layout && parent.layout !== \"position\")) {\n      // anchorType is only used in a positioned layout.\n      return;\n    }\n\n    if (!(\"transform\" in style)) {\n      style.transform = \"\";\n    }\n    switch (node.anchorType) {\n      case \"bottomCenter\":\n        style.transform += \"translate(-50%, -100%)\";\n        break;\n      case \"bottomLeft\":\n        style.transform += \"translate(0,-100%)\";\n        break;\n      case \"bottomRight\":\n        style.transform += \"translate(-100%,-100%)\";\n        break;\n      case \"middleCenter\":\n        style.transform += \"translate(-50%,-50%)\";\n        break;\n      case \"middleLeft\":\n        style.transform += \"translate(0,-50%)\";\n        break;\n      case \"middleRight\":\n        style.transform += \"translate(-100%,-50%)\";\n        break;\n      case \"topCenter\":\n        style.transform += \"translate(-50%,0)\";\n        break;\n      case \"topRight\":\n        style.transform += \"translate(-100%,0)\";\n        break;\n    }\n  },\n  dimensions(node, style) {\n    const parent = node[$getSubformParent]();\n    let width = node.w;\n    const height = node.h;\n    if (parent.layout?.includes(\"row\")) {\n      const extra = parent[$extra];\n      const colSpan = node.colSpan;\n      let w;\n      if (colSpan === -1) {\n        w = Math.sumPrecise(extra.columnWidths.slice(extra.currentColumn));\n        extra.currentColumn = 0;\n      } else {\n        w = Math.sumPrecise(\n          extra.columnWidths.slice(\n            extra.currentColumn,\n            extra.currentColumn + colSpan\n          )\n        );\n        extra.currentColumn =\n          (extra.currentColumn + node.colSpan) % extra.columnWidths.length;\n      }\n\n      if (!isNaN(w)) {\n        width = node.w = w;\n      }\n    }\n\n    style.width = width !== \"\" ? measureToString(width) : \"auto\";\n\n    style.height = height !== \"\" ? measureToString(height) : \"auto\";\n  },\n  position(node, style) {\n    const parent = node[$getSubformParent]();\n    if (parent?.layout && parent.layout !== \"position\") {\n      // IRL, we've some x/y in tb layout.\n      // Specs say x/y is only used in positioned layout.\n      return;\n    }\n\n    style.position = \"absolute\";\n    style.left = measureToString(node.x);\n    style.top = measureToString(node.y);\n  },\n  rotate(node, style) {\n    if (node.rotate) {\n      if (!(\"transform\" in style)) {\n        style.transform = \"\";\n      }\n      style.transform += `rotate(-${node.rotate}deg)`;\n      style.transformOrigin = \"top left\";\n    }\n  },\n  presence(node, style) {\n    switch (node.presence) {\n      case \"invisible\":\n        style.visibility = \"hidden\";\n        break;\n      case \"hidden\":\n      case \"inactive\":\n        style.display = \"none\";\n        break;\n    }\n  },\n  hAlign(node, style) {\n    if (node[$nodeName] === \"para\") {\n      switch (node.hAlign) {\n        case \"justifyAll\":\n          style.textAlign = \"justify-all\";\n          break;\n        case \"radix\":\n          // TODO: implement this correctly !\n          style.textAlign = \"left\";\n          break;\n        default:\n          style.textAlign = node.hAlign;\n      }\n    } else {\n      switch (node.hAlign) {\n        case \"left\":\n          style.alignSelf = \"start\";\n          break;\n        case \"center\":\n          style.alignSelf = \"center\";\n          break;\n        case \"right\":\n          style.alignSelf = \"end\";\n          break;\n      }\n    }\n  },\n  margin(node, style) {\n    if (node.margin) {\n      style.margin = node.margin[$toStyle]().margin;\n    }\n  },\n};\n\nfunction setMinMaxDimensions(node, style) {\n  const parent = node[$getSubformParent]();\n  if (parent.layout === \"position\") {\n    if (node.minW > 0) {\n      style.minWidth = measureToString(node.minW);\n    }\n    if (node.maxW > 0) {\n      style.maxWidth = measureToString(node.maxW);\n    }\n    if (node.minH > 0) {\n      style.minHeight = measureToString(node.minH);\n    }\n    if (node.maxH > 0) {\n      style.maxHeight = measureToString(node.maxH);\n    }\n  }\n}\n\nfunction layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) {\n  const measure = new TextMeasure(xfaFont, margin, lineHeight, fontFinder);\n  if (typeof text === \"string\") {\n    measure.addString(text);\n  } else {\n    text[$pushGlyphs](measure);\n  }\n\n  return measure.compute(width);\n}\n\nfunction layoutNode(node, availableSpace) {\n  let height = null;\n  let width = null;\n  let isBroken = false;\n\n  if ((!node.w || !node.h) && node.value) {\n    let marginH = 0;\n    let marginV = 0;\n    if (node.margin) {\n      marginH = node.margin.leftInset + node.margin.rightInset;\n      marginV = node.margin.topInset + node.margin.bottomInset;\n    }\n\n    let lineHeight = null;\n    let margin = null;\n    if (node.para) {\n      margin = Object.create(null);\n      lineHeight = node.para.lineHeight === \"\" ? null : node.para.lineHeight;\n      margin.top = node.para.spaceAbove === \"\" ? 0 : node.para.spaceAbove;\n      margin.bottom = node.para.spaceBelow === \"\" ? 0 : node.para.spaceBelow;\n      margin.left = node.para.marginLeft === \"\" ? 0 : node.para.marginLeft;\n      margin.right = node.para.marginRight === \"\" ? 0 : node.para.marginRight;\n    }\n\n    let font = node.font;\n    if (!font) {\n      const root = node[$getTemplateRoot]();\n      let parent = node[$getParent]();\n      while (parent && parent !== root) {\n        if (parent.font) {\n          font = parent.font;\n          break;\n        }\n        parent = parent[$getParent]();\n      }\n    }\n\n    const maxWidth = (node.w || availableSpace.width) - marginH;\n    const fontFinder = node[$globalData].fontFinder;\n    if (\n      node.value.exData &&\n      node.value.exData[$content] &&\n      node.value.exData.contentType === \"text/html\"\n    ) {\n      const res = layoutText(\n        node.value.exData[$content],\n        font,\n        margin,\n        lineHeight,\n        fontFinder,\n        maxWidth\n      );\n      width = res.width;\n      height = res.height;\n      isBroken = res.isBroken;\n    } else {\n      const text = node.value[$text]();\n      if (text) {\n        const res = layoutText(\n          text,\n          font,\n          margin,\n          lineHeight,\n          fontFinder,\n          maxWidth\n        );\n        width = res.width;\n        height = res.height;\n        isBroken = res.isBroken;\n      }\n    }\n\n    if (width !== null && !node.w) {\n      width += marginH;\n    }\n\n    if (height !== null && !node.h) {\n      height += marginV;\n    }\n  }\n  return { w: width, h: height, isBroken };\n}\n\nfunction computeBbox(node, html, availableSpace) {\n  let bbox;\n  if (node.w !== \"\" && node.h !== \"\") {\n    bbox = [node.x, node.y, node.w, node.h];\n  } else {\n    if (!availableSpace) {\n      return null;\n    }\n    let width = node.w;\n    if (width === \"\") {\n      if (node.maxW === 0) {\n        const parent = node[$getSubformParent]();\n        width = parent.layout === \"position\" && parent.w !== \"\" ? 0 : node.minW;\n      } else {\n        width = Math.min(node.maxW, availableSpace.width);\n      }\n      html.attributes.style.width = measureToString(width);\n    }\n\n    let height = node.h;\n    if (height === \"\") {\n      if (node.maxH === 0) {\n        const parent = node[$getSubformParent]();\n        height =\n          parent.layout === \"position\" && parent.h !== \"\" ? 0 : node.minH;\n      } else {\n        height = Math.min(node.maxH, availableSpace.height);\n      }\n      html.attributes.style.height = measureToString(height);\n    }\n\n    bbox = [node.x, node.y, width, height];\n  }\n  return bbox;\n}\n\nfunction fixDimensions(node) {\n  const parent = node[$getSubformParent]();\n  if (parent.layout?.includes(\"row\")) {\n    const extra = parent[$extra];\n    const colSpan = node.colSpan;\n    let width;\n    if (colSpan === -1) {\n      width = Math.sumPrecise(extra.columnWidths.slice(extra.currentColumn));\n    } else {\n      width = Math.sumPrecise(\n        extra.columnWidths.slice(\n          extra.currentColumn,\n          extra.currentColumn + colSpan\n        )\n      );\n    }\n    if (!isNaN(width)) {\n      node.w = width;\n    }\n  }\n\n  if (parent.layout && parent.layout !== \"position\") {\n    // Useless in this context.\n    node.x = node.y = 0;\n  }\n\n  if (node.layout === \"table\") {\n    if (node.w === \"\" && Array.isArray(node.columnWidths)) {\n      node.w = Math.sumPrecise(node.columnWidths);\n    }\n  }\n}\n\nfunction layoutClass(node) {\n  switch (node.layout) {\n    case \"position\":\n      return \"xfaPosition\";\n    case \"lr-tb\":\n      return \"xfaLrTb\";\n    case \"rl-row\":\n      return \"xfaRlRow\";\n    case \"rl-tb\":\n      return \"xfaRlTb\";\n    case \"row\":\n      return \"xfaRow\";\n    case \"table\":\n      return \"xfaTable\";\n    case \"tb\":\n      return \"xfaTb\";\n    default:\n      return \"xfaPosition\";\n  }\n}\n\nfunction toStyle(node, ...names) {\n  const style = Object.create(null);\n  for (const name of names) {\n    const value = node[name];\n    if (value === null) {\n      continue;\n    }\n    if (Object.hasOwn(converters, name)) {\n      converters[name](node, style);\n      continue;\n    }\n\n    if (value instanceof XFAObject) {\n      const newStyle = value[$toStyle]();\n      if (newStyle) {\n        Object.assign(style, newStyle);\n      } else {\n        warn(`(DEBUG) - XFA - style for ${name} not implemented yet`);\n      }\n    }\n  }\n  return style;\n}\n\nfunction createWrapper(node, html) {\n  const { attributes } = html;\n  const { style } = attributes;\n\n  const wrapper = {\n    name: \"div\",\n    attributes: {\n      class: [\"xfaWrapper\"],\n      style: Object.create(null),\n    },\n    children: [],\n  };\n\n  attributes.class.push(\"xfaWrapped\");\n\n  if (node.border) {\n    const { widths, insets } = node.border[$extra];\n    let width, height;\n    let top = insets[0];\n    let left = insets[3];\n    const insetsH = insets[0] + insets[2];\n    const insetsW = insets[1] + insets[3];\n    switch (node.border.hand) {\n      case \"even\":\n        top -= widths[0] / 2;\n        left -= widths[3] / 2;\n        width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`;\n        height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`;\n        break;\n      case \"left\":\n        top -= widths[0];\n        left -= widths[3];\n        width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`;\n        height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`;\n        break;\n      case \"right\":\n        width = insetsW ? `calc(100% - ${insetsW}px)` : \"100%\";\n        height = insetsH ? `calc(100% - ${insetsH}px)` : \"100%\";\n        break;\n    }\n    const classNames = [\"xfaBorder\"];\n    if (isPrintOnly(node.border)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n\n    const border = {\n      name: \"div\",\n      attributes: {\n        class: classNames,\n        style: {\n          top: `${top}px`,\n          left: `${left}px`,\n          width,\n          height,\n        },\n      },\n      children: [],\n    };\n\n    for (const key of [\n      \"border\",\n      \"borderWidth\",\n      \"borderColor\",\n      \"borderRadius\",\n      \"borderStyle\",\n    ]) {\n      if (style[key] !== undefined) {\n        border.attributes.style[key] = style[key];\n        delete style[key];\n      }\n    }\n    wrapper.children.push(border, html);\n  } else {\n    wrapper.children.push(html);\n  }\n\n  for (const key of [\n    \"background\",\n    \"backgroundClip\",\n    \"top\",\n    \"left\",\n    \"width\",\n    \"height\",\n    \"minWidth\",\n    \"minHeight\",\n    \"maxWidth\",\n    \"maxHeight\",\n    \"transform\",\n    \"transformOrigin\",\n    \"visibility\",\n  ]) {\n    if (style[key] !== undefined) {\n      wrapper.attributes.style[key] = style[key];\n      delete style[key];\n    }\n  }\n\n  wrapper.attributes.style.position =\n    style.position === \"absolute\" ? \"absolute\" : \"relative\";\n  delete style.position;\n\n  if (style.alignSelf) {\n    wrapper.attributes.style.alignSelf = style.alignSelf;\n    delete style.alignSelf;\n  }\n\n  return wrapper;\n}\n\nfunction fixTextIndent(styles) {\n  const indent = getMeasurement(styles.textIndent, \"0px\");\n  if (indent >= 0) {\n    return;\n  }\n\n  // If indent is negative then it's a hanging indent.\n  const align = styles.textAlign === \"right\" ? \"right\" : \"left\";\n  const name = \"padding\" + (align === \"left\" ? \"Left\" : \"Right\");\n  const padding = getMeasurement(styles[name], \"0px\");\n  styles[name] = `${padding - indent}px`;\n}\n\nfunction setAccess(node, classNames) {\n  switch (node.access) {\n    case \"nonInteractive\":\n      classNames.push(\"xfaNonInteractive\");\n      break;\n    case \"readOnly\":\n      classNames.push(\"xfaReadOnly\");\n      break;\n    case \"protected\":\n      classNames.push(\"xfaDisabled\");\n      break;\n  }\n}\n\nfunction isPrintOnly(node) {\n  return (\n    node.relevant.length > 0 &&\n    !node.relevant[0].excluded &&\n    node.relevant[0].viewname === \"print\"\n  );\n}\n\nfunction getCurrentPara(node) {\n  const stack = node[$getTemplateRoot]()[$extra].paraStack;\n  return stack.length ? stack.at(-1) : null;\n}\n\nfunction setPara(node, nodeStyle, value) {\n  if (value.attributes.class?.includes(\"xfaRich\")) {\n    if (nodeStyle) {\n      if (node.h === \"\") {\n        nodeStyle.height = \"auto\";\n      }\n      if (node.w === \"\") {\n        nodeStyle.width = \"auto\";\n      }\n    }\n\n    const para = getCurrentPara(node);\n    if (para) {\n      // By definition exData are external data so para\n      // has no effect on it.\n      const valueStyle = value.attributes.style;\n      valueStyle.display = \"flex\";\n      valueStyle.flexDirection = \"column\";\n      switch (para.vAlign) {\n        case \"top\":\n          valueStyle.justifyContent = \"start\";\n          break;\n        case \"bottom\":\n          valueStyle.justifyContent = \"end\";\n          break;\n        case \"middle\":\n          valueStyle.justifyContent = \"center\";\n          break;\n      }\n\n      const paraStyle = para[$toStyle]();\n      for (const [key, val] of Object.entries(paraStyle)) {\n        if (!(key in valueStyle)) {\n          valueStyle[key] = val;\n        }\n      }\n    }\n  }\n}\n\nfunction setFontFamily(xfaFont, node, fontFinder, style) {\n  if (!fontFinder) {\n    // The font cannot be found in the pdf so use the default one.\n    delete style.fontFamily;\n    return;\n  }\n\n  const name = stripQuotes(xfaFont.typeface);\n  style.fontFamily = `\"${name}\"`;\n\n  const typeface = fontFinder.find(name);\n  if (typeface) {\n    const { fontFamily } = typeface.regular.cssFontInfo;\n    if (fontFamily !== name) {\n      style.fontFamily = `\"${fontFamily}\"`;\n    }\n\n    const para = getCurrentPara(node);\n    if (para && para.lineHeight !== \"\") {\n      return;\n    }\n\n    if (style.lineHeight) {\n      // Already something so don't overwrite.\n      return;\n    }\n\n    const pdfFont = selectFont(xfaFont, typeface);\n    if (pdfFont) {\n      style.lineHeight = Math.max(1.2, pdfFont.lineHeight);\n    }\n  }\n}\n\nfunction fixURL(str) {\n  const absoluteUrl = createValidAbsoluteUrl(str, /* baseUrl = */ null, {\n    addDefaultProtocol: true,\n    tryConvertEncoding: true,\n  });\n  return absoluteUrl ? absoluteUrl.href : null;\n}\n\nexport {\n  computeBbox,\n  createWrapper,\n  fixDimensions,\n  fixTextIndent,\n  fixURL,\n  isPrintOnly,\n  layoutClass,\n  layoutNode,\n  measureToString,\n  setAccess,\n  setFontFamily,\n  setMinMaxDimensions,\n  setPara,\n  toStyle,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $extra,\n  $flushHTML,\n  $getSubformParent,\n  $getTemplateRoot,\n  $isSplittable,\n  $isThereMoreWidth,\n} from \"./symbol_utils.js\";\nimport { MathClamp } from \"../../shared/math_clamp.js\";\nimport { measureToString } from \"./html_utils.js\";\n\n// Subform and ExclGroup have a layout so they share these functions.\n\n/**\n * How layout works ?\n *\n * A container has an initial space (with a width and a height) to fit in,\n * which means that once all the children have been added then\n * the total width/height must be lower than the given ones in\n * the initial space.\n * So if the container has known dimensions and these ones are ok with the\n * space then continue else we return HTMLResult.FAILURE: it's up to the\n * parent to deal with this failure (e.g. if parent layout is lr-tb and\n * we fail to add a child at end of line (lr) then we try to add it on the\n * next line).\n * And then we run through the children, each child gets its initial space\n * in calling its parent $getAvailableSpace method\n * (see _filteredChildrenGenerator and $childrenToHTML in xfa_object.js)\n * then we try to layout child in its space. If everything is ok then we add\n * the result to its parent through $addHTML which will recompute the available\n * space in parent according to its layout property else we return\n * HTMLResult.Failure.\n * Before a failure some children may have been layed out: they've been saved in\n * [$extra].children and [$extra] has properties generator and failingNode\n * in order to save the state where we were before a failure.\n * This [$extra].children property is useful when a container has to be splited.\n * So if a container is unbreakable, we must delete its [$extra] property before\n * returning.\n */\n\nfunction createLine(node, children) {\n  return {\n    name: \"div\",\n    attributes: {\n      class: [node.layout === \"lr-tb\" ? \"xfaLr\" : \"xfaRl\"],\n    },\n    children,\n  };\n}\n\nfunction flushHTML(node) {\n  if (!node[$extra]) {\n    return null;\n  }\n\n  const attributes = node[$extra].attributes;\n  const html = {\n    name: \"div\",\n    attributes,\n    children: node[$extra].children,\n  };\n\n  if (node[$extra].failingNode) {\n    const htmlFromFailing = node[$extra].failingNode[$flushHTML]();\n    if (htmlFromFailing) {\n      if (node.layout.endsWith(\"-tb\")) {\n        html.children.push(createLine(node, [htmlFromFailing]));\n      } else {\n        html.children.push(htmlFromFailing);\n      }\n    }\n  }\n\n  if (html.children.length === 0) {\n    return null;\n  }\n\n  return html;\n}\n\nfunction addHTML(node, html, bbox) {\n  const extra = node[$extra];\n  const availableSpace = extra.availableSpace;\n\n  const [x, y, w, h] = bbox;\n  switch (node.layout) {\n    case \"position\": {\n      extra.width = Math.max(extra.width, x + w);\n      extra.height = Math.max(extra.height, y + h);\n      extra.children.push(html);\n      break;\n    }\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (!extra.line || extra.attempt === 1) {\n        extra.line = createLine(node, []);\n        extra.children.push(extra.line);\n        extra.numberInLine = 0;\n      }\n\n      extra.numberInLine += 1;\n      extra.line.children.push(html);\n\n      if (extra.attempt === 0) {\n        // Add the element on the line\n        extra.currentWidth += w;\n        extra.height = Math.max(extra.height, extra.prevHeight + h);\n      } else {\n        extra.currentWidth = w;\n        extra.prevHeight = extra.height;\n        extra.height += h;\n\n        // The element has been added on a new line so switch to line mode now.\n        extra.attempt = 0;\n      }\n      extra.width = Math.max(extra.width, extra.currentWidth);\n      break;\n    case \"rl-row\":\n    case \"row\": {\n      extra.children.push(html);\n      extra.width += w;\n      extra.height = Math.max(extra.height, h);\n      const height = measureToString(extra.height);\n      for (const child of extra.children) {\n        child.attributes.style.height = height;\n      }\n      break;\n    }\n    case \"table\": {\n      extra.width = MathClamp(w, extra.width, availableSpace.width);\n      extra.height += h;\n      extra.children.push(html);\n      break;\n    }\n    case \"tb\": {\n      // Even if the subform can possibly take all the available width,\n      // we must compute the final width as it is in order to be able\n      // for example to center the subform within its parent.\n      extra.width = MathClamp(w, extra.width, availableSpace.width);\n      extra.height += h;\n      extra.children.push(html);\n      break;\n    }\n  }\n}\n\nfunction getAvailableSpace(node) {\n  const availableSpace = node[$extra].availableSpace;\n  const marginV = node.margin\n    ? node.margin.topInset + node.margin.bottomInset\n    : 0;\n  const marginH = node.margin\n    ? node.margin.leftInset + node.margin.rightInset\n    : 0;\n\n  switch (node.layout) {\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (node[$extra].attempt === 0) {\n        return {\n          width: availableSpace.width - marginH - node[$extra].currentWidth,\n          height: availableSpace.height - marginV - node[$extra].prevHeight,\n        };\n      }\n      return {\n        width: availableSpace.width - marginH,\n        height: availableSpace.height - marginV - node[$extra].height,\n      };\n    case \"rl-row\":\n    case \"row\":\n      const width = Math.sumPrecise(\n        node[$extra].columnWidths.slice(node[$extra].currentColumn)\n      );\n      return { width, height: availableSpace.height - marginH };\n    case \"table\":\n    case \"tb\":\n      return {\n        width: availableSpace.width - marginH,\n        height: availableSpace.height - marginV - node[$extra].height,\n      };\n    case \"position\":\n    default:\n      return availableSpace;\n  }\n}\n\nfunction getTransformedBBox(node) {\n  // Take into account rotation and anchor to get the real bounding box.\n  let w = node.w === \"\" ? NaN : node.w;\n  let h = node.h === \"\" ? NaN : node.h;\n  let [centerX, centerY] = [0, 0];\n  switch (node.anchorType || \"\") {\n    case \"bottomCenter\":\n      [centerX, centerY] = [w / 2, h];\n      break;\n    case \"bottomLeft\":\n      [centerX, centerY] = [0, h];\n      break;\n    case \"bottomRight\":\n      [centerX, centerY] = [w, h];\n      break;\n    case \"middleCenter\":\n      [centerX, centerY] = [w / 2, h / 2];\n      break;\n    case \"middleLeft\":\n      [centerX, centerY] = [0, h / 2];\n      break;\n    case \"middleRight\":\n      [centerX, centerY] = [w, h / 2];\n      break;\n    case \"topCenter\":\n      [centerX, centerY] = [w / 2, 0];\n      break;\n    case \"topRight\":\n      [centerX, centerY] = [w, 0];\n      break;\n  }\n\n  let x, y;\n  switch (node.rotate || 0) {\n    case 0:\n      [x, y] = [-centerX, -centerY];\n      break;\n    case 90:\n      [x, y] = [-centerY, centerX];\n      [w, h] = [h, -w];\n      break;\n    case 180:\n      [x, y] = [centerX, centerY];\n      [w, h] = [-w, -h];\n      break;\n    case 270:\n      [x, y] = [centerY, -centerX];\n      [w, h] = [-h, w];\n      break;\n  }\n\n  return [\n    node.x + x + Math.min(0, w),\n    node.y + y + Math.min(0, h),\n    Math.abs(w),\n    Math.abs(h),\n  ];\n}\n\n/**\n * Returning true means that the node will be layed out\n * else the layout will go to its next step (changing of line\n * in case of lr-tb or changing content area...).\n */\nfunction checkDimensions(node, space) {\n  if (node[$getTemplateRoot]()[$extra].firstUnsplittable === null) {\n    return true;\n  }\n\n  if (node.w === 0 || node.h === 0) {\n    return true;\n  }\n\n  const ERROR = 2;\n  const parent = node[$getSubformParent]();\n  const attempt = parent[$extra]?.attempt || 0;\n\n  const [, y, w, h] = getTransformedBBox(node);\n  switch (parent.layout) {\n    case \"lr-tb\":\n    case \"rl-tb\":\n      if (attempt === 0) {\n        // Try to put an element in the line.\n\n        if (!node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n          if (node.h !== \"\" && Math.round(h - space.height) > ERROR) {\n            // Not enough height.\n            return false;\n          }\n\n          if (node.w !== \"\") {\n            if (Math.round(w - space.width) <= ERROR) {\n              return true;\n            }\n            if (parent[$extra].numberInLine === 0) {\n              return space.height > ERROR;\n            }\n\n            return false;\n          }\n\n          return space.width > ERROR;\n        }\n\n        // No layout failure.\n\n        // Put the element on the line but we can fail\n        // and then in the second step (next line) we'll accept.\n        if (node.w !== \"\") {\n          return Math.round(w - space.width) <= ERROR;\n        }\n\n        return space.width > ERROR;\n      }\n\n      // Second attempt: try to put the element on the next line.\n\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        // We cannot fail.\n        return true;\n      }\n\n      if (node.h !== \"\" && Math.round(h - space.height) > ERROR) {\n        return false;\n      }\n\n      if (node.w === \"\" || Math.round(w - space.width) <= ERROR) {\n        return space.height > ERROR;\n      }\n\n      if (parent[$isThereMoreWidth]()) {\n        return false;\n      }\n\n      return space.height > ERROR;\n    case \"table\":\n    case \"tb\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n\n      // If the node has a height then check if it's fine with available height.\n      // If the node is breakable then we can return true.\n      if (node.h !== \"\" && !node[$isSplittable]()) {\n        return Math.round(h - space.height) <= ERROR;\n      }\n      // Else wait and see: this node will be layed out itself\n      // in the provided space and maybe a children won't fit.\n\n      if (node.w === \"\" || Math.round(w - space.width) <= ERROR) {\n        return space.height > ERROR;\n      }\n\n      if (parent[$isThereMoreWidth]()) {\n        return false;\n      }\n\n      return space.height > ERROR;\n    case \"position\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n\n      if (node.h === \"\" || Math.round(h + y - space.height) <= ERROR) {\n        return true;\n      }\n\n      const area = node[$getTemplateRoot]()[$extra].currentContentArea;\n      return h + y > area.h;\n    case \"rl-row\":\n    case \"row\":\n      if (node[$getTemplateRoot]()[$extra].noLayoutFailure) {\n        return true;\n      }\n\n      if (node.h !== \"\") {\n        return Math.round(h - space.height) <= ERROR;\n      }\n      return true;\n    default:\n      // No layout, so accept everything.\n      return true;\n  }\n}\n\nexport { addHTML, checkDimensions, flushHTML, getAvailableSpace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $acceptWhitespace,\n  $addHTML,\n  $appendChild,\n  $childrenToHTML,\n  $clean,\n  $cleanPage,\n  $content,\n  $data,\n  $extra,\n  $finalize,\n  $flushHTML,\n  $getAvailableSpace,\n  $getChildren,\n  $getContainedChildren,\n  $getExtra,\n  $getNextPage,\n  $getParent,\n  $getSubformParent,\n  $getTemplateRoot,\n  $globalData,\n  $hasSettableValue,\n  $ids,\n  $isBindable,\n  $isCDATAXml,\n  $isSplittable,\n  $isThereMoreWidth,\n  $isTransparent,\n  $isUsable,\n  $namespaceId,\n  $nodeName,\n  $onChild,\n  $onText,\n  $popPara,\n  $pushPara,\n  $removeChild,\n  $searchNode,\n  $setSetAttributes,\n  $setValue,\n  $tabIndex,\n  $text,\n  $toHTML,\n  $toPages,\n  $toStyle,\n  $uid,\n} from \"./symbol_utils.js\";\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport {\n  addHTML,\n  checkDimensions,\n  flushHTML,\n  getAvailableSpace,\n} from \"./layout.js\";\nimport {\n  computeBbox,\n  createWrapper,\n  fixDimensions,\n  fixTextIndent,\n  fixURL,\n  isPrintOnly,\n  layoutClass,\n  layoutNode,\n  measureToString,\n  setAccess,\n  setFontFamily,\n  setMinMaxDimensions,\n  setPara,\n  toStyle,\n} from \"./html_utils.js\";\nimport {\n  ContentObject,\n  Option01,\n  OptionObject,\n  StringObject,\n  XFAObject,\n  XFAObjectArray,\n} from \"./xfa_object.js\";\nimport {\n  getBBox,\n  getColor,\n  getFloat,\n  getInteger,\n  getKeyword,\n  getMeasurement,\n  getRatio,\n  getRelevant,\n  getStringOption,\n  HTMLResult,\n} from \"./utils.js\";\nimport { SVG_NS, Util, warn } from \"../../shared/util.js\";\nimport { getMetrics } from \"./fonts.js\";\nimport { recoverJsURL } from \"../core_utils.js\";\nimport { searchNode } from \"./som.js\";\n\nconst TEMPLATE_NS_ID = NamespaceIds.template.id;\n\n// In case of lr-tb (and rl-tb) layouts, we try:\n//  - to put the container at the end of a line\n//  - and if it fails we try on the next line.\n// If both tries failed then it's up to the parent\n// to handle the situation.\nconst MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2;\n\n// It's possible to have a bug in the layout and so as\n// a consequence we could loop for ever in Template::toHTML()\n// so in order to avoid that (and avoid a OOM crash) we break\n// the loop after having MAX_EMPTY_PAGES empty pages.\nconst MAX_EMPTY_PAGES = 3;\n\n// Default value to start with for the tabIndex property.\nconst DEFAULT_TAB_INDEX = 5000;\n\nconst HEADING_PATTERN = /^H(\\d+)$/;\n\n// Allowed mime types for images\nconst MIMES = new Set([\n  \"image/gif\",\n  \"image/jpeg\",\n  \"image/jpg\",\n  \"image/pjpeg\",\n  \"image/png\",\n  \"image/apng\",\n  \"image/x-png\",\n  \"image/bmp\",\n  \"image/x-ms-bmp\",\n  \"image/tiff\",\n  \"image/tif\",\n  \"application/octet-stream\",\n]);\n\nconst IMAGES_HEADERS = [\n  [[0x42, 0x4d], \"image/bmp\"],\n  [[0xff, 0xd8, 0xff], \"image/jpeg\"],\n  [[0x49, 0x49, 0x2a, 0x00], \"image/tiff\"],\n  [[0x4d, 0x4d, 0x00, 0x2a], \"image/tiff\"],\n  [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], \"image/gif\"],\n  [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], \"image/png\"],\n];\n\nfunction getBorderDims(node) {\n  if (!node || !node.border) {\n    return { w: 0, h: 0 };\n  }\n\n  const borderExtra = node.border[$getExtra]();\n  if (!borderExtra) {\n    return { w: 0, h: 0 };\n  }\n\n  return {\n    w:\n      borderExtra.widths[0] +\n      borderExtra.widths[2] +\n      borderExtra.insets[0] +\n      borderExtra.insets[2],\n    h:\n      borderExtra.widths[1] +\n      borderExtra.widths[3] +\n      borderExtra.insets[1] +\n      borderExtra.insets[3],\n  };\n}\n\nfunction hasMargin(node) {\n  return (\n    node.margin &&\n    (node.margin.topInset ||\n      node.margin.rightInset ||\n      node.margin.bottomInset ||\n      node.margin.leftInset)\n  );\n}\n\nfunction _setValue(templateNode, value) {\n  if (!templateNode.value) {\n    const nodeValue = new Value({});\n    templateNode[$appendChild](nodeValue);\n    templateNode.value = nodeValue;\n  }\n  templateNode.value[$setValue](value);\n}\n\nfunction* getContainedChildren(node) {\n  for (const child of node[$getChildren]()) {\n    if (child instanceof SubformSet) {\n      yield* child[$getContainedChildren]();\n      continue;\n    }\n    yield child;\n  }\n}\n\nfunction isRequired(node) {\n  return node.validate?.nullTest === \"error\";\n}\n\nfunction setTabIndex(node) {\n  while (node) {\n    if (!node.traversal) {\n      node[$tabIndex] = node[$getParent]()[$tabIndex];\n      return;\n    }\n\n    if (node[$tabIndex]) {\n      return;\n    }\n\n    let next = null;\n    for (const child of node.traversal[$getChildren]()) {\n      if (child.operation === \"next\") {\n        next = child;\n        break;\n      }\n    }\n\n    if (!next || !next.ref) {\n      node[$tabIndex] = node[$getParent]()[$tabIndex];\n      return;\n    }\n\n    const root = node[$getTemplateRoot]();\n    node[$tabIndex] = ++root[$tabIndex];\n\n    const ref = root[$searchNode](next.ref, node);\n    if (!ref) {\n      return;\n    }\n\n    node = ref[0];\n  }\n}\n\nfunction applyAssist(obj, attributes) {\n  const assist = obj.assist;\n  if (assist) {\n    const assistTitle = assist[$toHTML]();\n    if (assistTitle) {\n      attributes.title = assistTitle;\n    }\n    const role = assist.role;\n    const match = role.match(HEADING_PATTERN);\n    if (match) {\n      const ariaRole = \"heading\";\n      const ariaLevel = match[1];\n      attributes.role = ariaRole;\n      attributes[\"aria-level\"] = ariaLevel;\n    }\n  }\n  // XXX: We could end up in a situation where the obj has a heading role and\n  // is also a table. For now prioritize the table role.\n  if (obj.layout === \"table\") {\n    attributes.role = \"table\";\n  } else if (obj.layout === \"row\") {\n    attributes.role = \"row\";\n  } else {\n    const parent = obj[$getParent]();\n    if (parent.layout === \"row\") {\n      attributes.role = parent.assist?.role === \"TH\" ? \"columnheader\" : \"cell\";\n    }\n  }\n}\n\nfunction ariaLabel(obj) {\n  if (!obj.assist) {\n    return null;\n  }\n  const assist = obj.assist;\n  if (assist.speak && assist.speak[$content] !== \"\") {\n    return assist.speak[$content];\n  }\n  if (assist.toolTip) {\n    return assist.toolTip[$content];\n  }\n  // TODO: support finding the related caption element. See xfa_bug1718037.pdf\n  // for an example.\n  return null;\n}\n\nfunction valueToHtml(value) {\n  return HTMLResult.success({\n    name: \"div\",\n    attributes: {\n      class: [\"xfaRich\"],\n      style: Object.create(null),\n    },\n    children: [\n      {\n        name: \"span\",\n        attributes: {\n          style: Object.create(null),\n        },\n        value,\n      },\n    ],\n  });\n}\n\nfunction setFirstUnsplittable(node) {\n  const root = node[$getTemplateRoot]();\n  if (root[$extra].firstUnsplittable === null) {\n    root[$extra].firstUnsplittable = node;\n    root[$extra].noLayoutFailure = true;\n  }\n}\n\nfunction unsetFirstUnsplittable(node) {\n  const root = node[$getTemplateRoot]();\n  if (root[$extra].firstUnsplittable === node) {\n    root[$extra].noLayoutFailure = false;\n  }\n}\n\nfunction handleBreak(node) {\n  if (node[$extra]) {\n    return false;\n  }\n\n  node[$extra] = Object.create(null);\n\n  if (node.targetType === \"auto\") {\n    return false;\n  }\n\n  const root = node[$getTemplateRoot]();\n  let target = null;\n  if (node.target) {\n    target = root[$searchNode](node.target, node[$getParent]());\n    if (!target) {\n      return false;\n    }\n    target = target[0];\n  }\n\n  const { currentPageArea, currentContentArea } = root[$extra];\n\n  if (node.targetType === \"pageArea\") {\n    if (!(target instanceof PageArea)) {\n      target = null;\n    }\n\n    if (node.startNew) {\n      node[$extra].target = target || currentPageArea;\n      return true;\n    } else if (target && target !== currentPageArea) {\n      node[$extra].target = target;\n      return true;\n    }\n\n    return false;\n  }\n\n  if (!(target instanceof ContentArea)) {\n    target = null;\n  }\n\n  const pageArea = target && target[$getParent]();\n\n  let index;\n  let nextPageArea = pageArea;\n  if (node.startNew) {\n    // startNew === 1 so we must create a new container (pageArea or\n    // contentArea).\n    if (target) {\n      const contentAreas = pageArea.contentArea.children;\n      const indexForCurrent = contentAreas.indexOf(currentContentArea);\n      const indexForTarget = contentAreas.indexOf(target);\n      if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) {\n        // The next container is after the current container so\n        // we can stay on the same page.\n        nextPageArea = null;\n      }\n      index = indexForTarget - 1;\n    } else {\n      index = currentPageArea.contentArea.children.indexOf(currentContentArea);\n    }\n  } else if (target && target !== currentContentArea) {\n    const contentAreas = pageArea.contentArea.children;\n    index = contentAreas.indexOf(target) - 1;\n    nextPageArea = pageArea === currentPageArea ? null : pageArea;\n  } else {\n    return false;\n  }\n\n  node[$extra].target = nextPageArea;\n  node[$extra].index = index;\n  return true;\n}\n\nfunction handleOverflow(node, extraNode, space) {\n  const root = node[$getTemplateRoot]();\n  const saved = root[$extra].noLayoutFailure;\n  const savedMethod = extraNode[$getSubformParent];\n\n  // Replace $getSubformParent to emulate that extraNode is just\n  // under node.\n  extraNode[$getSubformParent] = () => node;\n\n  root[$extra].noLayoutFailure = true;\n  const res = extraNode[$toHTML](space);\n  node[$addHTML](res.html, res.bbox);\n  root[$extra].noLayoutFailure = saved;\n  extraNode[$getSubformParent] = savedMethod;\n}\n\nclass AppearanceFilter extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"appearanceFilter\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Arc extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"arc\", /* hasChildren = */ true);\n    this.circular = getInteger({\n      data: attributes.circular,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.startAngle = getFloat({\n      data: attributes.startAngle,\n      defaultValue: 0,\n      validate: x => true,\n    });\n    this.sweepAngle = getFloat({\n      data: attributes.sweepAngle,\n      defaultValue: 360,\n      validate: x => true,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.edge = null;\n    this.fill = null;\n  }\n\n  [$toHTML]() {\n    const edge = this.edge || new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    } else {\n      style.fill = \"transparent\";\n    }\n    style.strokeWidth = measureToString(\n      edge.presence === \"visible\" ? edge.thickness : 0\n    );\n    style.stroke = edgeStyle.color;\n    let arc;\n    const attributes = {\n      xmlns: SVG_NS,\n      style: {\n        width: \"100%\",\n        height: \"100%\",\n        overflow: \"visible\",\n      },\n    };\n\n    if (this.sweepAngle === 360) {\n      arc = {\n        name: \"ellipse\",\n        attributes: {\n          xmlns: SVG_NS,\n          cx: \"50%\",\n          cy: \"50%\",\n          rx: \"50%\",\n          ry: \"50%\",\n          style,\n        },\n      };\n    } else {\n      const startAngle = (this.startAngle * Math.PI) / 180;\n      const sweepAngle = (this.sweepAngle * Math.PI) / 180;\n      const largeArc = this.sweepAngle > 180 ? 1 : 0;\n      const [x1, y1, x2, y2] = [\n        50 * (1 + Math.cos(startAngle)),\n        50 * (1 - Math.sin(startAngle)),\n        50 * (1 + Math.cos(startAngle + sweepAngle)),\n        50 * (1 - Math.sin(startAngle + sweepAngle)),\n      ];\n\n      arc = {\n        name: \"path\",\n        attributes: {\n          xmlns: SVG_NS,\n          d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`,\n          vectorEffect: \"non-scaling-stroke\",\n          style,\n        },\n      };\n\n      Object.assign(attributes, {\n        viewBox: \"0 0 100 100\",\n        preserveAspectRatio: \"none\",\n      });\n    }\n\n    const svg = {\n      name: \"svg\",\n      children: [arc],\n      attributes,\n    };\n\n    const parent = this[$getParent]()[$getParent]();\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\",\n          },\n        },\n        children: [svg],\n      });\n    }\n\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\n\nclass Area extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"area\", /* hasChildren = */ true);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1,\n    });\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.desc = null;\n    this.extras = null;\n    this.area = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n  }\n\n  *[$getContainedChildren]() {\n    // This function is overriden in order to fake that subforms under\n    // this set are in fact under parent subform.\n    yield* getContainedChildren(this);\n  }\n\n  [$isTransparent]() {\n    return true;\n  }\n\n  [$isBindable]() {\n    return true;\n  }\n\n  [$addHTML](html, bbox) {\n    const [x, y, w, h] = bbox;\n    this[$extra].width = Math.max(this[$extra].width, x + w);\n    this[$extra].height = Math.max(this[$extra].height, y + h);\n\n    this[$extra].children.push(html);\n  }\n\n  [$getAvailableSpace]() {\n    return this[$extra].availableSpace;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    const style = toStyle(this, \"position\");\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: [\"xfaArea\"],\n    };\n\n    if (isPrintOnly(this)) {\n      attributes.class.push(\"xfaPrintOnly\");\n    }\n\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n\n    const children = [];\n    this[$extra] = {\n      children,\n      width: 0,\n      height: 0,\n      availableSpace,\n    };\n\n    const result = this[$childrenToHTML]({\n      filter: new Set([\n        \"area\",\n        \"draw\",\n        \"field\",\n        \"exclGroup\",\n        \"subform\",\n        \"subformSet\",\n      ]),\n      include: true,\n    });\n\n    if (!result.success) {\n      if (result.isBreak()) {\n        return result;\n      }\n      // Nothing to propose for the element which doesn't fit the\n      // available space.\n      delete this[$extra];\n      return HTMLResult.FAILURE;\n    }\n\n    style.width = measureToString(this[$extra].width);\n    style.height = measureToString(this[$extra].height);\n\n    const html = {\n      name: \"div\",\n      attributes,\n      children,\n    };\n\n    const bbox = [this.x, this.y, this[$extra].width, this[$extra].height];\n    delete this[$extra];\n\n    return HTMLResult.success(html, bbox);\n  }\n}\n\nclass Assist extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"assist\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.role = attributes.role || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.speak = null;\n    this.toolTip = null;\n  }\n\n  [$toHTML]() {\n    return this.toolTip?.[$content] || null;\n  }\n}\n\nclass Barcode extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"barcode\", /* hasChildren = */ true);\n    this.charEncoding = getKeyword({\n      data: attributes.charEncoding\n        ? attributes.charEncoding.toLowerCase()\n        : \"\",\n      defaultValue: \"\",\n      validate: k =>\n        [\n          \"utf-8\",\n          \"big-five\",\n          \"fontspecific\",\n          \"gbk\",\n          \"gb-18030\",\n          \"gb-2312\",\n          \"ksc-5601\",\n          \"none\",\n          \"shift-jis\",\n          \"ucs-2\",\n          \"utf-16\",\n        ].includes(k) || k.match(/iso-8859-\\d{2}/),\n    });\n    this.checksum = getStringOption(attributes.checksum, [\n      \"none\",\n      \"1mod10\",\n      \"1mod10_1mod11\",\n      \"2mod10\",\n      \"auto\",\n    ]);\n    this.dataColumnCount = getInteger({\n      data: attributes.dataColumnCount,\n      defaultValue: -1,\n      validate: x => x >= 0,\n    });\n    this.dataLength = getInteger({\n      data: attributes.dataLength,\n      defaultValue: -1,\n      validate: x => x >= 0,\n    });\n    this.dataPrep = getStringOption(attributes.dataPrep, [\n      \"none\",\n      \"flateCompress\",\n    ]);\n    this.dataRowCount = getInteger({\n      data: attributes.dataRowCount,\n      defaultValue: -1,\n      validate: x => x >= 0,\n    });\n    this.endChar = attributes.endChar || \"\";\n    this.errorCorrectionLevel = getInteger({\n      data: attributes.errorCorrectionLevel,\n      defaultValue: -1,\n      validate: x => x >= 0 && x <= 8,\n    });\n    this.id = attributes.id || \"\";\n    this.moduleHeight = getMeasurement(attributes.moduleHeight, \"5mm\");\n    this.moduleWidth = getMeasurement(attributes.moduleWidth, \"0.25mm\");\n    this.printCheckDigit = getInteger({\n      data: attributes.printCheckDigit,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.rowColumnRatio = getRatio(attributes.rowColumnRatio);\n    this.startChar = attributes.startChar || \"\";\n    this.textLocation = getStringOption(attributes.textLocation, [\n      \"below\",\n      \"above\",\n      \"aboveEmbedded\",\n      \"belowEmbedded\",\n      \"none\",\n    ]);\n    this.truncate = getInteger({\n      data: attributes.truncate,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.type = getStringOption(\n      attributes.type ? attributes.type.toLowerCase() : \"\",\n      [\n        \"aztec\",\n        \"codabar\",\n        \"code2of5industrial\",\n        \"code2of5interleaved\",\n        \"code2of5matrix\",\n        \"code2of5standard\",\n        \"code3of9\",\n        \"code3of9extended\",\n        \"code11\",\n        \"code49\",\n        \"code93\",\n        \"code128\",\n        \"code128a\",\n        \"code128b\",\n        \"code128c\",\n        \"code128sscc\",\n        \"datamatrix\",\n        \"ean8\",\n        \"ean8add2\",\n        \"ean8add5\",\n        \"ean13\",\n        \"ean13add2\",\n        \"ean13add5\",\n        \"ean13pwcd\",\n        \"fim\",\n        \"logmars\",\n        \"maxicode\",\n        \"msi\",\n        \"pdf417\",\n        \"pdf417macro\",\n        \"plessey\",\n        \"postauscust2\",\n        \"postauscust3\",\n        \"postausreplypaid\",\n        \"postausstandard\",\n        \"postukrm4scc\",\n        \"postusdpbc\",\n        \"postusimb\",\n        \"postusstandard\",\n        \"postus5zip\",\n        \"qrcode\",\n        \"rfid\",\n        \"rss14\",\n        \"rss14expanded\",\n        \"rss14limited\",\n        \"rss14stacked\",\n        \"rss14stackedomni\",\n        \"rss14truncated\",\n        \"telepen\",\n        \"ucc128\",\n        \"ucc128random\",\n        \"ucc128sscc\",\n        \"upca\",\n        \"upcaadd2\",\n        \"upcaadd5\",\n        \"upcapwcd\",\n        \"upce\",\n        \"upceadd2\",\n        \"upceadd5\",\n        \"upcean2\",\n        \"upcean5\",\n        \"upsmaxicode\",\n      ]\n    );\n    this.upsMode = getStringOption(attributes.upsMode, [\n      \"usCarrier\",\n      \"internationalCarrier\",\n      \"secureSymbol\",\n      \"standardSymbol\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.wideNarrowRatio = getRatio(attributes.wideNarrowRatio);\n    this.encrypt = null;\n    this.extras = null;\n  }\n}\n\nclass Bind extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bind\", /* hasChildren = */ true);\n    this.match = getStringOption(attributes.match, [\n      \"once\",\n      \"dataRef\",\n      \"global\",\n      \"none\",\n    ]);\n    this.ref = attributes.ref || \"\";\n    this.picture = null;\n  }\n}\n\nclass BindItems extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bindItems\");\n    this.connection = attributes.connection || \"\";\n    this.labelRef = attributes.labelRef || \"\";\n    this.ref = attributes.ref || \"\";\n    this.valueRef = attributes.valueRef || \"\";\n  }\n}\n\nclass Bookend extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"bookend\");\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass BooleanElement extends Option01 {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"boolean\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] === 1 ? \"1\" : \"0\");\n  }\n}\n\nclass Border extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"border\", /* hasChildren = */ true);\n    this.break = getStringOption(attributes.break, [\"close\", \"open\"]);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.corner = new XFAObjectArray(4);\n    this.edge = new XFAObjectArray(4);\n    this.extras = null;\n    this.fill = null;\n    this.margin = null;\n  }\n\n  [$getExtra]() {\n    if (!this[$extra]) {\n      const edges = this.edge.children.slice();\n      if (edges.length < 4) {\n        const defaultEdge = edges.at(-1) || new Edge({});\n        for (let i = edges.length; i < 4; i++) {\n          edges.push(defaultEdge);\n        }\n      }\n\n      const widths = edges.map(edge => edge.thickness);\n      const insets = [0, 0, 0, 0];\n      if (this.margin) {\n        insets[0] = this.margin.topInset;\n        insets[1] = this.margin.rightInset;\n        insets[2] = this.margin.bottomInset;\n        insets[3] = this.margin.leftInset;\n      }\n      this[$extra] = { widths, insets, edges };\n    }\n    return this[$extra];\n  }\n\n  [$toStyle]() {\n    // TODO: incomplete (hand).\n    const { edges } = this[$getExtra]();\n    const edgeStyles = edges.map(node => {\n      const style = node[$toStyle]();\n      style.color ||= \"#000000\";\n      return style;\n    });\n\n    const style = Object.create(null);\n    if (this.margin) {\n      Object.assign(style, this.margin[$toStyle]());\n    }\n\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    }\n\n    if (this.corner.children.some(node => node.radius !== 0)) {\n      const cornerStyles = this.corner.children.map(node => node[$toStyle]());\n      if (cornerStyles.length === 2 || cornerStyles.length === 3) {\n        const last = cornerStyles.at(-1);\n        for (let i = cornerStyles.length; i < 4; i++) {\n          cornerStyles.push(last);\n        }\n      }\n\n      style.borderRadius = cornerStyles.map(s => s.radius).join(\" \");\n    }\n\n    switch (this.presence) {\n      case \"invisible\":\n      case \"hidden\":\n        style.borderStyle = \"\";\n        break;\n      case \"inactive\":\n        style.borderStyle = \"none\";\n        break;\n      default:\n        style.borderStyle = edgeStyles.map(s => s.style).join(\" \");\n        break;\n    }\n\n    style.borderWidth = edgeStyles.map(s => s.width).join(\" \");\n    style.borderColor = edgeStyles.map(s => s.color).join(\" \");\n\n    return style;\n  }\n}\n\nclass Break extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"break\", /* hasChildren = */ true);\n    this.after = getStringOption(attributes.after, [\n      \"auto\",\n      \"contentArea\",\n      \"pageArea\",\n      \"pageEven\",\n      \"pageOdd\",\n    ]);\n    this.afterTarget = attributes.afterTarget || \"\";\n    this.before = getStringOption(attributes.before, [\n      \"auto\",\n      \"contentArea\",\n      \"pageArea\",\n      \"pageEven\",\n      \"pageOdd\",\n    ]);\n    this.beforeTarget = attributes.beforeTarget || \"\";\n    this.bookendLeader = attributes.bookendLeader || \"\";\n    this.bookendTrailer = attributes.bookendTrailer || \"\";\n    this.id = attributes.id || \"\";\n    this.overflowLeader = attributes.overflowLeader || \"\";\n    this.overflowTarget = attributes.overflowTarget || \"\";\n    this.overflowTrailer = attributes.overflowTrailer || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\n\nclass BreakAfter extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"breakAfter\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.target = attributes.target || \"\";\n    this.targetType = getStringOption(attributes.targetType, [\n      \"auto\",\n      \"contentArea\",\n      \"pageArea\",\n    ]);\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.script = null;\n  }\n}\n\nclass BreakBefore extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"breakBefore\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.startNew = getInteger({\n      data: attributes.startNew,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.target = attributes.target || \"\";\n    this.targetType = getStringOption(attributes.targetType, [\n      \"auto\",\n      \"contentArea\",\n      \"pageArea\",\n    ]);\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.script = null;\n  }\n\n  [$toHTML](availableSpace) {\n    this[$extra] = {};\n    return HTMLResult.FAILURE;\n  }\n}\n\nclass Button extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"button\", /* hasChildren = */ true);\n    this.highlight = getStringOption(attributes.highlight, [\n      \"inverted\",\n      \"none\",\n      \"outline\",\n      \"push\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: highlight.\n\n    const parent = this[$getParent]();\n    const grandpa = parent[$getParent]();\n    const htmlButton = {\n      name: \"button\",\n      attributes: {\n        id: this[$uid],\n        class: [\"xfaButton\"],\n        style: {},\n      },\n      children: [],\n    };\n\n    for (const event of grandpa.event.children) {\n      // if (true) break;\n      if (event.activity !== \"click\" || !event.script) {\n        continue;\n      }\n      const jsURL = recoverJsURL(event.script[$content]);\n      if (!jsURL) {\n        continue;\n      }\n      const href = fixURL(jsURL.url);\n      if (!href) {\n        continue;\n      }\n\n      // we've an url so generate a <a>\n      htmlButton.children.push({\n        name: \"a\",\n        attributes: {\n          id: \"link\" + this[$uid],\n          href,\n          newWindow: jsURL.newWindow,\n          class: [\"xfaLink\"],\n          style: {},\n        },\n        children: [],\n      });\n    }\n\n    return HTMLResult.success(htmlButton);\n  }\n}\n\nclass Calculate extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"calculate\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.override = getStringOption(attributes.override, [\n      \"disabled\",\n      \"error\",\n      \"ignore\",\n      \"warning\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.message = null;\n    this.script = null;\n  }\n}\n\nclass Caption extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"caption\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.placement = getStringOption(attributes.placement, [\n      \"left\",\n      \"bottom\",\n      \"inline\",\n      \"right\",\n      \"top\",\n    ]);\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.reserve = Math.ceil(getMeasurement(attributes.reserve));\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.font = null;\n    this.margin = null;\n    this.para = null;\n    this.value = null;\n  }\n\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n\n  [$getExtra](availableSpace) {\n    if (!this[$extra]) {\n      let { width, height } = availableSpace;\n      switch (this.placement) {\n        case \"left\":\n        case \"right\":\n        case \"inline\":\n          width = this.reserve <= 0 ? width : this.reserve;\n          break;\n        case \"top\":\n        case \"bottom\":\n          height = this.reserve <= 0 ? height : this.reserve;\n          break;\n      }\n\n      this[$extra] = layoutNode(this, { width, height });\n    }\n    return this[$extra];\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    if (!this.value) {\n      return HTMLResult.EMPTY;\n    }\n\n    this[$pushPara]();\n    const value = this.value[$toHTML](availableSpace).html;\n\n    if (!value) {\n      this[$popPara]();\n      return HTMLResult.EMPTY;\n    }\n\n    const savedReserve = this.reserve;\n    if (this.reserve <= 0) {\n      const { w, h } = this[$getExtra](availableSpace);\n      switch (this.placement) {\n        case \"left\":\n        case \"right\":\n        case \"inline\":\n          this.reserve = w;\n          break;\n        case \"top\":\n        case \"bottom\":\n          this.reserve = h;\n          break;\n      }\n    }\n\n    const children = [];\n    if (typeof value === \"string\") {\n      children.push({\n        name: \"#text\",\n        value,\n      });\n    } else {\n      children.push(value);\n    }\n\n    const style = toStyle(this, \"font\", \"margin\", \"visibility\");\n    switch (this.placement) {\n      case \"left\":\n      case \"right\":\n        if (this.reserve > 0) {\n          style.width = measureToString(this.reserve);\n        }\n        break;\n      case \"top\":\n      case \"bottom\":\n        if (this.reserve > 0) {\n          style.height = measureToString(this.reserve);\n        }\n        break;\n    }\n\n    setPara(this, null, value);\n    this[$popPara]();\n\n    this.reserve = savedReserve;\n\n    return HTMLResult.success({\n      name: \"div\",\n      attributes: {\n        style,\n        class: [\"xfaCaption\"],\n      },\n      children,\n    });\n  }\n}\n\nclass Certificate extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"certificate\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Certificates extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"certificates\", /* hasChildren = */ true);\n    this.credentialServerPolicy = getStringOption(\n      attributes.credentialServerPolicy,\n      [\"optional\", \"required\"]\n    );\n    this.id = attributes.id || \"\";\n    this.url = attributes.url || \"\";\n    this.urlPolicy = attributes.urlPolicy || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encryption = null;\n    this.issuers = null;\n    this.keyUsage = null;\n    this.oids = null;\n    this.signing = null;\n    this.subjectDNs = null;\n  }\n}\n\nclass CheckButton extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"checkButton\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.mark = getStringOption(attributes.mark, [\n      \"default\",\n      \"check\",\n      \"circle\",\n      \"cross\",\n      \"diamond\",\n      \"square\",\n      \"star\",\n    ]);\n    this.shape = getStringOption(attributes.shape, [\"square\", \"round\"]);\n    this.size = getMeasurement(attributes.size, \"10pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: border, shape and mark.\n\n    const style = toStyle(this, \"margin\");\n    const size = measureToString(this.size);\n\n    style.width = style.height = size;\n\n    let type;\n    let className;\n    let groupId;\n    const field = this[$getParent]()[$getParent]();\n    const items =\n      (field.items.children.length &&\n        field.items.children[0][$toHTML]().html) ||\n      [];\n    const exportedValue = {\n      on: (items[0] !== undefined ? items[0] : \"on\").toString(),\n      off: (items[1] !== undefined ? items[1] : \"off\").toString(),\n    };\n\n    const value = field.value?.[$text]() || \"off\";\n    const checked = value === exportedValue.on || undefined;\n    const container = field[$getSubformParent]();\n    const fieldId = field[$uid];\n    let dataId;\n\n    if (container instanceof ExclGroup) {\n      groupId = container[$uid];\n      type = \"radio\";\n      className = \"xfaRadio\";\n      dataId = container[$data]?.[$uid] || container[$uid];\n    } else {\n      type = \"checkbox\";\n      className = \"xfaCheckbox\";\n      dataId = field[$data]?.[$uid] || field[$uid];\n    }\n\n    const input = {\n      name: \"input\",\n      attributes: {\n        class: [className],\n        style,\n        fieldId,\n        dataId,\n        type,\n        checked,\n        xfaOn: exportedValue.on,\n        xfaOff: exportedValue.off,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false,\n      },\n    };\n\n    if (groupId) {\n      input.attributes.name = groupId;\n    }\n\n    if (isRequired(field)) {\n      input.attributes[\"aria-required\"] = true;\n      input.attributes.required = true;\n    }\n\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"],\n      },\n      children: [input],\n    });\n  }\n}\n\nclass ChoiceList extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"choiceList\", /* hasChildren = */ true);\n    this.commitOn = getStringOption(attributes.commitOn, [\"select\", \"exit\"]);\n    this.id = attributes.id || \"\";\n    this.open = getStringOption(attributes.open, [\n      \"userControl\",\n      \"always\",\n      \"multiSelect\",\n      \"onEntry\",\n    ]);\n    this.textEntry = getInteger({\n      data: attributes.textEntry,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    const style = toStyle(this, \"border\", \"margin\");\n    const ui = this[$getParent]();\n    const field = ui[$getParent]();\n    const fontSize = field.font?.size || 10;\n    const optionStyle = {\n      fontSize: `calc(${fontSize}px * var(--total-scale-factor))`,\n    };\n    const children = [];\n\n    if (field.items.children.length > 0) {\n      const items = field.items;\n      let displayedIndex = 0;\n      let saveIndex = 0;\n      if (items.children.length === 2) {\n        displayedIndex = items.children[0].save;\n        saveIndex = 1 - displayedIndex;\n      }\n      const displayed = items.children[displayedIndex][$toHTML]().html;\n      const values = items.children[saveIndex][$toHTML]().html;\n\n      let selected = false;\n      const value = field.value?.[$text]() || \"\";\n      for (let i = 0, ii = displayed.length; i < ii; i++) {\n        const option = {\n          name: \"option\",\n          attributes: {\n            value: values[i] || displayed[i],\n            style: optionStyle,\n          },\n          value: displayed[i],\n        };\n        if (values[i] === value) {\n          option.attributes.selected = selected = true;\n        }\n        children.push(option);\n      }\n\n      if (!selected) {\n        children.splice(0, 0, {\n          name: \"option\",\n          attributes: {\n            hidden: true,\n            selected: true,\n          },\n          value: \" \",\n        });\n      }\n    }\n\n    const selectAttributes = {\n      class: [\"xfaSelect\"],\n      fieldId: field[$uid],\n      dataId: field[$data]?.[$uid] || field[$uid],\n      style,\n      \"aria-label\": ariaLabel(field),\n      \"aria-required\": false,\n    };\n\n    if (isRequired(field)) {\n      selectAttributes[\"aria-required\"] = true;\n      selectAttributes.required = true;\n    }\n\n    if (this.open === \"multiSelect\") {\n      selectAttributes.multiple = true;\n    }\n\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"],\n      },\n      children: [\n        {\n          name: \"select\",\n          children,\n          attributes: selectAttributes,\n        },\n      ],\n    });\n  }\n}\n\nclass Color extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"color\", /* hasChildren = */ true);\n    this.cSpace = getStringOption(attributes.cSpace, [\"SRGB\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.value = attributes.value ? getColor(attributes.value) : \"\";\n    this.extras = null;\n  }\n\n  [$hasSettableValue]() {\n    return false;\n  }\n\n  [$toStyle]() {\n    return this.value\n      ? Util.makeHexColor(this.value.r, this.value.g, this.value.b)\n      : null;\n  }\n}\n\nclass Comb extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"comb\");\n    this.id = attributes.id || \"\";\n    this.numberOfCells = getInteger({\n      data: attributes.numberOfCells,\n      defaultValue: 0,\n      validate: x => x >= 0,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Connect extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"connect\", /* hasChildren = */ true);\n    this.connection = attributes.connection || \"\";\n    this.id = attributes.id || \"\";\n    this.ref = attributes.ref || \"\";\n    this.usage = getStringOption(attributes.usage, [\n      \"exportAndImport\",\n      \"exportOnly\",\n      \"importOnly\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.picture = null;\n  }\n}\n\nclass ContentArea extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"contentArea\", /* hasChildren = */ true);\n    this.h = getMeasurement(attributes.h);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = getMeasurement(attributes.w);\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.desc = null;\n    this.extras = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    const left = measureToString(this.x);\n    const top = measureToString(this.y);\n\n    const style = {\n      left,\n      top,\n      width: measureToString(this.w),\n      height: measureToString(this.h),\n    };\n\n    const classNames = [\"xfaContentarea\"];\n\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n\n    return HTMLResult.success({\n      name: \"div\",\n      children: [],\n      attributes: {\n        style,\n        class: classNames,\n        id: this[$uid],\n      },\n    });\n  }\n}\n\nclass Corner extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"corner\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.inverted = getInteger({\n      data: attributes.inverted,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.join = getStringOption(attributes.join, [\"square\", \"round\"]);\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.radius = getMeasurement(attributes.radius);\n    this.stroke = getStringOption(attributes.stroke, [\n      \"solid\",\n      \"dashDot\",\n      \"dashDotDot\",\n      \"dashed\",\n      \"dotted\",\n      \"embossed\",\n      \"etched\",\n      \"lowered\",\n      \"raised\",\n    ]);\n    this.thickness = getMeasurement(attributes.thickness, \"0.5pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle]() {\n    // In using CSS it's only possible to handle radius\n    // (at least with basic css).\n    // Is there a real use (interest ?) of all these properties ?\n    // Maybe it's possible to implement them using svg and border-image...\n    // TODO: implement all the missing properties.\n    const style = toStyle(this, \"visibility\");\n    style.radius = measureToString(this.join === \"square\" ? 0 : this.radius);\n    return style;\n  }\n}\n\nclass DateElement extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"date\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\n\nclass DateTime extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"dateTime\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\n\nclass DateTimeEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"dateTimeEdit\", /* hasChildren = */ true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\n      \"auto\",\n      \"off\",\n      \"on\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.picker = getStringOption(attributes.picker, [\"host\", \"none\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    // When the picker is host we should use type=date for the input\n    // but we need to put the buttons outside the text-field.\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    const field = this[$getParent]()[$getParent]();\n    const html = {\n      name: \"input\",\n      attributes: {\n        type: \"text\",\n        fieldId: field[$uid],\n        dataId: field[$data]?.[$uid] || field[$uid],\n        class: [\"xfaTextfield\"],\n        style,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false,\n      },\n    };\n\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"],\n      },\n      children: [html],\n    });\n  }\n}\n\nclass Decimal extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"decimal\");\n    this.fracDigits = getInteger({\n      data: attributes.fracDigits,\n      defaultValue: 2,\n      validate: x => true,\n    });\n    this.id = attributes.id || \"\";\n    this.leadDigits = getInteger({\n      data: attributes.leadDigits,\n      defaultValue: -1,\n      validate: x => true,\n    });\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    const number = parseFloat(this[$content].trim());\n    this[$content] = isNaN(number) ? null : number;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(\n      this[$content] !== null ? this[$content].toString() : \"\"\n    );\n  }\n}\n\nclass DefaultUi extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"defaultUi\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\n\nclass Desc extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"desc\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n}\n\nclass DigestMethod extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"digestMethod\", [\n      \"\",\n      \"SHA1\",\n      \"SHA256\",\n      \"SHA512\",\n      \"RIPEMD160\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass DigestMethods extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"digestMethods\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.digestMethod = new XFAObjectArray();\n  }\n}\n\nclass Draw extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"draw\", /* hasChildren = */ true);\n    this.anchorType = getStringOption(attributes.anchorType, [\n      \"topLeft\",\n      \"bottomCenter\",\n      \"bottomLeft\",\n      \"bottomRight\",\n      \"middleCenter\",\n      \"middleLeft\",\n      \"middleRight\",\n      \"topCenter\",\n      \"topRight\",\n    ]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1,\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\n      \"left\",\n      \"center\",\n      \"justify\",\n      \"justifyAll\",\n      \"radix\",\n      \"right\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.rotate = getInteger({\n      data: attributes.rotate,\n      defaultValue: 0,\n      validate: x => x % 90 === 0,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.border = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.font = null;\n    this.keep = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.ui = null;\n    this.value = null;\n    this.setProperty = new XFAObjectArray();\n  }\n\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n\n    if (this.presence === \"hidden\" || this.presence === \"inactive\") {\n      return HTMLResult.EMPTY;\n    }\n\n    fixDimensions(this);\n    this[$pushPara]();\n\n    // If at least one dimension is missing and we've a text\n    // then we can guess it in laying out the text.\n    const savedW = this.w;\n    const savedH = this.h;\n    const { w, h, isBroken } = layoutNode(this, availableSpace);\n    if (w && this.w === \"\") {\n      // If the parent layout is lr-tb with a w=100 and we already have a child\n      // which takes 90 on the current line.\n      // If we have a text with a length (in px) equal to 100 then it'll be\n      // splitted into almost 10 chunks: so it won't be nice.\n      // So if we've potentially more width to provide in some parent containers\n      // let's increase it to give a chance to have a better rendering.\n      if (isBroken && this[$getSubformParent]()[$isThereMoreWidth]()) {\n        this[$popPara]();\n        return HTMLResult.FAILURE;\n      }\n\n      this.w = w;\n    }\n    if (h && this.h === \"\") {\n      this.h = h;\n    }\n\n    setFirstUnsplittable(this);\n    if (!checkDimensions(this, availableSpace)) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.FAILURE;\n    }\n    unsetFirstUnsplittable(this);\n\n    const style = toStyle(\n      this,\n      \"font\",\n      \"hAlign\",\n      \"dimensions\",\n      \"position\",\n      \"presence\",\n      \"rotate\",\n      \"anchorType\",\n      \"border\",\n      \"margin\"\n    );\n\n    setMinMaxDimensions(this, style);\n\n    if (style.margin) {\n      style.padding = style.margin;\n      delete style.margin;\n    }\n\n    const classNames = [\"xfaDraw\"];\n    if (this.font) {\n      classNames.push(\"xfaFont\");\n    }\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: classNames,\n    };\n\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n\n    const html = {\n      name: \"div\",\n      attributes,\n      children: [],\n    };\n\n    applyAssist(this, attributes);\n\n    const bbox = computeBbox(this, html, availableSpace);\n\n    const value = this.value ? this.value[$toHTML](availableSpace).html : null;\n    if (value === null) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n\n    html.children.push(value);\n    setPara(this, style, value);\n\n    this.w = savedW;\n    this.h = savedH;\n\n    this[$popPara]();\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\n\nclass Edge extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"edge\", /* hasChildren = */ true);\n    this.cap = getStringOption(attributes.cap, [\"square\", \"butt\", \"round\"]);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.stroke = getStringOption(attributes.stroke, [\n      \"solid\",\n      \"dashDot\",\n      \"dashDotDot\",\n      \"dashed\",\n      \"dotted\",\n      \"embossed\",\n      \"etched\",\n      \"lowered\",\n      \"raised\",\n    ]);\n    this.thickness = getMeasurement(attributes.thickness, \"0.5pt\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle]() {\n    // TODO: dashDot & dashDotDot.\n    const style = toStyle(this, \"visibility\");\n    Object.assign(style, {\n      linecap: this.cap,\n      width: measureToString(this.thickness),\n      color: this.color ? this.color[$toStyle]() : \"#000000\",\n      style: \"\",\n    });\n\n    if (this.presence !== \"visible\") {\n      style.style = \"none\";\n    } else {\n      switch (this.stroke) {\n        case \"solid\":\n          style.style = \"solid\";\n          break;\n        case \"dashDot\":\n          style.style = \"dashed\";\n          break;\n        case \"dashDotDot\":\n          style.style = \"dashed\";\n          break;\n        case \"dashed\":\n          style.style = \"dashed\";\n          break;\n        case \"dotted\":\n          style.style = \"dotted\";\n          break;\n        case \"embossed\":\n          style.style = \"ridge\";\n          break;\n        case \"etched\":\n          style.style = \"groove\";\n          break;\n        case \"lowered\":\n          style.style = \"inset\";\n          break;\n        case \"raised\":\n          style.style = \"outset\";\n          break;\n      }\n    }\n    return style;\n  }\n}\n\nclass Encoding extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encoding\", [\n      \"adbe.x509.rsa_sha1\",\n      \"adbe.pkcs7.detached\",\n      \"adbe.pkcs7.sha1\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Encodings extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encodings\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encoding = new XFAObjectArray();\n  }\n}\n\nclass Encrypt extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encrypt\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = null;\n  }\n}\n\nclass EncryptData extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptData\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\n      \"encrypt\",\n      \"decrypt\",\n    ]);\n    this.target = attributes.target || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.filter = null;\n    this.manifest = null;\n  }\n}\n\nclass Encryption extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryption\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\n\nclass EncryptionMethod extends OptionObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptionMethod\", [\n      \"\",\n      \"AES256-CBC\",\n      \"TRIPLEDES-CBC\",\n      \"AES128-CBC\",\n      \"AES192-CBC\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass EncryptionMethods extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"encryptionMethods\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.encryptionMethod = new XFAObjectArray();\n  }\n}\n\nclass Event extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"event\", /* hasChildren = */ true);\n    this.activity = getStringOption(attributes.activity, [\n      \"click\",\n      \"change\",\n      \"docClose\",\n      \"docReady\",\n      \"enter\",\n      \"exit\",\n      \"full\",\n      \"indexChange\",\n      \"initialize\",\n      \"mouseDown\",\n      \"mouseEnter\",\n      \"mouseExit\",\n      \"mouseUp\",\n      \"postExecute\",\n      \"postOpen\",\n      \"postPrint\",\n      \"postSave\",\n      \"postSign\",\n      \"postSubmit\",\n      \"preExecute\",\n      \"preOpen\",\n      \"prePrint\",\n      \"preSave\",\n      \"preSign\",\n      \"preSubmit\",\n      \"ready\",\n      \"validationState\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.listen = getStringOption(attributes.listen, [\n      \"refOnly\",\n      \"refAndDescendents\",\n    ]);\n    this.name = attributes.name || \"\";\n    this.ref = attributes.ref || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n\n    // One-of properties\n    this.encryptData = null;\n    this.execute = null;\n    this.script = null;\n    this.signData = null;\n    this.submit = null;\n  }\n}\n\nclass ExData extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exData\");\n    this.contentType = attributes.contentType || \"\";\n    this.href = attributes.href || \"\";\n    this.id = attributes.id || \"\";\n    this.maxLength = getInteger({\n      data: attributes.maxLength,\n      defaultValue: -1,\n      validate: x => x >= -1,\n    });\n    this.name = attributes.name || \"\";\n    this.rid = attributes.rid || \"\";\n    this.transferEncoding = getStringOption(attributes.transferEncoding, [\n      \"none\",\n      \"base64\",\n      \"package\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$isCDATAXml]() {\n    return this.contentType === \"text/html\";\n  }\n\n  [$onChild](child) {\n    if (\n      this.contentType === \"text/html\" &&\n      child[$namespaceId] === NamespaceIds.xhtml.id\n    ) {\n      this[$content] = child;\n      return true;\n    }\n\n    if (this.contentType === \"text/xml\") {\n      this[$content] = child;\n      return true;\n    }\n\n    return false;\n  }\n\n  [$toHTML](availableSpace) {\n    if (this.contentType !== \"text/html\" || !this[$content]) {\n      // TODO: fix other cases.\n      return HTMLResult.EMPTY;\n    }\n\n    return this[$content][$toHTML](availableSpace);\n  }\n}\n\nclass ExObject extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exObject\", /* hasChildren = */ true);\n    this.archive = attributes.archive || \"\";\n    this.classId = attributes.classId || \"\";\n    this.codeBase = attributes.codeBase || \"\";\n    this.codeType = attributes.codeType || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n}\n\nclass ExclGroup extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"exclGroup\", /* hasChildren = */ true);\n    this.access = getStringOption(attributes.access, [\n      \"open\",\n      \"nonInteractive\",\n      \"protected\",\n      \"readOnly\",\n    ]);\n    this.accessKey = attributes.accessKey || \"\";\n    this.anchorType = getStringOption(attributes.anchorType, [\n      \"topLeft\",\n      \"bottomCenter\",\n      \"bottomLeft\",\n      \"bottomRight\",\n      \"middleCenter\",\n      \"middleLeft\",\n      \"middleRight\",\n      \"topCenter\",\n      \"topRight\",\n    ]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1,\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\n      \"left\",\n      \"center\",\n      \"justify\",\n      \"justifyAll\",\n      \"radix\",\n      \"right\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.layout = getStringOption(attributes.layout, [\n      \"position\",\n      \"lr-tb\",\n      \"rl-row\",\n      \"rl-tb\",\n      \"row\",\n      \"table\",\n      \"tb\",\n    ]);\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.border = null;\n    this.calculate = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.validate = null;\n    this.connect = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n  }\n\n  [$isBindable]() {\n    return true;\n  }\n\n  [$hasSettableValue]() {\n    return true;\n  }\n\n  [$setValue](value) {\n    for (const field of this.field.children) {\n      if (!field.value) {\n        const nodeValue = new Value({});\n        field[$appendChild](nodeValue);\n        field.value = nodeValue;\n      }\n\n      field.value[$setValue](value);\n    }\n  }\n\n  [$isThereMoreWidth]() {\n    return (\n      (this.layout.endsWith(\"-tb\") &&\n        this[$extra].attempt === 0 &&\n        this[$extra].numberInLine > 0) ||\n      this[$getParent]()[$isThereMoreWidth]()\n    );\n  }\n\n  [$isSplittable]() {\n    // We cannot cache the result here because the contentArea\n    // can change.\n    const parent = this[$getSubformParent]();\n    if (!parent[$isSplittable]()) {\n      return false;\n    }\n\n    if (this[$extra]._isSplittable !== undefined) {\n      return this[$extra]._isSplittable;\n    }\n\n    if (this.layout === \"position\" || this.layout.includes(\"row\")) {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n\n    if (parent.layout?.endsWith(\"-tb\") && parent[$extra].numberInLine !== 0) {\n      // See comment in Subform::[$isSplittable] for an explanation.\n      return false;\n    }\n\n    this[$extra]._isSplittable = true;\n    return true;\n  }\n\n  [$flushHTML]() {\n    return flushHTML(this);\n  }\n\n  [$addHTML](html, bbox) {\n    addHTML(this, html, bbox);\n  }\n\n  [$getAvailableSpace]() {\n    return getAvailableSpace(this);\n  }\n\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n    if (\n      this.presence === \"hidden\" ||\n      this.presence === \"inactive\" ||\n      this.h === 0 ||\n      this.w === 0\n    ) {\n      return HTMLResult.EMPTY;\n    }\n\n    fixDimensions(this);\n\n    const children = [];\n    const attributes = {\n      id: this[$uid],\n      class: [],\n    };\n\n    setAccess(this, attributes.class);\n\n    this[$extra] ||= Object.create(null);\n\n    Object.assign(this[$extra], {\n      children,\n      attributes,\n      attempt: 0,\n      line: null,\n      numberInLine: 0,\n      availableSpace: {\n        width: Math.min(this.w || Infinity, availableSpace.width),\n        height: Math.min(this.h || Infinity, availableSpace.height),\n      },\n      width: 0,\n      height: 0,\n      prevHeight: 0,\n      currentWidth: 0,\n    });\n\n    const isSplittable = this[$isSplittable]();\n    if (!isSplittable) {\n      setFirstUnsplittable(this);\n    }\n\n    if (!checkDimensions(this, availableSpace)) {\n      return HTMLResult.FAILURE;\n    }\n    const filter = new Set([\"field\"]);\n\n    if (this.layout.includes(\"row\")) {\n      const columnWidths = this[$getSubformParent]().columnWidths;\n      if (Array.isArray(columnWidths) && columnWidths.length > 0) {\n        this[$extra].columnWidths = columnWidths;\n        this[$extra].currentColumn = 0;\n      }\n    }\n\n    const style = toStyle(\n      this,\n      \"anchorType\",\n      \"dimensions\",\n      \"position\",\n      \"presence\",\n      \"border\",\n      \"margin\",\n      \"hAlign\"\n    );\n    const classNames = [\"xfaExclgroup\"];\n    const cl = layoutClass(this);\n    if (cl) {\n      classNames.push(cl);\n    }\n\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n\n    attributes.style = style;\n    attributes.class = classNames;\n\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n\n    this[$pushPara]();\n    const isLrTb = this.layout === \"lr-tb\" || this.layout === \"rl-tb\";\n    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;\n    for (; this[$extra].attempt < maxRun; this[$extra].attempt++) {\n      if (isLrTb && this[$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {\n        // If the layout is lr-tb then having attempt equals to\n        // MAX_ATTEMPTS_FOR_LRTB_LAYOUT-1 means that we're trying to layout\n        // on the next line so this on is empty.\n        this[$extra].numberInLine = 0;\n      }\n      const result = this[$childrenToHTML]({\n        filter,\n        include: true,\n      });\n      if (result.success) {\n        break;\n      }\n      if (result.isBreak()) {\n        this[$popPara]();\n        return result;\n      }\n      if (\n        isLrTb &&\n        this[$extra].attempt === 0 &&\n        this[$extra].numberInLine === 0 &&\n        !this[$getTemplateRoot]()[$extra].noLayoutFailure\n      ) {\n        // See comment in Subform::[$toHTML].\n        this[$extra].attempt = maxRun;\n        break;\n      }\n    }\n\n    this[$popPara]();\n\n    if (!isSplittable) {\n      unsetFirstUnsplittable(this);\n    }\n\n    if (this[$extra].attempt === maxRun) {\n      if (!isSplittable) {\n        delete this[$extra];\n      }\n      return HTMLResult.FAILURE;\n    }\n\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n\n    const width = Math.max(this[$extra].width + marginH, this.w || 0);\n    const height = Math.max(this[$extra].height + marginV, this.h || 0);\n    const bbox = [this.x, this.y, width, height];\n\n    if (this.w === \"\") {\n      style.width = measureToString(width);\n    }\n    if (this.h === \"\") {\n      style.height = measureToString(height);\n    }\n\n    const html = {\n      name: \"div\",\n      attributes,\n      children,\n    };\n\n    applyAssist(this, attributes);\n\n    delete this[$extra];\n\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\n\nclass Execute extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"execute\");\n    this.connection = attributes.connection || \"\";\n    this.executeType = getStringOption(attributes.executeType, [\n      \"import\",\n      \"remerge\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.runAt = getStringOption(attributes.runAt, [\n      \"client\",\n      \"both\",\n      \"server\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Extras extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"extras\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.extras = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n\n  // (Spec) The XFA template grammar defines the extras and desc elements,\n  // which can be used to add human-readable or machine-readable\n  // data to a template.\n}\n\nclass Field extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"field\", /* hasChildren = */ true);\n    this.access = getStringOption(attributes.access, [\n      \"open\",\n      \"nonInteractive\",\n      \"protected\",\n      \"readOnly\",\n    ]);\n    this.accessKey = attributes.accessKey || \"\";\n    this.anchorType = getStringOption(attributes.anchorType, [\n      \"topLeft\",\n      \"bottomCenter\",\n      \"bottomLeft\",\n      \"bottomRight\",\n      \"middleCenter\",\n      \"middleLeft\",\n      \"middleRight\",\n      \"topCenter\",\n      \"topRight\",\n    ]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1,\n    });\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\n      \"left\",\n      \"center\",\n      \"justify\",\n      \"justifyAll\",\n      \"radix\",\n      \"right\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.rotate = getInteger({\n      data: attributes.rotate,\n      defaultValue: 0,\n      validate: x => x % 90 === 0,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.border = null;\n    this.calculate = null;\n    this.caption = null;\n    this.desc = null;\n    this.extras = null;\n    this.font = null;\n    this.format = null;\n    // For a choice list, one list is used to have display entries\n    // and the other for the exported values\n    this.items = new XFAObjectArray(2);\n    this.keep = null;\n    this.margin = null;\n    this.para = null;\n    this.traversal = null;\n    this.ui = null;\n    this.validate = null;\n    this.value = null;\n    this.bindItems = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n  }\n\n  [$isBindable]() {\n    return true;\n  }\n\n  [$setValue](value) {\n    _setValue(this, value);\n  }\n\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n\n    if (!this.ui) {\n      // It's allowed to not have an ui, specs say:\n      //   If the UI element contains no children or is not present,\n      //   the application chooses a default user interface for the\n      //   container, based on the type of the container's content.\n\n      this.ui = new Ui({});\n      this.ui[$globalData] = this[$globalData];\n      this[$appendChild](this.ui);\n      let node;\n\n      // The items element can have 2 element max and\n      // according to the items specs it's likely a good\n      // way to guess the correct ui type.\n      switch (this.items.children.length) {\n        case 0:\n          node = new TextEdit({});\n          this.ui.textEdit = node;\n          break;\n        case 1:\n          node = new CheckButton({});\n          this.ui.checkButton = node;\n          break;\n        case 2:\n          node = new ChoiceList({});\n          this.ui.choiceList = node;\n          break;\n      }\n      this.ui[$appendChild](node);\n    }\n\n    if (\n      !this.ui ||\n      this.presence === \"hidden\" ||\n      this.presence === \"inactive\" ||\n      this.h === 0 ||\n      this.w === 0\n    ) {\n      return HTMLResult.EMPTY;\n    }\n\n    if (this.caption) {\n      // Maybe we already tried to layout this field with\n      // another availableSpace, so to avoid to use the cached\n      // value just delete it.\n      delete this.caption[$extra];\n    }\n\n    this[$pushPara]();\n\n    const caption = this.caption\n      ? this.caption[$toHTML](availableSpace).html\n      : null;\n    const savedW = this.w;\n    const savedH = this.h;\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n\n    let borderDims = null;\n    if (this.w === \"\" || this.h === \"\") {\n      let width = null;\n      let height = null;\n\n      let uiW = 0;\n      let uiH = 0;\n      if (this.ui.checkButton) {\n        uiW = uiH = this.ui.checkButton.size;\n      } else {\n        const { w, h } = layoutNode(this, availableSpace);\n        if (w !== null) {\n          uiW = w;\n          uiH = h;\n        } else {\n          uiH = getMetrics(this.font, /* real = */ true).lineNoGap;\n        }\n      }\n\n      borderDims = getBorderDims(this.ui[$getExtra]());\n      uiW += borderDims.w;\n      uiH += borderDims.h;\n\n      if (this.caption) {\n        const { w, h, isBroken } = this.caption[$getExtra](availableSpace);\n        // See comment in Draw::[$toHTML] to have an explanation\n        // about this line.\n        if (isBroken && this[$getSubformParent]()[$isThereMoreWidth]()) {\n          this[$popPara]();\n          return HTMLResult.FAILURE;\n        }\n\n        width = w;\n        height = h;\n\n        switch (this.caption.placement) {\n          case \"left\":\n          case \"right\":\n          case \"inline\":\n            width += uiW;\n            break;\n          case \"top\":\n          case \"bottom\":\n            height += uiH;\n            break;\n        }\n      } else {\n        width = uiW;\n        height = uiH;\n      }\n\n      if (width && this.w === \"\") {\n        width += marginH;\n        this.w = Math.min(\n          this.maxW <= 0 ? Infinity : this.maxW,\n          this.minW + 1 < width ? width : this.minW\n        );\n      }\n\n      if (height && this.h === \"\") {\n        height += marginV;\n        this.h = Math.min(\n          this.maxH <= 0 ? Infinity : this.maxH,\n          this.minH + 1 < height ? height : this.minH\n        );\n      }\n    }\n\n    this[$popPara]();\n\n    fixDimensions(this);\n\n    setFirstUnsplittable(this);\n    if (!checkDimensions(this, availableSpace)) {\n      this.w = savedW;\n      this.h = savedH;\n      this[$popPara]();\n      return HTMLResult.FAILURE;\n    }\n    unsetFirstUnsplittable(this);\n\n    const style = toStyle(\n      this,\n      \"font\",\n      \"dimensions\",\n      \"position\",\n      \"rotate\",\n      \"anchorType\",\n      \"presence\",\n      \"margin\",\n      \"hAlign\"\n    );\n\n    setMinMaxDimensions(this, style);\n\n    const classNames = [\"xfaField\"];\n    // If no font, font properties are inherited.\n    if (this.font) {\n      classNames.push(\"xfaFont\");\n    }\n\n    if (isPrintOnly(this)) {\n      classNames.push(\"xfaPrintOnly\");\n    }\n\n    const attributes = {\n      style,\n      id: this[$uid],\n      class: classNames,\n    };\n\n    if (style.margin) {\n      style.padding = style.margin;\n      delete style.margin;\n    }\n\n    setAccess(this, classNames);\n\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n\n    const children = [];\n    const html = {\n      name: \"div\",\n      attributes,\n      children,\n    };\n\n    applyAssist(this, attributes);\n\n    const borderStyle = this.border ? this.border[$toStyle]() : null;\n    const bbox = computeBbox(this, html, availableSpace);\n    const ui = this.ui[$toHTML]().html;\n    if (!ui) {\n      Object.assign(style, borderStyle);\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n\n    if (this[$tabIndex]) {\n      if (ui.children?.[0]) {\n        ui.children[0].attributes.tabindex = this[$tabIndex];\n      } else {\n        ui.attributes.tabindex = this[$tabIndex];\n      }\n    }\n\n    ui.attributes.style ||= Object.create(null);\n\n    let aElement = null;\n\n    if (this.ui.button) {\n      if (ui.children.length === 1) {\n        [aElement] = ui.children.splice(0, 1);\n      }\n      Object.assign(ui.attributes.style, borderStyle);\n    } else {\n      Object.assign(style, borderStyle);\n    }\n\n    children.push(ui);\n\n    if (this.value) {\n      if (this.ui.imageEdit) {\n        ui.children.push(this.value[$toHTML]().html);\n      } else if (!this.ui.button) {\n        let value = \"\";\n        if (this.value.exData) {\n          value = this.value.exData[$text]();\n        } else if (this.value.text) {\n          value = this.value.text[$getExtra]();\n        } else {\n          const htmlValue = this.value[$toHTML]().html;\n          if (htmlValue !== null) {\n            value = htmlValue.children[0].value;\n          }\n        }\n        if (this.ui.textEdit && this.value.text?.maxChars) {\n          ui.children[0].attributes.maxLength = this.value.text.maxChars;\n        }\n\n        if (value) {\n          if (this.ui.numericEdit) {\n            value = parseFloat(value);\n            value = isNaN(value) ? \"\" : value.toString();\n          }\n\n          if (ui.children[0].name === \"textarea\") {\n            ui.children[0].attributes.textContent = value;\n          } else {\n            ui.children[0].attributes.value = value;\n          }\n        }\n      }\n    }\n\n    if (!this.ui.imageEdit && ui.children?.[0] && this.h) {\n      borderDims ||= getBorderDims(this.ui[$getExtra]());\n\n      let captionHeight = 0;\n      if (this.caption && [\"top\", \"bottom\"].includes(this.caption.placement)) {\n        captionHeight = this.caption.reserve;\n        if (captionHeight <= 0) {\n          captionHeight = this.caption[$getExtra](availableSpace).h;\n        }\n        const inputHeight = this.h - captionHeight - marginV - borderDims.h;\n        ui.children[0].attributes.style.height = measureToString(inputHeight);\n      } else {\n        ui.children[0].attributes.style.height = \"100%\";\n      }\n    }\n\n    if (aElement) {\n      ui.children.push(aElement);\n    }\n\n    if (!caption) {\n      if (ui.attributes.class) {\n        // Even if no caption this class will help to center the ui.\n        ui.attributes.class.push(\"xfaLeft\");\n      }\n      this.w = savedW;\n      this.h = savedH;\n\n      return HTMLResult.success(createWrapper(this, html), bbox);\n    }\n\n    if (this.ui.button) {\n      if (style.padding) {\n        delete style.padding;\n      }\n      if (caption.name === \"div\") {\n        caption.name = \"span\";\n      }\n      ui.children.push(caption);\n      return HTMLResult.success(html, bbox);\n    } else if (this.ui.checkButton) {\n      caption.attributes.class[0] = \"xfaCaptionForCheckButton\";\n    }\n\n    ui.attributes.class ||= [];\n\n    ui.children.splice(0, 0, caption);\n\n    switch (this.caption.placement) {\n      case \"left\":\n        ui.attributes.class.push(\"xfaLeft\");\n        break;\n      case \"right\":\n        ui.attributes.class.push(\"xfaRight\");\n        break;\n      case \"top\":\n        ui.attributes.class.push(\"xfaTop\");\n        break;\n      case \"bottom\":\n        ui.attributes.class.push(\"xfaBottom\");\n        break;\n      case \"inline\":\n        // TODO;\n        ui.attributes.class.push(\"xfaLeft\");\n        break;\n    }\n\n    this.w = savedW;\n    this.h = savedH;\n    return HTMLResult.success(createWrapper(this, html), bbox);\n  }\n}\n\nclass Fill extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"fill\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n\n    // One-of properties or none\n    this.linear = null;\n    this.pattern = null;\n    this.radial = null;\n    this.solid = null;\n    this.stipple = null;\n  }\n\n  [$toStyle]() {\n    const parent = this[$getParent]();\n    const grandpa = parent[$getParent]();\n    const ggrandpa = grandpa[$getParent]();\n    const style = Object.create(null);\n\n    // Use for color, i.e. #...\n    let propName = \"color\";\n\n    // Use for non-color, i.e. gradient, radial-gradient...\n    let altPropName = propName;\n\n    if (parent instanceof Border) {\n      propName = \"background-color\";\n      altPropName = \"background\";\n      if (ggrandpa instanceof Ui) {\n        // The default fill color is white.\n        style.backgroundColor = \"white\";\n      }\n    }\n    if (parent instanceof Rectangle || parent instanceof Arc) {\n      propName = altPropName = \"fill\";\n      style.fill = \"white\";\n    }\n\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (name === \"extras\" || name === \"color\") {\n        continue;\n      }\n      const obj = this[name];\n      if (!(obj instanceof XFAObject)) {\n        continue;\n      }\n\n      const color = obj[$toStyle](this.color);\n      if (color) {\n        style[color.startsWith(\"#\") ? propName : altPropName] = color;\n      }\n      return style;\n    }\n\n    if (this.color?.value) {\n      const color = this.color[$toStyle]();\n      style[color.startsWith(\"#\") ? propName : altPropName] = color;\n    }\n\n    return style;\n  }\n}\n\nclass Filter extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"filter\", /* hasChildren = */ true);\n    this.addRevocationInfo = getStringOption(attributes.addRevocationInfo, [\n      \"\",\n      \"required\",\n      \"optional\",\n      \"none\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.version = getInteger({\n      data: this.version,\n      defaultValue: 5,\n      validate: x => x >= 1 && x <= 5,\n    });\n    this.appearanceFilter = null;\n    this.certificates = null;\n    this.digestMethods = null;\n    this.encodings = null;\n    this.encryptionMethods = null;\n    this.handler = null;\n    this.lockDocument = null;\n    this.mdp = null;\n    this.reasons = null;\n    this.timeStamp = null;\n  }\n}\n\nclass Float extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"float\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    const number = parseFloat(this[$content].trim());\n    this[$content] = isNaN(number) ? null : number;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(\n      this[$content] !== null ? this[$content].toString() : \"\"\n    );\n  }\n}\n\nclass Font extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"font\", /* hasChildren = */ true);\n    this.baselineShift = getMeasurement(attributes.baselineShift);\n    this.fontHorizontalScale = getFloat({\n      data: attributes.fontHorizontalScale,\n      defaultValue: 100,\n      validate: x => x >= 0,\n    });\n    this.fontVerticalScale = getFloat({\n      data: attributes.fontVerticalScale,\n      defaultValue: 100,\n      validate: x => x >= 0,\n    });\n    this.id = attributes.id || \"\";\n    this.kerningMode = getStringOption(attributes.kerningMode, [\n      \"none\",\n      \"pair\",\n    ]);\n    this.letterSpacing = getMeasurement(attributes.letterSpacing, \"0\");\n    this.lineThrough = getInteger({\n      data: attributes.lineThrough,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2,\n    });\n    this.lineThroughPeriod = getStringOption(attributes.lineThroughPeriod, [\n      \"all\",\n      \"word\",\n    ]);\n    this.overline = getInteger({\n      data: attributes.overline,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2,\n    });\n    this.overlinePeriod = getStringOption(attributes.overlinePeriod, [\n      \"all\",\n      \"word\",\n    ]);\n    this.posture = getStringOption(attributes.posture, [\"normal\", \"italic\"]);\n    this.size = getMeasurement(attributes.size, \"10pt\");\n    this.typeface = attributes.typeface || \"Courier\";\n    this.underline = getInteger({\n      data: attributes.underline,\n      defaultValue: 0,\n      validate: x => x === 1 || x === 2,\n    });\n    this.underlinePeriod = getStringOption(attributes.underlinePeriod, [\n      \"all\",\n      \"word\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.weight = getStringOption(attributes.weight, [\"normal\", \"bold\"]);\n    this.extras = null;\n    this.fill = null;\n  }\n\n  [$clean](builder) {\n    super[$clean](builder);\n    this[$globalData].usedTypefaces.add(this.typeface);\n  }\n\n  [$toStyle]() {\n    const style = toStyle(this, \"fill\");\n    const color = style.color;\n    if (color) {\n      if (color === \"#000000\") {\n        // Default font color.\n        delete style.color;\n      } else if (!color.startsWith(\"#\")) {\n        // We've a gradient which is not possible for a font color\n        // so use a workaround.\n        style.background = color;\n        style.backgroundClip = \"text\";\n        style.color = \"transparent\";\n      }\n    }\n\n    if (this.baselineShift) {\n      style.verticalAlign = measureToString(this.baselineShift);\n    }\n\n    // TODO: fontHorizontalScale\n    // TODO: fontVerticalScale\n\n    style.fontKerning = this.kerningMode === \"none\" ? \"none\" : \"normal\";\n    style.letterSpacing = measureToString(this.letterSpacing);\n\n    if (this.lineThrough !== 0) {\n      style.textDecoration = \"line-through\";\n      if (this.lineThrough === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n\n    // TODO: lineThroughPeriod\n\n    if (this.overline !== 0) {\n      style.textDecoration = \"overline\";\n      if (this.overline === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n\n    // TODO: overlinePeriod\n\n    style.fontStyle = this.posture;\n    style.fontSize = measureToString(0.99 * this.size);\n\n    setFontFamily(this, this, this[$globalData].fontFinder, style);\n\n    if (this.underline !== 0) {\n      style.textDecoration = \"underline\";\n      if (this.underline === 2) {\n        style.textDecorationStyle = \"double\";\n      }\n    }\n\n    // TODO: underlinePeriod\n\n    style.fontWeight = this.weight;\n\n    return style;\n  }\n}\n\nclass Format extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"format\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.picture = null;\n  }\n}\n\nclass Handler extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"handler\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Hyphenation extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"hyphenation\");\n    this.excludeAllCaps = getInteger({\n      data: attributes.excludeAllCaps,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.excludeInitialCap = getInteger({\n      data: attributes.excludeInitialCap,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.hyphenate = getInteger({\n      data: attributes.hyphenate,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.id = attributes.id || \"\";\n    this.pushCharacterCount = getInteger({\n      data: attributes.pushCharacterCount,\n      defaultValue: 3,\n      validate: x => x >= 0,\n    });\n    this.remainCharacterCount = getInteger({\n      data: attributes.remainCharacterCount,\n      defaultValue: 3,\n      validate: x => x >= 0,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.wordCharacterCount = getInteger({\n      data: attributes.wordCharacterCount,\n      defaultValue: 7,\n      validate: x => x >= 0,\n    });\n  }\n}\n\nclass Image extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"image\");\n    this.aspect = getStringOption(attributes.aspect, [\n      \"fit\",\n      \"actual\",\n      \"height\",\n      \"none\",\n      \"width\",\n    ]);\n    this.contentType = attributes.contentType || \"\";\n    this.href = attributes.href || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.transferEncoding = getStringOption(attributes.transferEncoding, [\n      \"base64\",\n      \"none\",\n      \"package\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$toHTML]() {\n    if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) {\n      return HTMLResult.EMPTY;\n    }\n\n    let buffer = this[$globalData].images?.get(this.href);\n    if (!buffer && (this.href || !this[$content])) {\n      // In general, we don't get remote data and use what we have\n      // in the pdf itself, so no picture for non null href.\n      return HTMLResult.EMPTY;\n    }\n\n    if (!buffer && this.transferEncoding === \"base64\") {\n      buffer = Uint8Array.fromBase64(this[$content]);\n    }\n\n    if (!buffer) {\n      return HTMLResult.EMPTY;\n    }\n\n    if (!this.contentType) {\n      for (const [header, type] of IMAGES_HEADERS) {\n        if (\n          buffer.length > header.length &&\n          header.every((x, i) => x === buffer[i])\n        ) {\n          this.contentType = type;\n          break;\n        }\n      }\n      if (!this.contentType) {\n        return HTMLResult.EMPTY;\n      }\n    }\n\n    // TODO: Firefox doesn't support natively tiff (and tif) format.\n    const blob = new Blob([buffer], { type: this.contentType });\n    let style;\n    switch (this.aspect) {\n      case \"fit\":\n      case \"actual\":\n        // TODO: check what to do with actual.\n        // Normally we should return {auto, auto} for it but\n        // it implies some wrong rendering (see xfa_bug1716816.pdf).\n        break;\n      case \"height\":\n        style = {\n          height: \"100%\",\n          objectFit: \"fill\",\n        };\n        break;\n      case \"none\":\n        style = {\n          width: \"100%\",\n          height: \"100%\",\n          objectFit: \"fill\",\n        };\n        break;\n      case \"width\":\n        style = {\n          width: \"100%\",\n          objectFit: \"fill\",\n        };\n        break;\n    }\n    const parent = this[$getParent]();\n    return HTMLResult.success({\n      name: \"img\",\n      attributes: {\n        class: [\"xfaImage\"],\n        style,\n        src: URL.createObjectURL(blob),\n        alt: parent ? ariaLabel(parent[$getParent]()) : null,\n      },\n    });\n  }\n}\n\nclass ImageEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"imageEdit\", /* hasChildren = */ true);\n    this.data = getStringOption(attributes.data, [\"link\", \"embed\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    if (this.data === \"embed\") {\n      return HTMLResult.success({\n        name: \"div\",\n        children: [],\n        attributes: {},\n      });\n    }\n\n    return HTMLResult.EMPTY;\n  }\n}\n\nclass Integer extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"integer\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    const number = parseInt(this[$content].trim(), 10);\n    this[$content] = isNaN(number) ? null : number;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(\n      this[$content] !== null ? this[$content].toString() : \"\"\n    );\n  }\n}\n\nclass Issuers extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"issuers\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\n\nclass Items extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"items\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.ref = attributes.ref || \"\";\n    this.save = getInteger({\n      data: attributes.save,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n\n  [$toHTML]() {\n    const output = [];\n    for (const child of this[$getChildren]()) {\n      output.push(child[$text]());\n    }\n    return HTMLResult.success(output);\n  }\n}\n\nclass Keep extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"keep\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    const options = [\"none\", \"contentArea\", \"pageArea\"];\n    this.intact = getStringOption(attributes.intact, options);\n    this.next = getStringOption(attributes.next, options);\n    this.previous = getStringOption(attributes.previous, options);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n}\n\nclass KeyUsage extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"keyUsage\");\n    const options = [\"\", \"yes\", \"no\"];\n    this.crlSign = getStringOption(attributes.crlSign, options);\n    this.dataEncipherment = getStringOption(\n      attributes.dataEncipherment,\n      options\n    );\n    this.decipherOnly = getStringOption(attributes.decipherOnly, options);\n    this.digitalSignature = getStringOption(\n      attributes.digitalSignature,\n      options\n    );\n    this.encipherOnly = getStringOption(attributes.encipherOnly, options);\n    this.id = attributes.id || \"\";\n    this.keyAgreement = getStringOption(attributes.keyAgreement, options);\n    this.keyCertSign = getStringOption(attributes.keyCertSign, options);\n    this.keyEncipherment = getStringOption(attributes.keyEncipherment, options);\n    this.nonRepudiation = getStringOption(attributes.nonRepudiation, options);\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Line extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"line\", /* hasChildren = */ true);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.slope = getStringOption(attributes.slope, [\"\\\\\", \"/\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.edge = null;\n  }\n\n  [$toHTML]() {\n    const parent = this[$getParent]()[$getParent]();\n    const edge = this.edge || new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    const thickness = edge.presence === \"visible\" ? edge.thickness : 0;\n    style.strokeWidth = measureToString(thickness);\n    style.stroke = edgeStyle.color;\n    let x1, y1, x2, y2;\n    let width = \"100%\";\n    let height = \"100%\";\n\n    if (parent.w <= thickness) {\n      [x1, y1, x2, y2] = [\"50%\", 0, \"50%\", \"100%\"];\n      width = style.strokeWidth;\n    } else if (parent.h <= thickness) {\n      [x1, y1, x2, y2] = [0, \"50%\", \"100%\", \"50%\"];\n      height = style.strokeWidth;\n    } else if (this.slope === \"\\\\\") {\n      [x1, y1, x2, y2] = [0, 0, \"100%\", \"100%\"];\n    } else {\n      [x1, y1, x2, y2] = [0, \"100%\", \"100%\", 0];\n    }\n\n    const line = {\n      name: \"line\",\n      attributes: {\n        xmlns: SVG_NS,\n        x1,\n        y1,\n        x2,\n        y2,\n        style,\n      },\n    };\n\n    const svg = {\n      name: \"svg\",\n      children: [line],\n      attributes: {\n        xmlns: SVG_NS,\n        width,\n        height,\n        style: {\n          overflow: \"visible\",\n        },\n      },\n    };\n\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\",\n          },\n        },\n        children: [svg],\n      });\n    }\n\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\n\nclass Linear extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"linear\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\n      \"toRight\",\n      \"toBottom\",\n      \"toLeft\",\n      \"toTop\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const transf = this.type.replace(/([RBLT])/, \" $1\").toLowerCase();\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    return `linear-gradient(${transf}, ${startColor}, ${endColor})`;\n  }\n}\n\nclass LockDocument extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"lockDocument\");\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    this[$content] = getStringOption(this[$content], [\"auto\", \"0\", \"1\"]);\n  }\n}\n\nclass Manifest extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"manifest\", /* hasChildren = */ true);\n    this.action = getStringOption(attributes.action, [\n      \"include\",\n      \"all\",\n      \"exclude\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.ref = new XFAObjectArray();\n  }\n}\n\nclass Margin extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"margin\", /* hasChildren = */ true);\n    this.bottomInset = getMeasurement(attributes.bottomInset, \"0\");\n    this.id = attributes.id || \"\";\n    this.leftInset = getMeasurement(attributes.leftInset, \"0\");\n    this.rightInset = getMeasurement(attributes.rightInset, \"0\");\n    this.topInset = getMeasurement(attributes.topInset, \"0\");\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n\n  [$toStyle]() {\n    return {\n      margin:\n        measureToString(this.topInset) +\n        \" \" +\n        measureToString(this.rightInset) +\n        \" \" +\n        measureToString(this.bottomInset) +\n        \" \" +\n        measureToString(this.leftInset),\n    };\n  }\n}\n\nclass Mdp extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"mdp\");\n    this.id = attributes.id || \"\";\n    this.permissions = getInteger({\n      data: attributes.permissions,\n      defaultValue: 2,\n      validate: x => x === 1 || x === 3,\n    });\n    this.signatureType = getStringOption(attributes.signatureType, [\n      \"filler\",\n      \"author\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Medium extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"medium\");\n    this.id = attributes.id || \"\";\n    this.imagingBBox = getBBox(attributes.imagingBBox);\n    this.long = getMeasurement(attributes.long);\n    this.orientation = getStringOption(attributes.orientation, [\n      \"portrait\",\n      \"landscape\",\n    ]);\n    this.short = getMeasurement(attributes.short);\n    this.stock = attributes.stock || \"\";\n    this.trayIn = getStringOption(attributes.trayIn, [\n      \"auto\",\n      \"delegate\",\n      \"pageFront\",\n    ]);\n    this.trayOut = getStringOption(attributes.trayOut, [\"auto\", \"delegate\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Message extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"message\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.text = new XFAObjectArray();\n  }\n}\n\nclass NumericEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"numericEdit\", /* hasChildren = */ true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\n      \"auto\",\n      \"off\",\n      \"on\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    const field = this[$getParent]()[$getParent]();\n    const html = {\n      name: \"input\",\n      attributes: {\n        type: \"text\",\n        fieldId: field[$uid],\n        dataId: field[$data]?.[$uid] || field[$uid],\n        class: [\"xfaTextfield\"],\n        style,\n        \"aria-label\": ariaLabel(field),\n        \"aria-required\": false,\n      },\n    };\n\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"],\n      },\n      children: [html],\n    });\n  }\n}\n\nclass Occur extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"occur\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.initial =\n      attributes.initial !== \"\"\n        ? getInteger({\n            data: attributes.initial,\n            defaultValue: \"\",\n            validate: x => true,\n          })\n        : \"\";\n    this.max =\n      attributes.max !== \"\"\n        ? getInteger({\n            data: attributes.max,\n            defaultValue: -1,\n            validate: x => true,\n          })\n        : \"\";\n    this.min =\n      attributes.min !== \"\"\n        ? getInteger({\n            data: attributes.min,\n            defaultValue: 1,\n            validate: x => true,\n          })\n        : \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n\n  [$clean]() {\n    const parent = this[$getParent]();\n    const originalMin = this.min;\n\n    if (this.min === \"\") {\n      this.min =\n        parent instanceof PageArea || parent instanceof PageSet ? 0 : 1;\n    }\n    if (this.max === \"\") {\n      if (originalMin === \"\") {\n        this.max =\n          parent instanceof PageArea || parent instanceof PageSet ? -1 : 1;\n      } else {\n        this.max = this.min;\n      }\n    }\n\n    if (this.max !== -1 && this.max < this.min) {\n      this.max = this.min;\n    }\n\n    if (this.initial === \"\") {\n      this.initial = parent instanceof Template ? 1 : this.min;\n    }\n  }\n}\n\nclass Oid extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"oid\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Oids extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"oids\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.oid = new XFAObjectArray();\n  }\n}\n\nclass Overflow extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"overflow\");\n    this.id = attributes.id || \"\";\n    this.leader = attributes.leader || \"\";\n    this.target = attributes.target || \"\";\n    this.trailer = attributes.trailer || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$getExtra]() {\n    if (!this[$extra]) {\n      const parent = this[$getParent]();\n      const root = this[$getTemplateRoot]();\n      const target = root[$searchNode](this.target, parent);\n      const leader = root[$searchNode](this.leader, parent);\n      const trailer = root[$searchNode](this.trailer, parent);\n      this[$extra] = {\n        target: target?.[0] || null,\n        leader: leader?.[0] || null,\n        trailer: trailer?.[0] || null,\n        addLeader: false,\n        addTrailer: false,\n      };\n    }\n    return this[$extra];\n  }\n}\n\nclass PageArea extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pageArea\", /* hasChildren = */ true);\n    this.blankOrNotBlank = getStringOption(attributes.blankOrNotBlank, [\n      \"any\",\n      \"blank\",\n      \"notBlank\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.initialNumber = getInteger({\n      data: attributes.initialNumber,\n      defaultValue: 1,\n      validate: x => true,\n    });\n    this.name = attributes.name || \"\";\n    this.numbered = getInteger({\n      data: attributes.numbered,\n      defaultValue: 1,\n      validate: x => true,\n    });\n    this.oddOrEven = getStringOption(attributes.oddOrEven, [\n      \"any\",\n      \"even\",\n      \"odd\",\n    ]);\n    this.pagePosition = getStringOption(attributes.pagePosition, [\n      \"any\",\n      \"first\",\n      \"last\",\n      \"only\",\n      \"rest\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.desc = null;\n    this.extras = null;\n    this.medium = null;\n    this.occur = null;\n    this.area = new XFAObjectArray();\n    this.contentArea = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n  }\n\n  [$isUsable]() {\n    if (!this[$extra]) {\n      this[$extra] = {\n        numberOfUse: 0,\n      };\n      return true;\n    }\n    return (\n      !this.occur ||\n      this.occur.max === -1 ||\n      this[$extra].numberOfUse < this.occur.max\n    );\n  }\n\n  [$cleanPage]() {\n    delete this[$extra];\n  }\n\n  [$getNextPage]() {\n    this[$extra] ||= {\n      numberOfUse: 0,\n    };\n\n    const parent = this[$getParent]();\n    if (parent.relation === \"orderedOccurrence\") {\n      if (this[$isUsable]()) {\n        this[$extra].numberOfUse += 1;\n        return this;\n      }\n    }\n\n    return parent[$getNextPage]();\n  }\n\n  [$getAvailableSpace]() {\n    return this[$extra].space || { width: 0, height: 0 };\n  }\n\n  [$toHTML]() {\n    // TODO: incomplete.\n    this[$extra] ||= {\n      numberOfUse: 1,\n    };\n\n    const children = [];\n    this[$extra].children = children;\n\n    const style = Object.create(null);\n    if (this.medium && this.medium.short && this.medium.long) {\n      style.width = measureToString(this.medium.short);\n      style.height = measureToString(this.medium.long);\n      this[$extra].space = {\n        width: this.medium.short,\n        height: this.medium.long,\n      };\n      if (this.medium.orientation === \"landscape\") {\n        const x = style.width;\n        style.width = style.height;\n        style.height = x;\n        this[$extra].space = {\n          width: this.medium.long,\n          height: this.medium.short,\n        };\n      }\n    } else {\n      warn(\"XFA - No medium specified in pageArea: please file a bug.\");\n    }\n\n    this[$childrenToHTML]({\n      filter: new Set([\"area\", \"draw\", \"field\", \"subform\"]),\n      include: true,\n    });\n\n    // contentarea must be the last container to be sure it is\n    // on top of the others.\n    this[$childrenToHTML]({\n      filter: new Set([\"contentArea\"]),\n      include: true,\n    });\n\n    return HTMLResult.success({\n      name: \"div\",\n      children,\n      attributes: {\n        class: [\"xfaPage\"],\n        id: this[$uid],\n        style,\n        xfaName: this.name,\n      },\n    });\n  }\n}\n\nclass PageSet extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pageSet\", /* hasChildren = */ true);\n    this.duplexImposition = getStringOption(attributes.duplexImposition, [\n      \"longEdge\",\n      \"shortEdge\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relation = getStringOption(attributes.relation, [\n      \"orderedOccurrence\",\n      \"duplexPaginated\",\n      \"simplexPaginated\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.occur = null;\n    this.pageArea = new XFAObjectArray();\n    this.pageSet = new XFAObjectArray();\n  }\n\n  [$cleanPage]() {\n    for (const page of this.pageArea.children) {\n      page[$cleanPage]();\n    }\n    for (const page of this.pageSet.children) {\n      page[$cleanPage]();\n    }\n  }\n\n  [$isUsable]() {\n    return (\n      !this.occur ||\n      this.occur.max === -1 ||\n      this[$extra].numberOfUse < this.occur.max\n    );\n  }\n\n  [$getNextPage]() {\n    this[$extra] ||= {\n      numberOfUse: 1,\n      pageIndex: -1,\n      pageSetIndex: -1,\n    };\n\n    if (this.relation === \"orderedOccurrence\") {\n      if (this[$extra].pageIndex + 1 < this.pageArea.children.length) {\n        this[$extra].pageIndex += 1;\n        const pageArea = this.pageArea.children[this[$extra].pageIndex];\n        return pageArea[$getNextPage]();\n      }\n\n      if (this[$extra].pageSetIndex + 1 < this.pageSet.children.length) {\n        this[$extra].pageSetIndex += 1;\n        return this.pageSet.children[this[$extra].pageSetIndex][$getNextPage]();\n      }\n\n      if (this[$isUsable]()) {\n        this[$extra].numberOfUse += 1;\n        this[$extra].pageIndex = -1;\n        this[$extra].pageSetIndex = -1;\n        return this[$getNextPage]();\n      }\n\n      const parent = this[$getParent]();\n      if (parent instanceof PageSet) {\n        return parent[$getNextPage]();\n      }\n\n      this[$cleanPage]();\n      return this[$getNextPage]();\n    }\n    const pageNumber = this[$getTemplateRoot]()[$extra].pageNumber;\n    const parity = pageNumber % 2 === 0 ? \"even\" : \"odd\";\n    const position = pageNumber === 0 ? \"first\" : \"rest\";\n\n    let page = this.pageArea.children.find(\n      p => p.oddOrEven === parity && p.pagePosition === position\n    );\n    if (page) {\n      return page;\n    }\n\n    page = this.pageArea.children.find(\n      p => p.oddOrEven === \"any\" && p.pagePosition === position\n    );\n    if (page) {\n      return page;\n    }\n\n    page = this.pageArea.children.find(\n      p => p.oddOrEven === \"any\" && p.pagePosition === \"any\"\n    );\n    if (page) {\n      return page;\n    }\n\n    return this.pageArea.children[0];\n  }\n}\n\nclass Para extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"para\", /* hasChildren = */ true);\n    this.hAlign = getStringOption(attributes.hAlign, [\n      \"left\",\n      \"center\",\n      \"justify\",\n      \"justifyAll\",\n      \"radix\",\n      \"right\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.lineHeight = attributes.lineHeight\n      ? getMeasurement(attributes.lineHeight, \"0pt\")\n      : \"\";\n    this.marginLeft = attributes.marginLeft\n      ? getMeasurement(attributes.marginLeft, \"0pt\")\n      : \"\";\n    this.marginRight = attributes.marginRight\n      ? getMeasurement(attributes.marginRight, \"0pt\")\n      : \"\";\n    this.orphans = getInteger({\n      data: attributes.orphans,\n      defaultValue: 0,\n      validate: x => x >= 0,\n    });\n    this.preserve = attributes.preserve || \"\";\n    this.radixOffset = attributes.radixOffset\n      ? getMeasurement(attributes.radixOffset, \"0pt\")\n      : \"\";\n    this.spaceAbove = attributes.spaceAbove\n      ? getMeasurement(attributes.spaceAbove, \"0pt\")\n      : \"\";\n    this.spaceBelow = attributes.spaceBelow\n      ? getMeasurement(attributes.spaceBelow, \"0pt\")\n      : \"\";\n    this.tabDefault = attributes.tabDefault\n      ? getMeasurement(this.tabDefault)\n      : \"\";\n    this.tabStops = (attributes.tabStops || \"\")\n      .trim()\n      .split(/\\s+/)\n      .map((x, i) => (i % 2 === 1 ? getMeasurement(x) : x));\n    this.textIndent = attributes.textIndent\n      ? getMeasurement(attributes.textIndent, \"0pt\")\n      : \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.vAlign = getStringOption(attributes.vAlign, [\n      \"top\",\n      \"bottom\",\n      \"middle\",\n    ]);\n    this.widows = getInteger({\n      data: attributes.widows,\n      defaultValue: 0,\n      validate: x => x >= 0,\n    });\n    this.hyphenation = null;\n  }\n\n  [$toStyle]() {\n    const style = toStyle(this, \"hAlign\");\n    if (this.marginLeft !== \"\") {\n      style.paddingLeft = measureToString(this.marginLeft);\n    }\n    if (this.marginRight !== \"\") {\n      style.paddingRight = measureToString(this.marginRight);\n    }\n    if (this.spaceAbove !== \"\") {\n      style.paddingTop = measureToString(this.spaceAbove);\n    }\n    if (this.spaceBelow !== \"\") {\n      style.paddingBottom = measureToString(this.spaceBelow);\n    }\n    if (this.textIndent !== \"\") {\n      style.textIndent = measureToString(this.textIndent);\n      fixTextIndent(style);\n    }\n\n    if (this.lineHeight > 0) {\n      style.lineHeight = measureToString(this.lineHeight);\n    }\n\n    if (this.tabDefault !== \"\") {\n      style.tabSize = measureToString(this.tabDefault);\n    }\n\n    if (this.tabStops.length > 0) {\n      // TODO\n    }\n\n    if (this.hyphenatation) {\n      Object.assign(style, this.hyphenatation[$toStyle]());\n    }\n\n    return style;\n  }\n}\n\nclass PasswordEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"passwordEdit\", /* hasChildren = */ true);\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\n      \"auto\",\n      \"off\",\n      \"on\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.passwordChar = attributes.passwordChar || \"*\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.margin = null;\n  }\n}\n\nclass Pattern extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"pattern\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\n      \"crossHatch\",\n      \"crossDiagonal\",\n      \"diagonalLeft\",\n      \"diagonalRight\",\n      \"horizontal\",\n      \"vertical\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    const width = 5;\n    const cmd = \"repeating-linear-gradient\";\n    const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${\n      2 * width\n    }px`;\n    switch (this.type) {\n      case \"crossHatch\":\n        return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`;\n      case \"crossDiagonal\":\n        return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`;\n      case \"diagonalLeft\":\n        return `${cmd}(45deg,${colors})`;\n      case \"diagonalRight\":\n        return `${cmd}(-45deg,${colors})`;\n      case \"horizontal\":\n        return `${cmd}(to top,${colors})`;\n      case \"vertical\":\n        return `${cmd}(to right,${colors})`;\n    }\n\n    return \"\";\n  }\n}\n\nclass Picture extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"picture\");\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Proto extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"proto\", /* hasChildren = */ true);\n    this.appearanceFilter = new XFAObjectArray();\n    this.arc = new XFAObjectArray();\n    this.area = new XFAObjectArray();\n    this.assist = new XFAObjectArray();\n    this.barcode = new XFAObjectArray();\n    this.bindItems = new XFAObjectArray();\n    this.bookend = new XFAObjectArray();\n    this.boolean = new XFAObjectArray();\n    this.border = new XFAObjectArray();\n    this.break = new XFAObjectArray();\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.button = new XFAObjectArray();\n    this.calculate = new XFAObjectArray();\n    this.caption = new XFAObjectArray();\n    this.certificate = new XFAObjectArray();\n    this.certificates = new XFAObjectArray();\n    this.checkButton = new XFAObjectArray();\n    this.choiceList = new XFAObjectArray();\n    this.color = new XFAObjectArray();\n    this.comb = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.contentArea = new XFAObjectArray();\n    this.corner = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.dateTimeEdit = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.defaultUi = new XFAObjectArray();\n    this.desc = new XFAObjectArray();\n    this.digestMethod = new XFAObjectArray();\n    this.digestMethods = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.edge = new XFAObjectArray();\n    this.encoding = new XFAObjectArray();\n    this.encodings = new XFAObjectArray();\n    this.encrypt = new XFAObjectArray();\n    this.encryptData = new XFAObjectArray();\n    this.encryption = new XFAObjectArray();\n    this.encryptionMethod = new XFAObjectArray();\n    this.encryptionMethods = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.execute = new XFAObjectArray();\n    this.extras = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.fill = new XFAObjectArray();\n    this.filter = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.font = new XFAObjectArray();\n    this.format = new XFAObjectArray();\n    this.handler = new XFAObjectArray();\n    this.hyphenation = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.imageEdit = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.issuers = new XFAObjectArray();\n    this.items = new XFAObjectArray();\n    this.keep = new XFAObjectArray();\n    this.keyUsage = new XFAObjectArray();\n    this.line = new XFAObjectArray();\n    this.linear = new XFAObjectArray();\n    this.lockDocument = new XFAObjectArray();\n    this.manifest = new XFAObjectArray();\n    this.margin = new XFAObjectArray();\n    this.mdp = new XFAObjectArray();\n    this.medium = new XFAObjectArray();\n    this.message = new XFAObjectArray();\n    this.numericEdit = new XFAObjectArray();\n    this.occur = new XFAObjectArray();\n    this.oid = new XFAObjectArray();\n    this.oids = new XFAObjectArray();\n    this.overflow = new XFAObjectArray();\n    this.pageArea = new XFAObjectArray();\n    this.pageSet = new XFAObjectArray();\n    this.para = new XFAObjectArray();\n    this.passwordEdit = new XFAObjectArray();\n    this.pattern = new XFAObjectArray();\n    this.picture = new XFAObjectArray();\n    this.radial = new XFAObjectArray();\n    this.reason = new XFAObjectArray();\n    this.reasons = new XFAObjectArray();\n    this.rectangle = new XFAObjectArray();\n    this.ref = new XFAObjectArray();\n    this.script = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n    this.signData = new XFAObjectArray();\n    this.signature = new XFAObjectArray();\n    this.signing = new XFAObjectArray();\n    this.solid = new XFAObjectArray();\n    this.speak = new XFAObjectArray();\n    this.stipple = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n    this.subjectDN = new XFAObjectArray();\n    this.subjectDNs = new XFAObjectArray();\n    this.submit = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.textEdit = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n    this.timeStamp = new XFAObjectArray();\n    this.toolTip = new XFAObjectArray();\n    this.traversal = new XFAObjectArray();\n    this.traverse = new XFAObjectArray();\n    this.ui = new XFAObjectArray();\n    this.validate = new XFAObjectArray();\n    this.value = new XFAObjectArray();\n    this.variables = new XFAObjectArray();\n  }\n}\n\nclass Radial extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"radial\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"toEdge\", \"toCenter\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle](startColor) {\n    startColor = startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n    const endColor = this.color ? this.color[$toStyle]() : \"#000000\";\n    const colors =\n      this.type === \"toEdge\"\n        ? `${startColor},${endColor}`\n        : `${endColor},${startColor}`;\n    return `radial-gradient(circle at center, ${colors})`;\n  }\n}\n\nclass Reason extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"reason\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Reasons extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"reasons\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.reason = new XFAObjectArray();\n  }\n}\n\nclass Rectangle extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"rectangle\", /* hasChildren = */ true);\n    this.hand = getStringOption(attributes.hand, [\"even\", \"left\", \"right\"]);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.corner = new XFAObjectArray(4);\n    this.edge = new XFAObjectArray(4);\n    this.fill = null;\n  }\n\n  [$toHTML]() {\n    const edge = this.edge.children.length\n      ? this.edge.children[0]\n      : new Edge({});\n    const edgeStyle = edge[$toStyle]();\n    const style = Object.create(null);\n    if (this.fill?.presence === \"visible\") {\n      Object.assign(style, this.fill[$toStyle]());\n    } else {\n      style.fill = \"transparent\";\n    }\n    style.strokeWidth = measureToString(\n      edge.presence === \"visible\" ? edge.thickness : 0\n    );\n    style.stroke = edgeStyle.color;\n\n    const corner = this.corner.children.length\n      ? this.corner.children[0]\n      : new Corner({});\n    const cornerStyle = corner[$toStyle]();\n\n    const rect = {\n      name: \"rect\",\n      attributes: {\n        xmlns: SVG_NS,\n        width: \"100%\",\n        height: \"100%\",\n        x: 0,\n        y: 0,\n        rx: cornerStyle.radius,\n        ry: cornerStyle.radius,\n        style,\n      },\n    };\n\n    const svg = {\n      name: \"svg\",\n      children: [rect],\n      attributes: {\n        xmlns: SVG_NS,\n        style: {\n          overflow: \"visible\",\n        },\n        width: \"100%\",\n        height: \"100%\",\n      },\n    };\n\n    const parent = this[$getParent]()[$getParent]();\n    if (hasMargin(parent)) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          style: {\n            display: \"inline\",\n            width: \"100%\",\n            height: \"100%\",\n          },\n        },\n        children: [svg],\n      });\n    }\n\n    svg.attributes.style.position = \"absolute\";\n    return HTMLResult.success(svg);\n  }\n}\n\nclass RefElement extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"ref\");\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Script extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"script\");\n    this.binding = attributes.binding || \"\";\n    this.contentType = attributes.contentType || \"\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.runAt = getStringOption(attributes.runAt, [\n      \"client\",\n      \"both\",\n      \"server\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass SetProperty extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"setProperty\");\n    this.connection = attributes.connection || \"\";\n    this.ref = attributes.ref || \"\";\n    this.target = attributes.target || \"\";\n  }\n}\n\nclass SignData extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signData\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\n      \"sign\",\n      \"clear\",\n      \"verify\",\n    ]);\n    this.ref = attributes.ref || \"\";\n    this.target = attributes.target || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.filter = null;\n    this.manifest = null;\n  }\n}\n\nclass Signature extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signature\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"PDF1.3\", \"PDF1.6\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.border = null;\n    this.extras = null;\n    this.filter = null;\n    this.manifest = null;\n    this.margin = null;\n  }\n}\n\nclass Signing extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"signing\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.certificate = new XFAObjectArray();\n  }\n}\n\nclass Solid extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"solid\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n  }\n\n  [$toStyle](startColor) {\n    return startColor ? startColor[$toStyle]() : \"#FFFFFF\";\n  }\n}\n\nclass Speak extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"speak\");\n    this.disable = getInteger({\n      data: attributes.disable,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.id = attributes.id || \"\";\n    this.priority = getStringOption(attributes.priority, [\n      \"custom\",\n      \"caption\",\n      \"name\",\n      \"toolTip\",\n    ]);\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Stipple extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"stipple\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.rate = getInteger({\n      data: attributes.rate,\n      defaultValue: 50,\n      validate: x => x >= 0 && x <= 100,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.color = null;\n    this.extras = null;\n  }\n\n  [$toStyle](bgColor) {\n    const alpha = this.rate / 100;\n    return Util.makeHexColor(\n      Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha),\n      Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha),\n      Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha)\n    );\n  }\n}\n\nclass Subform extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subform\", /* hasChildren = */ true);\n    this.access = getStringOption(attributes.access, [\n      \"open\",\n      \"nonInteractive\",\n      \"protected\",\n      \"readOnly\",\n    ]);\n    this.allowMacro = getInteger({\n      data: attributes.allowMacro,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.anchorType = getStringOption(attributes.anchorType, [\n      \"topLeft\",\n      \"bottomCenter\",\n      \"bottomLeft\",\n      \"bottomRight\",\n      \"middleCenter\",\n      \"middleLeft\",\n      \"middleRight\",\n      \"topCenter\",\n      \"topRight\",\n    ]);\n    this.colSpan = getInteger({\n      data: attributes.colSpan,\n      defaultValue: 1,\n      validate: n => n >= 1 || n === -1,\n    });\n    this.columnWidths = (attributes.columnWidths || \"\")\n      .trim()\n      .split(/\\s+/)\n      .map(x => (x === \"-1\" ? -1 : getMeasurement(x)));\n    this.h = attributes.h ? getMeasurement(attributes.h) : \"\";\n    this.hAlign = getStringOption(attributes.hAlign, [\n      \"left\",\n      \"center\",\n      \"justify\",\n      \"justifyAll\",\n      \"radix\",\n      \"right\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.layout = getStringOption(attributes.layout, [\n      \"position\",\n      \"lr-tb\",\n      \"rl-row\",\n      \"rl-tb\",\n      \"row\",\n      \"table\",\n      \"tb\",\n    ]);\n    this.locale = attributes.locale || \"\";\n    this.maxH = getMeasurement(attributes.maxH, \"0pt\");\n    this.maxW = getMeasurement(attributes.maxW, \"0pt\");\n    this.mergeMode = getStringOption(attributes.mergeMode, [\n      \"consumeData\",\n      \"matchTemplate\",\n    ]);\n    this.minH = getMeasurement(attributes.minH, \"0pt\");\n    this.minW = getMeasurement(attributes.minW, \"0pt\");\n    this.name = attributes.name || \"\";\n    this.presence = getStringOption(attributes.presence, [\n      \"visible\",\n      \"hidden\",\n      \"inactive\",\n      \"invisible\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.restoreState = getStringOption(attributes.restoreState, [\n      \"manual\",\n      \"auto\",\n    ]);\n    this.scope = getStringOption(attributes.scope, [\"name\", \"none\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.w = attributes.w ? getMeasurement(attributes.w) : \"\";\n    this.x = getMeasurement(attributes.x, \"0pt\");\n    this.y = getMeasurement(attributes.y, \"0pt\");\n    this.assist = null;\n    this.bind = null;\n    this.bookend = null;\n    this.border = null;\n    this.break = null;\n    this.calculate = null;\n    this.desc = null;\n    this.extras = null;\n    this.keep = null;\n    this.margin = null;\n    this.occur = null;\n    this.overflow = null;\n    this.pageSet = null;\n    this.para = null;\n    this.traversal = null;\n    this.validate = null;\n    this.variables = null;\n    this.area = new XFAObjectArray();\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.connect = new XFAObjectArray();\n    this.draw = new XFAObjectArray();\n    this.event = new XFAObjectArray();\n    this.exObject = new XFAObjectArray();\n    this.exclGroup = new XFAObjectArray();\n    this.field = new XFAObjectArray();\n    this.proto = new XFAObjectArray();\n    this.setProperty = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n  }\n\n  [$getSubformParent]() {\n    const parent = this[$getParent]();\n    if (parent instanceof SubformSet) {\n      return parent[$getSubformParent]();\n    }\n    return parent;\n  }\n\n  [$isBindable]() {\n    return true;\n  }\n\n  [$isThereMoreWidth]() {\n    return (\n      (this.layout.endsWith(\"-tb\") &&\n        this[$extra].attempt === 0 &&\n        this[$extra].numberInLine > 0) ||\n      this[$getParent]()[$isThereMoreWidth]()\n    );\n  }\n\n  *[$getContainedChildren]() {\n    // This function is overriden in order to fake that subforms under\n    // this set are in fact under parent subform.\n    yield* getContainedChildren(this);\n  }\n\n  [$flushHTML]() {\n    return flushHTML(this);\n  }\n\n  [$addHTML](html, bbox) {\n    addHTML(this, html, bbox);\n  }\n\n  [$getAvailableSpace]() {\n    return getAvailableSpace(this);\n  }\n\n  [$isSplittable]() {\n    // We cannot cache the result here because the contentArea\n    // can change.\n    const parent = this[$getSubformParent]();\n    if (!parent[$isSplittable]()) {\n      return false;\n    }\n\n    if (this[$extra]._isSplittable !== undefined) {\n      return this[$extra]._isSplittable;\n    }\n\n    if (this.layout === \"position\" || this.layout.includes(\"row\")) {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n\n    if (this.keep && this.keep.intact !== \"none\") {\n      this[$extra]._isSplittable = false;\n      return false;\n    }\n\n    if (parent.layout?.endsWith(\"-tb\") && parent[$extra].numberInLine !== 0) {\n      // If parent can fit in w=100 and there's already an element which takes\n      // 90 then we've 10 for this element. Suppose this element has a tb layout\n      // and 5 elements have a width of 7 and the 6th has a width of 20:\n      // then this element (and all its content) must move on the next line.\n      // If this element is splittable then the first 5 children will stay\n      // at the end of the line: we don't want that.\n      return false;\n    }\n\n    this[$extra]._isSplittable = true;\n\n    return true;\n  }\n\n  [$toHTML](availableSpace) {\n    setTabIndex(this);\n\n    if (this.break) {\n      // break element is deprecated so plug it on one of its replacement\n      // breakBefore or breakAfter.\n      if (this.break.after !== \"auto\" || this.break.afterTarget !== \"\") {\n        const node = new BreakAfter({\n          targetType: this.break.after,\n          target: this.break.afterTarget,\n          startNew: this.break.startNew.toString(),\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.breakAfter.push(node);\n      }\n\n      if (this.break.before !== \"auto\" || this.break.beforeTarget !== \"\") {\n        const node = new BreakBefore({\n          targetType: this.break.before,\n          target: this.break.beforeTarget,\n          startNew: this.break.startNew.toString(),\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.breakBefore.push(node);\n      }\n\n      if (this.break.overflowTarget !== \"\") {\n        const node = new Overflow({\n          target: this.break.overflowTarget,\n          leader: this.break.overflowLeader,\n          trailer: this.break.overflowTrailer,\n        });\n        node[$globalData] = this[$globalData];\n        this[$appendChild](node);\n        this.overflow.push(node);\n      }\n\n      this[$removeChild](this.break);\n      this.break = null;\n    }\n\n    if (this.presence === \"hidden\" || this.presence === \"inactive\") {\n      return HTMLResult.EMPTY;\n    }\n\n    if (\n      this.breakBefore.children.length > 1 ||\n      this.breakAfter.children.length > 1\n    ) {\n      // Specs are always talking about the breakBefore element\n      // and it doesn't really make sense to have several ones.\n      warn(\n        \"XFA - Several breakBefore or breakAfter in subforms: please file a bug.\"\n      );\n    }\n\n    if (this.breakBefore.children.length >= 1) {\n      const breakBefore = this.breakBefore.children[0];\n      if (handleBreak(breakBefore)) {\n        return HTMLResult.breakNode(breakBefore);\n      }\n    }\n\n    if (this[$extra]?.afterBreakAfter) {\n      return HTMLResult.EMPTY;\n    }\n\n    // TODO: incomplete.\n    fixDimensions(this);\n    const children = [];\n    const attributes = {\n      id: this[$uid],\n      class: [],\n    };\n\n    setAccess(this, attributes.class);\n\n    this[$extra] ||= Object.create(null);\n\n    Object.assign(this[$extra], {\n      children,\n      line: null,\n      attributes,\n      attempt: 0,\n      numberInLine: 0,\n      availableSpace: {\n        width: Math.min(this.w || Infinity, availableSpace.width),\n        height: Math.min(this.h || Infinity, availableSpace.height),\n      },\n      width: 0,\n      height: 0,\n      prevHeight: 0,\n      currentWidth: 0,\n    });\n\n    const root = this[$getTemplateRoot]();\n    const savedNoLayoutFailure = root[$extra].noLayoutFailure;\n\n    const isSplittable = this[$isSplittable]();\n    if (!isSplittable) {\n      setFirstUnsplittable(this);\n    }\n\n    if (!checkDimensions(this, availableSpace)) {\n      return HTMLResult.FAILURE;\n    }\n\n    const filter = new Set([\n      \"area\",\n      \"draw\",\n      \"exclGroup\",\n      \"field\",\n      \"subform\",\n      \"subformSet\",\n    ]);\n\n    if (this.layout.includes(\"row\")) {\n      const columnWidths = this[$getSubformParent]().columnWidths;\n      if (Array.isArray(columnWidths) && columnWidths.length > 0) {\n        this[$extra].columnWidths = columnWidths;\n        this[$extra].currentColumn = 0;\n      }\n    }\n\n    const style = toStyle(\n      this,\n      \"anchorType\",\n      \"dimensions\",\n      \"position\",\n      \"presence\",\n      \"border\",\n      \"margin\",\n      \"hAlign\"\n    );\n    const classNames = [\"xfaSubform\"];\n    const cl = layoutClass(this);\n    if (cl) {\n      classNames.push(cl);\n    }\n\n    attributes.style = style;\n    attributes.class = classNames;\n\n    if (this.name) {\n      attributes.xfaName = this.name;\n    }\n\n    if (this.overflow) {\n      const overflowExtra = this.overflow[$getExtra]();\n      if (overflowExtra.addLeader) {\n        overflowExtra.addLeader = false;\n        handleOverflow(this, overflowExtra.leader, availableSpace);\n      }\n    }\n\n    this[$pushPara]();\n    const isLrTb = this.layout === \"lr-tb\" || this.layout === \"rl-tb\";\n    const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;\n    for (; this[$extra].attempt < maxRun; this[$extra].attempt++) {\n      if (isLrTb && this[$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {\n        // If the layout is lr-tb then having attempt equals to\n        // MAX_ATTEMPTS_FOR_LRTB_LAYOUT-1 means that we're trying to layout\n        // on the next line so this on is empty.\n        this[$extra].numberInLine = 0;\n      }\n      const result = this[$childrenToHTML]({\n        filter,\n        include: true,\n      });\n      if (result.success) {\n        break;\n      }\n      if (result.isBreak()) {\n        this[$popPara]();\n        return result;\n      }\n      if (\n        isLrTb &&\n        this[$extra].attempt === 0 &&\n        this[$extra].numberInLine === 0 &&\n        !root[$extra].noLayoutFailure\n      ) {\n        // We're failing to put the first element on the line so no\n        // need to test on the next line.\n        // The goal is not only to avoid some useless checks but to avoid\n        // bugs too: if a descendant managed to put a node and failed\n        // on the next one, going to the next step here will imply to\n        // visit the descendant again, clear [$extra].children and restart\n        // on the failing node, consequently the first node just disappears\n        // because it has never been flushed.\n        this[$extra].attempt = maxRun;\n        break;\n      }\n    }\n\n    this[$popPara]();\n    if (!isSplittable) {\n      unsetFirstUnsplittable(this);\n    }\n    root[$extra].noLayoutFailure = savedNoLayoutFailure;\n\n    if (this[$extra].attempt === maxRun) {\n      if (this.overflow) {\n        this[$getTemplateRoot]()[$extra].overflowNode = this.overflow;\n      }\n\n      if (!isSplittable) {\n        // Since a new try will happen in a new container with maybe\n        // new dimensions, we invalidate already layed out components.\n        delete this[$extra];\n      }\n      return HTMLResult.FAILURE;\n    }\n\n    if (this.overflow) {\n      const overflowExtra = this.overflow[$getExtra]();\n      if (overflowExtra.addTrailer) {\n        overflowExtra.addTrailer = false;\n        handleOverflow(this, overflowExtra.trailer, availableSpace);\n      }\n    }\n\n    let marginH = 0;\n    let marginV = 0;\n    if (this.margin) {\n      marginH = this.margin.leftInset + this.margin.rightInset;\n      marginV = this.margin.topInset + this.margin.bottomInset;\n    }\n\n    const width = Math.max(this[$extra].width + marginH, this.w || 0);\n    const height = Math.max(this[$extra].height + marginV, this.h || 0);\n    const bbox = [this.x, this.y, width, height];\n\n    if (this.w === \"\") {\n      style.width = measureToString(width);\n    }\n    if (this.h === \"\") {\n      style.height = measureToString(height);\n    }\n\n    if (\n      (style.width === \"0px\" || style.height === \"0px\") &&\n      children.length === 0\n    ) {\n      return HTMLResult.EMPTY;\n    }\n\n    const html = {\n      name: \"div\",\n      attributes,\n      children,\n    };\n\n    applyAssist(this, attributes);\n\n    const result = HTMLResult.success(createWrapper(this, html), bbox);\n\n    if (this.breakAfter.children.length >= 1) {\n      const breakAfter = this.breakAfter.children[0];\n      if (handleBreak(breakAfter)) {\n        this[$extra].afterBreakAfter = result;\n        return HTMLResult.breakNode(breakAfter);\n      }\n    }\n\n    delete this[$extra];\n\n    return result;\n  }\n}\n\nclass SubformSet extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subformSet\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.relation = getStringOption(attributes.relation, [\n      \"ordered\",\n      \"choice\",\n      \"unordered\",\n    ]);\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.bookend = null;\n    this.break = null;\n    this.desc = null;\n    this.extras = null;\n    this.occur = null;\n    this.overflow = null;\n    this.breakAfter = new XFAObjectArray();\n    this.breakBefore = new XFAObjectArray();\n    this.subform = new XFAObjectArray();\n    this.subformSet = new XFAObjectArray();\n\n    // TODO: need to handle break stuff and relation.\n  }\n\n  *[$getContainedChildren]() {\n    // This function is overriden in order to fake that subforms under\n    // this set are in fact under parent subform.\n    yield* getContainedChildren(this);\n  }\n\n  [$getSubformParent]() {\n    let parent = this[$getParent]();\n    while (!(parent instanceof Subform)) {\n      parent = parent[$getParent]();\n    }\n    return parent;\n  }\n\n  [$isBindable]() {\n    return true;\n  }\n}\n\nclass SubjectDN extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subjectDN\");\n    this.delimiter = attributes.delimiter || \",\";\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    this[$content] = new Map(\n      this[$content].split(this.delimiter).map(kv => {\n        kv = kv.split(\"=\", 2);\n        kv[0] = kv[0].trim();\n        return kv;\n      })\n    );\n  }\n}\n\nclass SubjectDNs extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"subjectDNs\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.subjectDN = new XFAObjectArray();\n  }\n}\n\nclass Submit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"submit\", /* hasChildren = */ true);\n    this.embedPDF = getInteger({\n      data: attributes.embedPDF,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.format = getStringOption(attributes.format, [\n      \"xdp\",\n      \"formdata\",\n      \"pdf\",\n      \"urlencoded\",\n      \"xfd\",\n      \"xml\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.target = attributes.target || \"\";\n    this.textEncoding = getKeyword({\n      data: attributes.textEncoding\n        ? attributes.textEncoding.toLowerCase()\n        : \"\",\n      defaultValue: \"\",\n      validate: k =>\n        [\n          \"utf-8\",\n          \"big-five\",\n          \"fontspecific\",\n          \"gbk\",\n          \"gb-18030\",\n          \"gb-2312\",\n          \"ksc-5601\",\n          \"none\",\n          \"shift-jis\",\n          \"ucs-2\",\n          \"utf-16\",\n        ].includes(k) || k.match(/iso-8859-\\d{2}/),\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.xdpContent = attributes.xdpContent || \"\";\n    this.encrypt = null;\n    this.encryptData = new XFAObjectArray();\n    this.signData = new XFAObjectArray();\n  }\n}\n\nclass Template extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"template\", /* hasChildren = */ true);\n    this.baseProfile = getStringOption(attributes.baseProfile, [\n      \"full\",\n      \"interactiveForms\",\n    ]);\n    this.extras = null;\n\n    // Spec is unclear:\n    //  A container element that describes a single subform capable of\n    //  enclosing other containers.\n    // Can we have more than one subform ?\n    this.subform = new XFAObjectArray();\n  }\n\n  [$finalize]() {\n    if (this.subform.children.length === 0) {\n      warn(\"XFA - No subforms in template node.\");\n    }\n    if (this.subform.children.length >= 2) {\n      warn(\"XFA - Several subforms in template node: please file a bug.\");\n    }\n    this[$tabIndex] = DEFAULT_TAB_INDEX;\n  }\n\n  [$isSplittable]() {\n    return true;\n  }\n\n  [$searchNode](expr, container) {\n    if (expr.startsWith(\"#\")) {\n      // This is an id.\n      return [this[$ids].get(expr.slice(1))];\n    }\n    return searchNode(this, container, expr, true, true);\n  }\n\n  /**\n   * This function is a generator because the conversion into\n   * pages is done asynchronously and we want to save the state\n   * of the function where we were in the previous iteration.\n   */\n  *[$toPages]() {\n    if (!this.subform.children.length) {\n      return HTMLResult.success({\n        name: \"div\",\n        children: [],\n      });\n    }\n    this[$extra] = {\n      overflowNode: null,\n      firstUnsplittable: null,\n      currentContentArea: null,\n      currentPageArea: null,\n      noLayoutFailure: false,\n      pageNumber: 1,\n      pagePosition: \"first\",\n      oddOrEven: \"odd\",\n      blankOrNotBlank: \"nonBlank\",\n      paraStack: [],\n    };\n\n    const root = this.subform.children[0];\n    root.pageSet[$cleanPage]();\n\n    const pageAreas = root.pageSet.pageArea.children;\n    const mainHtml = {\n      name: \"div\",\n      children: [],\n    };\n\n    let pageArea = null;\n    let breakBefore = null;\n    let breakBeforeTarget = null;\n    if (root.breakBefore.children.length >= 1) {\n      breakBefore = root.breakBefore.children[0];\n      breakBeforeTarget = breakBefore.target;\n    } else if (\n      root.subform.children.length >= 1 &&\n      root.subform.children[0].breakBefore.children.length >= 1\n    ) {\n      breakBefore = root.subform.children[0].breakBefore.children[0];\n      breakBeforeTarget = breakBefore.target;\n    } else if (root.break?.beforeTarget) {\n      breakBefore = root.break;\n      breakBeforeTarget = breakBefore.beforeTarget;\n    } else if (\n      root.subform.children.length >= 1 &&\n      root.subform.children[0].break?.beforeTarget\n    ) {\n      breakBefore = root.subform.children[0].break;\n      breakBeforeTarget = breakBefore.beforeTarget;\n    }\n\n    if (breakBefore) {\n      const target = this[$searchNode](\n        breakBeforeTarget,\n        breakBefore[$getParent]()\n      );\n      if (target instanceof PageArea) {\n        pageArea = target;\n        // Consume breakBefore.\n        breakBefore[$extra] = {};\n      }\n    }\n\n    pageArea ||= pageAreas[0];\n\n    pageArea[$extra] = {\n      numberOfUse: 1,\n    };\n\n    const pageAreaParent = pageArea[$getParent]();\n    pageAreaParent[$extra] = {\n      numberOfUse: 1,\n      pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea),\n      pageSetIndex: 0,\n    };\n\n    let targetPageArea;\n    let leader = null;\n    let trailer = null;\n    let hasSomething = true;\n    let hasSomethingCounter = 0;\n    let startIndex = 0;\n\n    while (true) {\n      if (!hasSomething) {\n        mainHtml.children.pop();\n        // Nothing has been added in the previous page\n        if (++hasSomethingCounter === MAX_EMPTY_PAGES) {\n          warn(\"XFA - Something goes wrong: please file a bug.\");\n          return mainHtml;\n        }\n      } else {\n        hasSomethingCounter = 0;\n      }\n\n      targetPageArea = null;\n      this[$extra].currentPageArea = pageArea;\n      const page = pageArea[$toHTML]().html;\n      mainHtml.children.push(page);\n\n      if (leader) {\n        this[$extra].noLayoutFailure = true;\n        page.children.push(leader[$toHTML](pageArea[$extra].space).html);\n        leader = null;\n      }\n\n      if (trailer) {\n        this[$extra].noLayoutFailure = true;\n        page.children.push(trailer[$toHTML](pageArea[$extra].space).html);\n        trailer = null;\n      }\n\n      const contentAreas = pageArea.contentArea.children;\n      const htmlContentAreas = page.children.filter(node =>\n        node.attributes.class.includes(\"xfaContentarea\")\n      );\n\n      hasSomething = false;\n      this[$extra].firstUnsplittable = null;\n      this[$extra].noLayoutFailure = false;\n\n      const flush = index => {\n        const html = root[$flushHTML]();\n        if (html) {\n          hasSomething ||= html.children?.length > 0;\n          htmlContentAreas[index].children.push(html);\n        }\n      };\n\n      for (let i = startIndex, ii = contentAreas.length; i < ii; i++) {\n        const contentArea = (this[$extra].currentContentArea = contentAreas[i]);\n        const space = { width: contentArea.w, height: contentArea.h };\n        startIndex = 0;\n\n        if (leader) {\n          htmlContentAreas[i].children.push(leader[$toHTML](space).html);\n          leader = null;\n        }\n\n        if (trailer) {\n          htmlContentAreas[i].children.push(trailer[$toHTML](space).html);\n          trailer = null;\n        }\n\n        const html = root[$toHTML](space);\n        if (html.success) {\n          if (html.html) {\n            hasSomething ||= html.html.children?.length > 0;\n            htmlContentAreas[i].children.push(html.html);\n          } else if (!hasSomething && mainHtml.children.length > 1) {\n            mainHtml.children.pop();\n          }\n          return mainHtml;\n        }\n\n        if (html.isBreak()) {\n          const node = html.breakNode;\n          flush(i);\n\n          if (node.targetType === \"auto\") {\n            continue;\n          }\n\n          if (node.leader) {\n            leader = this[$searchNode](node.leader, node[$getParent]());\n            leader = leader ? leader[0] : null;\n          }\n\n          if (node.trailer) {\n            trailer = this[$searchNode](node.trailer, node[$getParent]());\n            trailer = trailer ? trailer[0] : null;\n          }\n\n          if (node.targetType === \"pageArea\") {\n            targetPageArea = node[$extra].target;\n            i = Infinity;\n          } else if (!node[$extra].target) {\n            // We stay on the same page.\n            i = node[$extra].index;\n          } else {\n            targetPageArea = node[$extra].target;\n            startIndex = node[$extra].index + 1;\n            i = Infinity;\n          }\n\n          continue;\n        }\n\n        if (this[$extra].overflowNode) {\n          const node = this[$extra].overflowNode;\n          this[$extra].overflowNode = null;\n\n          const overflowExtra = node[$getExtra]();\n          const target = overflowExtra.target;\n          overflowExtra.addLeader = overflowExtra.leader !== null;\n          overflowExtra.addTrailer = overflowExtra.trailer !== null;\n\n          flush(i);\n\n          const currentIndex = i;\n\n          i = Infinity;\n          if (target instanceof PageArea) {\n            // We must stop the contentAreas filling and go to the next page.\n            targetPageArea = target;\n          } else if (target instanceof ContentArea) {\n            const index = contentAreas.indexOf(target);\n            if (index !== -1) {\n              if (index > currentIndex) {\n                // In the next loop iteration `i` will be incremented, note the\n                // `continue` just below, hence we need to subtract one here.\n                i = index - 1;\n              } else {\n                // The targetted contentArea has already been filled\n                // so create a new page.\n                startIndex = index;\n              }\n            } else {\n              targetPageArea = target[$getParent]();\n              startIndex = targetPageArea.contentArea.children.indexOf(target);\n            }\n          }\n          continue;\n        }\n\n        flush(i);\n      }\n\n      this[$extra].pageNumber += 1;\n      if (targetPageArea) {\n        if (targetPageArea[$isUsable]()) {\n          targetPageArea[$extra].numberOfUse += 1;\n        } else {\n          targetPageArea = null;\n        }\n      }\n      pageArea = targetPageArea || pageArea[$getNextPage]();\n      yield null;\n    }\n  }\n}\n\nclass Text extends ContentObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"text\");\n    this.id = attributes.id || \"\";\n    this.maxChars = getInteger({\n      data: attributes.maxChars,\n      defaultValue: 0,\n      validate: x => x >= 0,\n    });\n    this.name = attributes.name || \"\";\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$acceptWhitespace]() {\n    return true;\n  }\n\n  [$onChild](child) {\n    if (child[$namespaceId] === NamespaceIds.xhtml.id) {\n      this[$content] = child;\n      return true;\n    }\n    warn(`XFA - Invalid content in Text: ${child[$nodeName]}.`);\n    return false;\n  }\n\n  [$onText](str) {\n    if (this[$content] instanceof XFAObject) {\n      return;\n    }\n    super[$onText](str);\n  }\n\n  [$finalize]() {\n    if (typeof this[$content] === \"string\") {\n      this[$content] = this[$content].replaceAll(\"\\r\\n\", \"\\n\");\n    }\n  }\n\n  [$getExtra]() {\n    if (typeof this[$content] === \"string\") {\n      return this[$content]\n        .split(/[\\u2029\\u2028\\n]/)\n        .filter(line => !!line)\n        .join(\"\\n\");\n    }\n    return this[$content][$text]();\n  }\n\n  [$toHTML](availableSpace) {\n    if (typeof this[$content] === \"string\") {\n      // \\u2028 is a line separator.\n      // \\u2029 is a paragraph separator.\n      const html = valueToHtml(this[$content]).html;\n\n      if (this[$content].includes(\"\\u2029\")) {\n        // We've plain text containing a paragraph separator\n        // so convert it into a set of <p>.\n        html.name = \"div\";\n        html.children = [];\n        this[$content]\n          .split(\"\\u2029\")\n          .map(para =>\n            // Convert a paragraph into a set of <span> (for lines)\n            // separated by <br>.\n            para.split(/[\\u2028\\n]/).flatMap(line => [\n              {\n                name: \"span\",\n                value: line,\n              },\n              {\n                name: \"br\",\n              },\n            ])\n          )\n          .forEach(lines => {\n            html.children.push({\n              name: \"p\",\n              children: lines,\n            });\n          });\n      } else if (/[\\u2028\\n]/.test(this[$content])) {\n        html.name = \"div\";\n        html.children = [];\n        // Convert plain text into a set of <span> (for lines)\n        // separated by <br>.\n        this[$content].split(/[\\u2028\\n]/).forEach(line => {\n          html.children.push(\n            {\n              name: \"span\",\n              value: line,\n            },\n            {\n              name: \"br\",\n            }\n          );\n        });\n      }\n\n      return HTMLResult.success(html);\n    }\n\n    return this[$content][$toHTML](availableSpace);\n  }\n}\n\nclass TextEdit extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"textEdit\", /* hasChildren = */ true);\n    this.allowRichText = getInteger({\n      data: attributes.allowRichText,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.hScrollPolicy = getStringOption(attributes.hScrollPolicy, [\n      \"auto\",\n      \"off\",\n      \"on\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.multiLine = getInteger({\n      data: attributes.multiLine,\n      defaultValue: \"\",\n      validate: x => x === 0 || x === 1,\n    });\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.vScrollPolicy = getStringOption(attributes.vScrollPolicy, [\n      \"auto\",\n      \"off\",\n      \"on\",\n    ]);\n    this.border = null;\n    this.comb = null;\n    this.extras = null;\n    this.margin = null;\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: incomplete.\n    const style = toStyle(this, \"border\", \"font\", \"margin\");\n    let html;\n    const field = this[$getParent]()[$getParent]();\n    if (this.multiLine === \"\") {\n      this.multiLine = field instanceof Draw ? 1 : 0;\n    }\n    if (this.multiLine === 1) {\n      html = {\n        name: \"textarea\",\n        attributes: {\n          dataId: field[$data]?.[$uid] || field[$uid],\n          fieldId: field[$uid],\n          class: [\"xfaTextfield\"],\n          style,\n          \"aria-label\": ariaLabel(field),\n          \"aria-required\": false,\n        },\n      };\n    } else {\n      html = {\n        name: \"input\",\n        attributes: {\n          type: \"text\",\n          dataId: field[$data]?.[$uid] || field[$uid],\n          fieldId: field[$uid],\n          class: [\"xfaTextfield\"],\n          style,\n          \"aria-label\": ariaLabel(field),\n          \"aria-required\": false,\n        },\n      };\n    }\n\n    if (isRequired(field)) {\n      html.attributes[\"aria-required\"] = true;\n      html.attributes.required = true;\n    }\n\n    return HTMLResult.success({\n      name: \"label\",\n      attributes: {\n        class: [\"xfaLabel\"],\n      },\n      children: [html],\n    });\n  }\n}\n\nclass Time extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"time\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n\n  [$finalize]() {\n    // TODO: need to handle the string as a time and not as a date.\n    const date = this[$content].trim();\n    this[$content] = date ? new Date(date) : null;\n  }\n\n  [$toHTML](availableSpace) {\n    return valueToHtml(this[$content] ? this[$content].toString() : \"\");\n  }\n}\n\nclass TimeStamp extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"timeStamp\");\n    this.id = attributes.id || \"\";\n    this.server = attributes.server || \"\";\n    this.type = getStringOption(attributes.type, [\"optional\", \"required\"]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass ToolTip extends StringObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"toolTip\");\n    this.id = attributes.id || \"\";\n    this.rid = attributes.rid || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Traversal extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"traversal\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.traverse = new XFAObjectArray();\n  }\n}\n\nclass Traverse extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"traverse\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.operation = getStringOption(attributes.operation, [\n      \"next\",\n      \"back\",\n      \"down\",\n      \"first\",\n      \"left\",\n      \"right\",\n      \"up\",\n    ]);\n    this.ref = attributes.ref || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.script = null;\n  }\n\n  get name() {\n    // SOM expression: see page 94\n    return this.operation;\n  }\n\n  [$isTransparent]() {\n    return false;\n  }\n}\n\nclass Ui extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"ui\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.picture = null;\n\n    // One-of properties\n    this.barcode = null;\n    this.button = null;\n    this.checkButton = null;\n    this.choiceList = null;\n    this.dateTimeEdit = null;\n    this.defaultUi = null;\n    this.imageEdit = null;\n    this.numericEdit = null;\n    this.passwordEdit = null;\n    this.signature = null;\n    this.textEdit = null;\n  }\n\n  [$getExtra]() {\n    if (this[$extra] === undefined) {\n      for (const name of Object.getOwnPropertyNames(this)) {\n        if (name === \"extras\" || name === \"picture\") {\n          continue;\n        }\n        const obj = this[name];\n        if (!(obj instanceof XFAObject)) {\n          continue;\n        }\n\n        this[$extra] = obj;\n        return obj;\n      }\n      this[$extra] = null;\n    }\n    return this[$extra];\n  }\n\n  [$toHTML](availableSpace) {\n    // TODO: picture.\n    const obj = this[$getExtra]();\n    if (obj) {\n      return obj[$toHTML](availableSpace);\n    }\n    return HTMLResult.EMPTY;\n  }\n}\n\nclass Validate extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"validate\", /* hasChildren = */ true);\n    this.formatTest = getStringOption(attributes.formatTest, [\n      \"warning\",\n      \"disabled\",\n      \"error\",\n    ]);\n    this.id = attributes.id || \"\";\n    this.nullTest = getStringOption(attributes.nullTest, [\n      \"disabled\",\n      \"error\",\n      \"warning\",\n    ]);\n    this.scriptTest = getStringOption(attributes.scriptTest, [\n      \"error\",\n      \"disabled\",\n      \"warning\",\n    ]);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.extras = null;\n    this.message = null;\n    this.picture = null;\n    this.script = null;\n  }\n}\n\nclass Value extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"value\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.override = getInteger({\n      data: attributes.override,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.relevant = getRelevant(attributes.relevant);\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n\n    // One-of properties\n    this.arc = null;\n    this.boolean = null;\n    this.date = null;\n    this.dateTime = null;\n    this.decimal = null;\n    this.exData = null;\n    this.float = null;\n    this.image = null;\n    this.integer = null;\n    this.line = null;\n    this.rectangle = null;\n    this.text = null;\n    this.time = null;\n  }\n\n  [$setValue](value) {\n    const parent = this[$getParent]();\n    if (parent instanceof Field) {\n      if (parent.ui?.imageEdit) {\n        if (!this.image) {\n          this.image = new Image({});\n          this[$appendChild](this.image);\n        }\n        this.image[$content] = value[$content];\n        return;\n      }\n    }\n\n    const valueName = value[$nodeName];\n    if (this[valueName] !== null) {\n      this[valueName][$content] = value[$content];\n      return;\n    }\n\n    // Reset all the properties.\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const obj = this[name];\n      if (obj instanceof XFAObject) {\n        this[name] = null;\n        this[$removeChild](obj);\n      }\n    }\n\n    this[value[$nodeName]] = value;\n    this[$appendChild](value);\n  }\n\n  [$text]() {\n    if (this.exData) {\n      if (typeof this.exData[$content] === \"string\") {\n        return this.exData[$content].trim();\n      }\n      return this.exData[$content][$text]().trim();\n    }\n    for (const name of Object.getOwnPropertyNames(this)) {\n      if (name === \"image\") {\n        continue;\n      }\n      const obj = this[name];\n      if (obj instanceof XFAObject) {\n        return (obj[$content] || \"\").toString().trim();\n      }\n    }\n    return null;\n  }\n\n  [$toHTML](availableSpace) {\n    for (const name of Object.getOwnPropertyNames(this)) {\n      const obj = this[name];\n      if (!(obj instanceof XFAObject)) {\n        continue;\n      }\n\n      return obj[$toHTML](availableSpace);\n    }\n\n    return HTMLResult.EMPTY;\n  }\n}\n\nclass Variables extends XFAObject {\n  constructor(attributes) {\n    super(TEMPLATE_NS_ID, \"variables\", /* hasChildren = */ true);\n    this.id = attributes.id || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n    this.boolean = new XFAObjectArray();\n    this.date = new XFAObjectArray();\n    this.dateTime = new XFAObjectArray();\n    this.decimal = new XFAObjectArray();\n    this.exData = new XFAObjectArray();\n    this.float = new XFAObjectArray();\n    this.image = new XFAObjectArray();\n    this.integer = new XFAObjectArray();\n    this.manifest = new XFAObjectArray();\n    this.script = new XFAObjectArray();\n    this.text = new XFAObjectArray();\n    this.time = new XFAObjectArray();\n  }\n\n  [$isTransparent]() {\n    return true;\n  }\n}\n\nclass TemplateNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(TemplateNamespace, name)) {\n      const node = TemplateNamespace[name](attributes);\n      node[$setSetAttributes](attributes);\n      return node;\n    }\n    return undefined;\n  }\n\n  static appearanceFilter(attrs) {\n    return new AppearanceFilter(attrs);\n  }\n\n  static arc(attrs) {\n    return new Arc(attrs);\n  }\n\n  static area(attrs) {\n    return new Area(attrs);\n  }\n\n  static assist(attrs) {\n    return new Assist(attrs);\n  }\n\n  static barcode(attrs) {\n    return new Barcode(attrs);\n  }\n\n  static bind(attrs) {\n    return new Bind(attrs);\n  }\n\n  static bindItems(attrs) {\n    return new BindItems(attrs);\n  }\n\n  static bookend(attrs) {\n    return new Bookend(attrs);\n  }\n\n  static boolean(attrs) {\n    return new BooleanElement(attrs);\n  }\n\n  static border(attrs) {\n    return new Border(attrs);\n  }\n\n  static break(attrs) {\n    return new Break(attrs);\n  }\n\n  static breakAfter(attrs) {\n    return new BreakAfter(attrs);\n  }\n\n  static breakBefore(attrs) {\n    return new BreakBefore(attrs);\n  }\n\n  static button(attrs) {\n    return new Button(attrs);\n  }\n\n  static calculate(attrs) {\n    return new Calculate(attrs);\n  }\n\n  static caption(attrs) {\n    return new Caption(attrs);\n  }\n\n  static certificate(attrs) {\n    return new Certificate(attrs);\n  }\n\n  static certificates(attrs) {\n    return new Certificates(attrs);\n  }\n\n  static checkButton(attrs) {\n    return new CheckButton(attrs);\n  }\n\n  static choiceList(attrs) {\n    return new ChoiceList(attrs);\n  }\n\n  static color(attrs) {\n    return new Color(attrs);\n  }\n\n  static comb(attrs) {\n    return new Comb(attrs);\n  }\n\n  static connect(attrs) {\n    return new Connect(attrs);\n  }\n\n  static contentArea(attrs) {\n    return new ContentArea(attrs);\n  }\n\n  static corner(attrs) {\n    return new Corner(attrs);\n  }\n\n  static date(attrs) {\n    return new DateElement(attrs);\n  }\n\n  static dateTime(attrs) {\n    return new DateTime(attrs);\n  }\n\n  static dateTimeEdit(attrs) {\n    return new DateTimeEdit(attrs);\n  }\n\n  static decimal(attrs) {\n    return new Decimal(attrs);\n  }\n\n  static defaultUi(attrs) {\n    return new DefaultUi(attrs);\n  }\n\n  static desc(attrs) {\n    return new Desc(attrs);\n  }\n\n  static digestMethod(attrs) {\n    return new DigestMethod(attrs);\n  }\n\n  static digestMethods(attrs) {\n    return new DigestMethods(attrs);\n  }\n\n  static draw(attrs) {\n    return new Draw(attrs);\n  }\n\n  static edge(attrs) {\n    return new Edge(attrs);\n  }\n\n  static encoding(attrs) {\n    return new Encoding(attrs);\n  }\n\n  static encodings(attrs) {\n    return new Encodings(attrs);\n  }\n\n  static encrypt(attrs) {\n    return new Encrypt(attrs);\n  }\n\n  static encryptData(attrs) {\n    return new EncryptData(attrs);\n  }\n\n  static encryption(attrs) {\n    return new Encryption(attrs);\n  }\n\n  static encryptionMethod(attrs) {\n    return new EncryptionMethod(attrs);\n  }\n\n  static encryptionMethods(attrs) {\n    return new EncryptionMethods(attrs);\n  }\n\n  static event(attrs) {\n    return new Event(attrs);\n  }\n\n  static exData(attrs) {\n    return new ExData(attrs);\n  }\n\n  static exObject(attrs) {\n    return new ExObject(attrs);\n  }\n\n  static exclGroup(attrs) {\n    return new ExclGroup(attrs);\n  }\n\n  static execute(attrs) {\n    return new Execute(attrs);\n  }\n\n  static extras(attrs) {\n    return new Extras(attrs);\n  }\n\n  static field(attrs) {\n    return new Field(attrs);\n  }\n\n  static fill(attrs) {\n    return new Fill(attrs);\n  }\n\n  static filter(attrs) {\n    return new Filter(attrs);\n  }\n\n  static float(attrs) {\n    return new Float(attrs);\n  }\n\n  static font(attrs) {\n    return new Font(attrs);\n  }\n\n  static format(attrs) {\n    return new Format(attrs);\n  }\n\n  static handler(attrs) {\n    return new Handler(attrs);\n  }\n\n  static hyphenation(attrs) {\n    return new Hyphenation(attrs);\n  }\n\n  static image(attrs) {\n    return new Image(attrs);\n  }\n\n  static imageEdit(attrs) {\n    return new ImageEdit(attrs);\n  }\n\n  static integer(attrs) {\n    return new Integer(attrs);\n  }\n\n  static issuers(attrs) {\n    return new Issuers(attrs);\n  }\n\n  static items(attrs) {\n    return new Items(attrs);\n  }\n\n  static keep(attrs) {\n    return new Keep(attrs);\n  }\n\n  static keyUsage(attrs) {\n    return new KeyUsage(attrs);\n  }\n\n  static line(attrs) {\n    return new Line(attrs);\n  }\n\n  static linear(attrs) {\n    return new Linear(attrs);\n  }\n\n  static lockDocument(attrs) {\n    return new LockDocument(attrs);\n  }\n\n  static manifest(attrs) {\n    return new Manifest(attrs);\n  }\n\n  static margin(attrs) {\n    return new Margin(attrs);\n  }\n\n  static mdp(attrs) {\n    return new Mdp(attrs);\n  }\n\n  static medium(attrs) {\n    return new Medium(attrs);\n  }\n\n  static message(attrs) {\n    return new Message(attrs);\n  }\n\n  static numericEdit(attrs) {\n    return new NumericEdit(attrs);\n  }\n\n  static occur(attrs) {\n    return new Occur(attrs);\n  }\n\n  static oid(attrs) {\n    return new Oid(attrs);\n  }\n\n  static oids(attrs) {\n    return new Oids(attrs);\n  }\n\n  static overflow(attrs) {\n    return new Overflow(attrs);\n  }\n\n  static pageArea(attrs) {\n    return new PageArea(attrs);\n  }\n\n  static pageSet(attrs) {\n    return new PageSet(attrs);\n  }\n\n  static para(attrs) {\n    return new Para(attrs);\n  }\n\n  static passwordEdit(attrs) {\n    return new PasswordEdit(attrs);\n  }\n\n  static pattern(attrs) {\n    return new Pattern(attrs);\n  }\n\n  static picture(attrs) {\n    return new Picture(attrs);\n  }\n\n  static proto(attrs) {\n    return new Proto(attrs);\n  }\n\n  static radial(attrs) {\n    return new Radial(attrs);\n  }\n\n  static reason(attrs) {\n    return new Reason(attrs);\n  }\n\n  static reasons(attrs) {\n    return new Reasons(attrs);\n  }\n\n  static rectangle(attrs) {\n    return new Rectangle(attrs);\n  }\n\n  static ref(attrs) {\n    return new RefElement(attrs);\n  }\n\n  static script(attrs) {\n    return new Script(attrs);\n  }\n\n  static setProperty(attrs) {\n    return new SetProperty(attrs);\n  }\n\n  static signData(attrs) {\n    return new SignData(attrs);\n  }\n\n  static signature(attrs) {\n    return new Signature(attrs);\n  }\n\n  static signing(attrs) {\n    return new Signing(attrs);\n  }\n\n  static solid(attrs) {\n    return new Solid(attrs);\n  }\n\n  static speak(attrs) {\n    return new Speak(attrs);\n  }\n\n  static stipple(attrs) {\n    return new Stipple(attrs);\n  }\n\n  static subform(attrs) {\n    return new Subform(attrs);\n  }\n\n  static subformSet(attrs) {\n    return new SubformSet(attrs);\n  }\n\n  static subjectDN(attrs) {\n    return new SubjectDN(attrs);\n  }\n\n  static subjectDNs(attrs) {\n    return new SubjectDNs(attrs);\n  }\n\n  static submit(attrs) {\n    return new Submit(attrs);\n  }\n\n  static template(attrs) {\n    return new Template(attrs);\n  }\n\n  static text(attrs) {\n    return new Text(attrs);\n  }\n\n  static textEdit(attrs) {\n    return new TextEdit(attrs);\n  }\n\n  static time(attrs) {\n    return new Time(attrs);\n  }\n\n  static timeStamp(attrs) {\n    return new TimeStamp(attrs);\n  }\n\n  static toolTip(attrs) {\n    return new ToolTip(attrs);\n  }\n\n  static traversal(attrs) {\n    return new Traversal(attrs);\n  }\n\n  static traverse(attrs) {\n    return new Traverse(attrs);\n  }\n\n  static ui(attrs) {\n    return new Ui(attrs);\n  }\n\n  static validate(attrs) {\n    return new Validate(attrs);\n  }\n\n  static value(attrs) {\n    return new Value(attrs);\n  }\n\n  static variables(attrs) {\n    return new Variables(attrs);\n  }\n}\n\nexport {\n  BindItems,\n  Field,\n  Items,\n  SetProperty,\n  Template,\n  TemplateNamespace,\n  Text,\n  Value,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $appendChild,\n  $clone,\n  $consumed,\n  $content,\n  $data,\n  $finalize,\n  $getAttributeIt,\n  $getChildren,\n  $getDataValue,\n  $getParent,\n  $getRealChildrenByNameIt,\n  $hasSettableValue,\n  $indexOf,\n  $insertAt,\n  $isBindable,\n  $isDataValue,\n  $isDescendent,\n  $namespaceId,\n  $nodeName,\n  $removeChild,\n  $setValue,\n  $text,\n} from \"./symbol_utils.js\";\nimport { BindItems, Field, Items, SetProperty, Text } from \"./template.js\";\nimport { createDataNode, searchNode } from \"./som.js\";\nimport { XFAAttribute, XFAObjectArray, XmlObject } from \"./xfa_object.js\";\nimport { NamespaceIds } from \"./namespaces.js\";\nimport { warn } from \"../../shared/util.js\";\n\nconst NS_DATASETS = NamespaceIds.datasets.id;\n\nfunction createText(content) {\n  const node = new Text({});\n  node[$content] = content;\n  return node;\n}\n\nclass Binder {\n  constructor(root) {\n    this.root = root;\n    this.datasets = root.datasets;\n    this.data = root.datasets?.data || new XmlObject(NS_DATASETS, \"data\");\n    this.emptyMerge = this.data[$getChildren]().length === 0;\n\n    this.root.form = this.form = root.template[$clone]();\n  }\n\n  _isConsumeData() {\n    return !this.emptyMerge && this._mergeMode;\n  }\n\n  _isMatchTemplate() {\n    return !this._isConsumeData();\n  }\n\n  bind() {\n    this._bindElement(this.form, this.data);\n    return this.form;\n  }\n\n  getData() {\n    return this.data;\n  }\n\n  _bindValue(formNode, data, picture) {\n    // Nodes must have the same \"type\": container or value.\n    // Here we make the link between form node and\n    // data node (through $data property): we'll use it\n    // to save form data.\n\n    formNode[$data] = data;\n    if (formNode[$hasSettableValue]()) {\n      if (data[$isDataValue]()) {\n        const value = data[$getDataValue]();\n        // TODO: use picture.\n        formNode[$setValue](createText(value));\n      } else if (\n        formNode instanceof Field &&\n        formNode.ui?.choiceList?.open === \"multiSelect\"\n      ) {\n        const value = data[$getChildren]()\n          .map(child => child[$content].trim())\n          .join(\"\\n\");\n        formNode[$setValue](createText(value));\n      } else if (this._isConsumeData()) {\n        warn(`XFA - Nodes haven't the same type.`);\n      }\n    } else if (!data[$isDataValue]() || this._isMatchTemplate()) {\n      this._bindElement(formNode, data);\n    } else {\n      warn(`XFA - Nodes haven't the same type.`);\n    }\n  }\n\n  _findDataByNameToConsume(name, isValue, dataNode, global) {\n    if (!name) {\n      return null;\n    }\n\n    // Firstly, we try to find a node with the given name:\n    //  - in dataNode;\n    //  - if not found, then in parent;\n    //  - and if not in found, then in grand-parent.\n    let generator, match;\n    for (let i = 0; i < 3; i++) {\n      generator = dataNode[$getRealChildrenByNameIt](\n        name,\n        /* allTransparent = */ false,\n        /* skipConsumed = */ true\n      );\n      // Try to find a match of the same kind.\n      while (true) {\n        match = generator.next().value;\n        if (!match) {\n          break;\n        }\n\n        if (isValue === match[$isDataValue]()) {\n          return match;\n        }\n      }\n      if (\n        dataNode[$namespaceId] === NS_DATASETS &&\n        dataNode[$nodeName] === \"data\"\n      ) {\n        break;\n      }\n      dataNode = dataNode[$getParent]();\n    }\n\n    if (!global) {\n      return null;\n    }\n\n    // Secondly, if global try to find it just under the root of datasets\n    // (which is the location of global variables).\n    generator = this.data[$getRealChildrenByNameIt](\n      name,\n      /* allTransparent = */ true,\n      /* skipConsumed = */ false\n    );\n\n    match = generator.next().value;\n    if (match) {\n      return match;\n    }\n\n    // Thirdly, try to find it in attributes.\n    generator = this.data[$getAttributeIt](name, /* skipConsumed = */ true);\n    match = generator.next().value;\n    if (match?.[$isDataValue]()) {\n      return match;\n    }\n\n    return null;\n  }\n\n  _setProperties(formNode, dataNode) {\n    // For example:\n    // <field name=\"LastName\" ...>\n    //   <setProperty ref=\"$data.Main.Style.NameFont\" target=\"font.typeface\"/>\n    //   <setProperty ref=\"$data.Main.Style.NameSize\" target=\"font.size\"/>\n    //   <setProperty ref=\"$data.Main.Help.LastName\" target=\"assist.toolTip\"/>\n    // </field>\n\n    if (!Object.hasOwn(formNode, \"setProperty\")) {\n      return;\n    }\n\n    for (const { ref, target, connection } of formNode.setProperty.children) {\n      if (connection) {\n        // TODO: evaluate if we should implement this feature.\n        // Skip for security reasons.\n        continue;\n      }\n      if (!ref) {\n        continue;\n      }\n\n      const nodes = searchNode(\n        this.root,\n        dataNode,\n        ref,\n        false /* = dotDotAllowed */,\n        false /* = useCache */\n      );\n      if (!nodes) {\n        warn(`XFA - Invalid reference: ${ref}.`);\n        continue;\n      }\n      const [node] = nodes;\n\n      if (!node[$isDescendent](this.data)) {\n        warn(`XFA - Invalid node: must be a data node.`);\n        continue;\n      }\n\n      const targetNodes = searchNode(\n        this.root,\n        formNode,\n        target,\n        false /* = dotDotAllowed */,\n        false /* = useCache */\n      );\n      if (!targetNodes) {\n        warn(`XFA - Invalid target: ${target}.`);\n        continue;\n      }\n      const [targetNode] = targetNodes;\n\n      if (!targetNode[$isDescendent](formNode)) {\n        warn(`XFA - Invalid target: must be a property or subproperty.`);\n        continue;\n      }\n\n      const targetParent = targetNode[$getParent]();\n      if (\n        targetNode instanceof SetProperty ||\n        targetParent instanceof SetProperty\n      ) {\n        warn(\n          `XFA - Invalid target: cannot be a setProperty or one of its properties.`\n        );\n        continue;\n      }\n\n      if (\n        targetNode instanceof BindItems ||\n        targetParent instanceof BindItems\n      ) {\n        warn(\n          `XFA - Invalid target: cannot be a bindItems or one of its properties.`\n        );\n        continue;\n      }\n\n      const content = node[$text]();\n      const name = targetNode[$nodeName];\n\n      if (targetNode instanceof XFAAttribute) {\n        const attrs = Object.create(null);\n        attrs[name] = content;\n        const obj = Reflect.construct(\n          Object.getPrototypeOf(targetParent).constructor,\n          [attrs]\n        );\n        targetParent[name] = obj[name];\n        continue;\n      }\n\n      if (!Object.hasOwn(targetNode, $content)) {\n        warn(`XFA - Invalid node to use in setProperty`);\n        continue;\n      }\n\n      targetNode[$data] = node;\n      targetNode[$content] = content;\n      targetNode[$finalize]();\n    }\n  }\n\n  _bindItems(formNode, dataNode) {\n    // For example:\n    // <field name=\"CardName\"...>\n    //   <bindItems ref=\"$data.main.ccs.cc[*]\" labelRef=\"uiname\"\n    //              valueRef=\"token\"/>\n    //   <ui><choiceList/></ui>\n    // </field>\n\n    if (\n      !Object.hasOwn(formNode, \"items\") ||\n      !Object.hasOwn(formNode, \"bindItems\") ||\n      formNode.bindItems.isEmpty()\n    ) {\n      return;\n    }\n\n    for (const item of formNode.items.children) {\n      formNode[$removeChild](item);\n    }\n\n    formNode.items.clear();\n\n    const labels = new Items({});\n    const values = new Items({});\n\n    formNode[$appendChild](labels);\n    formNode.items.push(labels);\n\n    formNode[$appendChild](values);\n    formNode.items.push(values);\n\n    for (const { ref, labelRef, valueRef, connection } of formNode.bindItems\n      .children) {\n      if (connection) {\n        // TODO: evaluate if we should implement this feature.\n        // Skip for security reasons.\n        continue;\n      }\n      if (!ref) {\n        continue;\n      }\n\n      const nodes = searchNode(\n        this.root,\n        dataNode,\n        ref,\n        false /* = dotDotAllowed */,\n        false /* = useCache */\n      );\n      if (!nodes) {\n        warn(`XFA - Invalid reference: ${ref}.`);\n        continue;\n      }\n      for (const node of nodes) {\n        if (!node[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid ref (${ref}): must be a datasets child.`);\n          continue;\n        }\n\n        const labelNodes = searchNode(\n          this.root,\n          node,\n          labelRef,\n          true /* = dotDotAllowed */,\n          false /* = useCache */\n        );\n        if (!labelNodes) {\n          warn(`XFA - Invalid label: ${labelRef}.`);\n          continue;\n        }\n        const [labelNode] = labelNodes;\n\n        if (!labelNode[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid label: must be a datasets child.`);\n          continue;\n        }\n\n        const valueNodes = searchNode(\n          this.root,\n          node,\n          valueRef,\n          true /* = dotDotAllowed */,\n          false /* = useCache */\n        );\n        if (!valueNodes) {\n          warn(`XFA - Invalid value: ${valueRef}.`);\n          continue;\n        }\n        const [valueNode] = valueNodes;\n\n        if (!valueNode[$isDescendent](this.datasets)) {\n          warn(`XFA - Invalid value: must be a datasets child.`);\n          continue;\n        }\n\n        const label = createText(labelNode[$text]());\n        const value = createText(valueNode[$text]());\n\n        labels[$appendChild](label);\n        labels.text.push(label);\n\n        values[$appendChild](value);\n        values.text.push(value);\n      }\n    }\n  }\n\n  _bindOccurrences(formNode, matches, picture) {\n    // Insert nodes which are not in the template but reflect\n    // what we've in data tree.\n\n    let baseClone;\n    if (matches.length > 1) {\n      // Clone before binding to avoid bad state.\n      baseClone = formNode[$clone]();\n      baseClone[$removeChild](baseClone.occur);\n      baseClone.occur = null;\n    }\n\n    this._bindValue(formNode, matches[0], picture);\n    this._setProperties(formNode, matches[0]);\n    this._bindItems(formNode, matches[0]);\n\n    if (matches.length === 1) {\n      return;\n    }\n\n    const parent = formNode[$getParent]();\n    const name = formNode[$nodeName];\n    const pos = parent[$indexOf](formNode);\n\n    for (let i = 1, ii = matches.length; i < ii; i++) {\n      const match = matches[i];\n      const clone = baseClone[$clone]();\n      parent[name].push(clone);\n      parent[$insertAt](pos + i, clone);\n\n      this._bindValue(clone, match, picture);\n      this._setProperties(clone, match);\n      this._bindItems(clone, match);\n    }\n  }\n\n  _createOccurrences(formNode) {\n    if (!this.emptyMerge) {\n      return;\n    }\n\n    const { occur } = formNode;\n    if (!occur || occur.initial <= 1) {\n      return;\n    }\n\n    const parent = formNode[$getParent]();\n    const name = formNode[$nodeName];\n\n    if (!(parent[name] instanceof XFAObjectArray)) {\n      return;\n    }\n\n    let currentNumber;\n    if (formNode.name) {\n      currentNumber = parent[name].children.filter(\n        e => e.name === formNode.name\n      ).length;\n    } else {\n      currentNumber = parent[name].children.length;\n    }\n\n    const pos = parent[$indexOf](formNode) + 1;\n    const ii = occur.initial - currentNumber;\n    if (ii) {\n      const nodeClone = formNode[$clone]();\n      nodeClone[$removeChild](nodeClone.occur);\n      nodeClone.occur = null;\n      parent[name].push(nodeClone);\n      parent[$insertAt](pos, nodeClone);\n\n      for (let i = 1; i < ii; i++) {\n        const clone = nodeClone[$clone]();\n        parent[name].push(clone);\n        parent[$insertAt](pos + i, clone);\n      }\n    }\n  }\n\n  _getOccurInfo(formNode) {\n    const { name, occur } = formNode;\n    if (!occur || !name) {\n      return [1, 1];\n    }\n    const max = occur.max === -1 ? Infinity : occur.max;\n    return [occur.min, max];\n  }\n\n  _setAndBind(formNode, dataNode) {\n    this._setProperties(formNode, dataNode);\n    this._bindItems(formNode, dataNode);\n    this._bindElement(formNode, dataNode);\n  }\n\n  _bindElement(formNode, dataNode) {\n    // Some nodes can be useless because min=0 so remove them\n    // after the loop to avoid bad things.\n\n    const uselessNodes = [];\n\n    this._createOccurrences(formNode);\n\n    for (const child of formNode[$getChildren]()) {\n      if (child[$data]) {\n        // Already bound.\n        continue;\n      }\n\n      if (this._mergeMode === undefined && child[$nodeName] === \"subform\") {\n        this._mergeMode = child.mergeMode === \"consumeData\";\n\n        // XFA specs p. 182:\n        // The highest-level subform and the data node representing\n        // the current record are special; they are always\n        // bound even if their names don't match.\n        const dataChildren = dataNode[$getChildren]();\n        if (dataChildren.length > 0) {\n          this._bindOccurrences(child, [dataChildren[0]], null);\n        } else if (this.emptyMerge) {\n          const nsId =\n            dataNode[$namespaceId] === NS_DATASETS\n              ? -1\n              : dataNode[$namespaceId];\n          const dataChild = (child[$data] = new XmlObject(\n            nsId,\n            child.name || \"root\"\n          ));\n          dataNode[$appendChild](dataChild);\n          this._bindElement(child, dataChild);\n        }\n        continue;\n      }\n\n      if (!child[$isBindable]()) {\n        // The node cannot contain some new data so there is nothing\n        // to create in the data node.\n        continue;\n      }\n\n      let global = false;\n      let picture = null;\n      let ref = null;\n      let match = null;\n      if (child.bind) {\n        switch (child.bind.match) {\n          case \"none\":\n            this._setAndBind(child, dataNode);\n            continue;\n          case \"global\":\n            global = true;\n            break;\n          case \"dataRef\":\n            if (!child.bind.ref) {\n              warn(`XFA - ref is empty in node ${child[$nodeName]}.`);\n              this._setAndBind(child, dataNode);\n              continue;\n            }\n            ref = child.bind.ref;\n            break;\n          default:\n            break;\n        }\n        if (child.bind.picture) {\n          picture = child.bind.picture[$content];\n        }\n      }\n\n      const [min, max] = this._getOccurInfo(child);\n\n      if (ref) {\n        // Don't use a cache for searching: nodes can change during binding.\n        match = searchNode(\n          this.root,\n          dataNode,\n          ref,\n          true /* = dotDotAllowed */,\n          false /* = useCache */\n        );\n        if (match === null) {\n          // Nothing found: we must create some nodes in data in order\n          // to have something to match with the given expression.\n          // See http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.364.2157&rep=rep1&type=pdf#page=199\n          match = createDataNode(this.data, dataNode, ref);\n          if (!match) {\n            // For example if the node contains a .(...) then it isn't\n            // findable.\n            // TODO: remove this when .(...) is implemented.\n            continue;\n          }\n          if (this._isConsumeData()) {\n            match[$consumed] = true;\n          }\n\n          // Don't bind the value in newly created node because it's empty.\n          this._setAndBind(child, match);\n          continue;\n        } else {\n          if (this._isConsumeData()) {\n            // Filter out consumed nodes.\n            match = match.filter(node => !node[$consumed]);\n          }\n          if (match.length > max) {\n            match = match.slice(0, max);\n          } else if (match.length === 0) {\n            match = null;\n          }\n          if (match && this._isConsumeData()) {\n            match.forEach(node => {\n              node[$consumed] = true;\n            });\n          }\n        }\n      } else {\n        if (!child.name) {\n          this._setAndBind(child, dataNode);\n          continue;\n        }\n        if (this._isConsumeData()) {\n          // In consumeData mode, search for the next node with the given name.\n          // occurs.max gives us the max number of node to match.\n          const matches = [];\n          while (matches.length < max) {\n            const found = this._findDataByNameToConsume(\n              child.name,\n              child[$hasSettableValue](),\n              dataNode,\n              global\n            );\n\n            if (!found) {\n              break;\n            }\n            found[$consumed] = true;\n            matches.push(found);\n          }\n          match = matches.length > 0 ? matches : null;\n        } else {\n          // If we've an empty merge, there are no reason\n          // to make multiple bind so skip consumed nodes.\n          match = dataNode[$getRealChildrenByNameIt](\n            child.name,\n            /* allTransparent = */ false,\n            /* skipConsumed = */ this.emptyMerge\n          ).next().value;\n          if (!match) {\n            // If there is no match (no data) and `min === 0` then\n            // the container is entirely excluded.\n            // https://www.pdfa.org/norm-refs/XFA-3_3.pdf#G12.1428332\n            if (min === 0) {\n              uselessNodes.push(child);\n              continue;\n            }\n            // We're in matchTemplate mode so create a node in data to reflect\n            // what we've in template.\n            const nsId =\n              dataNode[$namespaceId] === NS_DATASETS\n                ? -1\n                : dataNode[$namespaceId];\n            match = child[$data] = new XmlObject(nsId, child.name);\n            if (this.emptyMerge) {\n              match[$consumed] = true;\n            }\n            dataNode[$appendChild](match);\n\n            // Don't bind the value in newly created node because it's empty.\n            this._setAndBind(child, match);\n            continue;\n          }\n          if (this.emptyMerge) {\n            match[$consumed] = true;\n          }\n          match = [match];\n        }\n      }\n\n      if (match) {\n        this._bindOccurrences(child, match, picture);\n      } else if (min > 0) {\n        this._setAndBind(child, dataNode);\n      } else {\n        uselessNodes.push(child);\n      }\n    }\n\n    uselessNodes.forEach(node => node[$getParent]()[$removeChild](node));\n  }\n}\n\nexport { Binder };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $getAttributes,\n  $getChildren,\n  $nodeName,\n  $setValue,\n  $toString,\n  $uid,\n} from \"./symbol_utils.js\";\n\nclass DataHandler {\n  constructor(root, data) {\n    this.data = data;\n    this.dataset = root.datasets || null;\n  }\n\n  serialize(storage) {\n    const stack = [[-1, this.data[$getChildren]()]];\n\n    while (stack.length > 0) {\n      const last = stack.at(-1);\n      const [i, children] = last;\n      if (i + 1 === children.length) {\n        stack.pop();\n        continue;\n      }\n\n      const child = children[++last[0]];\n      const storageEntry = storage.get(child[$uid]);\n      if (storageEntry) {\n        child[$setValue](storageEntry);\n      } else {\n        const attributes = child[$getAttributes]();\n        for (const value of attributes.values()) {\n          const entry = storage.get(value[$uid]);\n          if (entry) {\n            value[$setValue](entry);\n            break;\n          }\n        }\n      }\n\n      const nodes = child[$getChildren]();\n      if (nodes.length > 0) {\n        stack.push([-1, nodes]);\n      }\n    }\n\n    const buf = [\n      `<xfa:datasets xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\">`,\n    ];\n    if (this.dataset) {\n      // Dump nodes other than data: they can contains for example\n      // some data for choice lists.\n      for (const child of this.dataset[$getChildren]()) {\n        if (child[$nodeName] !== \"data\") {\n          child[$toString](buf);\n        }\n      }\n    }\n    this.data[$toString](buf);\n    buf.push(\"</xfa:datasets>\");\n\n    return buf.join(\"\");\n  }\n}\n\nexport { DataHandler };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { $content, $finalize } from \"./symbol_utils.js\";\nimport {\n  ContentObject,\n  IntegerObject,\n  Option01,\n  Option10,\n  OptionObject,\n  StringObject,\n  XFAObject,\n  XFAObjectArray,\n} from \"./xfa_object.js\";\nimport { getInteger, getStringOption } from \"./utils.js\";\nimport { shadow, warn } from \"../../shared/util.js\";\n\nconst CONFIG_NS_ID = NamespaceIds.config.id;\n\nclass Acrobat extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"acrobat\", /* hasChildren = */ true);\n    this.acrobat7 = null;\n    this.autoSave = null;\n    this.common = null;\n    this.validate = null;\n    this.validateApprovalSignatures = null;\n    this.submitUrl = new XFAObjectArray();\n  }\n}\n\nclass Acrobat7 extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"acrobat7\", /* hasChildren = */ true);\n    this.dynamicRender = null;\n  }\n}\n\nclass ADBE_JSConsole extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ADBE_JSConsole\", [\"delegate\", \"Enable\", \"Disable\"]);\n  }\n}\n\nclass ADBE_JSDebugger extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ADBE_JSDebugger\", [\"delegate\", \"Enable\", \"Disable\"]);\n  }\n}\n\nclass AddSilentPrint extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"addSilentPrint\");\n  }\n}\n\nclass AddViewerPreferences extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"addViewerPreferences\");\n  }\n}\n\nclass AdjustData extends Option10 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"adjustData\");\n  }\n}\n\nclass AdobeExtensionLevel extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"adobeExtensionLevel\", 0, n => n >= 1 && n <= 8);\n  }\n}\n\nclass Agent extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"agent\", /* hasChildren = */ true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.common = new XFAObjectArray();\n  }\n}\n\nclass AlwaysEmbed extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"alwaysEmbed\");\n  }\n}\n\nclass Amd extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"amd\");\n  }\n}\n\nclass Area extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"area\");\n    this.level = getInteger({\n      data: attributes.level,\n      defaultValue: 0,\n      validate: n => n >= 1 && n <= 3,\n    });\n    this.name = getStringOption(attributes.name, [\n      \"\",\n      \"barcode\",\n      \"coreinit\",\n      \"deviceDriver\",\n      \"font\",\n      \"general\",\n      \"layout\",\n      \"merge\",\n      \"script\",\n      \"signature\",\n      \"sourceSet\",\n      \"templateCache\",\n    ]);\n  }\n}\n\nclass Attributes extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"attributes\", [\"preserve\", \"delegate\", \"ignore\"]);\n  }\n}\n\nclass AutoSave extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"autoSave\", [\"disabled\", \"enabled\"]);\n  }\n}\n\nclass Base extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"base\");\n  }\n}\n\nclass BatchOutput extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"batchOutput\");\n    this.format = getStringOption(attributes.format, [\n      \"none\",\n      \"concat\",\n      \"zip\",\n      \"zipCompress\",\n    ]);\n  }\n}\n\nclass BehaviorOverride extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"behaviorOverride\");\n  }\n\n  [$finalize]() {\n    this[$content] = new Map(\n      this[$content]\n        .trim()\n        .split(/\\s+/)\n        .filter(x => x.includes(\":\"))\n        .map(x => x.split(\":\", 2))\n    );\n  }\n}\n\nclass Cache extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"cache\", /* hasChildren = */ true);\n    this.templateCache = null;\n  }\n}\n\nclass Change extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"change\");\n  }\n}\n\nclass Common extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"common\", /* hasChildren = */ true);\n    this.data = null;\n    this.locale = null;\n    this.localeSet = null;\n    this.messaging = null;\n    this.suppressBanner = null;\n    this.template = null;\n    this.validationMessaging = null;\n    this.versionControl = null;\n    this.log = new XFAObjectArray();\n  }\n}\n\nclass Compress extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compress\");\n    this.scope = getStringOption(attributes.scope, [\"imageOnly\", \"document\"]);\n  }\n}\n\nclass CompressLogicalStructure extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compressLogicalStructure\");\n  }\n}\n\nclass CompressObjectStream extends Option10 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compressObjectStream\");\n  }\n}\n\nclass Compression extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"compression\", /* hasChildren = */ true);\n    this.compressLogicalStructure = null;\n    this.compressObjectStream = null;\n    this.level = null;\n    this.type = null;\n  }\n}\n\nclass Config extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"config\", /* hasChildren = */ true);\n    this.acrobat = null;\n    this.present = null;\n    this.trace = null;\n    this.agent = new XFAObjectArray();\n  }\n}\n\nclass Conformance extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"conformance\", [\"A\", \"B\"]);\n  }\n}\n\nclass ContentCopy extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"contentCopy\");\n  }\n}\n\nclass Copies extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"copies\", 1, n => n >= 1);\n  }\n}\n\nclass Creator extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"creator\");\n  }\n}\n\nclass CurrentPage extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"currentPage\", 0, n => n >= 0);\n  }\n}\n\nclass Data extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"data\", /* hasChildren = */ true);\n    this.adjustData = null;\n    this.attributes = null;\n    this.incrementalLoad = null;\n    this.outputXSL = null;\n    this.range = null;\n    this.record = null;\n    this.startNode = null;\n    this.uri = null;\n    this.window = null;\n    this.xsl = null;\n    this.excludeNS = new XFAObjectArray();\n    this.transform = new XFAObjectArray();\n  }\n}\n\nclass Debug extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"debug\", /* hasChildren = */ true);\n    this.uri = null;\n  }\n}\n\nclass DefaultTypeface extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"defaultTypeface\");\n    this.writingScript = getStringOption(attributes.writingScript, [\n      \"*\",\n      \"Arabic\",\n      \"Cyrillic\",\n      \"EastEuropeanRoman\",\n      \"Greek\",\n      \"Hebrew\",\n      \"Japanese\",\n      \"Korean\",\n      \"Roman\",\n      \"SimplifiedChinese\",\n      \"Thai\",\n      \"TraditionalChinese\",\n      \"Vietnamese\",\n    ]);\n  }\n}\n\nclass Destination extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"destination\", [\n      \"pdf\",\n      \"pcl\",\n      \"ps\",\n      \"webClient\",\n      \"zpl\",\n    ]);\n  }\n}\n\nclass DocumentAssembly extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"documentAssembly\");\n  }\n}\n\nclass Driver extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"driver\", /* hasChildren = */ true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\n\nclass DuplexOption extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"duplexOption\", [\n      \"simplex\",\n      \"duplexFlipLongEdge\",\n      \"duplexFlipShortEdge\",\n    ]);\n  }\n}\n\nclass DynamicRender extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"dynamicRender\", [\"forbidden\", \"required\"]);\n  }\n}\n\nclass Embed extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"embed\");\n  }\n}\n\nclass Encrypt extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encrypt\");\n  }\n}\n\nclass Encryption extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encryption\", /* hasChildren = */ true);\n    this.encrypt = null;\n    this.encryptionLevel = null;\n    this.permissions = null;\n  }\n}\n\nclass EncryptionLevel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"encryptionLevel\", [\"40bit\", \"128bit\"]);\n  }\n}\n\nclass Enforce extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"enforce\");\n  }\n}\n\nclass Equate extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"equate\");\n\n    this.force = getInteger({\n      data: attributes.force,\n      defaultValue: 1,\n      validate: n => n === 0,\n    });\n\n    this.from = attributes.from || \"\";\n    this.to = attributes.to || \"\";\n  }\n}\n\nclass EquateRange extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"equateRange\");\n\n    this.from = attributes.from || \"\";\n    this.to = attributes.to || \"\";\n    this._unicodeRange = attributes.unicodeRange || \"\";\n  }\n\n  get unicodeRange() {\n    const ranges = [];\n    const unicodeRegex = /U\\+([0-9a-fA-F]+)/;\n    const unicodeRange = this._unicodeRange;\n    for (let range of unicodeRange\n      .split(\",\")\n      .map(x => x.trim())\n      .filter(x => !!x)) {\n      range = range.split(\"-\", 2).map(x => {\n        const found = x.match(unicodeRegex);\n        if (!found) {\n          return 0;\n        }\n        return parseInt(found[1], 16);\n      });\n      if (range.length === 1) {\n        range.push(range[0]);\n      }\n      ranges.push(range);\n    }\n    return shadow(this, \"unicodeRange\", ranges);\n  }\n}\n\nclass Exclude extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"exclude\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content]\n      .trim()\n      .split(/\\s+/)\n      .filter(\n        x =>\n          x &&\n          [\n            \"calculate\",\n            \"close\",\n            \"enter\",\n            \"exit\",\n            \"initialize\",\n            \"ready\",\n            \"validate\",\n          ].includes(x)\n      );\n  }\n}\n\nclass ExcludeNS extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"excludeNS\");\n  }\n}\n\nclass FlipLabel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"flipLabel\", [\"usePrinterSetting\", \"on\", \"off\"]);\n  }\n}\n\nclass FontInfo extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"fontInfo\", /* hasChildren = */ true);\n    this.embed = null;\n    this.map = null;\n    this.subsetBelow = null;\n    this.alwaysEmbed = new XFAObjectArray();\n    this.defaultTypeface = new XFAObjectArray();\n    this.neverEmbed = new XFAObjectArray();\n  }\n}\n\nclass FormFieldFilling extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"formFieldFilling\");\n  }\n}\n\nclass GroupParent extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"groupParent\");\n  }\n}\n\nclass IfEmpty extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ifEmpty\", [\n      \"dataValue\",\n      \"dataGroup\",\n      \"ignore\",\n      \"remove\",\n    ]);\n  }\n}\n\nclass IncludeXDPContent extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"includeXDPContent\");\n  }\n}\n\nclass IncrementalLoad extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"incrementalLoad\", [\"none\", \"forwardOnly\"]);\n  }\n}\n\nclass IncrementalMerge extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"incrementalMerge\");\n  }\n}\n\nclass Interactive extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"interactive\");\n  }\n}\n\nclass Jog extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"jog\", [\"usePrinterSetting\", \"none\", \"pageSet\"]);\n  }\n}\n\nclass LabelPrinter extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"labelPrinter\", /* hasChildren = */ true);\n    this.name = getStringOption(attributes.name, [\"zpl\", \"dpl\", \"ipl\", \"tcpl\"]);\n    this.batchOutput = null;\n    this.flipLabel = null;\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\n\nclass Layout extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"layout\", [\"paginate\", \"panel\"]);\n  }\n}\n\nclass Level extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"level\", 0, n => n > 0);\n  }\n}\n\nclass Linearized extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"linearized\");\n  }\n}\n\nclass Locale extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"locale\");\n  }\n}\n\nclass LocaleSet extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"localeSet\");\n  }\n}\n\nclass Log extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"log\", /* hasChildren = */ true);\n    this.mode = null;\n    this.threshold = null;\n    this.to = null;\n    this.uri = null;\n  }\n}\n\n// Renamed in MapElement to avoid confusion with usual js Map.\nclass MapElement extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"map\", /* hasChildren = */ true);\n    this.equate = new XFAObjectArray();\n    this.equateRange = new XFAObjectArray();\n  }\n}\n\nclass MediumInfo extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"mediumInfo\", /* hasChildren = */ true);\n    this.map = null;\n  }\n}\n\nclass Message extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"message\", /* hasChildren = */ true);\n    this.msgId = null;\n    this.severity = null;\n  }\n}\n\nclass Messaging extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"messaging\", /* hasChildren = */ true);\n    this.message = new XFAObjectArray();\n  }\n}\n\nclass Mode extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"mode\", [\"append\", \"overwrite\"]);\n  }\n}\n\nclass ModifyAnnots extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"modifyAnnots\");\n  }\n}\n\nclass MsgId extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"msgId\", 1, n => n >= 1);\n  }\n}\n\nclass NameAttr extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"nameAttr\");\n  }\n}\n\nclass NeverEmbed extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"neverEmbed\");\n  }\n}\n\nclass NumberOfCopies extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"numberOfCopies\", null, n => n >= 2 && n <= 5);\n  }\n}\n\nclass OpenAction extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"openAction\", /* hasChildren = */ true);\n    this.destination = null;\n  }\n}\n\nclass Output extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"output\", /* hasChildren = */ true);\n    this.to = null;\n    this.type = null;\n    this.uri = null;\n  }\n}\n\nclass OutputBin extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"outputBin\");\n  }\n}\n\nclass OutputXSL extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"outputXSL\", /* hasChildren = */ true);\n    this.uri = null;\n  }\n}\n\nclass Overprint extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"overprint\", [\"none\", \"both\", \"draw\", \"field\"]);\n  }\n}\n\nclass Packets extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"packets\");\n  }\n\n  [$finalize]() {\n    if (this[$content] === \"*\") {\n      return;\n    }\n    this[$content] = this[$content]\n      .trim()\n      .split(/\\s+/)\n      .filter(x =>\n        [\"config\", \"datasets\", \"template\", \"xfdf\", \"xslt\"].includes(x)\n      );\n  }\n}\n\nclass PageOffset extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pageOffset\");\n    this.x = getInteger({\n      data: attributes.x,\n      defaultValue: \"useXDCSetting\",\n      validate: n => true,\n    });\n    this.y = getInteger({\n      data: attributes.y,\n      defaultValue: \"useXDCSetting\",\n      validate: n => true,\n    });\n  }\n}\n\nclass PageRange extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pageRange\");\n  }\n\n  [$finalize]() {\n    const numbers = this[$content]\n      .trim()\n      .split(/\\s+/)\n      .map(x => parseInt(x, 10));\n    const ranges = [];\n    for (let i = 0, ii = numbers.length; i < ii; i += 2) {\n      ranges.push(numbers.slice(i, i + 2));\n    }\n    this[$content] = ranges;\n  }\n}\n\nclass Pagination extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pagination\", [\n      \"simplex\",\n      \"duplexShortEdge\",\n      \"duplexLongEdge\",\n    ]);\n  }\n}\n\nclass PaginationOverride extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"paginationOverride\", [\n      \"none\",\n      \"forceDuplex\",\n      \"forceDuplexLongEdge\",\n      \"forceDuplexShortEdge\",\n      \"forceSimplex\",\n    ]);\n  }\n}\n\nclass Part extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"part\", 1, n => false);\n  }\n}\n\nclass Pcl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pcl\", /* hasChildren = */ true);\n    this.name = attributes.name || \"\";\n    this.batchOutput = null;\n    this.fontInfo = null;\n    this.jog = null;\n    this.mediumInfo = null;\n    this.outputBin = null;\n    this.pageOffset = null;\n    this.staple = null;\n    this.xdc = null;\n  }\n}\n\nclass Pdf extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pdf\", /* hasChildren = */ true);\n    this.name = attributes.name || \"\";\n    this.adobeExtensionLevel = null;\n    this.batchOutput = null;\n    this.compression = null;\n    this.creator = null;\n    this.encryption = null;\n    this.fontInfo = null;\n    this.interactive = null;\n    this.linearized = null;\n    this.openAction = null;\n    this.pdfa = null;\n    this.producer = null;\n    this.renderPolicy = null;\n    this.scriptModel = null;\n    this.silentPrint = null;\n    this.submitFormat = null;\n    this.tagged = null;\n    this.version = null;\n    this.viewerPreferences = null;\n    this.xdc = null;\n  }\n}\n\nclass Pdfa extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pdfa\", /* hasChildren = */ true);\n    this.amd = null;\n    this.conformance = null;\n    this.includeXDPContent = null;\n    this.part = null;\n  }\n}\n\nclass Permissions extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"permissions\", /* hasChildren = */ true);\n    this.accessibleContent = null;\n    this.change = null;\n    this.contentCopy = null;\n    this.documentAssembly = null;\n    this.formFieldFilling = null;\n    this.modifyAnnots = null;\n    this.plaintextMetadata = null;\n    this.print = null;\n    this.printHighQuality = null;\n  }\n}\n\nclass PickTrayByPDFSize extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"pickTrayByPDFSize\");\n  }\n}\n\nclass Picture extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"picture\");\n  }\n\n  // TODO: check the validity of the picture clause.\n  // See page 1150 in the spec.\n}\n\nclass PlaintextMetadata extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"plaintextMetadata\");\n  }\n}\n\nclass Presence extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"presence\", [\n      \"preserve\",\n      \"dissolve\",\n      \"dissolveStructure\",\n      \"ignore\",\n      \"remove\",\n    ]);\n  }\n}\n\nclass Present extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"present\", /* hasChildren = */ true);\n    this.behaviorOverride = null;\n    this.cache = null;\n    this.common = null;\n    this.copies = null;\n    this.destination = null;\n    this.incrementalMerge = null;\n    this.layout = null;\n    this.output = null;\n    this.overprint = null;\n    this.pagination = null;\n    this.paginationOverride = null;\n    this.script = null;\n    this.validate = null;\n    this.xdp = null;\n    this.driver = new XFAObjectArray();\n    this.labelPrinter = new XFAObjectArray();\n    this.pcl = new XFAObjectArray();\n    this.pdf = new XFAObjectArray();\n    this.ps = new XFAObjectArray();\n    this.submitUrl = new XFAObjectArray();\n    this.webClient = new XFAObjectArray();\n    this.zpl = new XFAObjectArray();\n  }\n}\n\nclass Print extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"print\");\n  }\n}\n\nclass PrintHighQuality extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printHighQuality\");\n  }\n}\n\nclass PrintScaling extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printScaling\", [\"appdefault\", \"noScaling\"]);\n  }\n}\n\nclass PrinterName extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"printerName\");\n  }\n}\n\nclass Producer extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"producer\");\n  }\n}\n\nclass Ps extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"ps\", /* hasChildren = */ true);\n    this.name = attributes.name || \"\";\n    this.batchOutput = null;\n    this.fontInfo = null;\n    this.jog = null;\n    this.mediumInfo = null;\n    this.outputBin = null;\n    this.staple = null;\n    this.xdc = null;\n  }\n}\n\nclass Range extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"range\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content]\n      .split(\",\", 2)\n      .map(range => range.split(\"-\").map(x => parseInt(x.trim(), 10)))\n      .filter(range => range.every(x => !isNaN(x)))\n      .map(range => {\n        if (range.length === 1) {\n          range.push(range[0]);\n        }\n        return range;\n      });\n  }\n}\n\nclass Record extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"record\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n    const n = parseInt(this[$content], 10);\n    if (!isNaN(n) && n >= 0) {\n      this[$content] = n;\n    }\n  }\n}\n\nclass Relevant extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"relevant\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content].trim().split(/\\s+/);\n  }\n}\n\nclass Rename extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"rename\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content].trim();\n    // String must be a XFA name: same as XML one except that there\n    // is no colon.\n    if (\n      this[$content].toLowerCase().startsWith(\"xml\") ||\n      /[\\p{L}_][\\p{L}\\d._\\p{M}-]*/u.test(this[$content])\n    ) {\n      warn(\"XFA - Rename: invalid XFA name\");\n    }\n  }\n}\n\nclass RenderPolicy extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"renderPolicy\", [\"server\", \"client\"]);\n  }\n}\n\nclass RunScripts extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"runScripts\", [\"both\", \"client\", \"none\", \"server\"]);\n  }\n}\n\nclass Script extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"script\", /* hasChildren = */ true);\n    this.currentPage = null;\n    this.exclude = null;\n    this.runScripts = null;\n  }\n}\n\nclass ScriptModel extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"scriptModel\", [\"XFA\", \"none\"]);\n  }\n}\n\nclass Severity extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"severity\", [\n      \"ignore\",\n      \"error\",\n      \"information\",\n      \"trace\",\n      \"warning\",\n    ]);\n  }\n}\n\nclass SilentPrint extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"silentPrint\", /* hasChildren = */ true);\n    this.addSilentPrint = null;\n    this.printerName = null;\n  }\n}\n\nclass Staple extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"staple\");\n    this.mode = getStringOption(attributes.mode, [\n      \"usePrinterSetting\",\n      \"on\",\n      \"off\",\n    ]);\n  }\n}\n\nclass StartNode extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"startNode\");\n  }\n}\n\nclass StartPage extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"startPage\", 0, n => true);\n  }\n}\n\nclass SubmitFormat extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"submitFormat\", [\n      \"html\",\n      \"delegate\",\n      \"fdf\",\n      \"xml\",\n      \"pdf\",\n    ]);\n  }\n}\n\nclass SubmitUrl extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"submitUrl\");\n  }\n}\n\nclass SubsetBelow extends IntegerObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"subsetBelow\", 100, n => n >= 0 && n <= 100);\n  }\n}\n\nclass SuppressBanner extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"suppressBanner\");\n  }\n}\n\nclass Tagged extends Option01 {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"tagged\");\n  }\n}\n\nclass Template extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"template\", /* hasChildren = */ true);\n    this.base = null;\n    this.relevant = null;\n    this.startPage = null;\n    this.uri = null;\n    this.xsl = null;\n  }\n}\n\nclass Threshold extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"threshold\", [\n      \"trace\",\n      \"error\",\n      \"information\",\n      \"warning\",\n    ]);\n  }\n}\n\nclass To extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"to\", [\n      \"null\",\n      \"memory\",\n      \"stderr\",\n      \"stdout\",\n      \"system\",\n      \"uri\",\n    ]);\n  }\n}\n\nclass TemplateCache extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"templateCache\");\n    this.maxEntries = getInteger({\n      data: attributes.maxEntries,\n      defaultValue: 5,\n      validate: n => n >= 0,\n    });\n  }\n}\n\nclass Trace extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"trace\", /* hasChildren = */ true);\n    this.area = new XFAObjectArray();\n  }\n}\n\nclass Transform extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"transform\", /* hasChildren = */ true);\n    this.groupParent = null;\n    this.ifEmpty = null;\n    this.nameAttr = null;\n    this.picture = null;\n    this.presence = null;\n    this.rename = null;\n    this.whitespace = null;\n  }\n}\n\nclass Type extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"type\", [\n      \"none\",\n      \"ascii85\",\n      \"asciiHex\",\n      \"ccittfax\",\n      \"flate\",\n      \"lzw\",\n      \"runLength\",\n      \"native\",\n      \"xdp\",\n      \"mergedXDP\",\n    ]);\n  }\n}\n\nclass Uri extends StringObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"uri\");\n  }\n}\n\nclass Validate extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validate\", [\n      \"preSubmit\",\n      \"prePrint\",\n      \"preExecute\",\n      \"preSave\",\n    ]);\n  }\n}\n\nclass ValidateApprovalSignatures extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validateApprovalSignatures\");\n  }\n\n  [$finalize]() {\n    this[$content] = this[$content]\n      .trim()\n      .split(/\\s+/)\n      .filter(x => [\"docReady\", \"postSign\"].includes(x));\n  }\n}\n\nclass ValidationMessaging extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"validationMessaging\", [\n      \"allMessagesIndividually\",\n      \"allMessagesTogether\",\n      \"firstMessageOnly\",\n      \"noMessages\",\n    ]);\n  }\n}\n\nclass Version extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"version\", [\"1.7\", \"1.6\", \"1.5\", \"1.4\", \"1.3\", \"1.2\"]);\n  }\n}\n\nclass VersionControl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"VersionControl\");\n    this.outputBelow = getStringOption(attributes.outputBelow, [\n      \"warn\",\n      \"error\",\n      \"update\",\n    ]);\n    this.sourceAbove = getStringOption(attributes.sourceAbove, [\n      \"warn\",\n      \"error\",\n    ]);\n    this.sourceBelow = getStringOption(attributes.sourceBelow, [\n      \"update\",\n      \"maintain\",\n    ]);\n  }\n}\n\nclass ViewerPreferences extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"viewerPreferences\", /* hasChildren = */ true);\n    this.ADBE_JSConsole = null;\n    this.ADBE_JSDebugger = null;\n    this.addViewerPreferences = null;\n    this.duplexOption = null;\n    this.enforce = null;\n    this.numberOfCopies = null;\n    this.pageRange = null;\n    this.pickTrayByPDFSize = null;\n    this.printScaling = null;\n  }\n}\n\nclass WebClient extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"webClient\", /* hasChildren = */ true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\n\nclass Whitespace extends OptionObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"whitespace\", [\n      \"preserve\",\n      \"ltrim\",\n      \"normalize\",\n      \"rtrim\",\n      \"trim\",\n    ]);\n  }\n}\n\nclass Window extends ContentObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"window\");\n  }\n\n  [$finalize]() {\n    const pair = this[$content].split(\",\", 2).map(x => parseInt(x.trim(), 10));\n    if (pair.some(x => isNaN(x))) {\n      this[$content] = [0, 0];\n      return;\n    }\n    if (pair.length === 1) {\n      pair.push(pair[0]);\n    }\n    this[$content] = pair;\n  }\n}\n\nclass Xdc extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xdc\", /* hasChildren = */ true);\n    this.uri = new XFAObjectArray();\n    this.xsl = new XFAObjectArray();\n  }\n}\n\nclass Xdp extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xdp\", /* hasChildren = */ true);\n    this.packets = null;\n  }\n}\n\nclass Xsl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"xsl\", /* hasChildren = */ true);\n    this.debug = null;\n    this.uri = null;\n  }\n}\n\nclass Zpl extends XFAObject {\n  constructor(attributes) {\n    super(CONFIG_NS_ID, \"zpl\", /* hasChildren = */ true);\n    this.name = attributes.name ? attributes.name.trim() : \"\";\n    this.batchOutput = null;\n    this.flipLabel = null;\n    this.fontInfo = null;\n    this.xdc = null;\n  }\n}\n\nclass ConfigNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(ConfigNamespace, name)) {\n      return ConfigNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static acrobat(attrs) {\n    return new Acrobat(attrs);\n  }\n\n  static acrobat7(attrs) {\n    return new Acrobat7(attrs);\n  }\n\n  static ADBE_JSConsole(attrs) {\n    return new ADBE_JSConsole(attrs);\n  }\n\n  static ADBE_JSDebugger(attrs) {\n    return new ADBE_JSDebugger(attrs);\n  }\n\n  static addSilentPrint(attrs) {\n    return new AddSilentPrint(attrs);\n  }\n\n  static addViewerPreferences(attrs) {\n    return new AddViewerPreferences(attrs);\n  }\n\n  static adjustData(attrs) {\n    return new AdjustData(attrs);\n  }\n\n  static adobeExtensionLevel(attrs) {\n    return new AdobeExtensionLevel(attrs);\n  }\n\n  static agent(attrs) {\n    return new Agent(attrs);\n  }\n\n  static alwaysEmbed(attrs) {\n    return new AlwaysEmbed(attrs);\n  }\n\n  static amd(attrs) {\n    return new Amd(attrs);\n  }\n\n  static area(attrs) {\n    return new Area(attrs);\n  }\n\n  static attributes(attrs) {\n    return new Attributes(attrs);\n  }\n\n  static autoSave(attrs) {\n    return new AutoSave(attrs);\n  }\n\n  static base(attrs) {\n    return new Base(attrs);\n  }\n\n  static batchOutput(attrs) {\n    return new BatchOutput(attrs);\n  }\n\n  static behaviorOverride(attrs) {\n    return new BehaviorOverride(attrs);\n  }\n\n  static cache(attrs) {\n    return new Cache(attrs);\n  }\n\n  static change(attrs) {\n    return new Change(attrs);\n  }\n\n  static common(attrs) {\n    return new Common(attrs);\n  }\n\n  static compress(attrs) {\n    return new Compress(attrs);\n  }\n\n  static compressLogicalStructure(attrs) {\n    return new CompressLogicalStructure(attrs);\n  }\n\n  static compressObjectStream(attrs) {\n    return new CompressObjectStream(attrs);\n  }\n\n  static compression(attrs) {\n    return new Compression(attrs);\n  }\n\n  static config(attrs) {\n    return new Config(attrs);\n  }\n\n  static conformance(attrs) {\n    return new Conformance(attrs);\n  }\n\n  static contentCopy(attrs) {\n    return new ContentCopy(attrs);\n  }\n\n  static copies(attrs) {\n    return new Copies(attrs);\n  }\n\n  static creator(attrs) {\n    return new Creator(attrs);\n  }\n\n  static currentPage(attrs) {\n    return new CurrentPage(attrs);\n  }\n\n  static data(attrs) {\n    return new Data(attrs);\n  }\n\n  static debug(attrs) {\n    return new Debug(attrs);\n  }\n\n  static defaultTypeface(attrs) {\n    return new DefaultTypeface(attrs);\n  }\n\n  static destination(attrs) {\n    return new Destination(attrs);\n  }\n\n  static documentAssembly(attrs) {\n    return new DocumentAssembly(attrs);\n  }\n\n  static driver(attrs) {\n    return new Driver(attrs);\n  }\n\n  static duplexOption(attrs) {\n    return new DuplexOption(attrs);\n  }\n\n  static dynamicRender(attrs) {\n    return new DynamicRender(attrs);\n  }\n\n  static embed(attrs) {\n    return new Embed(attrs);\n  }\n\n  static encrypt(attrs) {\n    return new Encrypt(attrs);\n  }\n\n  static encryption(attrs) {\n    return new Encryption(attrs);\n  }\n\n  static encryptionLevel(attrs) {\n    return new EncryptionLevel(attrs);\n  }\n\n  static enforce(attrs) {\n    return new Enforce(attrs);\n  }\n\n  static equate(attrs) {\n    return new Equate(attrs);\n  }\n\n  static equateRange(attrs) {\n    return new EquateRange(attrs);\n  }\n\n  static exclude(attrs) {\n    return new Exclude(attrs);\n  }\n\n  static excludeNS(attrs) {\n    return new ExcludeNS(attrs);\n  }\n\n  static flipLabel(attrs) {\n    return new FlipLabel(attrs);\n  }\n\n  static fontInfo(attrs) {\n    return new FontInfo(attrs);\n  }\n\n  static formFieldFilling(attrs) {\n    return new FormFieldFilling(attrs);\n  }\n\n  static groupParent(attrs) {\n    return new GroupParent(attrs);\n  }\n\n  static ifEmpty(attrs) {\n    return new IfEmpty(attrs);\n  }\n\n  static includeXDPContent(attrs) {\n    return new IncludeXDPContent(attrs);\n  }\n\n  static incrementalLoad(attrs) {\n    return new IncrementalLoad(attrs);\n  }\n\n  static incrementalMerge(attrs) {\n    return new IncrementalMerge(attrs);\n  }\n\n  static interactive(attrs) {\n    return new Interactive(attrs);\n  }\n\n  static jog(attrs) {\n    return new Jog(attrs);\n  }\n\n  static labelPrinter(attrs) {\n    return new LabelPrinter(attrs);\n  }\n\n  static layout(attrs) {\n    return new Layout(attrs);\n  }\n\n  static level(attrs) {\n    return new Level(attrs);\n  }\n\n  static linearized(attrs) {\n    return new Linearized(attrs);\n  }\n\n  static locale(attrs) {\n    return new Locale(attrs);\n  }\n\n  static localeSet(attrs) {\n    return new LocaleSet(attrs);\n  }\n\n  static log(attrs) {\n    return new Log(attrs);\n  }\n\n  static map(attrs) {\n    return new MapElement(attrs);\n  }\n\n  static mediumInfo(attrs) {\n    return new MediumInfo(attrs);\n  }\n\n  static message(attrs) {\n    return new Message(attrs);\n  }\n\n  static messaging(attrs) {\n    return new Messaging(attrs);\n  }\n\n  static mode(attrs) {\n    return new Mode(attrs);\n  }\n\n  static modifyAnnots(attrs) {\n    return new ModifyAnnots(attrs);\n  }\n\n  static msgId(attrs) {\n    return new MsgId(attrs);\n  }\n\n  static nameAttr(attrs) {\n    return new NameAttr(attrs);\n  }\n\n  static neverEmbed(attrs) {\n    return new NeverEmbed(attrs);\n  }\n\n  static numberOfCopies(attrs) {\n    return new NumberOfCopies(attrs);\n  }\n\n  static openAction(attrs) {\n    return new OpenAction(attrs);\n  }\n\n  static output(attrs) {\n    return new Output(attrs);\n  }\n\n  static outputBin(attrs) {\n    return new OutputBin(attrs);\n  }\n\n  static outputXSL(attrs) {\n    return new OutputXSL(attrs);\n  }\n\n  static overprint(attrs) {\n    return new Overprint(attrs);\n  }\n\n  static packets(attrs) {\n    return new Packets(attrs);\n  }\n\n  static pageOffset(attrs) {\n    return new PageOffset(attrs);\n  }\n\n  static pageRange(attrs) {\n    return new PageRange(attrs);\n  }\n\n  static pagination(attrs) {\n    return new Pagination(attrs);\n  }\n\n  static paginationOverride(attrs) {\n    return new PaginationOverride(attrs);\n  }\n\n  static part(attrs) {\n    return new Part(attrs);\n  }\n\n  static pcl(attrs) {\n    return new Pcl(attrs);\n  }\n\n  static pdf(attrs) {\n    return new Pdf(attrs);\n  }\n\n  static pdfa(attrs) {\n    return new Pdfa(attrs);\n  }\n\n  static permissions(attrs) {\n    return new Permissions(attrs);\n  }\n\n  static pickTrayByPDFSize(attrs) {\n    return new PickTrayByPDFSize(attrs);\n  }\n\n  static picture(attrs) {\n    return new Picture(attrs);\n  }\n\n  static plaintextMetadata(attrs) {\n    return new PlaintextMetadata(attrs);\n  }\n\n  static presence(attrs) {\n    return new Presence(attrs);\n  }\n\n  static present(attrs) {\n    return new Present(attrs);\n  }\n\n  static print(attrs) {\n    return new Print(attrs);\n  }\n\n  static printHighQuality(attrs) {\n    return new PrintHighQuality(attrs);\n  }\n\n  static printScaling(attrs) {\n    return new PrintScaling(attrs);\n  }\n\n  static printerName(attrs) {\n    return new PrinterName(attrs);\n  }\n\n  static producer(attrs) {\n    return new Producer(attrs);\n  }\n\n  static ps(attrs) {\n    return new Ps(attrs);\n  }\n\n  static range(attrs) {\n    return new Range(attrs);\n  }\n\n  static record(attrs) {\n    return new Record(attrs);\n  }\n\n  static relevant(attrs) {\n    return new Relevant(attrs);\n  }\n\n  static rename(attrs) {\n    return new Rename(attrs);\n  }\n\n  static renderPolicy(attrs) {\n    return new RenderPolicy(attrs);\n  }\n\n  static runScripts(attrs) {\n    return new RunScripts(attrs);\n  }\n\n  static script(attrs) {\n    return new Script(attrs);\n  }\n\n  static scriptModel(attrs) {\n    return new ScriptModel(attrs);\n  }\n\n  static severity(attrs) {\n    return new Severity(attrs);\n  }\n\n  static silentPrint(attrs) {\n    return new SilentPrint(attrs);\n  }\n\n  static staple(attrs) {\n    return new Staple(attrs);\n  }\n\n  static startNode(attrs) {\n    return new StartNode(attrs);\n  }\n\n  static startPage(attrs) {\n    return new StartPage(attrs);\n  }\n\n  static submitFormat(attrs) {\n    return new SubmitFormat(attrs);\n  }\n\n  static submitUrl(attrs) {\n    return new SubmitUrl(attrs);\n  }\n\n  static subsetBelow(attrs) {\n    return new SubsetBelow(attrs);\n  }\n\n  static suppressBanner(attrs) {\n    return new SuppressBanner(attrs);\n  }\n\n  static tagged(attrs) {\n    return new Tagged(attrs);\n  }\n\n  static template(attrs) {\n    return new Template(attrs);\n  }\n\n  static templateCache(attrs) {\n    return new TemplateCache(attrs);\n  }\n\n  static threshold(attrs) {\n    return new Threshold(attrs);\n  }\n\n  static to(attrs) {\n    return new To(attrs);\n  }\n\n  static trace(attrs) {\n    return new Trace(attrs);\n  }\n\n  static transform(attrs) {\n    return new Transform(attrs);\n  }\n\n  static type(attrs) {\n    return new Type(attrs);\n  }\n\n  static uri(attrs) {\n    return new Uri(attrs);\n  }\n\n  static validate(attrs) {\n    return new Validate(attrs);\n  }\n\n  static validateApprovalSignatures(attrs) {\n    return new ValidateApprovalSignatures(attrs);\n  }\n\n  static validationMessaging(attrs) {\n    return new ValidationMessaging(attrs);\n  }\n\n  static version(attrs) {\n    return new Version(attrs);\n  }\n\n  static versionControl(attrs) {\n    return new VersionControl(attrs);\n  }\n\n  static viewerPreferences(attrs) {\n    return new ViewerPreferences(attrs);\n  }\n\n  static webClient(attrs) {\n    return new WebClient(attrs);\n  }\n\n  static whitespace(attrs) {\n    return new Whitespace(attrs);\n  }\n\n  static window(attrs) {\n    return new Window(attrs);\n  }\n\n  static xdc(attrs) {\n    return new Xdc(attrs);\n  }\n\n  static xdp(attrs) {\n    return new Xdp(attrs);\n  }\n\n  static xsl(attrs) {\n    return new Xsl(attrs);\n  }\n\n  static zpl(attrs) {\n    return new Zpl(attrs);\n  }\n}\n\nexport { ConfigNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { StringObject, XFAObject, XFAObjectArray } from \"./xfa_object.js\";\n\nconst CONNECTION_SET_NS_ID = NamespaceIds.connectionSet.id;\n\nclass ConnectionSet extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"connectionSet\", /* hasChildren = */ true);\n    this.wsdlConnection = new XFAObjectArray();\n    this.xmlConnection = new XFAObjectArray();\n    this.xsdConnection = new XFAObjectArray();\n  }\n}\n\nclass EffectiveInputPolicy extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"effectiveInputPolicy\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass EffectiveOutputPolicy extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"effectiveOutputPolicy\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Operation extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"operation\");\n    this.id = attributes.id || \"\";\n    this.input = attributes.input || \"\";\n    this.name = attributes.name || \"\";\n    this.output = attributes.output || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass RootElement extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"rootElement\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass SoapAction extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"soapAction\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass SoapAddress extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"soapAddress\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass Uri extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"uri\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass WsdlAddress extends StringObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"wsdlAddress\");\n    this.id = attributes.id || \"\";\n    this.name = attributes.name || \"\";\n    this.use = attributes.use || \"\";\n    this.usehref = attributes.usehref || \"\";\n  }\n}\n\nclass WsdlConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"wsdlConnection\", /* hasChildren = */ true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.effectiveInputPolicy = null;\n    this.effectiveOutputPolicy = null;\n    this.operation = null;\n    this.soapAction = null;\n    this.soapAddress = null;\n    this.wsdlAddress = null;\n  }\n}\n\nclass XmlConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"xmlConnection\", /* hasChildren = */ true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.uri = null;\n  }\n}\n\nclass XsdConnection extends XFAObject {\n  constructor(attributes) {\n    super(CONNECTION_SET_NS_ID, \"xsdConnection\", /* hasChildren = */ true);\n    this.dataDescription = attributes.dataDescription || \"\";\n    this.name = attributes.name || \"\";\n    this.rootElement = null;\n    this.uri = null;\n  }\n}\n\nclass ConnectionSetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(ConnectionSetNamespace, name)) {\n      return ConnectionSetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static connectionSet(attrs) {\n    return new ConnectionSet(attrs);\n  }\n\n  static effectiveInputPolicy(attrs) {\n    return new EffectiveInputPolicy(attrs);\n  }\n\n  static effectiveOutputPolicy(attrs) {\n    return new EffectiveOutputPolicy(attrs);\n  }\n\n  static operation(attrs) {\n    return new Operation(attrs);\n  }\n\n  static rootElement(attrs) {\n    return new RootElement(attrs);\n  }\n\n  static soapAction(attrs) {\n    return new SoapAction(attrs);\n  }\n\n  static soapAddress(attrs) {\n    return new SoapAddress(attrs);\n  }\n\n  static uri(attrs) {\n    return new Uri(attrs);\n  }\n\n  static wsdlAddress(attrs) {\n    return new WsdlAddress(attrs);\n  }\n\n  static wsdlConnection(attrs) {\n    return new WsdlConnection(attrs);\n  }\n\n  static xmlConnection(attrs) {\n    return new XmlConnection(attrs);\n  }\n\n  static xsdConnection(attrs) {\n    return new XsdConnection(attrs);\n  }\n}\n\nexport { ConnectionSetNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $appendChild,\n  $isNsAgnostic,\n  $namespaceId,\n  $nodeName,\n  $onChild,\n} from \"./symbol_utils.js\";\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { XFAObject, XmlObject } from \"./xfa_object.js\";\n\nconst DATASETS_NS_ID = NamespaceIds.datasets.id;\n\nclass Data extends XmlObject {\n  constructor(attributes) {\n    super(DATASETS_NS_ID, \"data\", attributes);\n  }\n\n  [$isNsAgnostic]() {\n    return true;\n  }\n}\n\nclass Datasets extends XFAObject {\n  constructor(attributes) {\n    super(DATASETS_NS_ID, \"datasets\", /* hasChildren = */ true);\n    this.data = null;\n    this.Signature = null;\n  }\n\n  [$onChild](child) {\n    const name = child[$nodeName];\n    if (\n      (name === \"data\" && child[$namespaceId] === DATASETS_NS_ID) ||\n      (name === \"Signature\" &&\n        child[$namespaceId] === NamespaceIds.signature.id)\n    ) {\n      this[name] = child;\n    }\n    this[$appendChild](child);\n  }\n}\n\nclass DatasetsNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(DatasetsNamespace, name)) {\n      return DatasetsNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static datasets(attributes) {\n    return new Datasets(attributes);\n  }\n\n  static data(attributes) {\n    return new Data(attributes);\n  }\n}\n\nexport { DatasetsNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport {\n  ContentObject,\n  StringObject,\n  XFAObject,\n  XFAObjectArray,\n} from \"./xfa_object.js\";\nimport { getInteger, getStringOption } from \"./utils.js\";\n\nconst LOCALE_SET_NS_ID = NamespaceIds.localeSet.id;\n\nclass CalendarSymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"calendarSymbols\", /* hasChildren = */ true);\n    this.name = \"gregorian\";\n    this.dayNames = new XFAObjectArray(2);\n    this.eraNames = null;\n    this.meridiemNames = null;\n    this.monthNames = new XFAObjectArray(2);\n  }\n}\n\nclass CurrencySymbol extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"currencySymbol\");\n    this.name = getStringOption(attributes.name, [\n      \"symbol\",\n      \"isoname\",\n      \"decimal\",\n    ]);\n  }\n}\n\nclass CurrencySymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"currencySymbols\", /* hasChildren = */ true);\n    this.currencySymbol = new XFAObjectArray(3);\n  }\n}\n\nclass DatePattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"datePattern\");\n    this.name = getStringOption(attributes.name, [\n      \"full\",\n      \"long\",\n      \"med\",\n      \"short\",\n    ]);\n  }\n}\n\nclass DatePatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"datePatterns\", /* hasChildren = */ true);\n    this.datePattern = new XFAObjectArray(4);\n  }\n}\n\nclass DateTimeSymbols extends ContentObject {\n  // TODO: spec unclear about the format of the array.\n\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"dateTimeSymbols\");\n  }\n}\n\nclass Day extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"day\");\n  }\n}\n\nclass DayNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"dayNames\", /* hasChildren = */ true);\n    this.abbr = getInteger({\n      data: attributes.abbr,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.day = new XFAObjectArray(7);\n  }\n}\n\nclass Era extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"era\");\n  }\n}\n\nclass EraNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"eraNames\", /* hasChildren = */ true);\n    this.era = new XFAObjectArray(2);\n  }\n}\n\nclass Locale extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"locale\", /* hasChildren = */ true);\n    this.desc = attributes.desc || \"\";\n    this.name = \"isoname\";\n    this.calendarSymbols = null;\n    this.currencySymbols = null;\n    this.datePatterns = null;\n    this.dateTimeSymbols = null;\n    this.numberPatterns = null;\n    this.numberSymbols = null;\n    this.timePatterns = null;\n    this.typeFaces = null;\n  }\n}\n\nclass LocaleSet extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"localeSet\", /* hasChildren = */ true);\n    this.locale = new XFAObjectArray();\n  }\n}\n\nclass Meridiem extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"meridiem\");\n  }\n}\n\nclass MeridiemNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"meridiemNames\", /* hasChildren = */ true);\n    this.meridiem = new XFAObjectArray(2);\n  }\n}\n\nclass Month extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"month\");\n  }\n}\n\nclass MonthNames extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"monthNames\", /* hasChildren = */ true);\n    this.abbr = getInteger({\n      data: attributes.abbr,\n      defaultValue: 0,\n      validate: x => x === 1,\n    });\n    this.month = new XFAObjectArray(12);\n  }\n}\n\nclass NumberPattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberPattern\");\n    this.name = getStringOption(attributes.name, [\n      \"full\",\n      \"long\",\n      \"med\",\n      \"short\",\n    ]);\n  }\n}\n\nclass NumberPatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberPatterns\", /* hasChildren = */ true);\n    this.numberPattern = new XFAObjectArray(4);\n  }\n}\n\nclass NumberSymbol extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberSymbol\");\n    this.name = getStringOption(attributes.name, [\n      \"decimal\",\n      \"grouping\",\n      \"percent\",\n      \"minus\",\n      \"zero\",\n    ]);\n  }\n}\n\nclass NumberSymbols extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"numberSymbols\", /* hasChildren = */ true);\n    this.numberSymbol = new XFAObjectArray(5);\n  }\n}\n\nclass TimePattern extends StringObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"timePattern\");\n    this.name = getStringOption(attributes.name, [\n      \"full\",\n      \"long\",\n      \"med\",\n      \"short\",\n    ]);\n  }\n}\n\nclass TimePatterns extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"timePatterns\", /* hasChildren = */ true);\n    this.timePattern = new XFAObjectArray(4);\n  }\n}\n\nclass TypeFace extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"typeFace\", /* hasChildren = */ true);\n    this.name = attributes.name | \"\";\n  }\n}\n\nclass TypeFaces extends XFAObject {\n  constructor(attributes) {\n    super(LOCALE_SET_NS_ID, \"typeFaces\", /* hasChildren = */ true);\n    this.typeFace = new XFAObjectArray();\n  }\n}\n\nclass LocaleSetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(LocaleSetNamespace, name)) {\n      return LocaleSetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static calendarSymbols(attrs) {\n    return new CalendarSymbols(attrs);\n  }\n\n  static currencySymbol(attrs) {\n    return new CurrencySymbol(attrs);\n  }\n\n  static currencySymbols(attrs) {\n    return new CurrencySymbols(attrs);\n  }\n\n  static datePattern(attrs) {\n    return new DatePattern(attrs);\n  }\n\n  static datePatterns(attrs) {\n    return new DatePatterns(attrs);\n  }\n\n  static dateTimeSymbols(attrs) {\n    return new DateTimeSymbols(attrs);\n  }\n\n  static day(attrs) {\n    return new Day(attrs);\n  }\n\n  static dayNames(attrs) {\n    return new DayNames(attrs);\n  }\n\n  static era(attrs) {\n    return new Era(attrs);\n  }\n\n  static eraNames(attrs) {\n    return new EraNames(attrs);\n  }\n\n  static locale(attrs) {\n    return new Locale(attrs);\n  }\n\n  static localeSet(attrs) {\n    return new LocaleSet(attrs);\n  }\n\n  static meridiem(attrs) {\n    return new Meridiem(attrs);\n  }\n\n  static meridiemNames(attrs) {\n    return new MeridiemNames(attrs);\n  }\n\n  static month(attrs) {\n    return new Month(attrs);\n  }\n\n  static monthNames(attrs) {\n    return new MonthNames(attrs);\n  }\n\n  static numberPattern(attrs) {\n    return new NumberPattern(attrs);\n  }\n\n  static numberPatterns(attrs) {\n    return new NumberPatterns(attrs);\n  }\n\n  static numberSymbol(attrs) {\n    return new NumberSymbol(attrs);\n  }\n\n  static numberSymbols(attrs) {\n    return new NumberSymbols(attrs);\n  }\n\n  static timePattern(attrs) {\n    return new TimePattern(attrs);\n  }\n\n  static timePatterns(attrs) {\n    return new TimePatterns(attrs);\n  }\n\n  static typeFace(attrs) {\n    return new TypeFace(attrs);\n  }\n\n  static typeFaces(attrs) {\n    return new TypeFaces(attrs);\n  }\n}\n\nexport { LocaleSetNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { XFAObject } from \"./xfa_object.js\";\n\nconst SIGNATURE_NS_ID = NamespaceIds.signature.id;\n\nclass Signature extends XFAObject {\n  constructor(attributes) {\n    super(SIGNATURE_NS_ID, \"signature\", /* hasChildren = */ true);\n  }\n}\n\nclass SignatureNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(SignatureNamespace, name)) {\n      return SignatureNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static signature(attributes) {\n    return new Signature(attributes);\n  }\n}\n\nexport { SignatureNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { XFAObject } from \"./xfa_object.js\";\n\nconst STYLESHEET_NS_ID = NamespaceIds.stylesheet.id;\n\nclass Stylesheet extends XFAObject {\n  constructor(attributes) {\n    super(STYLESHEET_NS_ID, \"stylesheet\", /* hasChildren = */ true);\n  }\n}\n\nclass StylesheetNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(StylesheetNamespace, name)) {\n      return StylesheetNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static stylesheet(attributes) {\n    return new Stylesheet(attributes);\n  }\n}\n\nexport { StylesheetNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport { $namespaceId, $nodeName, $onChildCheck } from \"./symbol_utils.js\";\nimport { XFAObject, XFAObjectArray } from \"./xfa_object.js\";\n\nconst XDP_NS_ID = NamespaceIds.xdp.id;\n\nclass Xdp extends XFAObject {\n  constructor(attributes) {\n    super(XDP_NS_ID, \"xdp\", /* hasChildren = */ true);\n    this.uuid = attributes.uuid || \"\";\n    this.timeStamp = attributes.timeStamp || \"\";\n    this.config = null;\n    this.connectionSet = null;\n    this.datasets = null;\n    this.localeSet = null;\n    this.stylesheet = new XFAObjectArray();\n    this.template = null;\n  }\n\n  [$onChildCheck](child) {\n    const ns = NamespaceIds[child[$nodeName]];\n    return ns && child[$namespaceId] === ns.id;\n  }\n}\n\nclass XdpNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(XdpNamespace, name)) {\n      return XdpNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static xdp(attributes) {\n    return new Xdp(attributes);\n  }\n}\n\nexport { XdpNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $acceptWhitespace,\n  $childrenToHTML,\n  $clean,\n  $content,\n  $extra,\n  $getChildren,\n  $getParent,\n  $globalData,\n  $nodeName,\n  $onText,\n  $pushGlyphs,\n  $text,\n  $toHTML,\n} from \"./symbol_utils.js\";\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport {\n  fixTextIndent,\n  fixURL,\n  measureToString,\n  setFontFamily,\n} from \"./html_utils.js\";\nimport { getMeasurement, HTMLResult, stripQuotes } from \"./utils.js\";\nimport { XmlObject } from \"./xfa_object.js\";\n\nconst XHTML_NS_ID = NamespaceIds.xhtml.id;\nconst $richText = Symbol();\n\nconst VALID_STYLES = new Set([\n  \"color\",\n  \"font\",\n  \"font-family\",\n  \"font-size\",\n  \"font-stretch\",\n  \"font-style\",\n  \"font-weight\",\n  \"margin\",\n  \"margin-bottom\",\n  \"margin-left\",\n  \"margin-right\",\n  \"margin-top\",\n  \"letter-spacing\",\n  \"line-height\",\n  \"orphans\",\n  \"page-break-after\",\n  \"page-break-before\",\n  \"page-break-inside\",\n  \"tab-interval\",\n  \"tab-stop\",\n  \"text-align\",\n  \"text-decoration\",\n  \"text-indent\",\n  \"vertical-align\",\n  \"widows\",\n  \"kerning-mode\",\n  \"xfa-font-horizontal-scale\",\n  \"xfa-font-vertical-scale\",\n  \"xfa-spacerun\",\n  \"xfa-tab-stops\",\n]);\n\nconst StyleMapping = new Map([\n  [\"page-break-after\", \"breakAfter\"],\n  [\"page-break-before\", \"breakBefore\"],\n  [\"page-break-inside\", \"breakInside\"],\n  [\"kerning-mode\", value => (value === \"none\" ? \"none\" : \"normal\")],\n  [\n    \"xfa-font-horizontal-scale\",\n    value => `scaleX(${Math.max(0, parseInt(value, 10) / 100).toFixed(2)})`,\n  ],\n  [\n    \"xfa-font-vertical-scale\",\n    value => `scaleY(${Math.max(0, parseInt(value, 10) / 100).toFixed(2)})`,\n  ],\n  [\"xfa-spacerun\", \"\"],\n  [\"xfa-tab-stops\", \"\"],\n  [\n    \"font-size\",\n    (value, original) => {\n      // The font size must be positive.\n      value = original.fontSize = Math.abs(getMeasurement(value));\n      return measureToString(0.99 * value);\n    },\n  ],\n  [\"letter-spacing\", value => measureToString(getMeasurement(value))],\n  [\"line-height\", value => measureToString(getMeasurement(value))],\n  [\"margin\", value => measureToString(getMeasurement(value))],\n  [\"margin-bottom\", value => measureToString(getMeasurement(value))],\n  [\"margin-left\", value => measureToString(getMeasurement(value))],\n  [\"margin-right\", value => measureToString(getMeasurement(value))],\n  [\"margin-top\", value => measureToString(getMeasurement(value))],\n  [\"text-indent\", value => measureToString(getMeasurement(value))],\n  [\"font-family\", value => value],\n  [\"vertical-align\", value => measureToString(getMeasurement(value))],\n]);\n\nconst spacesRegExp = /\\s+/g;\nconst crlfRegExp = /[\\r\\n]+/g;\nconst crlfForRichTextRegExp = /\\r\\n?/g;\n\nfunction mapStyle(styleStr, node, richText) {\n  const style = Object.create(null);\n  if (!styleStr) {\n    return style;\n  }\n  const original = Object.create(null);\n  for (const [key, value] of styleStr.split(\";\").map(s => s.split(\":\", 2))) {\n    const mapping = StyleMapping.get(key);\n    if (mapping === \"\") {\n      continue;\n    }\n    let newValue = value;\n    if (mapping) {\n      newValue =\n        typeof mapping === \"string\" ? mapping : mapping(value, original);\n    }\n    if (key.endsWith(\"scale\")) {\n      style.transform = style.transform\n        ? `${style[key]} ${newValue}`\n        : newValue;\n    } else {\n      style[key.replaceAll(/-([a-z])/gi, (_, x) => x.toUpperCase())] = newValue;\n    }\n  }\n\n  if (style.fontFamily) {\n    setFontFamily(\n      {\n        typeface: style.fontFamily,\n        weight: style.fontWeight || \"normal\",\n        posture: style.fontStyle || \"normal\",\n        size: original.fontSize || 0,\n      },\n      node,\n      node[$globalData].fontFinder,\n      style\n    );\n  }\n\n  if (\n    richText &&\n    style.verticalAlign &&\n    style.verticalAlign !== \"0px\" &&\n    style.fontSize\n  ) {\n    // A non-zero verticalAlign means that we've a sub/super-script and\n    // consequently the font size must be decreased.\n    // https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf#G11.2097514\n    // And the two following factors to position the scripts have been\n    // found here:\n    // https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\n    const SUB_SUPER_SCRIPT_FACTOR = 0.583;\n    const VERTICAL_FACTOR = 0.333;\n    const fontSize = getMeasurement(style.fontSize);\n    style.fontSize = measureToString(fontSize * SUB_SUPER_SCRIPT_FACTOR);\n    style.verticalAlign = measureToString(\n      Math.sign(getMeasurement(style.verticalAlign)) *\n        fontSize *\n        VERTICAL_FACTOR\n    );\n  }\n\n  if (richText && style.fontSize) {\n    style.fontSize = `calc(${style.fontSize} * var(--total-scale-factor))`;\n  }\n\n  fixTextIndent(style);\n  return style;\n}\n\nfunction checkStyle(node) {\n  if (!node.style) {\n    return \"\";\n  }\n\n  // Remove any non-allowed keys.\n  return node.style\n    .split(\";\")\n    .filter(s => !!s.trim())\n    .map(s => s.split(\":\", 2).map(t => t.trim()))\n    .filter(([key, value]) => {\n      if (key === \"font-family\") {\n        node[$globalData].usedTypefaces.add(value);\n      }\n      return VALID_STYLES.has(key);\n    })\n    .map(kv => kv.join(\":\"))\n    .join(\";\");\n}\n\nconst NoWhites = new Set([\"body\", \"html\"]);\n\nclass XhtmlObject extends XmlObject {\n  constructor(attributes, name) {\n    super(XHTML_NS_ID, name);\n    this[$richText] = false;\n    this.style = attributes.style || \"\";\n  }\n\n  [$clean](builder) {\n    super[$clean](builder);\n    this.style = checkStyle(this);\n  }\n\n  [$acceptWhitespace]() {\n    return !NoWhites.has(this[$nodeName]);\n  }\n\n  [$onText](str, richText = false) {\n    if (!richText) {\n      str = str.replaceAll(crlfRegExp, \"\");\n      if (!this.style.includes(\"xfa-spacerun:yes\")) {\n        str = str.replaceAll(spacesRegExp, \" \");\n      }\n    } else {\n      this[$richText] = true;\n    }\n\n    if (str) {\n      this[$content] += str;\n    }\n  }\n\n  [$pushGlyphs](measure, mustPop = true) {\n    const xfaFont = Object.create(null);\n    const margin = {\n      top: NaN,\n      bottom: NaN,\n      left: NaN,\n      right: NaN,\n    };\n    let lineHeight = null;\n    for (const [key, value] of this.style\n      .split(\";\")\n      .map(s => s.split(\":\", 2))) {\n      switch (key) {\n        case \"font-family\":\n          xfaFont.typeface = stripQuotes(value);\n          break;\n        case \"font-size\":\n          xfaFont.size = getMeasurement(value);\n          break;\n        case \"font-weight\":\n          xfaFont.weight = value;\n          break;\n        case \"font-style\":\n          xfaFont.posture = value;\n          break;\n        case \"letter-spacing\":\n          xfaFont.letterSpacing = getMeasurement(value);\n          break;\n        case \"margin\":\n          const values = value.split(/ \\t/).map(x => getMeasurement(x));\n          switch (values.length) {\n            case 1:\n              margin.top =\n                margin.bottom =\n                margin.left =\n                margin.right =\n                  values[0];\n              break;\n            case 2:\n              margin.top = margin.bottom = values[0];\n              margin.left = margin.right = values[1];\n              break;\n            case 3:\n              margin.top = values[0];\n              margin.bottom = values[2];\n              margin.left = margin.right = values[1];\n              break;\n            case 4:\n              margin.top = values[0];\n              margin.left = values[1];\n              margin.bottom = values[2];\n              margin.right = values[3];\n              break;\n          }\n          break;\n        case \"margin-top\":\n          margin.top = getMeasurement(value);\n          break;\n        case \"margin-bottom\":\n          margin.bottom = getMeasurement(value);\n          break;\n        case \"margin-left\":\n          margin.left = getMeasurement(value);\n          break;\n        case \"margin-right\":\n          margin.right = getMeasurement(value);\n          break;\n        case \"line-height\":\n          lineHeight = getMeasurement(value);\n          break;\n      }\n    }\n\n    measure.pushData(xfaFont, margin, lineHeight);\n\n    if (this[$content]) {\n      measure.addString(this[$content]);\n    } else {\n      for (const child of this[$getChildren]()) {\n        if (child[$nodeName] === \"#text\") {\n          measure.addString(child[$content]);\n          continue;\n        }\n        child[$pushGlyphs](measure);\n      }\n    }\n\n    if (mustPop) {\n      measure.popFont();\n    }\n  }\n\n  [$toHTML](availableSpace) {\n    const children = [];\n    this[$extra] = {\n      children,\n    };\n\n    this[$childrenToHTML]({});\n\n    if (children.length === 0 && !this[$content]) {\n      return HTMLResult.EMPTY;\n    }\n\n    let value;\n    if (this[$richText]) {\n      value = this[$content]\n        ? this[$content].replaceAll(crlfForRichTextRegExp, \"\\n\")\n        : undefined;\n    } else {\n      value = this[$content] || undefined;\n    }\n\n    return HTMLResult.success({\n      name: this[$nodeName],\n      attributes: {\n        href: this.href,\n        style: mapStyle(this.style, this, this[$richText]),\n      },\n      children,\n      value,\n    });\n  }\n}\n\nclass A extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"a\");\n    this.href = fixURL(attributes.href) || \"\";\n  }\n}\n\nclass B extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"b\");\n  }\n\n  [$pushGlyphs](measure) {\n    measure.pushFont({ weight: \"bold\" });\n    super[$pushGlyphs](measure);\n    measure.popFont();\n  }\n}\n\nclass Body extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"body\");\n  }\n\n  [$toHTML](availableSpace) {\n    const res = super[$toHTML](availableSpace);\n    const { html } = res;\n    if (!html) {\n      return HTMLResult.EMPTY;\n    }\n    html.name = \"div\";\n    html.attributes.class = [\"xfaRich\"];\n    return res;\n  }\n}\n\nclass Br extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"br\");\n  }\n\n  [$text]() {\n    return \"\\n\";\n  }\n\n  [$pushGlyphs](measure) {\n    measure.addString(\"\\n\");\n  }\n\n  [$toHTML](availableSpace) {\n    return HTMLResult.success({\n      name: \"br\",\n    });\n  }\n}\n\nclass Html extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"html\");\n  }\n\n  [$toHTML](availableSpace) {\n    const children = [];\n    this[$extra] = {\n      children,\n    };\n\n    this[$childrenToHTML]({});\n    if (children.length === 0) {\n      return HTMLResult.success({\n        name: \"div\",\n        attributes: {\n          class: [\"xfaRich\"],\n          style: {},\n        },\n        value: this[$content] || \"\",\n      });\n    }\n\n    if (children.length === 1) {\n      const child = children[0];\n      if (child.attributes?.class.includes(\"xfaRich\")) {\n        return HTMLResult.success(child);\n      }\n    }\n\n    return HTMLResult.success({\n      name: \"div\",\n      attributes: {\n        class: [\"xfaRich\"],\n        style: {},\n      },\n      children,\n    });\n  }\n}\n\nclass I extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"i\");\n  }\n\n  [$pushGlyphs](measure) {\n    measure.pushFont({ posture: \"italic\" });\n    super[$pushGlyphs](measure);\n    measure.popFont();\n  }\n}\n\nclass Li extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"li\");\n  }\n}\n\nclass Ol extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"ol\");\n  }\n}\n\nclass P extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"p\");\n  }\n\n  [$pushGlyphs](measure) {\n    super[$pushGlyphs](measure, /* mustPop = */ false);\n    measure.addString(\"\\n\");\n    measure.addPara();\n    measure.popFont();\n  }\n\n  [$text]() {\n    const siblings = this[$getParent]()[$getChildren]();\n    if (siblings.at(-1) === this) {\n      return super[$text]();\n    }\n    return super[$text]() + \"\\n\";\n  }\n}\n\nclass Span extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"span\");\n  }\n}\n\nclass Sub extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"sub\");\n  }\n}\n\nclass Sup extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"sup\");\n  }\n}\n\nclass Ul extends XhtmlObject {\n  constructor(attributes) {\n    super(attributes, \"ul\");\n  }\n}\n\nclass XhtmlNamespace {\n  static [$buildXFAObject](name, attributes) {\n    if (Object.hasOwn(XhtmlNamespace, name)) {\n      return XhtmlNamespace[name](attributes);\n    }\n    return undefined;\n  }\n\n  static a(attributes) {\n    return new A(attributes);\n  }\n\n  static b(attributes) {\n    return new B(attributes);\n  }\n\n  static body(attributes) {\n    return new Body(attributes);\n  }\n\n  static br(attributes) {\n    return new Br(attributes);\n  }\n\n  static html(attributes) {\n    return new Html(attributes);\n  }\n\n  static i(attributes) {\n    return new I(attributes);\n  }\n\n  static li(attributes) {\n    return new Li(attributes);\n  }\n\n  static ol(attributes) {\n    return new Ol(attributes);\n  }\n\n  static p(attributes) {\n    return new P(attributes);\n  }\n\n  static span(attributes) {\n    return new Span(attributes);\n  }\n\n  static sub(attributes) {\n    return new Sub(attributes);\n  }\n\n  static sup(attributes) {\n    return new Sup(attributes);\n  }\n\n  static ul(attributes) {\n    return new Ul(attributes);\n  }\n}\n\nexport { XhtmlNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ConfigNamespace } from \"./config.js\";\nimport { ConnectionSetNamespace } from \"./connection_set.js\";\nimport { DatasetsNamespace } from \"./datasets.js\";\nimport { LocaleSetNamespace } from \"./locale_set.js\";\nimport { SignatureNamespace } from \"./signature.js\";\nimport { StylesheetNamespace } from \"./stylesheet.js\";\nimport { TemplateNamespace } from \"./template.js\";\nimport { XdpNamespace } from \"./xdp.js\";\nimport { XhtmlNamespace } from \"./xhtml.js\";\n\nconst NamespaceSetUp = {\n  config: ConfigNamespace,\n  connection: ConnectionSetNamespace,\n  datasets: DatasetsNamespace,\n  localeSet: LocaleSetNamespace,\n  signature: SignatureNamespace,\n  stylesheet: StylesheetNamespace,\n  template: TemplateNamespace,\n  xdp: XdpNamespace,\n  xhtml: XhtmlNamespace,\n};\n\nexport { NamespaceSetUp };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject } from \"./namespaces.js\";\nimport { XmlObject } from \"./xfa_object.js\";\n\nclass UnknownNamespace {\n  constructor(nsId) {\n    this.namespaceId = nsId;\n  }\n\n  [$buildXFAObject](name, attributes) {\n    return new XmlObject(this.namespaceId, name, attributes);\n  }\n}\n\nexport { UnknownNamespace };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { $buildXFAObject, NamespaceIds } from \"./namespaces.js\";\nimport {\n  $cleanup,\n  $finalize,\n  $ids,\n  $isNsAgnostic,\n  $nsAttributes,\n  $onChild,\n  $resolvePrototypes,\n  $root,\n} from \"./symbol_utils.js\";\nimport { makeArr, warn } from \"../../shared/util.js\";\nimport { NamespaceSetUp } from \"./setup.js\";\nimport { Template } from \"./template.js\";\nimport { UnknownNamespace } from \"./unknown.js\";\nimport { XFAObject } from \"./xfa_object.js\";\n\nclass Root extends XFAObject {\n  constructor(ids) {\n    super(-1, \"root\", Object.create(null));\n    this.element = null;\n    this[$ids] = ids;\n  }\n\n  [$onChild](child) {\n    this.element = child;\n    return true;\n  }\n\n  [$finalize]() {\n    super[$finalize]();\n    if (this.element.template instanceof Template) {\n      // Set the root element in $ids using a symbol in order\n      // to avoid conflict with real IDs.\n      this[$ids].set($root, this.element);\n\n      this.element.template[$resolvePrototypes](this[$ids]);\n      this.element.template[$ids] = this[$ids];\n    }\n  }\n}\n\nclass Empty extends XFAObject {\n  constructor() {\n    super(-1, \"\", Object.create(null));\n  }\n\n  [$onChild](_) {\n    return false;\n  }\n}\n\nclass Builder {\n  constructor(rootNameSpace = null) {\n    this._namespaceStack = [];\n    this._nsAgnosticLevel = 0;\n\n    // Each prefix has its own stack\n    this._namespacePrefixes = new Map();\n    this._namespaces = new Map();\n    this._nextNsId = Math.max(\n      ...Object.values(NamespaceIds).map(({ id }) => id)\n    );\n    this._currentNamespace =\n      rootNameSpace || new UnknownNamespace(++this._nextNsId);\n  }\n\n  buildRoot(ids) {\n    return new Root(ids);\n  }\n\n  build({ nsPrefix, name, attributes, namespace, prefixes }) {\n    const hasNamespaceDef = namespace !== null;\n    if (hasNamespaceDef) {\n      // Define the current namespace to use.\n      this._namespaceStack.push(this._currentNamespace);\n      this._currentNamespace = this._searchNamespace(namespace);\n    }\n\n    if (prefixes) {\n      // The xml node may have namespace prefix definitions\n      this._addNamespacePrefix(prefixes);\n    }\n\n    if (Object.hasOwn(attributes, $nsAttributes)) {\n      // Only support xfa-data namespace.\n      const dataTemplate = NamespaceSetUp.datasets;\n      const nsAttrs = attributes[$nsAttributes];\n      let xfaAttrs = null;\n      for (const [ns, attrs] of Object.entries(nsAttrs)) {\n        const nsToUse = this._getNamespaceToUse(ns);\n        if (nsToUse === dataTemplate) {\n          xfaAttrs = { xfa: attrs };\n          break;\n        }\n      }\n      if (xfaAttrs) {\n        attributes[$nsAttributes] = xfaAttrs;\n      } else {\n        delete attributes[$nsAttributes];\n      }\n    }\n\n    const namespaceToUse = this._getNamespaceToUse(nsPrefix);\n    const node =\n      namespaceToUse?.[$buildXFAObject](name, attributes) || new Empty();\n\n    if (node[$isNsAgnostic]()) {\n      this._nsAgnosticLevel++;\n    }\n\n    // In case the node has some namespace things,\n    // we must pop the different stacks.\n    if (hasNamespaceDef || prefixes || node[$isNsAgnostic]()) {\n      node[$cleanup] = {\n        hasNamespace: hasNamespaceDef,\n        prefixes,\n        nsAgnostic: node[$isNsAgnostic](),\n      };\n    }\n\n    return node;\n  }\n\n  isNsAgnostic() {\n    return this._nsAgnosticLevel > 0;\n  }\n\n  _searchNamespace(nsName) {\n    let ns = this._namespaces.get(nsName);\n    if (ns) {\n      return ns;\n    }\n    for (const [name, { check }] of Object.entries(NamespaceIds)) {\n      if (check(nsName)) {\n        ns = NamespaceSetUp[name];\n        if (ns) {\n          this._namespaces.set(nsName, ns);\n          return ns;\n        }\n        // The namespace is known but not handled.\n        break;\n      }\n    }\n\n    ns = new UnknownNamespace(++this._nextNsId);\n    this._namespaces.set(nsName, ns);\n    return ns;\n  }\n\n  _addNamespacePrefix(prefixes) {\n    for (const { prefix, value } of prefixes) {\n      const namespace = this._searchNamespace(value);\n      this._namespacePrefixes\n        .getOrInsertComputed(prefix, makeArr)\n        .push(namespace);\n    }\n  }\n\n  _getNamespaceToUse(prefix) {\n    if (!prefix) {\n      return this._currentNamespace;\n    }\n    const prefixStack = this._namespacePrefixes.get(prefix);\n    if (prefixStack?.length > 0) {\n      return prefixStack.at(-1);\n    }\n\n    warn(`Unknown namespace prefix: ${prefix}.`);\n    return null;\n  }\n\n  clean(data) {\n    const { hasNamespace, prefixes, nsAgnostic } = data;\n    if (hasNamespace) {\n      this._currentNamespace = this._namespaceStack.pop();\n    }\n    if (prefixes) {\n      prefixes.forEach(({ prefix }) => {\n        this._namespacePrefixes.get(prefix).pop();\n      });\n    }\n    if (nsAgnostic) {\n      this._nsAgnosticLevel--;\n    }\n  }\n}\n\nexport { Builder };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $acceptWhitespace,\n  $clean,\n  $content,\n  $finalize,\n  $globalData,\n  $isCDATAXml,\n  $nsAttributes,\n  $onChild,\n  $onText,\n  $setId,\n} from \"./symbol_utils.js\";\nimport { XMLParserBase, XMLParserErrorCode } from \"../xml_parser.js\";\nimport { Builder } from \"./builder.js\";\nimport { warn } from \"../../shared/util.js\";\n\nclass XFAParser extends XMLParserBase {\n  constructor(rootNameSpace = null, richText = false) {\n    super();\n    this._builder = new Builder(rootNameSpace);\n    this._stack = [];\n    this._globalData = {\n      usedTypefaces: new Set(),\n    };\n    this._ids = new Map();\n    this._current = this._builder.buildRoot(this._ids);\n    this._errorCode = XMLParserErrorCode.NoError;\n    this._whiteRegex = /^\\s+$/;\n    this._nbsps = /\\xa0+/g;\n    this._richText = richText;\n  }\n\n  parse(data) {\n    this.parseXml(data);\n\n    if (this._errorCode !== XMLParserErrorCode.NoError) {\n      return undefined;\n    }\n\n    this._current[$finalize]();\n\n    return this._current.element;\n  }\n\n  onText(text) {\n    // Normally by definition a &nbsp is unbreakable\n    // but in real life Acrobat can break strings on &nbsp.\n    text = text.replace(this._nbsps, match => match.slice(1) + \" \");\n    if (this._richText || this._current[$acceptWhitespace]()) {\n      this._current[$onText](text, this._richText);\n      return;\n    }\n\n    if (this._whiteRegex.test(text)) {\n      return;\n    }\n    this._current[$onText](text.trim());\n  }\n\n  onCdata(text) {\n    this._current[$onText](text);\n  }\n\n  _mkAttributes(attributes, tagName) {\n    // Transform attributes into an object and get out\n    // namespaces information.\n    let namespace = null;\n    let prefixes = null;\n    const attributeObj = Object.create({});\n    for (const { name, value } of attributes) {\n      if (name === \"xmlns\") {\n        if (!namespace) {\n          namespace = value;\n        } else {\n          warn(`XFA - multiple namespace definition in <${tagName}>`);\n        }\n      } else if (name.startsWith(\"xmlns:\")) {\n        const prefix = name.substring(\"xmlns:\".length);\n        prefixes ??= [];\n        prefixes.push({ prefix, value });\n      } else {\n        const i = name.indexOf(\":\");\n        if (i === -1) {\n          attributeObj[name] = value;\n        } else {\n          // Attributes can have their own namespace.\n          // For example in data, we can have <foo xfa:dataNode=\"dataGroup\"/>\n          const nsAttrs = (attributeObj[$nsAttributes] ??= Object.create(null));\n          const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];\n          const attrs = (nsAttrs[ns] ||= Object.create(null));\n          attrs[attrName] = value;\n        }\n      }\n    }\n\n    return [namespace, prefixes, attributeObj];\n  }\n\n  _getNameAndPrefix(name, nsAgnostic) {\n    const i = name.indexOf(\":\");\n    if (i === -1) {\n      return [name, null];\n    }\n    return [name.substring(i + 1), nsAgnostic ? \"\" : name.substring(0, i)];\n  }\n\n  onBeginElement(tagName, attributes, isEmpty) {\n    const [namespace, prefixes, attributesObj] = this._mkAttributes(\n      attributes,\n      tagName\n    );\n    const [name, nsPrefix] = this._getNameAndPrefix(\n      tagName,\n      this._builder.isNsAgnostic()\n    );\n    const node = this._builder.build({\n      nsPrefix,\n      name,\n      attributes: attributesObj,\n      namespace,\n      prefixes,\n    });\n    node[$globalData] = this._globalData;\n\n    if (isEmpty) {\n      // No children: just push the node into its parent.\n      node[$finalize]();\n      if (this._current[$onChild](node)) {\n        node[$setId](this._ids);\n      }\n      node[$clean](this._builder);\n      return;\n    }\n\n    this._stack.push(this._current);\n    this._current = node;\n  }\n\n  onEndElement(name) {\n    const node = this._current;\n    if (node[$isCDATAXml]() && typeof node[$content] === \"string\") {\n      const parser = new XFAParser();\n      parser._globalData = this._globalData;\n      const root = parser.parse(node[$content]);\n      node[$content] = null;\n      node[$onChild](root);\n    }\n\n    node[$finalize]();\n    this._current = this._stack.pop();\n    if (this._current[$onChild](node)) {\n      node[$setId](this._ids);\n    }\n    node[$clean](this._builder);\n  }\n\n  onError(code) {\n    this._errorCode = code;\n  }\n}\n\nexport { XFAParser };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  $appendChild,\n  $globalData,\n  $nodeName,\n  $text,\n  $toHTML,\n  $toPages,\n} from \"./symbol_utils.js\";\nimport { Binder } from \"./bind.js\";\nimport { DataHandler } from \"./data.js\";\nimport { FontFinder } from \"./fonts.js\";\nimport { stripQuotes } from \"./utils.js\";\nimport { warn } from \"../../shared/util.js\";\nimport { XFAParser } from \"./parser.js\";\nimport { XhtmlNamespace } from \"./xhtml.js\";\n\nclass XFAFactory {\n  constructor(data) {\n    try {\n      this.root = new XFAParser().parse(XFAFactory._createDocument(data));\n      const binder = new Binder(this.root);\n      this.form = binder.bind();\n      this.dataHandler = new DataHandler(this.root, binder.getData());\n      this.form[$globalData].template = this.form;\n    } catch (e) {\n      warn(`XFA - an error occurred during parsing and binding: ${e}`);\n    }\n  }\n\n  isValid() {\n    return !!(this.root && this.form);\n  }\n\n  /**\n   * In order to avoid to block the event loop, the conversion\n   * into pages is made asynchronously.\n   */\n  _createPagesHelper() {\n    const iterator = this.form[$toPages]();\n    return new Promise((resolve, reject) => {\n      const nextIteration = () => {\n        try {\n          const value = iterator.next();\n          if (value.done) {\n            resolve(value.value);\n          } else {\n            setTimeout(nextIteration, 0);\n          }\n        } catch (e) {\n          reject(e);\n        }\n      };\n      setTimeout(nextIteration, 0);\n    });\n  }\n\n  async _createPages() {\n    try {\n      this.pages = await this._createPagesHelper();\n      this.dims = this.pages.children.map(c => {\n        const { width, height } = c.attributes.style;\n        return [0, 0, parseInt(width, 10), parseInt(height, 10)];\n      });\n    } catch (e) {\n      warn(`XFA - an error occurred during layout: ${e}`);\n    }\n  }\n\n  getBoundingBox(pageIndex) {\n    return this.dims[pageIndex];\n  }\n\n  async getNumPages() {\n    if (!this.pages) {\n      await this._createPages();\n    }\n    return this.dims.length;\n  }\n\n  setImages(images) {\n    this.form[$globalData].images = images;\n  }\n\n  setFonts(fonts) {\n    this.form[$globalData].fontFinder = new FontFinder(fonts);\n    const missingFonts = [];\n    for (let typeface of this.form[$globalData].usedTypefaces) {\n      typeface = stripQuotes(typeface);\n      const font = this.form[$globalData].fontFinder.find(typeface);\n      if (!font) {\n        missingFonts.push(typeface);\n      }\n    }\n\n    if (missingFonts.length > 0) {\n      return missingFonts;\n    }\n\n    return null;\n  }\n\n  appendFonts(fonts, reallyMissingFonts) {\n    this.form[$globalData].fontFinder.add(fonts, reallyMissingFonts);\n  }\n\n  async getPages() {\n    if (!this.pages) {\n      await this._createPages();\n    }\n    const pages = this.pages;\n    this.pages = null;\n    return pages;\n  }\n\n  serializeData(storage) {\n    return this.dataHandler.serialize(storage);\n  }\n\n  static _createDocument(data) {\n    return !data.get(\"/xdp:xdp\") ? data.get(\"xdp:xdp\") : data.values().join(\"\");\n  }\n\n  static getRichTextAsHtml(rc) {\n    if (!rc || typeof rc !== \"string\") {\n      return null;\n    }\n\n    try {\n      let root = new XFAParser(XhtmlNamespace, /* richText */ true).parse(rc);\n      if (![\"body\", \"xhtml\"].includes(root[$nodeName])) {\n        // No body, so create one.\n        const newRoot = XhtmlNamespace.body({});\n        newRoot[$appendChild](root);\n        root = newRoot;\n      }\n\n      const result = root[$toHTML]();\n      if (!result.success) {\n        return null;\n      }\n\n      const { html } = result;\n      const { attributes } = html;\n      if (attributes) {\n        attributes.class &&= attributes.class.filter(\n          attr => !attr.startsWith(\"xfa\")\n        );\n        attributes.dir = \"auto\";\n      }\n\n      return { html, str: root[$text]() };\n    } catch (e) {\n      warn(`XFA - an error occurred during parsing of rich text: ${e}`);\n    }\n    return null;\n  }\n}\n\nexport { XFAFactory };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationActionEventType,\n  AnnotationBorderStyleType,\n  AnnotationEditorType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationRenditionOperation,\n  AnnotationReplyType,\n  AnnotationType,\n  assert,\n  BASELINE_FACTOR,\n  BBOX_INIT,\n  F32_BBOX_INIT,\n  info,\n  isArrayEqual,\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  OPS,\n  RenderingIntentFlag,\n  shadow,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  collectActions,\n  escapeString,\n  getInheritableProperty,\n  getModificationDate,\n  getParentToUpdate,\n  getRotationMatrix,\n  IDENTITY_MATRIX,\n  isNumberArray,\n  lookupMatrix,\n  lookupNormalRect,\n  lookupRect,\n  MissingDataException,\n  numberToString,\n  RESOURCES_KEYS_OPERATOR_LIST,\n  RESOURCES_KEYS_TEXT_CONTENT,\n} from \"./core_utils.js\";\nimport {\n  createDefaultAppearance,\n  FakeUnicodeFont,\n  getPdfColor,\n  parseAppearanceStream,\n  parseDefaultAppearance,\n} from \"./default_appearance.js\";\nimport { DateFormats, TimeFormats } from \"../shared/scripting_utils.js\";\nimport { Dict, isName, isRefsEqual, Name, Ref, RefSet } from \"./primitives.js\";\nimport {\n  stringToAsciiOrUTF16BE,\n  stringToPDFString,\n  stringToUTF16String,\n} from \"./string_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { bidi } from \"./bidi.js\";\nimport { Catalog } from \"./catalog.js\";\nimport { ColorSpaceUtils } from \"./colorspace_utils.js\";\nimport { createImage } from \"./editor/pdf_images.js\";\nimport { FileSpec } from \"./file_spec.js\";\nimport { getSoundFormat } from \"./sound.js\";\nimport { JpegStream } from \"./jpeg_stream.js\";\nimport { ObjectLoader } from \"./object_loader.js\";\nimport { OperatorList } from \"./operator_list.js\";\nimport { parseMarkedContentProps } from \"./evaluator_utils.js\";\nimport { StringStream } from \"./stream.js\";\nimport { XFAFactory } from \"./xfa/factory.js\";\n\nclass AnnotationFactory {\n  static createGlobals(pdfManager) {\n    return Promise.all([\n      pdfManager.ensureCatalog(\"acroForm\"),\n      pdfManager.ensureDoc(\"xfaDatasets\"),\n      pdfManager.ensureCatalog(\"structTreeRoot\"),\n      // Only necessary to prevent the `Catalog.baseUrl`-getter, used\n      // with some Annotations, from throwing and thus breaking parsing:\n      pdfManager.ensureCatalog(\"baseUrl\"),\n      // Only necessary to prevent the `Catalog.attachments`-getter, used\n      // with \"GoToE\" actions, from throwing and thus breaking parsing:\n      pdfManager.ensureCatalog(\"attachments\"),\n      pdfManager.ensureCatalog(\"globalColorSpaceCache\"),\n    ]).then(\n      ([\n        acroForm,\n        xfaDatasets,\n        structTreeRoot,\n        baseUrl,\n        attachments,\n        globalColorSpaceCache,\n      ]) => ({\n        pdfManager,\n        catalog: pdfManager.pdfDocument.catalog,\n        acroForm: acroForm instanceof Dict ? acroForm : Dict.empty,\n        xfaDatasets,\n        structTreeRoot,\n        baseUrl,\n        attachments,\n        globalColorSpaceCache,\n      }),\n      reason => {\n        warn(`createGlobals: \"${reason}\".`);\n        return null;\n      }\n    );\n  }\n\n  /**\n   * Create an `Annotation` object of the correct type for the given reference\n   * to an annotation dictionary. This yields a promise that is resolved when\n   * the `Annotation` object is constructed.\n   *\n   * @param {XRef} xref\n   * @param {Object} ref\n   * @params {Object} annotationGlobals\n   * @param {Object} idFactory\n   * @param {boolean} [collectFields]\n   * @param {Object} [orphanFields]\n   * @param {Array<string>} [collectByType]\n   * @param {Object} [pageRef]\n   * @returns {Promise} A promise that is resolved with an {Annotation}\n   *   instance.\n   */\n  static async create(\n    xref,\n    ref,\n    annotationGlobals,\n    idFactory,\n    collectFields,\n    orphanFields,\n    collectByType,\n    pageRef\n  ) {\n    const pageIndex = collectFields\n      ? await this._getPageIndex(xref, ref, annotationGlobals.pdfManager)\n      : null;\n\n    return annotationGlobals.pdfManager.ensure(this, \"_create\", [\n      xref,\n      ref,\n      annotationGlobals,\n      idFactory,\n      collectFields,\n      orphanFields,\n      collectByType,\n      pageIndex,\n      pageRef,\n    ]);\n  }\n\n  /**\n   * @private\n   */\n  static _create(\n    xref,\n    ref,\n    annotationGlobals,\n    idFactory,\n    collectFields = false,\n    orphanFields = null,\n    collectByType = null,\n    pageIndex = null,\n    pageRef = null\n  ) {\n    const dict = xref.fetchIfRef(ref);\n    if (!(dict instanceof Dict)) {\n      return undefined;\n    }\n\n    // Determine the annotation's subtype.\n    let subtype = dict.get(\"Subtype\");\n    subtype = subtype instanceof Name ? subtype.name : null;\n\n    if (\n      collectByType &&\n      !collectByType.has(AnnotationType[subtype?.toUpperCase()])\n    ) {\n      return null;\n    }\n\n    const { acroForm, pdfManager } = annotationGlobals;\n    const id =\n      ref instanceof Ref ? ref.toString() : `annot_${idFactory.createObjId()}`;\n\n    // Return the right annotation object based on the subtype and field type.\n    const parameters = {\n      xref,\n      ref,\n      dict,\n      subtype,\n      id,\n      annotationGlobals,\n      collectFields,\n      orphanFields,\n      needAppearances:\n        !collectFields && acroForm.get(\"NeedAppearances\") === true,\n      pageIndex,\n      evaluatorOptions: pdfManager.evaluatorOptions,\n      pageRef,\n    };\n\n    switch (subtype) {\n      case \"Link\":\n        return new LinkAnnotation(parameters);\n\n      case \"Text\":\n        return new TextAnnotation(parameters);\n\n      case \"Widget\":\n        let fieldType = getInheritableProperty({ dict, key: \"FT\" });\n        fieldType = fieldType instanceof Name ? fieldType.name : null;\n\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotation(parameters);\n          case \"Btn\":\n            return new ButtonWidgetAnnotation(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotation(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotation(parameters);\n        }\n        warn(\n          `Unimplemented widget field type \"${fieldType}\", ` +\n            \"falling back to base field type.\"\n        );\n        return new WidgetAnnotation(parameters);\n\n      case \"Popup\":\n        return new PopupAnnotation(parameters);\n\n      case \"FreeText\":\n        return new FreeTextAnnotation(parameters);\n\n      case \"Line\":\n        return new LineAnnotation(parameters);\n\n      case \"Square\":\n        return new SquareAnnotation(parameters);\n\n      case \"Circle\":\n        return new CircleAnnotation(parameters);\n\n      case \"PolyLine\":\n        return new PolylineAnnotation(parameters);\n\n      case \"Polygon\":\n        return new PolygonAnnotation(parameters);\n\n      case \"Caret\":\n        return new CaretAnnotation(parameters);\n\n      case \"Ink\":\n        return new InkAnnotation(parameters);\n\n      case \"Highlight\":\n        return new HighlightAnnotation(parameters);\n\n      case \"Underline\":\n        return new UnderlineAnnotation(parameters);\n\n      case \"Squiggly\":\n        return new SquigglyAnnotation(parameters);\n\n      case \"StrikeOut\":\n        return new StrikeOutAnnotation(parameters);\n\n      case \"Stamp\":\n        return new StampAnnotation(parameters);\n\n      case \"FileAttachment\":\n        return new FileAttachmentAnnotation(parameters);\n\n      case \"RichMedia\":\n        return new RichMediaAnnotation(parameters);\n\n      case \"Screen\":\n        return new ScreenAnnotation(parameters);\n\n      case \"Sound\":\n        return new SoundAnnotation(parameters);\n\n      default:\n        if (!collectFields) {\n          if (!subtype) {\n            warn(\"Annotation is missing the required /Subtype.\");\n          } else {\n            warn(\n              `Unimplemented annotation type \"${subtype}\", ` +\n                \"falling back to base annotation.\"\n            );\n          }\n        }\n        return new Annotation(parameters);\n    }\n  }\n\n  static async _getPageIndex(xref, ref, pdfManager) {\n    try {\n      const annotDict = await xref.fetchIfRefAsync(ref);\n      if (!(annotDict instanceof Dict)) {\n        return -1;\n      }\n      const pageRef = annotDict.getRaw(\"P\");\n      if (pageRef instanceof Ref) {\n        try {\n          return await pdfManager.ensureCatalog(\"getPageIndex\", [pageRef]);\n        } catch (ex) {\n          info(`_getPageIndex -- not a valid page reference: \"${ex}\".`);\n        }\n      }\n      if (annotDict.has(\"Kids\")) {\n        return -1; // Not an annotation reference.\n      }\n      // Fallback to, potentially, checking the annotations of all pages.\n      // PLEASE NOTE: This could force the *entire* PDF document to load,\n      //              hence it absolutely cannot be done unconditionally.\n      const numPages = await pdfManager.ensureDoc(\"numPages\");\n\n      for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {\n        const page = await pdfManager.getPage(pageIndex);\n        const annotations = await pdfManager.ensure(page, \"annotations\");\n\n        for (const annotRef of annotations) {\n          if (annotRef instanceof Ref && isRefsEqual(annotRef, ref)) {\n            return pageIndex;\n          }\n        }\n      }\n    } catch (ex) {\n      warn(`_getPageIndex: \"${ex}\".`);\n    }\n    return -1;\n  }\n\n  static generateImages(annotations, xref, isOffscreenCanvasSupported) {\n    if (!isOffscreenCanvasSupported) {\n      warn(\n        \"generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.\"\n      );\n      return null;\n    }\n    let imagePromises;\n    for (const { bitmapId, bitmap } of annotations) {\n      if (!bitmap) {\n        continue;\n      }\n      imagePromises ||= new Map();\n      imagePromises.set(bitmapId, createImage(bitmap, xref));\n    }\n\n    return imagePromises;\n  }\n\n  static async saveNewAnnotations(\n    evaluator,\n    xref,\n    task,\n    annotations,\n    imagePromises,\n    changes\n  ) {\n    let baseFontRef;\n    const promises = [];\n    const { isOffscreenCanvasSupported } = evaluator.options;\n\n    for (const annotation of annotations) {\n      if (annotation.deleted) {\n        continue;\n      }\n      switch (annotation.annotationType) {\n        case AnnotationEditorType.FREETEXT:\n          if (!baseFontRef) {\n            const baseFont = new Dict(xref);\n            baseFont.setIfName(\"BaseFont\", \"Helvetica\");\n            baseFont.setIfName(\"Type\", \"Font\");\n            baseFont.setIfName(\"Subtype\", \"Type1\");\n            baseFont.setIfName(\"Encoding\", \"WinAnsiEncoding\");\n            baseFontRef = xref.getNewTemporaryRef();\n            changes.put(baseFontRef, {\n              data: baseFont,\n            });\n          }\n          promises.push(\n            FreeTextAnnotation.createNewAnnotation(xref, annotation, changes, {\n              evaluator,\n              task,\n              baseFontRef,\n            })\n          );\n          break;\n        case AnnotationEditorType.HIGHLIGHT:\n          if (annotation.quadPoints) {\n            promises.push(\n              HighlightAnnotation.createNewAnnotation(xref, annotation, changes)\n            );\n          } else {\n            promises.push(\n              InkAnnotation.createNewAnnotation(xref, annotation, changes)\n            );\n          }\n          break;\n        case AnnotationEditorType.INK:\n          promises.push(\n            InkAnnotation.createNewAnnotation(xref, annotation, changes)\n          );\n          break;\n        case AnnotationEditorType.STAMP:\n          const image = isOffscreenCanvasSupported\n            ? await imagePromises?.get(annotation.bitmapId)\n            : null;\n          if (image?.imageStream) {\n            const { imageStream, smaskStream } = image;\n            if (smaskStream) {\n              const smaskRef = xref.getNewTemporaryRef();\n              changes.put(smaskRef, {\n                data: smaskStream,\n              });\n              imageStream.dict.set(\"SMask\", smaskRef);\n            }\n            const imageRef = (image.imageRef = xref.getNewTemporaryRef());\n            changes.put(imageRef, {\n              data: imageStream,\n            });\n            image.imageStream = null;\n            image.imageRenderStream = null;\n            image.smaskStream = null;\n            image.smaskRenderStream = null;\n          }\n          promises.push(\n            StampAnnotation.createNewAnnotation(xref, annotation, changes, {\n              image,\n            })\n          );\n          break;\n        case AnnotationEditorType.SIGNATURE:\n          promises.push(\n            StampAnnotation.createNewAnnotation(xref, annotation, changes, {})\n          );\n          break;\n      }\n    }\n\n    return {\n      annotations: (await Promise.all(promises)).flat(),\n    };\n  }\n\n  static async printNewAnnotations(\n    annotationGlobals,\n    evaluator,\n    task,\n    annotations,\n    imagePromises\n  ) {\n    if (!annotations) {\n      return null;\n    }\n\n    const { options, xref } = evaluator;\n    const promises = [];\n    for (const annotation of annotations) {\n      if (annotation.deleted) {\n        continue;\n      }\n      switch (annotation.annotationType) {\n        case AnnotationEditorType.FREETEXT:\n          promises.push(\n            FreeTextAnnotation.createNewPrintAnnotation(\n              annotationGlobals,\n              xref,\n              annotation,\n              {\n                evaluator,\n                task,\n                evaluatorOptions: options,\n              }\n            )\n          );\n          break;\n        case AnnotationEditorType.HIGHLIGHT:\n          if (annotation.quadPoints) {\n            promises.push(\n              HighlightAnnotation.createNewPrintAnnotation(\n                annotationGlobals,\n                xref,\n                annotation,\n                {\n                  evaluatorOptions: options,\n                }\n              )\n            );\n          } else {\n            promises.push(\n              InkAnnotation.createNewPrintAnnotation(\n                annotationGlobals,\n                xref,\n                annotation,\n                {\n                  evaluatorOptions: options,\n                }\n              )\n            );\n          }\n          break;\n        case AnnotationEditorType.INK:\n          promises.push(\n            InkAnnotation.createNewPrintAnnotation(\n              annotationGlobals,\n              xref,\n              annotation,\n              {\n                evaluatorOptions: options,\n              }\n            )\n          );\n          break;\n        case AnnotationEditorType.STAMP:\n          const image = options.isOffscreenCanvasSupported\n            ? await imagePromises?.get(annotation.bitmapId)\n            : null;\n          if (image?.imageStream) {\n            const {\n              imageStream,\n              imageRenderStream,\n              smaskStream,\n              smaskRenderStream,\n            } = image;\n            const imageRef =\n              imageRenderStream ||\n              new JpegStream(imageStream, imageStream.length);\n            if (smaskStream || smaskRenderStream) {\n              imageRef.dict.set(\"SMask\", smaskRenderStream || smaskStream);\n            }\n            image.imageRef = imageRef;\n            image.imageStream = null;\n            image.imageRenderStream = null;\n            image.smaskStream = null;\n            image.smaskRenderStream = null;\n          }\n          promises.push(\n            StampAnnotation.createNewPrintAnnotation(\n              annotationGlobals,\n              xref,\n              annotation,\n              {\n                image,\n                evaluatorOptions: options,\n              }\n            )\n          );\n          break;\n        case AnnotationEditorType.SIGNATURE:\n          promises.push(\n            StampAnnotation.createNewPrintAnnotation(\n              annotationGlobals,\n              xref,\n              annotation,\n              {\n                evaluatorOptions: options,\n              }\n            )\n          );\n          break;\n      }\n    }\n\n    return Promise.all(promises);\n  }\n}\n\nfunction getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) {\n  if (!Array.isArray(color)) {\n    return defaultColor;\n  }\n\n  const rgbColor = defaultColor || new Uint8ClampedArray(3);\n  switch (color.length) {\n    case 0: // Transparent, which we indicate with a null value\n      return null;\n\n    case 1: // Convert grayscale to RGB\n      ColorSpaceUtils.gray.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n\n    case 3: // Convert RGB percentages to RGB\n      ColorSpaceUtils.rgb.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n\n    case 4: // Convert CMYK to RGB\n      ColorSpaceUtils.cmyk.getRgbItem(color, 0, rgbColor, 0);\n      return rgbColor;\n\n    default:\n      return defaultColor;\n  }\n}\n\nfunction getPdfColorArray(color, defaultValue = null) {\n  return (color && Array.from(color, c => c / 255)) || defaultValue;\n}\n\nfunction getQuadPoints(dict, rect) {\n  // The region is described as a number of quadrilaterals.\n  // Each quadrilateral must consist of eight coordinates.\n  const quadPoints = dict.getArray(\"QuadPoints\");\n  if (\n    !isNumberArray(quadPoints, null) ||\n    quadPoints.length === 0 ||\n    quadPoints.length % 8 > 0\n  ) {\n    return null;\n  }\n\n  const newQuadPoints = new Float32Array(quadPoints.length);\n  for (let i = 0, ii = quadPoints.length; i < ii; i += 8) {\n    // Each series of eight numbers represents the coordinates for one\n    // quadrilateral in the order [x1, y1, x2, y2, x3, y3, x4, y4].\n    // Convert this to an array of objects with x and y coordinates.\n    const [x1, y1, x2, y2, x3, y3, x4, y4] = quadPoints.slice(i, i + 8);\n    const minX = Math.min(x1, x2, x3, x4);\n    const maxX = Math.max(x1, x2, x3, x4);\n    const minY = Math.min(y1, y2, y3, y4);\n    const maxY = Math.max(y1, y2, y3, y4);\n    // The quadpoints should be ignored if any coordinate in the array\n    // lies outside the region specified by the rectangle. The rectangle\n    // can be `null` for markup annotations since their rectangle may be\n    // incorrect (fixes bug 1538111).\n    if (\n      rect !== null &&\n      (minX < rect[0] || maxX > rect[2] || minY < rect[1] || maxY > rect[3])\n    ) {\n      return null;\n    }\n    // The PDF specification states in section 12.5.6.10 (figure 64) that the\n    // order of the quadpoints should be bottom left, bottom right, top right\n    // and top left. However, in practice PDF files use a different order,\n    // namely bottom left, bottom right, top left and top right (this is also\n    // mentioned on https://github.com/highkite/pdfAnnotate#QuadPoints), so\n    // this is the actual order we should work with. However, the situation is\n    // even worse since Adobe's own applications and other applications violate\n    // the specification and create annotations with other orders, namely top\n    // left, top right, bottom left and bottom right or even top left,\n    // top right, bottom right and bottom left. To avoid inconsistency and\n    // broken rendering, we normalize all lists to put the quadpoints in the\n    // same standard order (see https://stackoverflow.com/a/10729881).\n    newQuadPoints.set([minX, maxY, maxX, maxY, minX, minY, maxX, minY], i);\n  }\n  return newQuadPoints;\n}\n\nfunction getTransformMatrix(rect, bbox, matrix) {\n  // 12.5.5: Algorithm: Appearance streams\n  const minMax = F32_BBOX_INIT.slice();\n  Util.axialAlignedBoundingBox(bbox, matrix, minMax);\n  const [minX, minY, maxX, maxY] = minMax;\n  if (minX === maxX || minY === maxY) {\n    // From real-life file, bbox was [0, 0, 0, 0]. In this case,\n    // just apply the transform for rect\n    return [1, 0, 0, 1, rect[0], rect[1]];\n  }\n\n  const xRatio = (rect[2] - rect[0]) / (maxX - minX);\n  const yRatio = (rect[3] - rect[1]) / (maxY - minY);\n  return [\n    xRatio,\n    0,\n    0,\n    yRatio,\n    rect[0] - minX * xRatio,\n    rect[1] - minY * yRatio,\n  ];\n}\n\nclass Annotation {\n  appearance = null;\n\n  _oc = undefined;\n\n  constructor(params) {\n    const { annotationGlobals, dict, orphanFields, ref, subtype, xref } =\n      params;\n    const parentRef = orphanFields?.get(ref);\n    if (parentRef) {\n      dict.set(\"Parent\", parentRef);\n    }\n\n    this.setTitle(dict.get(\"T\"));\n    this.setContents(dict.get(\"Contents\"));\n    this.setModificationDate(dict.get(\"M\"));\n    this.setFlags(dict.get(\"F\"));\n    this.setRectangle(dict.getArray(\"Rect\"));\n    this.setColor(dict.getArray(\"C\"));\n    this.setBorderStyle(dict);\n    this.setAppearance(dict);\n    this.#setOptionalContent(xref, dict);\n\n    const MK = dict.get(\"MK\");\n    this.setBorderAndBackgroundColors(MK);\n    this.setRotation(MK, dict);\n    this.ref = params.ref instanceof Ref ? params.ref : null;\n\n    this._streams = [];\n    if (this.appearance) {\n      this._streams.push(this.appearance);\n    }\n\n    // The annotation cannot be changed (neither its position/visibility nor its\n    // contents), hence we can just display its appearance and don't generate\n    // a HTML element for it.\n    const isLocked = !!(this.flags & AnnotationFlag.LOCKED);\n    const isContentLocked = !!(this.flags & AnnotationFlag.LOCKEDCONTENTS);\n\n    // Expose public properties using a data object.\n    this.data = {\n      annotationType: AnnotationType[subtype?.toUpperCase()],\n      annotationFlags: this.flags,\n      borderStyle: this.borderStyle,\n      color: this.color,\n      backgroundColor: this.backgroundColor,\n      borderColor: this.borderColor,\n      rotation: this.rotation,\n      contentsObj: this._contents,\n      hasAppearance: !!this.appearance,\n      id: params.id,\n      modificationDate: this.modificationDate,\n      oc: this._oc,\n      rect: this.rectangle,\n      subtype,\n      hasOwnCanvas: false,\n      noRotate: !!(this.flags & AnnotationFlag.NOROTATE),\n      noHTML: isLocked && isContentLocked,\n      isEditable: false,\n      structParent: -1,\n    };\n\n    if (annotationGlobals.structTreeRoot) {\n      let structParent = dict.get(\"StructParent\");\n      this.data.structParent = structParent =\n        Number.isInteger(structParent) && structParent >= 0 ? structParent : -1;\n\n      annotationGlobals.structTreeRoot.addAnnotationIdToPage(\n        params.pageRef,\n        structParent\n      );\n    }\n\n    if (params.collectFields) {\n      // Fields can act as container for other fields and have\n      // some actions even if no Annotation inherit from them.\n      // Those fields can be referenced by CO (calculation order).\n      const kids = dict.get(\"Kids\");\n      if (Array.isArray(kids)) {\n        const kidIds = [];\n        for (const kid of kids) {\n          if (kid instanceof Ref) {\n            kidIds.push(kid.toString());\n          }\n        }\n        if (kidIds.length !== 0) {\n          this.data.kidIds = kidIds;\n        }\n      }\n\n      this.data.actions = collectActions(xref, dict, AnnotationActionEventType);\n      this.data.fieldName = this._constructFieldName(dict);\n      this.data.pageIndex = params.pageIndex;\n    }\n\n    const it = dict.get(\"IT\");\n    if (it instanceof Name) {\n      this.data.it = it.name;\n    }\n\n    this._isOffscreenCanvasSupported =\n      params.evaluatorOptions.isOffscreenCanvasSupported;\n    this._fallbackFontDict = null;\n    this._needAppearances = false;\n  }\n\n  _getOperatorListNoAppearance() {\n    return {\n      opList: new OperatorList(),\n      separateForm: false,\n      separateCanvas: false,\n    };\n  }\n\n  /**\n   * @private\n   */\n  _hasFlag(flags, flag) {\n    return !!(flags & flag);\n  }\n\n  _buildFlags(noView, noPrint) {\n    let { flags } = this;\n    if (noView === undefined) {\n      if (noPrint === undefined) {\n        return undefined;\n      }\n      if (noPrint) {\n        return flags & ~AnnotationFlag.PRINT;\n      }\n      return (flags & ~AnnotationFlag.HIDDEN) | AnnotationFlag.PRINT;\n    }\n\n    if (noView) {\n      flags |= AnnotationFlag.PRINT;\n      if (noPrint) {\n        // display === 1.\n        return (flags & ~AnnotationFlag.NOVIEW) | AnnotationFlag.HIDDEN;\n      }\n      // display === 3.\n      return (flags & ~AnnotationFlag.HIDDEN) | AnnotationFlag.NOVIEW;\n    }\n\n    flags &= ~(AnnotationFlag.HIDDEN | AnnotationFlag.NOVIEW);\n    if (noPrint) {\n      // display === 2.\n      return flags & ~AnnotationFlag.PRINT;\n    }\n\n    // display === 0.\n    return flags | AnnotationFlag.PRINT;\n  }\n\n  /**\n   * @private\n   */\n  _isViewable(flags) {\n    return (\n      !this._hasFlag(flags, AnnotationFlag.INVISIBLE) &&\n      !this._hasFlag(flags, AnnotationFlag.NOVIEW)\n    );\n  }\n\n  /**\n   * @private\n   */\n  _isPrintable(flags) {\n    // In Acrobat, hidden flag cancels the print one\n    // (see annotation_hidden_print.pdf).\n    return (\n      this._hasFlag(flags, AnnotationFlag.PRINT) &&\n      !this._hasFlag(flags, AnnotationFlag.HIDDEN) &&\n      !this._hasFlag(flags, AnnotationFlag.INVISIBLE)\n    );\n  }\n\n  /**\n   * Check if the annotation must be displayed by taking into account\n   * the value found in the annotationStorage which may have been set\n   * through JS.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {AnnotationStorage} [annotationStorage] - Storage for annotation\n   * @param {boolean} [_renderForms] - if true widgets are rendered thanks to\n   *                                   the annotation layer.\n   */\n  mustBeViewed(annotationStorage, _renderForms) {\n    const noView = annotationStorage?.get(this.data.id)?.noView;\n    if (noView !== undefined) {\n      return !noView;\n    }\n    return this.viewable && !this._hasFlag(this.flags, AnnotationFlag.HIDDEN);\n  }\n\n  /**\n   * Check if the annotation must be printed by taking into account\n   * the value found in the annotationStorage which may have been set\n   * through JS.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {AnnotationStorage} [annotationStorage] - Storage for annotation\n   */\n  mustBePrinted(annotationStorage) {\n    const noPrint = annotationStorage?.get(this.data.id)?.noPrint;\n    if (noPrint !== undefined) {\n      return !noPrint;\n    }\n    return this.printable;\n  }\n\n  mustBeViewedWhenEditing(isEditing, modifiedIds = null) {\n    return isEditing ? !this.data.isEditable : !modifiedIds?.has(this.data.id);\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get viewable() {\n    if (this.data.quadPoints === null) {\n      return false;\n    }\n    if (this.flags === 0) {\n      return true;\n    }\n    return this._isViewable(this.flags);\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get printable() {\n    if (this.data.quadPoints === null) {\n      return false;\n    }\n    if (this.flags === 0) {\n      return false;\n    }\n    return this._isPrintable(this.flags);\n  }\n\n  /**\n   * @private\n   */\n  _parseStringHelper(data) {\n    const str = typeof data === \"string\" ? stringToPDFString(data) : \"\";\n    const dir = str && bidi(str).dir === \"rtl\" ? \"rtl\" : \"ltr\";\n\n    return { str, dir };\n  }\n\n  setDefaultAppearance(params) {\n    const { dict, annotationGlobals } = params;\n\n    const defaultAppearance =\n      getInheritableProperty({ dict, key: \"DA\" }) ||\n      annotationGlobals.acroForm.get(\"DA\");\n    this._defaultAppearance =\n      typeof defaultAppearance === \"string\" ? defaultAppearance : \"\";\n    this.data.defaultAppearanceData = parseDefaultAppearance(\n      this._defaultAppearance\n    );\n  }\n\n  /**\n   * Set the title.\n   *\n   * @param {string} title - The title of the annotation, used e.g. with\n   *   PopupAnnotations.\n   */\n  setTitle(title) {\n    this._title = this._parseStringHelper(title);\n  }\n\n  /**\n   * Set the contents.\n   *\n   * @param {string} contents - Text to display for the annotation or, if the\n   *                            type of annotation does not display text, a\n   *                            description of the annotation's contents\n   */\n  setContents(contents) {\n    this._contents = this._parseStringHelper(contents);\n  }\n\n  /**\n   * Set the modification date.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {string} modificationDate - PDF date string that indicates when the\n   *                                    annotation was last modified\n   */\n  setModificationDate(modificationDate) {\n    this.modificationDate =\n      typeof modificationDate === \"string\" ? modificationDate : null;\n  }\n\n  /**\n   * Set the flags.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {number} flags - Unsigned 32-bit integer specifying annotation\n   *                         characteristics\n   * @see {@link shared/util.js}\n   */\n  setFlags(flags) {\n    this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;\n    if (\n      this.flags & AnnotationFlag.INVISIBLE &&\n      this.constructor.name !== \"Annotation\"\n    ) {\n      // From the pdf spec v1.7, section 12.5.3 (Annotation Flags):\n      //   If set, do not display the annotation if it does not belong to one of\n      //   the standard annotation types and no annotation handler is available.\n      //\n      // So we can remove the flag in case we have a known annotation type.\n      this.flags ^= AnnotationFlag.INVISIBLE;\n    }\n  }\n\n  /**\n   * Check if a provided flag is set.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {number} flag - Hexadecimal representation for an annotation\n   *                        characteristic\n   * @returns {boolean}\n   * @see {@link shared/util.js}\n   */\n  hasFlag(flag) {\n    return this._hasFlag(this.flags, flag);\n  }\n\n  /**\n   * Set the rectangle.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {Array} rectangle - The rectangle array with exactly four entries\n   */\n  setRectangle(rectangle) {\n    this.rectangle = lookupNormalRect(rectangle, [0, 0, 0, 0]);\n  }\n\n  /**\n   * Set the color and take care of color space conversion.\n   * The default value is black, in RGB color space.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {Array} color - The color array containing either 0\n   *                        (transparent), 1 (grayscale), 3 (RGB) or\n   *                        4 (CMYK) elements\n   */\n  setColor(color) {\n    this.color = getRgbColor(color);\n  }\n\n  /**\n   * Set the line endings; should only be used with specific annotation types.\n   * @param {Array} lineEndings - The line endings array.\n   */\n  setLineEndings(lineEndings) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: setLineEndings\");\n    }\n    this.lineEndings = [\"None\", \"None\"]; // The default values.\n\n    if (Array.isArray(lineEndings) && lineEndings.length === 2) {\n      for (let i = 0; i < 2; i++) {\n        const obj = lineEndings[i];\n\n        if (obj instanceof Name) {\n          switch (obj.name) {\n            case \"None\":\n              continue;\n            case \"Square\":\n            case \"Circle\":\n            case \"Diamond\":\n            case \"OpenArrow\":\n            case \"ClosedArrow\":\n            case \"Butt\":\n            case \"ROpenArrow\":\n            case \"RClosedArrow\":\n            case \"Slash\":\n              this.lineEndings[i] = obj.name;\n              continue;\n          }\n        }\n        warn(`Ignoring invalid lineEnding: ${obj}`);\n      }\n    }\n  }\n\n  setRotation(mk, dict) {\n    this.rotation = 0;\n    let angle = mk instanceof Dict ? mk.get(\"R\") || 0 : dict.get(\"Rotate\") || 0;\n    if (Number.isInteger(angle) && angle !== 0) {\n      angle %= 360;\n      if (angle < 0) {\n        angle += 360;\n      }\n      if (angle % 90 === 0) {\n        this.rotation = angle;\n      }\n    }\n  }\n\n  /**\n   * Set the color for background and border if any.\n   * The default values are transparent.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {Dict} mk - The MK dictionary\n   */\n  setBorderAndBackgroundColors(mk) {\n    if (mk instanceof Dict) {\n      this.borderColor = getRgbColor(mk.getArray(\"BC\"), null);\n      this.backgroundColor = getRgbColor(mk.getArray(\"BG\"), null);\n    } else {\n      this.borderColor = this.backgroundColor = null;\n    }\n  }\n\n  /**\n   * Set the border style (as AnnotationBorderStyle object).\n   *\n   * @public\n   * @memberof Annotation\n   * @param {Dict} borderStyle - The border style dictionary\n   */\n  setBorderStyle(borderStyle) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(this.rectangle, \"setRectangle must have been called previously.\");\n    }\n\n    this.borderStyle = new AnnotationBorderStyle();\n    if (!(borderStyle instanceof Dict)) {\n      return;\n    }\n    if (borderStyle.has(\"BS\")) {\n      const dict = borderStyle.get(\"BS\");\n\n      if (dict instanceof Dict) {\n        const dictType = dict.get(\"Type\");\n\n        if (!dictType || isName(dictType, \"Border\")) {\n          this.borderStyle.setWidth(dict.get(\"W\"), this.rectangle);\n          this.borderStyle.setStyle(dict.get(\"S\"));\n          this.borderStyle.setDashArray(dict.getArray(\"D\"));\n        }\n      }\n    } else if (borderStyle.has(\"Border\")) {\n      const array = borderStyle.getArray(\"Border\");\n      if (Array.isArray(array)) {\n        if (array.length >= 3) {\n          this.borderStyle.setHorizontalCornerRadius(array[0]);\n          this.borderStyle.setVerticalCornerRadius(array[1]);\n          this.borderStyle.setWidth(array[2], this.rectangle);\n\n          if (array.length === 4) {\n            // Dash array available\n            this.borderStyle.setDashArray(array[3], /* forceStyle = */ true);\n          }\n        } else if (array.length === 0) {\n          this.borderStyle.setWidth(0);\n        }\n      }\n    } else {\n      // There are no border entries in the dictionary. According to the\n      // specification, we should draw a solid border of width 1 in that\n      // case, but Adobe Reader did not implement that part of the\n      // specification and instead draws no border at all, so we do the same.\n      // See also https://github.com/mozilla/pdf.js/issues/6179.\n      this.borderStyle.setWidth(0);\n    }\n  }\n\n  /**\n   * Set the (normal) appearance.\n   *\n   * @public\n   * @memberof Annotation\n   * @param {Dict} dict - The annotation's data dictionary\n   */\n  setAppearance(dict) {\n    const appearanceStates = dict.get(\"AP\");\n    if (!(appearanceStates instanceof Dict)) {\n      return;\n    }\n\n    // In case the normal appearance is a stream, then it is used directly.\n    const normalAppearanceState = appearanceStates.get(\"N\");\n    if (normalAppearanceState instanceof BaseStream) {\n      this.appearance = normalAppearanceState;\n      return;\n    }\n    if (!(normalAppearanceState instanceof Dict)) {\n      return;\n    }\n\n    // In case the normal appearance is a dictionary, the `AS` entry provides\n    // the key of the stream in this dictionary.\n    const as = dict.get(\"AS\");\n    if (!(as instanceof Name)) {\n      return;\n    }\n    const appearance = normalAppearanceState.get(as.name);\n    if (appearance instanceof BaseStream) {\n      this.appearance = appearance;\n    }\n  }\n\n  #setOptionalContent(xref, dict) {\n    if (dict.has(\"OC\")) {\n      try {\n        this._oc = parseMarkedContentProps(\n          xref,\n          dict.get(\"OC\"),\n          /* resources = */ null\n        );\n      } catch (ex) {\n        if (ex instanceof MissingDataException) {\n          throw ex;\n        }\n        warn(`#setOptionalContent: ${ex}`);\n      }\n    }\n  }\n\n  async loadResources(keys, appearance) {\n    const resources = await appearance.dict.getAsync(\"Resources\");\n    if (resources) {\n      await ObjectLoader.load(resources, keys, resources.xref);\n    }\n    return resources;\n  }\n\n  // Whether the annotation should only be rendered on its own canvas when\n  // interactive forms are enabled. This is the case for checkbox/radio button\n  // widgets, whose checked/unchecked appearances are toggled in forms mode;\n  // other annotations (e.g. push buttons) keep their own canvas in any display\n  // mode.\n  get _ownCanvasRequiresForms() {\n    return false;\n  }\n\n  async getOperatorList(evaluator, task, intent, annotationStorage) {\n    const { hasOwnCanvas, id, rect } = this.data;\n    let appearance = this.appearance;\n    const isUsingOwnCanvas = !!(\n      hasOwnCanvas &&\n      intent & RenderingIntentFlag.DISPLAY &&\n      (!this._ownCanvasRequiresForms ||\n        intent & RenderingIntentFlag.ANNOTATIONS_FORMS)\n    );\n    if (isUsingOwnCanvas && (this.width === 0 || this.height === 0)) {\n      // Empty annotation, don't draw anything.\n      this.data.hasOwnCanvas = false;\n      return this._getOperatorListNoAppearance();\n    }\n    if (!appearance) {\n      if (!isUsingOwnCanvas) {\n        return this._getOperatorListNoAppearance();\n      }\n      appearance = new StringStream(\"\", new Dict());\n    }\n\n    const appearanceDict = appearance.dict;\n    const resources = await this.loadResources(\n      RESOURCES_KEYS_OPERATOR_LIST,\n      appearance\n    );\n    const bbox = lookupRect(appearanceDict.getArray(\"BBox\"), [\n      0,\n      0,\n      this.width,\n      this.height,\n    ]);\n    const matrix = lookupMatrix(\n      appearanceDict.getArray(\"Matrix\"),\n      IDENTITY_MATRIX\n    );\n    const transform = getTransformMatrix(rect, bbox, matrix);\n\n    const opList = new OperatorList();\n\n    const optionalContent = this._oc;\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n\n    opList.addOp(OPS.beginAnnotation, [\n      id,\n      rect,\n      transform,\n      matrix,\n      isUsingOwnCanvas,\n    ]);\n\n    await evaluator.getOperatorList({\n      stream: appearance,\n      task,\n      resources,\n      operatorList: opList,\n      fallbackFontDict: this._fallbackFontDict,\n    });\n    opList.addOp(OPS.endAnnotation, []);\n\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.endMarkedContent, []);\n    }\n    this.reset();\n    return { opList, separateForm: false, separateCanvas: isUsingOwnCanvas };\n  }\n\n  async save(evaluator, task, annotationStorage, changes) {\n    return null;\n  }\n\n  get overlaysTextContent() {\n    return false;\n  }\n\n  get hasTextContent() {\n    return false;\n  }\n\n  async extractTextContent(evaluator, task, viewBox) {\n    if (!this.appearance) {\n      return;\n    }\n\n    const resources = await this.loadResources(\n      RESOURCES_KEYS_TEXT_CONTENT,\n      this.appearance\n    );\n\n    const text = [];\n    const buffer = [];\n    let firstPositionX = Infinity;\n    let firstPositionY = Infinity;\n    let firstPosition = null;\n    const sink = {\n      desiredSize: Math.Infinity,\n      ready: true,\n\n      enqueue(chunk, size) {\n        for (const item of chunk.items) {\n          if (item.str === undefined) {\n            continue;\n          }\n          firstPositionX = Math.min(firstPositionX, item.transform[4]);\n          firstPositionY = Math.min(firstPositionY, item.transform[5]);\n          buffer.push(item.str);\n          if (item.hasEOL) {\n            text.push(buffer.join(\"\").trimEnd());\n            buffer.length = 0;\n          }\n        }\n      },\n    };\n\n    await evaluator.getTextContent({\n      stream: this.appearance,\n      task,\n      resources,\n      includeMarkedContent: true,\n      keepWhiteSpace: true,\n      sink,\n      viewBox,\n    });\n    this.reset();\n\n    if (firstPositionX !== Infinity) {\n      firstPosition = [firstPositionX, firstPositionY];\n    }\n\n    if (buffer.length) {\n      text.push(buffer.join(\"\").trimEnd());\n    }\n\n    if (text.length > 1 || text[0]) {\n      const appearanceDict = this.appearance.dict;\n      const bbox = lookupRect(appearanceDict.getArray(\"BBox\"), null);\n      const matrix = lookupMatrix(appearanceDict.getArray(\"Matrix\"), null);\n\n      this.data.textPosition = this._transformPoint(\n        firstPosition,\n        bbox,\n        matrix\n      );\n      this.data.textContent = text;\n    }\n  }\n\n  _transformPoint(coords, bbox, matrix) {\n    const { rect } = this.data;\n    bbox ||= [0, 0, 1, 1];\n    matrix ||= [1, 0, 0, 1, 0, 0];\n    const transform = getTransformMatrix(rect, bbox, matrix);\n    transform[4] -= rect[0];\n    transform[5] -= rect[1];\n    const p = coords.slice();\n    Util.applyTransform(p, transform);\n    Util.applyTransform(p, matrix);\n    return p;\n  }\n\n  /**\n   * Get field data for usage in JS sandbox.\n   *\n   * Field object is defined here:\n   * https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf#page=16\n   *\n   * @public\n   * @memberof Annotation\n   * @returns {Object | null}\n   */\n  getFieldObject() {\n    if (this.data.kidIds) {\n      return {\n        id: this.data.id,\n        actions: this.data.actions,\n        name: this.data.fieldName,\n        strokeColor: this.data.borderColor,\n        fillColor: this.data.backgroundColor,\n        type: \"\",\n        kidIds: this.data.kidIds,\n        page: this.data.pageIndex,\n        rotation: this.rotation,\n      };\n    }\n    return null;\n  }\n\n  /**\n   * Reset the annotation.\n   *\n   * This involves resetting the various streams that are either cached on the\n   * annotation instance or created during its construction.\n   *\n   * @public\n   * @memberof Annotation\n   */\n  reset() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.appearance &&\n      !this._streams.includes(this.appearance)\n    ) {\n      unreachable(\"The appearance stream should always be reset.\");\n    }\n\n    for (const stream of this._streams) {\n      stream.reset();\n    }\n  }\n\n  /**\n   * Construct the (fully qualified) field name from the (partial) field\n   * names of the field and its ancestors.\n   *\n   * @private\n   * @memberof Annotation\n   * @param {Dict} dict - Complete widget annotation dictionary\n   * @returns {string}\n   */\n  _constructFieldName(dict) {\n    // Both the `Parent` and `T` fields are optional. While at least one of\n    // them should be provided, bad PDF generators may fail to do so.\n    if (!dict.has(\"T\") && !dict.has(\"Parent\")) {\n      warn(\"Unknown field name, falling back to empty field name.\");\n      return \"\";\n    }\n\n    // If no parent exists, the partial and fully qualified names are equal.\n    if (!dict.has(\"Parent\")) {\n      return stringToPDFString(dict.get(\"T\"));\n    }\n\n    // Form the fully qualified field name by appending the partial name to\n    // the parent's fully qualified name, separated by a period.\n    const fieldName = [];\n    if (dict.has(\"T\")) {\n      fieldName.unshift(stringToPDFString(dict.get(\"T\")));\n    }\n\n    let loopDict = dict;\n    const visited = new RefSet();\n    if (dict.objId) {\n      visited.put(dict.objId);\n    }\n    while (loopDict.has(\"Parent\")) {\n      loopDict = loopDict.get(\"Parent\");\n      if (\n        !(loopDict instanceof Dict) ||\n        (loopDict.objId && visited.has(loopDict.objId))\n      ) {\n        // Even though it is not allowed according to the PDF specification,\n        // bad PDF generators may provide a `Parent` entry that is not a\n        // dictionary, but `null` for example (issue 8143).\n        //\n        // If parent has been already visited, it means that we're\n        // in an infinite loop.\n        break;\n      }\n      if (loopDict.objId) {\n        visited.put(loopDict.objId);\n      }\n\n      if (loopDict.has(\"T\")) {\n        fieldName.unshift(stringToPDFString(loopDict.get(\"T\")));\n      }\n    }\n    return fieldName.join(\".\");\n  }\n\n  /**\n   * Encode the embedded content's reference in the id so it can be\n   * re-fetched from the xref on demand (see `Catalog.attachmentContent`)\n   * instead of being cached where `cleanup` would wipe it. The file-spec is\n   * usually indirect; when it's inline its embedded-file stream still isn't\n   * (streams are always indirect), so fall back to that ref.\n   */\n  _getAttachmentId(fsDict, fsRef, annotationGlobals, isSound = false) {\n    if (!(fsDict instanceof Dict)) {\n      return undefined;\n    }\n    if (!(fsRef instanceof Ref)) {\n      fsRef = FileSpec.pickPlatformItem(fsDict.get(\"EF\"), /* raw = */ true);\n    }\n    return fsRef instanceof Ref\n      ? annotationGlobals.catalog.getAttachmentIdForAnnotation(fsRef, isSound)\n      : undefined;\n  }\n\n  get width() {\n    return this.data.rect[2] - this.data.rect[0];\n  }\n\n  get height() {\n    return this.data.rect[3] - this.data.rect[1];\n  }\n}\n\n/**\n * Contains all data regarding an annotation's border style.\n */\nclass AnnotationBorderStyle {\n  width = 1;\n\n  rawWidth = 1;\n\n  style = AnnotationBorderStyleType.SOLID;\n\n  dashArray = [3];\n\n  horizontalCornerRadius = 0;\n\n  verticalCornerRadius = 0;\n\n  /**\n   * Set the width.\n   *\n   * @public\n   * @memberof AnnotationBorderStyle\n   * @param {number} width - The width.\n   * @param {Array} rect - The annotation `Rect` entry.\n   */\n  setWidth(width, rect = [0, 0, 0, 0]) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        isNumberArray(rect, 4),\n        \"A valid `rect` parameter must be provided.\"\n      );\n    }\n\n    // Some corrupt PDF generators may provide the width as a `Name`,\n    // rather than as a number (fixes issue 10385).\n    if (width instanceof Name) {\n      this.width = 0; // This is consistent with the behaviour in Adobe Reader.\n      return;\n    }\n    if (typeof width === \"number\") {\n      if (width > 0) {\n        this.rawWidth = width;\n        const maxWidth = (rect[2] - rect[0]) / 2;\n        const maxHeight = (rect[3] - rect[1]) / 2;\n\n        // Ignore large `width`s, since they lead to the Annotation overflowing\n        // the size set by the `Rect` entry thus causing the `annotationLayer`\n        // to render it over the surrounding document (fixes bug1552113.pdf).\n        if (\n          maxWidth > 0 &&\n          maxHeight > 0 &&\n          (width > maxWidth || width > maxHeight)\n        ) {\n          warn(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);\n          width = 1;\n        }\n      }\n      this.width = width;\n    }\n  }\n\n  /**\n   * Set the style.\n   *\n   * @public\n   * @memberof AnnotationBorderStyle\n   * @param {Name} style - The annotation style.\n   * @see {@link shared/util.js}\n   */\n  setStyle(style) {\n    if (!(style instanceof Name)) {\n      return;\n    }\n    switch (style.name) {\n      case \"S\":\n        this.style = AnnotationBorderStyleType.SOLID;\n        break;\n\n      case \"D\":\n        this.style = AnnotationBorderStyleType.DASHED;\n        break;\n\n      case \"B\":\n        this.style = AnnotationBorderStyleType.BEVELED;\n        break;\n\n      case \"I\":\n        this.style = AnnotationBorderStyleType.INSET;\n        break;\n\n      case \"U\":\n        this.style = AnnotationBorderStyleType.UNDERLINE;\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Set the dash array.\n   *\n   * @public\n   * @memberof AnnotationBorderStyle\n   * @param {Array} dashArray - The dash array with at least one element\n   * @param {boolean} [forceStyle]\n   */\n  setDashArray(dashArray, forceStyle = false) {\n    // We validate the dash array, but we do not use it because CSS does not\n    // allow us to change spacing of dashes. For more information, visit\n    // http://www.w3.org/TR/css3-background/#the-border-style.\n    if (Array.isArray(dashArray)) {\n      // The PDF specification states that elements in the dash array, if\n      // present, must be non-negative numbers and must not all equal zero.\n      let isValid = true;\n      let allZeros = true;\n      for (const element of dashArray) {\n        const validNumber = +element >= 0;\n        if (!validNumber) {\n          isValid = false;\n          break;\n        } else if (element > 0) {\n          allZeros = false;\n        }\n      }\n      if (dashArray.length === 0 || (isValid && !allZeros)) {\n        this.dashArray = dashArray;\n\n        if (forceStyle) {\n          // Even though we cannot use the dash array in the display layer,\n          // at least ensure that we use the correct border-style.\n          this.setStyle(Name.get(\"D\"));\n        }\n      } else {\n        this.width = 0; // Adobe behavior when the array is invalid.\n      }\n    } else if (dashArray) {\n      this.width = 0; // Adobe behavior when the array is invalid.\n    }\n  }\n\n  /**\n   * Set the horizontal corner radius (from a Border dictionary).\n   *\n   * @public\n   * @memberof AnnotationBorderStyle\n   * @param {number} radius - The horizontal corner radius.\n   */\n  setHorizontalCornerRadius(radius) {\n    if (Number.isInteger(radius)) {\n      this.horizontalCornerRadius = radius;\n    }\n  }\n\n  /**\n   * Set the vertical corner radius (from a Border dictionary).\n   *\n   * @public\n   * @memberof AnnotationBorderStyle\n   * @param {number} radius - The vertical corner radius.\n   */\n  setVerticalCornerRadius(radius) {\n    if (Number.isInteger(radius)) {\n      this.verticalCornerRadius = radius;\n    }\n  }\n}\n\nclass MarkupAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n\n    const { dict } = params;\n\n    if (dict.has(\"IRT\")) {\n      const rawIRT = dict.getRaw(\"IRT\");\n      this.data.inReplyTo = rawIRT instanceof Ref ? rawIRT.toString() : null;\n\n      const rt = dict.get(\"RT\");\n      this.data.replyType =\n        rt instanceof Name ? rt.name : AnnotationReplyType.REPLY;\n    }\n    let popupRef = null;\n\n    if (this.data.replyType === AnnotationReplyType.GROUP) {\n      // Subordinate annotations in a group should inherit\n      // the group attributes from the primary annotation.\n      const parent = dict.get(\"IRT\");\n\n      this.setTitle(parent.get(\"T\"));\n      this.data.titleObj = this._title;\n\n      this.setContents(parent.get(\"Contents\"));\n      this.data.contentsObj = this._contents;\n\n      if (!parent.has(\"CreationDate\")) {\n        this.data.creationDate = null;\n      } else {\n        this.setCreationDate(parent.get(\"CreationDate\"));\n        this.data.creationDate = this.creationDate;\n      }\n\n      if (!parent.has(\"M\")) {\n        this.data.modificationDate = null;\n      } else {\n        this.setModificationDate(parent.get(\"M\"));\n        this.data.modificationDate = this.modificationDate;\n      }\n\n      popupRef = parent.getRaw(\"Popup\");\n\n      if (!parent.has(\"C\")) {\n        // Fall back to the default background color.\n        this.data.color = null;\n      } else {\n        this.setColor(parent.getArray(\"C\"));\n        this.data.color = this.color;\n      }\n    } else {\n      this.data.titleObj = this._title;\n\n      this.setCreationDate(dict.get(\"CreationDate\"));\n      this.data.creationDate = this.creationDate;\n\n      popupRef = dict.getRaw(\"Popup\");\n\n      if (!dict.has(\"C\")) {\n        // Fall back to the default background color.\n        this.data.color = null;\n      }\n    }\n\n    this.data.popupRef = popupRef instanceof Ref ? popupRef.toString() : null;\n\n    if (dict.has(\"RC\")) {\n      this.data.richText = XFAFactory.getRichTextAsHtml(dict.get(\"RC\"));\n    }\n  }\n\n  /**\n   * Set the creation date.\n   *\n   * @public\n   * @memberof MarkupAnnotation\n   * @param {string} creationDate - PDF date string that indicates when the\n   *                                annotation was originally created\n   */\n  setCreationDate(creationDate) {\n    this.creationDate = typeof creationDate === \"string\" ? creationDate : null;\n  }\n\n  _setDefaultAppearance({\n    xref,\n    extra,\n    strokeColor,\n    fillColor,\n    blendMode,\n    strokeAlpha,\n    fillAlpha,\n    pointsCallback,\n  }) {\n    const bbox = (this.data.rect = BBOX_INIT.slice());\n\n    const buffer = [\"q\"];\n    if (extra) {\n      buffer.push(extra);\n    }\n    if (strokeColor) {\n      buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`);\n    }\n    if (fillColor) {\n      buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`);\n    }\n\n    // If there are no quadpoints, the rectangle should be used instead.\n    // Convert the rectangle definition to a points array similar to how the\n    // quadpoints are defined.\n    const pointsArray =\n      this.data.quadPoints ||\n      Float32Array.from([\n        this.rectangle[0],\n        this.rectangle[3],\n        this.rectangle[2],\n        this.rectangle[3],\n        this.rectangle[0],\n        this.rectangle[1],\n        this.rectangle[2],\n        this.rectangle[1],\n      ]);\n\n    for (let i = 0, ii = pointsArray.length; i < ii; i += 8) {\n      const points = pointsCallback(buffer, pointsArray.subarray(i, i + 8));\n      Util.rectBoundingBox(...points, bbox);\n    }\n    buffer.push(\"Q\");\n\n    const formDict = new Dict(xref);\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n\n    const appearanceStream = new StringStream(\n      buffer.join(\" \"),\n      appearanceStreamDict\n    );\n    formDict.set(\"Fm0\", appearanceStream);\n\n    const gsDict = new Dict(xref);\n    if (blendMode) {\n      gsDict.setIfName(\"BM\", blendMode);\n    }\n    gsDict.setIfNumber(\"CA\", strokeAlpha);\n    gsDict.setIfNumber(\"ca\", fillAlpha);\n\n    const stateDict = new Dict(xref);\n    stateDict.set(\"GS0\", gsDict);\n\n    const resources = new Dict(xref);\n    resources.set(\"ExtGState\", stateDict);\n    resources.set(\"XObject\", formDict);\n\n    const appearanceDict = new Dict(xref);\n    appearanceDict.set(\"Resources\", resources);\n    appearanceDict.set(\"BBox\", bbox);\n\n    this.appearance = new StringStream(\"/GS0 gs /Fm0 Do\", appearanceDict);\n\n    // This method is only called if there is no appearance for the annotation,\n    // so `this.appearance` is not pushed yet in the `Annotation` constructor.\n    this._streams.push(this.appearance, appearanceStream);\n  }\n\n  static async createNewAnnotation(xref, annotation, changes, params) {\n    const annotationRef = (annotation.ref ||= xref.getNewTemporaryRef());\n\n    const ap = await this.createNewAppearanceStream(annotation, xref, params);\n    let annotationDict;\n\n    if (ap) {\n      const apRef = xref.getNewTemporaryRef();\n      annotationDict = this.createNewDict(annotation, xref, {\n        apRef,\n      });\n      changes.put(apRef, {\n        data: ap,\n      });\n    } else {\n      annotationDict = this.createNewDict(annotation, xref, {});\n    }\n    if (Number.isInteger(annotation.parentTreeId)) {\n      annotationDict.set(\"StructParent\", annotation.parentTreeId);\n    }\n\n    changes.put(annotationRef, {\n      data: annotationDict,\n    });\n\n    const retRef = { ref: annotationRef };\n    const { popup } = annotation;\n    if (popup) {\n      if (popup.deleted) {\n        annotationDict.delete(\"Popup\");\n        annotationDict.delete(\"Contents\");\n        annotationDict.delete(\"RC\");\n        return retRef;\n      }\n      const popupRef = (popup.ref ||= xref.getNewTemporaryRef());\n      popup.parent = annotationRef;\n      const popupDict = PopupAnnotation.createNewDict(popup, xref);\n      changes.put(popupRef, { data: popupDict });\n      annotationDict.setIfDefined(\n        \"Contents\",\n        stringToAsciiOrUTF16BE(popup.contents)\n      );\n      annotationDict.set(\"Popup\", popupRef);\n\n      return [retRef, { ref: popupRef }];\n    }\n\n    return retRef;\n  }\n\n  static async createNewPrintAnnotation(\n    annotationGlobals,\n    xref,\n    annotation,\n    params\n  ) {\n    const ap = await this.createNewAppearanceStream(annotation, xref, params);\n    const annotationDict = this.createNewDict(\n      annotation,\n      xref,\n      ap ? { ap } : {}\n    );\n\n    const newAnnotation = new this.prototype.constructor({\n      dict: annotationDict,\n      xref,\n      annotationGlobals,\n      evaluatorOptions: params.evaluatorOptions,\n    });\n\n    if (annotation.ref) {\n      newAnnotation.ref = newAnnotation.refToReplace = annotation.ref;\n    }\n\n    return newAnnotation;\n  }\n}\n\nclass WidgetAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref, annotationGlobals } = params;\n    const data = this.data;\n    this._needAppearances = params.needAppearances;\n\n    if (data.fieldName === undefined) {\n      data.fieldName = this._constructFieldName(dict);\n    }\n\n    if (data.actions === undefined) {\n      data.actions = collectActions(xref, dict, AnnotationActionEventType);\n    }\n\n    let fieldValue = getInheritableProperty({\n      dict,\n      key: \"V\",\n      getArray: true,\n    });\n    data.fieldValue = this._decodeFormValue(fieldValue);\n\n    const defaultFieldValue = getInheritableProperty({\n      dict,\n      key: \"DV\",\n      getArray: true,\n    });\n    data.defaultFieldValue = this._decodeFormValue(defaultFieldValue);\n\n    if (fieldValue === undefined && annotationGlobals.xfaDatasets) {\n      // Try to figure out if we have something in the xfa dataset.\n      const path = this._title.str;\n      if (path) {\n        this._hasValueFromXFA = true;\n        data.fieldValue = fieldValue =\n          annotationGlobals.xfaDatasets.getValue(path);\n      }\n    }\n\n    // When no \"V\" entry exists, let the fieldValue fallback to the \"DV\" entry\n    // (fixes issue13823.pdf).\n    if (fieldValue === undefined && data.defaultFieldValue !== null) {\n      data.fieldValue = data.defaultFieldValue;\n    }\n\n    data.alternativeText = stringToPDFString(dict.get(\"TU\") || \"\");\n\n    this.setDefaultAppearance(params);\n\n    data.hasAppearance ||=\n      this._needAppearances &&\n      data.fieldValue !== undefined &&\n      data.fieldValue !== null;\n\n    const fieldType = getInheritableProperty({ dict, key: \"FT\" });\n    data.fieldType = fieldType instanceof Name ? fieldType.name : null;\n\n    const localResources = getInheritableProperty({ dict, key: \"DR\" });\n    const acroFormResources = annotationGlobals.acroForm.get(\"DR\");\n    const appearanceResources = this.appearance?.dict.get(\"Resources\");\n\n    this._fieldResources = {\n      localResources,\n      acroFormResources,\n      appearanceResources,\n      mergedResources: Dict.merge({\n        xref,\n        dictArray: [localResources, appearanceResources, acroFormResources],\n        mergeSubDicts: true,\n      }),\n    };\n\n    data.fieldFlags = getInheritableProperty({ dict, key: \"Ff\" });\n    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {\n      data.fieldFlags = 0;\n    }\n\n    data.password = this.hasFieldFlag(AnnotationFieldFlag.PASSWORD);\n    data.readOnly = this.hasFieldFlag(AnnotationFieldFlag.READONLY);\n    data.required = this.hasFieldFlag(AnnotationFieldFlag.REQUIRED);\n    data.hidden =\n      this._hasFlag(data.annotationFlags, AnnotationFlag.HIDDEN) ||\n      this._hasFlag(data.annotationFlags, AnnotationFlag.NOVIEW);\n  }\n\n  /**\n   * Decode the given form value.\n   *\n   * @private\n   * @memberof WidgetAnnotation\n   * @param {Array<string>|Name|string} formValue - The (possibly encoded)\n   *   form value.\n   * @returns {Array<string>|string|null}\n   */\n  _decodeFormValue(formValue) {\n    if (Array.isArray(formValue)) {\n      const arr = formValue\n        .map(item => this._decodeFormValue(item))\n        .filter(item => item !== null);\n      return arr.length > 0 ? arr : null;\n    } else if (formValue instanceof Name) {\n      return formValue.name;\n    } else if (typeof formValue === \"string\") {\n      return stringToPDFString(formValue);\n    }\n    return null;\n  }\n\n  /**\n   * Check if a provided field flag is set.\n   *\n   * @public\n   * @memberof WidgetAnnotation\n   * @param {number} flag - Hexadecimal representation for an annotation\n   *                        field characteristic\n   * @returns {boolean}\n   * @see {@link shared/util.js}\n   */\n  hasFieldFlag(flag) {\n    return !!(this.data.fieldFlags & flag);\n  }\n\n  /** @inheritdoc */\n  _isViewable(flags) {\n    // We don't take into account the `NOVIEW` or `HIDDEN` flags here,\n    // since the visibility can be changed by js code, hence in case\n    // it's made viewable, we should render it (with visibility set to\n    // hidden).\n    // We don't take into account the `INVISIBLE` flag here, since we've a known\n    // annotation type.\n    return true;\n  }\n\n  /** @inheritdoc */\n  mustBeViewed(annotationStorage, renderForms) {\n    if (renderForms) {\n      return this.viewable;\n    }\n    return (\n      super.mustBeViewed(annotationStorage, renderForms) &&\n      !this._hasFlag(this.flags, AnnotationFlag.NOVIEW)\n    );\n  }\n\n  getRotationMatrix(annotationStorage) {\n    let rotation = annotationStorage?.get(this.data.id)?.rotation;\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n\n    return rotation === 0\n      ? IDENTITY_MATRIX\n      : getRotationMatrix(rotation, this.width, this.height);\n  }\n\n  getBorderAndBackgroundAppearances(annotationStorage) {\n    let rotation = annotationStorage?.get(this.data.id)?.rotation;\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n\n    if (!this.backgroundColor && !this.borderColor) {\n      return \"\";\n    }\n    const rect =\n      rotation === 0 || rotation === 180\n        ? `0 0 ${this.width} ${this.height} re`\n        : `0 0 ${this.height} ${this.width} re`;\n\n    let str = \"\";\n    if (this.backgroundColor) {\n      str = `${getPdfColor(\n        this.backgroundColor,\n        /* isFill */ true\n      )} ${rect} f `;\n    }\n\n    if (this.borderColor) {\n      const borderWidth = this.borderStyle.width || 1;\n      str += `${borderWidth} w ${getPdfColor(\n        this.borderColor,\n        /* isFill */ false\n      )} ${rect} S `;\n    }\n\n    return str;\n  }\n\n  async getOperatorList(evaluator, task, intent, annotationStorage) {\n    // Do not render form elements on the canvas when interactive forms are\n    // enabled. The display layer is responsible for rendering them instead.\n    if (\n      intent & RenderingIntentFlag.ANNOTATIONS_FORMS &&\n      !(this instanceof SignatureWidgetAnnotation) &&\n      !this.data.noHTML &&\n      !this.data.hasOwnCanvas\n    ) {\n      const list = this._getOperatorListNoAppearance();\n      list.separateForm = true;\n      return list;\n    }\n\n    if (!this._hasText) {\n      return super.getOperatorList(evaluator, task, intent, annotationStorage);\n    }\n\n    const content = await this._getAppearance(\n      evaluator,\n      task,\n      intent,\n      annotationStorage\n    );\n    if (this.appearance && content === null) {\n      return super.getOperatorList(evaluator, task, intent, annotationStorage);\n    }\n\n    const opList = new OperatorList();\n\n    // Even if there is an appearance stream, ignore it. This is the\n    // behaviour used by Adobe Reader.\n    if (!this._defaultAppearance || content === null) {\n      return { opList, separateForm: false, separateCanvas: false };\n    }\n\n    const isUsingOwnCanvas = !!(\n      this.data.hasOwnCanvas && intent & RenderingIntentFlag.DISPLAY\n    );\n\n    const matrix = [1, 0, 0, 1, 0, 0];\n    const bbox = [0, 0, this.width, this.height];\n    const transform = getTransformMatrix(this.data.rect, bbox, matrix);\n\n    const optionalContent = this._oc;\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\n    }\n\n    opList.addOp(OPS.beginAnnotation, [\n      this.data.id,\n      this.data.rect,\n      transform,\n      this.getRotationMatrix(annotationStorage),\n      isUsingOwnCanvas,\n    ]);\n\n    const stream = new StringStream(content);\n    await evaluator.getOperatorList({\n      stream,\n      task,\n      resources: this._fieldResources.mergedResources,\n      operatorList: opList,\n    });\n    opList.addOp(OPS.endAnnotation, []);\n\n    if (optionalContent !== undefined) {\n      opList.addOp(OPS.endMarkedContent, []);\n    }\n    return { opList, separateForm: false, separateCanvas: isUsingOwnCanvas };\n  }\n\n  _getMKDict(rotation) {\n    const mk = new Dict(null);\n    if (rotation) {\n      mk.set(\"R\", rotation);\n    }\n    mk.setIfArray(\"BC\", getPdfColorArray(this.borderColor));\n    mk.setIfArray(\"BG\", getPdfColorArray(this.backgroundColor));\n    return mk.size > 0 ? mk : null;\n  }\n\n  amendSavedDict(annotationStorage, dict) {}\n\n  setValue(dict, value, xref, changes) {\n    const { dict: parentDict, ref: parentRef } = getParentToUpdate(\n      dict,\n      this.ref,\n      xref\n    );\n    if (!parentDict) {\n      dict.set(\"V\", value);\n    } else if (!changes.has(parentRef)) {\n      const newParentDict = parentDict.clone();\n      newParentDict.set(\"V\", value);\n      changes.put(parentRef, { data: newParentDict });\n      return newParentDict;\n    }\n\n    return null;\n  }\n\n  async save(evaluator, task, annotationStorage, changes) {\n    const storageEntry = annotationStorage?.get(this.data.id);\n    const flags = this._buildFlags(storageEntry?.noView, storageEntry?.noPrint);\n    let value = storageEntry?.value,\n      rotation = storageEntry?.rotation;\n    if (value === this.data.fieldValue || value === undefined) {\n      if (\n        !this._hasValueFromXFA &&\n        rotation === undefined &&\n        flags === undefined\n      ) {\n        return;\n      }\n      value ||= this.data.fieldValue;\n    }\n\n    // Value can be an array (with choice list and multiple selections)\n    if (\n      rotation === undefined &&\n      !this._hasValueFromXFA &&\n      Array.isArray(value) &&\n      Array.isArray(this.data.fieldValue) &&\n      isArrayEqual(value, this.data.fieldValue) &&\n      flags === undefined\n    ) {\n      return;\n    }\n\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n\n    let appearance = null;\n    if (!this._needAppearances) {\n      appearance = await this._getAppearance(\n        evaluator,\n        task,\n        RenderingIntentFlag.SAVE,\n        annotationStorage\n      );\n      if (appearance === null && flags === undefined) {\n        // Appearance didn't change.\n        return;\n      }\n    } else {\n      // No need to create an appearance: the pdf has the flag /NeedAppearances\n      // which means that it's up to the reader to produce an appearance.\n    }\n\n    let needAppearances = false;\n    if (appearance?.needAppearances) {\n      needAppearances = true;\n      appearance = null;\n    }\n\n    const { xref } = evaluator;\n\n    const originalDict = xref.fetchIfRef(this.ref);\n    if (!(originalDict instanceof Dict)) {\n      return;\n    }\n\n    const dict = new Dict(xref);\n    for (const [key, rawVal] of originalDict.getRawEntries()) {\n      if (key !== \"AP\") {\n        dict.set(key, rawVal);\n      }\n    }\n    if (flags !== undefined) {\n      dict.set(\"F\", flags);\n      if (appearance === null && !needAppearances) {\n        const ap = originalDict.getRaw(\"AP\");\n        if (ap) {\n          dict.set(\"AP\", ap);\n        }\n      }\n    }\n\n    const xfa = {\n      path: this.data.fieldName,\n      value,\n    };\n\n    const newParentDict = this.setValue(\n      dict,\n      Array.isArray(value)\n        ? value.map(stringToAsciiOrUTF16BE)\n        : stringToAsciiOrUTF16BE(value),\n      xref,\n      changes\n    );\n    this.amendSavedDict(annotationStorage, newParentDict || dict);\n\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n\n    changes.put(this.ref, {\n      data: dict,\n      xfa,\n      needAppearances,\n    });\n    if (appearance !== null) {\n      const newRef = xref.getNewTemporaryRef();\n      const AP = new Dict(xref);\n      dict.set(\"AP\", AP);\n      AP.set(\"N\", newRef);\n\n      const resources = this._getSaveFieldResources(xref),\n        appearanceDict = new Dict(xref);\n      appearanceDict.setIfName(\"Subtype\", \"Form\");\n      appearanceDict.set(\"Resources\", resources);\n      const bbox =\n        rotation % 180 === 0\n          ? [0, 0, this.width, this.height]\n          : [0, 0, this.height, this.width];\n      appearanceDict.set(\"BBox\", bbox);\n\n      const appearanceStream = new StringStream(appearance, appearanceDict);\n\n      const rotationMatrix = this.getRotationMatrix(annotationStorage);\n      if (rotationMatrix !== IDENTITY_MATRIX) {\n        // The matrix isn't the identity one.\n        appearanceDict.set(\"Matrix\", rotationMatrix);\n      }\n\n      changes.put(newRef, {\n        data: appearanceStream,\n        xfa: null,\n        needAppearances: false,\n      });\n    }\n\n    dict.set(\"M\", `D:${getModificationDate()}`);\n  }\n\n  async _getAppearance(evaluator, task, intent, annotationStorage) {\n    if (this.data.password) {\n      return null;\n    }\n    const storageEntry = annotationStorage?.get(this.data.id);\n    let value, rotation;\n    if (storageEntry) {\n      value = storageEntry.formattedValue || storageEntry.value;\n      rotation = storageEntry.rotation;\n    }\n\n    if (\n      rotation === undefined &&\n      value === undefined &&\n      !this._needAppearances\n    ) {\n      if (!this._hasValueFromXFA || this.appearance) {\n        // The annotation hasn't been rendered so use the appearance.\n        return null;\n      }\n    }\n\n    // Empty or it has a trailing whitespace.\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n\n    if (value === undefined) {\n      // The annotation has its value in XFA datasets but not in the V field.\n      value = this.data.fieldValue;\n      if (!value) {\n        return `/Tx BMC q ${colors}Q EMC`;\n      }\n    }\n\n    if (Array.isArray(value) && value.length === 1) {\n      value = value[0];\n    }\n\n    assert(typeof value === \"string\", \"Expected `value` to be a string.\");\n    value = value.trimEnd();\n\n    if (this.data.combo) {\n      // The value can be one of the exportValue or any other values.\n      const option = this.data.options.find(\n        ({ exportValue }) => value === exportValue\n      );\n      value = option?.displayValue || value;\n    }\n\n    if (value === \"\") {\n      // the field is empty: nothing to render\n      return `/Tx BMC q ${colors}Q EMC`;\n    }\n\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n\n    let lineCount = -1;\n    let lines;\n\n    // We could have a text containing for example some sequences of chars and\n    // their diacritics (e.g. \"é\".normalize(\"NFKD\") shows 1 char when it's 2).\n    // Positioning diacritics is really something we don't want to do here.\n    // So if a font has a glyph for a acute accent and one for \"e\" then we won't\n    // get any encoding issues but we'll render \"e\" and then \"´\".\n    // It's why we normalize the string. We use NFC to preserve the initial\n    // string, (e.g. \"²\".normalize(\"NFC\") === \"²\"\n    // but \"²\".normalize(\"NFKC\") === \"2\").\n    //\n    // TODO: it isn't a perfect solution, some chars like \"ẹ́\" will be\n    // decomposed into two chars (\"ẹ\" and \"´\"), so we should detect such\n    // situations and then use either FakeUnicodeFont or set the\n    // /NeedAppearances flag.\n    if (this.data.multiLine) {\n      lines = value.split(/\\r\\n?|\\n/).map(line => line.normalize(\"NFC\"));\n      lineCount = lines.length;\n    } else {\n      lines = [value.replace(/\\r\\n?|\\n/, \"\").normalize(\"NFC\")];\n    }\n\n    const defaultPadding = 1;\n    const defaultHPadding = 2;\n    let { width: totalWidth, height: totalHeight } = this;\n\n    if (rotation === 90 || rotation === 270) {\n      [totalWidth, totalHeight] = [totalHeight, totalWidth];\n    }\n\n    if (!this._defaultAppearance) {\n      // The DA is required and must be a string.\n      // If there is no font named Helvetica in the resource dictionary,\n      // the evaluator will fall back to a default font.\n      // Doing so prevents exceptions and allows saving/printing\n      // the file as expected.\n      this.data.defaultAppearanceData = parseDefaultAppearance(\n        (this._defaultAppearance = \"/Helvetica 0 Tf 0 g\")\n      );\n    }\n\n    let font = await WidgetAnnotation._getFontData(\n      evaluator,\n      task,\n      this.data.defaultAppearanceData,\n      this._fieldResources.mergedResources\n    );\n\n    let defaultAppearance, fontSize, lineHeight;\n    const encodedLines = [];\n    let encodingError = false;\n    for (const line of lines) {\n      const encodedString = font.encodeString(line);\n      if (encodedString.length > 1) {\n        encodingError = true;\n      }\n      encodedLines.push(encodedString.join(\"\"));\n    }\n\n    if (encodingError && intent & RenderingIntentFlag.SAVE) {\n      // We don't have a way to render the field, so we just rely on the\n      // /NeedAppearances trick to let the different software correctly render\n      // this pdf.\n      return { needAppearances: true };\n    }\n\n    // We check that the font is able to encode the string.\n    if (encodingError && this._isOffscreenCanvasSupported) {\n      // If it can't then we fallback on fake unicode font (mapped to sans-serif\n      // for the rendering).\n      // It means that a printed form can be rendered differently (it depends on\n      // the sans-serif font) but at least we've something to render.\n      // In an ideal world the associated font should correctly handle the\n      // possible chars but a user can add a smiley or whatever.\n      // We could try to embed a font but it means that we must have access\n      // to the raw font file.\n      const fontFamily = this.data.comb ? \"monospace\" : \"sans-serif\";\n      const fakeUnicodeFont = new FakeUnicodeFont(evaluator.xref, fontFamily);\n      const resources = fakeUnicodeFont.createFontResources(lines.join(\"\"));\n      const newFont = resources.getRaw(\"Font\");\n\n      if (this._fieldResources.mergedResources.has(\"Font\")) {\n        const oldFont = this._fieldResources.mergedResources.get(\"Font\");\n        for (const [key, rawVal] of newFont.getRawEntries()) {\n          oldFont.set(key, rawVal);\n        }\n      } else {\n        this._fieldResources.mergedResources.set(\"Font\", newFont);\n      }\n\n      const fontName = fakeUnicodeFont.fontName.name;\n      font = await WidgetAnnotation._getFontData(\n        evaluator,\n        task,\n        { fontName, fontSize: 0 },\n        resources\n      );\n\n      for (let i = 0, ii = encodedLines.length; i < ii; i++) {\n        encodedLines[i] = stringToUTF16String(lines[i]);\n      }\n\n      const savedDefaultAppearance = Object.assign(\n        Object.create(null),\n        this.data.defaultAppearanceData\n      );\n      this.data.defaultAppearanceData.fontSize = 0;\n      this.data.defaultAppearanceData.fontName = fontName;\n\n      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(\n        totalHeight - 2 * defaultPadding,\n        totalWidth - 2 * defaultHPadding,\n        value,\n        font,\n        lineCount\n      );\n\n      this.data.defaultAppearanceData = savedDefaultAppearance;\n    } else {\n      if (!this._isOffscreenCanvasSupported) {\n        warn(\n          \"_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.\"\n        );\n      }\n\n      [defaultAppearance, fontSize, lineHeight] = this._computeFontSize(\n        totalHeight - 2 * defaultPadding,\n        totalWidth - 2 * defaultHPadding,\n        value,\n        font,\n        lineCount\n      );\n    }\n\n    let descent = font.descent;\n    if (isNaN(descent)) {\n      descent = BASELINE_FACTOR * lineHeight;\n    } else {\n      descent = Math.max(\n        BASELINE_FACTOR * lineHeight,\n        Math.abs(descent) * fontSize\n      );\n    }\n\n    // Take into account the space we have to compute the default vertical\n    // padding.\n    const defaultVPadding = Math.min(\n      Math.floor((totalHeight - fontSize) / 2),\n      defaultPadding\n    );\n    const alignment = this.data.textAlignment;\n\n    if (this.data.multiLine) {\n      return this._getMultilineAppearance(\n        defaultAppearance,\n        encodedLines,\n        font,\n        fontSize,\n        totalWidth,\n        totalHeight,\n        alignment,\n        defaultHPadding,\n        defaultVPadding,\n        descent,\n        lineHeight,\n        annotationStorage\n      );\n    }\n\n    if (this.data.comb) {\n      return this._getCombAppearance(\n        defaultAppearance,\n        font,\n        encodedLines[0],\n        fontSize,\n        totalWidth,\n        totalHeight,\n        alignment,\n        bidi(lines[0]).dir === \"rtl\",\n        annotationStorage\n      );\n    }\n\n    const bottomPadding = defaultVPadding + descent;\n    if (alignment === 0 || alignment > 2) {\n      // Left alignment: nothing to do\n      return (\n        `/Tx BMC q ${colors}BT ` +\n        defaultAppearance +\n        ` 1 0 0 1 ${numberToString(defaultHPadding)} ${numberToString(\n          bottomPadding\n        )} Tm (${escapeString(encodedLines[0])}) Tj` +\n        \" ET Q EMC\"\n      );\n    }\n\n    const prevInfo = { shift: 0 };\n    const renderedText = this._renderText(\n      encodedLines[0],\n      font,\n      fontSize,\n      totalWidth,\n      alignment,\n      prevInfo,\n      defaultHPadding,\n      bottomPadding\n    );\n    return (\n      `/Tx BMC q ${colors}BT ` +\n      defaultAppearance +\n      ` 1 0 0 1 0 0 Tm ${renderedText}` +\n      \" ET Q EMC\"\n    );\n  }\n\n  static async _getFontData(evaluator, task, appearanceData, resources) {\n    const operatorList = new OperatorList();\n    const initialState = {\n      font: null,\n      clone() {\n        return this;\n      },\n    };\n\n    const { fontName, fontSize } = appearanceData;\n    await evaluator.handleSetFont(\n      resources,\n      [fontName && Name.get(fontName), fontSize],\n      /* fontRef = */ null,\n      operatorList,\n      task,\n      initialState,\n      /* fallbackFontDict = */ null\n    );\n\n    return initialState.font;\n  }\n\n  _getTextWidth(text, font) {\n    return Math.sumPrecise(font.charsToGlyphs(text).map(g => g.width)) / 1000;\n  }\n\n  _computeFontSize(height, width, text, font, lineCount) {\n    let { fontSize } = this.data.defaultAppearanceData;\n    let lineHeight = (fontSize || 12) * LINE_FACTOR,\n      numberOfLines = Math.round(height / lineHeight);\n\n    if (!fontSize) {\n      // A zero value for size means that the font shall be auto-sized:\n      // its size shall be computed as a function of the height of the\n      // annotation rectangle (see 12.7.3.3).\n\n      const roundWithTwoDigits = x => Math.floor(x * 100) / 100;\n\n      if (lineCount === -1) {\n        // Get the text width for a font size of 1.\n        const textWidth = this._getTextWidth(text, font);\n\n        // width / textWidth is the max font size to fit the width.\n        // height / LINE_FACTOR is the max font size to fit the height.\n        fontSize = roundWithTwoDigits(\n          Math.min(height / LINE_FACTOR, width / textWidth)\n        );\n        numberOfLines = 1;\n      } else {\n        const lines = text.split(/\\r\\n?|\\n/);\n        const cachedLines = [];\n        for (const line of lines) {\n          const encoded = font.encodeString(line).join(\"\");\n          const glyphs = font.charsToGlyphs(encoded);\n          const positions = font.getCharPositions(encoded);\n          cachedLines.push({\n            line: encoded,\n            glyphs,\n            positions,\n          });\n        }\n\n        const isTooBig = fsize => {\n          // Return true when the text doesn't fit the given height.\n          let totalHeight = 0;\n          for (const cache of cachedLines) {\n            const chunks = this._splitLine(null, font, fsize, width, cache);\n            totalHeight += chunks.length * fsize;\n            if (totalHeight > height) {\n              return true;\n            }\n          }\n          return false;\n        };\n\n        // Hard to guess how many lines there are.\n        // The field may have been sized to have 10 lines\n        // and the user entered only 1 so if we get font size from\n        // height and number of lines then we'll get something too big.\n        // So we compute a fake number of lines based on height and\n        // a font size equal to 12 (this is the default font size in\n        // Acrobat).\n        // Then we'll adjust font size to what we have really.\n        numberOfLines = Math.max(numberOfLines, lineCount);\n\n        while (true) {\n          lineHeight = height / numberOfLines;\n          fontSize = roundWithTwoDigits(lineHeight / LINE_FACTOR);\n\n          if (isTooBig(fontSize)) {\n            numberOfLines++;\n            continue;\n          }\n\n          break;\n        }\n      }\n\n      const { fontName, fontColor } = this.data.defaultAppearanceData;\n      this._defaultAppearance = createDefaultAppearance({\n        fontSize,\n        fontName,\n        fontColor,\n      });\n    }\n\n    return [this._defaultAppearance, fontSize, height / numberOfLines];\n  }\n\n  _renderText(\n    text,\n    font,\n    fontSize,\n    totalWidth,\n    alignment,\n    prevInfo,\n    hPadding,\n    vPadding\n  ) {\n    // TODO: we need to take into account (if possible) how the text\n    // is rendered. For example in arabic, the cumulated width of some\n    // glyphs isn't equal to the width of the rendered glyphs because\n    // of ligatures.\n    let shift;\n    if (alignment === 1) {\n      // Center\n      const width = this._getTextWidth(text, font) * fontSize;\n      shift = (totalWidth - width) / 2;\n    } else if (alignment === 2) {\n      // Right\n      const width = this._getTextWidth(text, font) * fontSize;\n      shift = totalWidth - width - hPadding;\n    } else {\n      shift = hPadding;\n    }\n    const shiftStr = numberToString(shift - prevInfo.shift);\n    prevInfo.shift = shift;\n    vPadding = numberToString(vPadding);\n\n    return `${shiftStr} ${vPadding} Td (${escapeString(text)}) Tj`;\n  }\n\n  /**\n   * @private\n   */\n  _getSaveFieldResources(xref) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        this.data.defaultAppearanceData,\n        \"Expected `_defaultAppearanceData` to have been set.\"\n      );\n    }\n    const { localResources, appearanceResources, acroFormResources } =\n      this._fieldResources;\n\n    const fontName = this.data.defaultAppearanceData?.fontName;\n    if (!fontName) {\n      return localResources || Dict.empty;\n    }\n\n    for (const resources of [localResources, appearanceResources]) {\n      if (resources instanceof Dict) {\n        const localFont = resources.get(\"Font\");\n        if (localFont instanceof Dict && localFont.has(fontName)) {\n          return resources;\n        }\n      }\n    }\n    if (acroFormResources instanceof Dict) {\n      const acroFormFont = acroFormResources.get(\"Font\");\n      if (acroFormFont instanceof Dict && acroFormFont.has(fontName)) {\n        const subFontDict = new Dict(xref);\n        subFontDict.set(fontName, acroFormFont.getRaw(fontName));\n\n        const subResourcesDict = new Dict(xref);\n        subResourcesDict.set(\"Font\", subFontDict);\n\n        return Dict.merge({\n          xref,\n          dictArray: [subResourcesDict, localResources],\n          mergeSubDicts: true,\n        });\n      }\n    }\n    return localResources || Dict.empty;\n  }\n\n  getFieldObject() {\n    return null;\n  }\n}\n\nclass TextWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict } = params;\n\n    if (dict.has(\"PMD\")) {\n      // It's used to display a barcode but it isn't specified so we just hide\n      // it to avoid any confusion.\n      this.flags |= AnnotationFlag.HIDDEN;\n      this.data.hidden = true;\n      warn(\"Barcodes are not supported\");\n    }\n\n    this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML;\n    this._hasText = true;\n\n    // The field value is always a string.\n    if (typeof this.data.fieldValue !== \"string\") {\n      this.data.fieldValue = \"\";\n    }\n\n    // Determine the alignment of text in the field.\n    let alignment = getInheritableProperty({ dict, key: \"Q\" });\n    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {\n      alignment = null;\n    }\n    this.data.textAlignment = alignment;\n\n    // Determine the maximum length of text in the field.\n    let maximumLength = getInheritableProperty({ dict, key: \"MaxLen\" });\n    if (!Number.isInteger(maximumLength) || maximumLength < 0) {\n      maximumLength = 0;\n    }\n    this.data.maxLen = maximumLength;\n\n    // Process field flags for the display layer.\n    this.data.multiLine = this.hasFieldFlag(AnnotationFieldFlag.MULTILINE);\n    this.data.comb =\n      this.hasFieldFlag(AnnotationFieldFlag.COMB) &&\n      !this.data.multiLine &&\n      !this.data.password &&\n      !this.hasFieldFlag(AnnotationFieldFlag.FILESELECT) &&\n      this.data.maxLen !== 0;\n    this.data.doNotScroll = this.hasFieldFlag(AnnotationFieldFlag.DONOTSCROLL);\n\n    // Check if we have a date or time.\n    const {\n      data: { actions },\n    } = this;\n\n    if (!actions) {\n      return;\n    }\n\n    const AFDateTime =\n      /^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\\(['\"]?([^'\"]+)['\"]?\\);$/;\n    let canUseHTMLDateTime = false;\n    if (\n      (actions.Format?.length === 1 &&\n        actions.Keystroke?.length === 1 &&\n        AFDateTime.test(actions.Format[0]) &&\n        AFDateTime.test(actions.Keystroke[0])) ||\n      (actions.Format?.length === 0 &&\n        actions.Keystroke?.length === 1 &&\n        AFDateTime.test(actions.Keystroke[0])) ||\n      (actions.Keystroke?.length === 0 &&\n        actions.Format?.length === 1 &&\n        AFDateTime.test(actions.Format[0]))\n    ) {\n      // If the Format and Keystroke actions are the same, we can just use\n      // the Format action.\n      canUseHTMLDateTime = true;\n    }\n    const actionsToVisit = [];\n    if (actions.Format) {\n      actionsToVisit.push(...actions.Format);\n    }\n    if (actions.Keystroke) {\n      actionsToVisit.push(...actions.Keystroke);\n    }\n    if (canUseHTMLDateTime) {\n      delete actions.Keystroke;\n      actions.Format = actionsToVisit;\n    }\n\n    for (const formatAction of actionsToVisit) {\n      const m = formatAction.match(AFDateTime);\n      if (!m) {\n        continue;\n      }\n      const isDate = m[1] === \"Date\";\n      let format = m[2];\n      const num = parseInt(format, 10);\n      if (!isNaN(num) && Math.floor(Math.log10(num)) + 1 === m[2].length) {\n        format = (isDate ? DateFormats : TimeFormats)[num] ?? format;\n      }\n      this.data.datetimeFormat = format;\n      if (!canUseHTMLDateTime) {\n        // The datetime format will just be used as a tooltip.\n        break;\n      }\n      if (isDate) {\n        // We can have a date and a time so we'll use a time input in this\n        // case.\n        if (/HH|MM|ss|h/.test(format)) {\n          this.data.datetimeType = \"datetime-local\";\n          this.data.timeStep = /ss/.test(format) ? 1 : 60;\n        } else {\n          this.data.datetimeType = \"date\";\n        }\n        break;\n      }\n      this.data.datetimeType = \"time\";\n      this.data.timeStep = /ss/.test(format) ? 1 : 60;\n      break;\n    }\n  }\n\n  get hasTextContent() {\n    return !!this.appearance && !this._needAppearances;\n  }\n\n  _getCombAppearance(\n    defaultAppearance,\n    font,\n    text,\n    fontSize,\n    width,\n    height,\n    alignment,\n    isRTL,\n    annotationStorage\n  ) {\n    const combWidth = width / this.data.maxLen;\n    // Empty or it has a trailing whitespace.\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n\n    const cells = font.getCharPositions(text).map(([start, end]) => {\n      const glyph = text.substring(start, end);\n      return { glyph, width: this._getTextWidth(glyph, font) * fontSize };\n    });\n    if (isRTL) {\n      cells.reverse();\n    }\n\n    const textWidth = combWidth * cells.length;\n    let hShift = 0;\n    if (alignment === 1) {\n      hShift += Math.floor((width - textWidth) / (2 * combWidth)) * combWidth;\n    } else if (alignment === 2) {\n      hShift += width - textWidth;\n    }\n\n    const buf = [];\n    let previousWidth = 0;\n    for (let i = 0, ii = cells.length; i < ii; i++) {\n      const { glyph, width: glyphWidth } = cells[i];\n      const shift =\n        i === 0\n          ? (combWidth - glyphWidth) / 2\n          : combWidth + (previousWidth - glyphWidth) / 2;\n      buf.push(`${numberToString(shift)} 0 Td (${escapeString(glyph)}) Tj`);\n      previousWidth = glyphWidth;\n    }\n    const renderedComb = buf.join(\" \");\n\n    // Vertically center the glyphs within the field: comb fields are mostly\n    // filled with uppercase letters and/or digits, hence we use the cap height\n    // (with a fallback on the ascent or the font size) to center them.\n    const vShift =\n      (height - (font.capHeight || font.ascent || 1) * fontSize) / 2;\n\n    return (\n      `/Tx BMC q ${colors}BT ` +\n      defaultAppearance +\n      ` 1 0 0 1 ${numberToString(hShift)} ${numberToString(\n        vShift\n      )} Tm ${renderedComb}` +\n      \" ET Q EMC\"\n    );\n  }\n\n  _getMultilineAppearance(\n    defaultAppearance,\n    lines,\n    font,\n    fontSize,\n    width,\n    height,\n    alignment,\n    hPadding,\n    vPadding,\n    descent,\n    lineHeight,\n    annotationStorage\n  ) {\n    const buf = [];\n    const totalWidth = width - 2 * hPadding;\n    const prevInfo = { shift: 0 };\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      const line = lines[i];\n      const chunks = this._splitLine(line, font, fontSize, totalWidth);\n      for (let j = 0, jj = chunks.length; j < jj; j++) {\n        const chunk = chunks[j];\n        const vShift =\n          i === 0 && j === 0 ? -vPadding - (lineHeight - descent) : -lineHeight;\n        buf.push(\n          this._renderText(\n            chunk,\n            font,\n            fontSize,\n            width,\n            alignment,\n            prevInfo,\n            hPadding,\n            vShift\n          )\n        );\n      }\n    }\n\n    // Empty or it has a trailing whitespace.\n    const colors = this.getBorderAndBackgroundAppearances(annotationStorage);\n    const renderedText = buf.join(\"\\n\");\n\n    return (\n      `/Tx BMC q ${colors}BT ` +\n      defaultAppearance +\n      ` 1 0 0 1 0 ${numberToString(height)} Tm ${renderedText}` +\n      \" ET Q EMC\"\n    );\n  }\n\n  _splitLine(line, font, fontSize, width, cache = {}) {\n    line = cache.line || line;\n\n    const glyphs = cache.glyphs || font.charsToGlyphs(line);\n\n    if (glyphs.length <= 1) {\n      // Nothing to split\n      return [line];\n    }\n\n    const positions = cache.positions || font.getCharPositions(line);\n    const scale = fontSize / 1000;\n    const chunks = [];\n\n    let lastSpacePosInStringStart = -1,\n      lastSpacePosInStringEnd = -1,\n      lastSpacePos = -1,\n      startChunk = 0,\n      currentWidth = 0;\n\n    for (let i = 0, ii = glyphs.length; i < ii; i++) {\n      const [start, end] = positions[i];\n      const glyph = glyphs[i];\n      const glyphWidth = glyph.width * scale;\n      if (glyph.unicode === \" \") {\n        if (currentWidth + glyphWidth > width) {\n          // We can break here\n          chunks.push(line.substring(startChunk, start));\n          startChunk = start;\n          currentWidth = glyphWidth;\n          lastSpacePosInStringStart = -1;\n          lastSpacePos = -1;\n        } else {\n          currentWidth += glyphWidth;\n          lastSpacePosInStringStart = start;\n          lastSpacePosInStringEnd = end;\n          lastSpacePos = i;\n        }\n      } else if (currentWidth + glyphWidth > width) {\n        // We must break to the last white position (if available)\n        if (lastSpacePosInStringStart !== -1) {\n          chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));\n          startChunk = lastSpacePosInStringEnd;\n          i = lastSpacePos + 1;\n          lastSpacePosInStringStart = -1;\n          currentWidth = 0;\n        } else {\n          // Just break in the middle of the word\n          chunks.push(line.substring(startChunk, start));\n          startChunk = start;\n          currentWidth = glyphWidth;\n        }\n      } else {\n        currentWidth += glyphWidth;\n      }\n    }\n\n    if (startChunk < line.length) {\n      chunks.push(line.substring(startChunk));\n    }\n\n    return chunks;\n  }\n\n  async extractTextContent(evaluator, task, viewBox) {\n    await super.extractTextContent(evaluator, task, viewBox);\n    const text = this.data.textContent;\n    if (!text) {\n      return;\n    }\n\n    // The text extractor doesn't handle empty lines correctly, so if the\n    // content we get is more or less (modulo whitespaces) the same as the\n    // field value we just ignore it.\n    const allText = text.join(\"\\n\");\n    if (allText === this.data.fieldValue) {\n      return;\n    }\n    const regex = allText.replaceAll(/([.*+?^${}()|[\\]\\\\])|(\\s+)/g, (_m, p1) =>\n      p1 ? `\\\\${p1}` : \"\\\\s+\"\n    );\n    if (new RegExp(`^\\\\s*${regex}\\\\s*$`).test(this.data.fieldValue)) {\n      this.data.textContent = this.data.fieldValue.split(\"\\n\");\n    }\n  }\n\n  getFieldObject() {\n    return {\n      id: this.data.id,\n      value: this.data.fieldValue,\n      defaultValue: this.data.defaultFieldValue || \"\",\n      multiline: this.data.multiLine,\n      password: this.data.password,\n      charLimit: this.data.maxLen,\n      comb: this.data.comb,\n      editable: !this.data.readOnly,\n      hidden: this.data.hidden,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      actions: this.data.actions,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      datetimeFormat: this.data.datetimeFormat,\n      hasDatetimeHTML: !!this.data.datetimeType,\n      type: \"text\",\n    };\n  }\n}\n\nclass ButtonWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n\n    this.checkedAppearance = null;\n    this.uncheckedAppearance = null;\n\n    const isRadio = this.hasFieldFlag(AnnotationFieldFlag.RADIO),\n      isPushButton = this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);\n\n    this.data.checkBox = !isRadio && !isPushButton;\n    this.data.radioButton = isRadio && !isPushButton;\n    this.data.pushButton = isPushButton;\n    this.data.isTooltipOnly = false;\n    this.data.hasOwnCanvas = true;\n    this.data.noHTML = false;\n\n    if (this.data.checkBox) {\n      this._processCheckBox(params);\n    } else if (this.data.radioButton) {\n      this._processRadioButton(params);\n    } else if (this.data.pushButton) {\n      this._processPushButton(params);\n    } else {\n      warn(\"Invalid field flags for button widget annotation\");\n    }\n  }\n\n  get _ownCanvasRequiresForms() {\n    return this.data.checkBox || this.data.radioButton;\n  }\n\n  #getOperatorListForAppearance(\n    evaluator,\n    task,\n    intent,\n    annotationStorage,\n    rotation,\n    appearance\n  ) {\n    if (!appearance) {\n      return this._getOperatorListNoAppearance();\n    }\n\n    const savedAppearance = this.appearance;\n    const savedMatrix = lookupMatrix(\n      appearance.dict.getArray(\"Matrix\"),\n      IDENTITY_MATRIX\n    );\n\n    if (rotation) {\n      appearance.dict.set(\"Matrix\", this.getRotationMatrix(annotationStorage));\n    }\n\n    this.appearance = appearance;\n    const operatorList = super.getOperatorList(\n      evaluator,\n      task,\n      intent,\n      annotationStorage\n    );\n    this.appearance = savedAppearance;\n    appearance.dict.set(\"Matrix\", savedMatrix);\n    return operatorList;\n  }\n\n  async getOperatorList(evaluator, task, intent, annotationStorage) {\n    if (this.data.pushButton) {\n      return super.getOperatorList(\n        evaluator,\n        task,\n        intent,\n        false, // we use normalAppearance to render the button\n        annotationStorage\n      );\n    }\n\n    if (\n      intent & RenderingIntentFlag.DISPLAY &&\n      intent & RenderingIntentFlag.ANNOTATIONS_FORMS &&\n      (this.data.checkBox || this.data.radioButton)\n    ) {\n      // Tag the dedicated canvas with the state it represents. The appearance\n      // may start with other operators (e.g. an optional content marked-content\n      // sequence), so target the `beginAnnotation` operator directly rather\n      // than assuming it's the first one.\n      const setCanvasName = (operatorList, name) => {\n        const index = operatorList.fnArray.indexOf(OPS.beginAnnotation);\n        if (index !== -1) {\n          operatorList.argsArray[index].push(name);\n        }\n      };\n      const checked = await this.#getOperatorListForAppearance(\n        evaluator,\n        task,\n        intent,\n        annotationStorage,\n        null,\n        this.checkedAppearance\n      );\n      setCanvasName(checked.opList, \"checked\");\n      const unchecked = await this.#getOperatorListForAppearance(\n        evaluator,\n        task,\n        intent,\n        annotationStorage,\n        null,\n        this.uncheckedAppearance\n      );\n      setCanvasName(unchecked.opList, \"unchecked\");\n      checked.opList.addOpList(unchecked.opList);\n      checked.separateForm ||= unchecked.separateForm;\n      checked.separateCanvas ||= unchecked.separateCanvas;\n      return checked;\n    }\n\n    let value = null;\n    let rotation = null;\n    if (annotationStorage) {\n      const storageEntry = annotationStorage.get(this.data.id);\n      value = storageEntry ? storageEntry.value : null;\n      rotation = storageEntry ? storageEntry.rotation : null;\n    }\n\n    if (value === null && this.appearance) {\n      // Nothing in the annotationStorage.\n      // But we've a default appearance so use it.\n      return super.getOperatorList(evaluator, task, intent, annotationStorage);\n    }\n\n    // There is no default appearance, `value === null || value === undefined`,\n    // so use the one derived from the field value.\n    value ??= this.data.checkBox\n      ? this.data.fieldValue === this.data.exportValue\n      : this.data.fieldValue === this.data.buttonValue;\n\n    return this.#getOperatorListForAppearance(\n      evaluator,\n      task,\n      intent,\n      annotationStorage,\n      rotation,\n      value ? this.checkedAppearance : this.uncheckedAppearance\n    );\n  }\n\n  async save(evaluator, task, annotationStorage, changes) {\n    if (this.data.checkBox) {\n      this._saveCheckbox(evaluator, task, annotationStorage, changes);\n      return;\n    }\n\n    if (this.data.radioButton) {\n      this._saveRadioButton(evaluator, task, annotationStorage, changes);\n    }\n  }\n\n  async _saveCheckbox(evaluator, task, annotationStorage, changes) {\n    if (!annotationStorage) {\n      return;\n    }\n    const storageEntry = annotationStorage.get(this.data.id);\n    const flags = this._buildFlags(storageEntry?.noView, storageEntry?.noPrint);\n    let rotation = storageEntry?.rotation,\n      value = storageEntry?.value;\n\n    if (rotation === undefined && flags === undefined) {\n      if (value === undefined) {\n        return;\n      }\n\n      const defaultValue = this.data.fieldValue === this.data.exportValue;\n      if (defaultValue === value) {\n        return;\n      }\n    }\n\n    let dict = evaluator.xref.fetchIfRef(this.ref);\n    if (!(dict instanceof Dict)) {\n      return;\n    }\n    dict = dict.clone();\n\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n    if (value === undefined) {\n      value = this.data.fieldValue === this.data.exportValue;\n    }\n\n    const xfa = {\n      path: this.data.fieldName,\n      value: value ? this.data.exportValue : \"\",\n    };\n\n    const name = Name.get(value ? this._onStateName : \"Off\");\n    this.setValue(dict, name, evaluator.xref, changes);\n\n    dict.set(\"AS\", name);\n    dict.set(\"M\", `D:${getModificationDate()}`);\n    if (flags !== undefined) {\n      dict.set(\"F\", flags);\n    }\n\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n\n    changes.put(this.ref, {\n      data: dict,\n      xfa,\n      needAppearances: false,\n    });\n  }\n\n  async _saveRadioButton(evaluator, task, annotationStorage, changes) {\n    if (!annotationStorage) {\n      return;\n    }\n    const storageEntry = annotationStorage.get(this.data.id);\n    const flags = this._buildFlags(storageEntry?.noView, storageEntry?.noPrint);\n    let rotation = storageEntry?.rotation,\n      value = storageEntry?.value;\n\n    if (rotation === undefined && flags === undefined) {\n      if (value === undefined) {\n        return;\n      }\n\n      const defaultValue = this.data.fieldValue === this.data.buttonValue;\n      if (defaultValue === value) {\n        return;\n      }\n    }\n\n    let dict = evaluator.xref.fetchIfRef(this.ref);\n    if (!(dict instanceof Dict)) {\n      return;\n    }\n    dict = dict.clone();\n\n    if (value === undefined) {\n      value = this.data.fieldValue === this.data.buttonValue;\n    }\n\n    if (rotation === undefined) {\n      rotation = this.rotation;\n    }\n\n    const xfa = {\n      path: this.data.fieldName,\n      value: value ? this.data.buttonValue : \"\",\n    };\n\n    const name = Name.get(value ? this._onStateName : \"Off\");\n    if (value) {\n      this.setValue(dict, name, evaluator.xref, changes);\n    }\n\n    dict.set(\"AS\", name);\n    dict.set(\"M\", `D:${getModificationDate()}`);\n    if (flags !== undefined) {\n      dict.set(\"F\", flags);\n    }\n\n    const maybeMK = this._getMKDict(rotation);\n    if (maybeMK) {\n      dict.set(\"MK\", maybeMK);\n    }\n\n    changes.put(this.ref, {\n      data: dict,\n      xfa,\n      needAppearances: false,\n    });\n  }\n\n  _getDefaultCheckedAppearance(params, type) {\n    const { width, height } = this;\n    const bbox = [0, 0, width, height];\n\n    // Ratio used to have a mark slightly smaller than the bbox.\n    const FONT_RATIO = 0.8;\n    const fontSize = Math.min(width, height) * FONT_RATIO;\n\n    // Char Metrics\n    // Widths came from widths for ZapfDingbats.\n    // Heights are guessed with Fontforge and FoxitDingbats.pfb.\n    let metrics, char;\n    if (type === \"check\") {\n      // Char 33 (2713 in unicode)\n      metrics = {\n        width: 0.755 * fontSize,\n        height: 0.705 * fontSize,\n      };\n      char = \"\\x33\";\n    } else if (type === \"disc\") {\n      // Char 6C (25CF in unicode)\n      metrics = {\n        width: 0.791 * fontSize,\n        height: 0.705 * fontSize,\n      };\n      char = \"\\x6C\";\n    } else {\n      unreachable(`_getDefaultCheckedAppearance - unsupported type: ${type}`);\n    }\n\n    // Values to center the glyph in the bbox.\n    const xShift = numberToString((width - metrics.width) / 2);\n    const yShift = numberToString((height - metrics.height) / 2);\n\n    const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`;\n\n    const appearanceStreamDict = new Dict(params.xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", bbox);\n    appearanceStreamDict.set(\"Matrix\", [1, 0, 0, 1, 0, 0]);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n\n    const resources = new Dict(params.xref);\n    const font = new Dict(params.xref);\n    font.set(\"PdfJsZaDb\", this.fallbackFontDict);\n    resources.set(\"Font\", font);\n\n    appearanceStreamDict.set(\"Resources\", resources);\n\n    this.checkedAppearance = new StringStream(appearance, appearanceStreamDict);\n\n    this._streams.push(this.checkedAppearance);\n  }\n\n  _getOnStateName(dict) {\n    const appearanceStates = dict.get(\"AP\");\n    if (!(appearanceStates instanceof Dict)) {\n      return null;\n    }\n    const normalAppearance = appearanceStates.get(\"N\");\n    if (!(normalAppearance instanceof Dict)) {\n      return null;\n    }\n    for (const key of normalAppearance.getKeys()) {\n      if (key !== \"Off\") {\n        return key;\n      }\n    }\n    return null;\n  }\n\n  _getExportValueForOptIndex(index, opt, xref) {\n    if (Number.isInteger(index) && index >= 0 && index < opt.length) {\n      const value = this._decodeFormValue(xref.fetchIfRef(opt[index]));\n      if (typeof value === \"string\") {\n        return value;\n      }\n    }\n    return null;\n  }\n\n  _getOptInfo(dict, onState, opt, xref) {\n    if (!Array.isArray(opt)) {\n      return null;\n    }\n    const stateToIndex = new Map();\n    let currentIndex = null;\n\n    const fieldParent = dict.get(\"Parent\");\n    const kids = fieldParent instanceof Dict ? fieldParent.get(\"Kids\") : null;\n    if (Array.isArray(kids)) {\n      for (let i = 0, ii = Math.min(kids.length, opt.length); i < ii; i++) {\n        const kid = kids[i];\n        if (kid instanceof Ref && isRefsEqual(kid, this.ref)) {\n          currentIndex = i;\n        }\n\n        const kidDict = xref.fetchIfRef(kid);\n        if (!(kidDict instanceof Dict)) {\n          continue;\n        }\n        if (kidDict === dict) {\n          currentIndex = i;\n        }\n\n        const kidOnState = this._getOnStateName(kidDict);\n        if (typeof kidOnState === \"string\" && !stateToIndex.has(kidOnState)) {\n          stateToIndex.set(kidOnState, i);\n        }\n      }\n    } else if (opt.length === 1 && typeof onState === \"string\") {\n      // A single widget is sometimes used as its own field dictionary.\n      currentIndex = 0;\n      stateToIndex.set(onState, 0);\n    }\n\n    return { currentIndex, opt, stateToIndex };\n  }\n\n  // The appearance state is a Name; its real export value can be overridden by\n  // the \"Opt\" array, whose entries are ordered like the field's \"Kids\".\n  _getExportValue(state, optInfo, xref) {\n    if (!optInfo || typeof state !== \"string\" || state === \"Off\") {\n      return state;\n    }\n\n    if (state === this._onStateName) {\n      const exportValue = this._getExportValueForOptIndex(\n        optInfo.currentIndex,\n        optInfo.opt,\n        xref\n      );\n      if (exportValue !== null) {\n        return exportValue;\n      }\n    }\n\n    if (optInfo.stateToIndex.has(state)) {\n      const exportValue = this._getExportValueForOptIndex(\n        optInfo.stateToIndex.get(state),\n        optInfo.opt,\n        xref\n      );\n      if (exportValue !== null) {\n        return exportValue;\n      }\n    }\n\n    const index = parseInt(state, 10);\n    if (Number.isInteger(index) && String(index) === state) {\n      return this._getExportValueForOptIndex(index, optInfo.opt, xref) || state;\n    }\n    return state;\n  }\n\n  _processCheckBox(params) {\n    const customAppearance = params.dict.get(\"AP\");\n    let normalAppearance =\n      customAppearance instanceof Dict ? customAppearance.get(\"N\") : null;\n    if (!(normalAppearance instanceof Dict)) {\n      // Synthesize a default appearance below when the field defines none.\n      normalAppearance = null;\n    }\n\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=1722036.\n    // If we've an AS and a V then take AS.\n    const asValue = this._decodeFormValue(params.dict.get(\"AS\"));\n    if (typeof asValue === \"string\") {\n      this.data.fieldValue = asValue;\n    }\n\n    const yes =\n      this.data.fieldValue !== null && this.data.fieldValue !== \"Off\"\n        ? this.data.fieldValue\n        : \"Yes\";\n\n    // Don't decode the keys which are names.\n    const exportValues = normalAppearance\n      ? [...normalAppearance.getKeys()]\n      : [];\n    if (exportValues.length === 0) {\n      exportValues.push(\"Off\", yes);\n    } else if (exportValues.length === 1) {\n      if (exportValues[0] === \"Off\") {\n        exportValues.push(yes);\n      } else {\n        exportValues.unshift(\"Off\");\n      }\n    } else if (exportValues.includes(yes)) {\n      exportValues.length = 0;\n      exportValues.push(\"Off\", yes);\n    } else {\n      const otherYes = exportValues.find(v => v !== \"Off\");\n      exportValues.length = 0;\n      exportValues.push(\"Off\", otherYes);\n    }\n\n    const onState = exportValues[1];\n    this._onStateName = onState;\n\n    const opt = getInheritableProperty({ dict: params.dict, key: \"Opt\" });\n    const optInfo = this._getOptInfo(params.dict, onState, opt, params.xref);\n    this.data.exportValue = this._getExportValue(onState, optInfo, params.xref);\n\n    // Don't use a \"V\" entry pointing to a non-existent appearance state,\n    // see e.g. bug1720411.pdf where it's an *empty* Name-instance.\n    if (\n      !exportValues.includes(this.data.fieldValue) &&\n      this.data.fieldValue !== this.data.exportValue\n    ) {\n      this.data.fieldValue = \"Off\";\n    }\n    this.data.fieldValue = this._getExportValue(\n      this.data.fieldValue,\n      optInfo,\n      params.xref\n    );\n    this.data.defaultFieldValue = this._getExportValue(\n      this.data.defaultFieldValue,\n      optInfo,\n      params.xref\n    );\n\n    const checkedAppearance = normalAppearance?.get(onState);\n    this.checkedAppearance =\n      checkedAppearance instanceof BaseStream ? checkedAppearance : null;\n    const uncheckedAppearance = normalAppearance?.get(\"Off\");\n    this.uncheckedAppearance =\n      uncheckedAppearance instanceof BaseStream ? uncheckedAppearance : null;\n\n    if (this.checkedAppearance) {\n      this._streams.push(this.checkedAppearance);\n    } else {\n      this._getDefaultCheckedAppearance(params, \"check\");\n    }\n    if (this.uncheckedAppearance) {\n      this._streams.push(this.uncheckedAppearance);\n    }\n    this._fallbackFontDict = this.fallbackFontDict;\n    if (this.data.defaultFieldValue === null) {\n      this.data.defaultFieldValue = \"Off\";\n    }\n  }\n\n  _processRadioButton(params) {\n    this.data.buttonValue = null;\n\n    // The parent field's `V` entry holds a `Name` object with the appearance\n    // state of whichever child field is currently in the \"on\" state.\n    const fieldParent = params.dict.get(\"Parent\");\n    if (fieldParent instanceof Dict) {\n      this.parent = params.dict.getRaw(\"Parent\");\n      const fieldParentValue = fieldParent.get(\"V\");\n      if (fieldParentValue instanceof Name) {\n        this.data.fieldValue = this._decodeFormValue(fieldParentValue);\n      }\n    }\n\n    // The button's value corresponds to its appearance state.\n    const appearanceStates = params.dict.get(\"AP\");\n    if (!(appearanceStates instanceof Dict)) {\n      return;\n    }\n    const normalAppearance = appearanceStates.get(\"N\");\n    if (!(normalAppearance instanceof Dict)) {\n      return;\n    }\n    let onState = null;\n    for (const key of normalAppearance.getKeys()) {\n      if (key !== \"Off\") {\n        onState = key;\n        break;\n      }\n    }\n    this._onStateName = onState;\n\n    const opt = getInheritableProperty({ dict: params.dict, key: \"Opt\" });\n    const optInfo = this._getOptInfo(params.dict, onState, opt, params.xref);\n    this.data.buttonValue = this._getExportValue(onState, optInfo, params.xref);\n    this.data.fieldValue = this._getExportValue(\n      this.data.fieldValue,\n      optInfo,\n      params.xref\n    );\n    this.data.defaultFieldValue = this._getExportValue(\n      this.data.defaultFieldValue,\n      optInfo,\n      params.xref\n    );\n\n    const checkedAppearance = normalAppearance.get(onState);\n    this.checkedAppearance =\n      checkedAppearance instanceof BaseStream ? checkedAppearance : null;\n    const uncheckedAppearance = normalAppearance.get(\"Off\");\n    this.uncheckedAppearance =\n      uncheckedAppearance instanceof BaseStream ? uncheckedAppearance : null;\n\n    if (this.checkedAppearance) {\n      this._streams.push(this.checkedAppearance);\n    } else {\n      this._getDefaultCheckedAppearance(params, \"disc\");\n    }\n    if (this.uncheckedAppearance) {\n      this._streams.push(this.uncheckedAppearance);\n    }\n    this._fallbackFontDict = this.fallbackFontDict;\n    if (this.data.defaultFieldValue === null) {\n      this.data.defaultFieldValue = \"Off\";\n    }\n  }\n\n  _processPushButton(params) {\n    const { dict, annotationGlobals } = params;\n\n    if (!dict.has(\"A\") && !dict.has(\"AA\") && !this.data.alternativeText) {\n      warn(\"Push buttons without action dictionaries are not supported\");\n      return;\n    }\n\n    this.data.isTooltipOnly = !dict.has(\"A\") && !dict.has(\"AA\");\n\n    Catalog.parseDestDictionary({\n      destDict: dict,\n      resultObj: this.data,\n      docBaseUrl: annotationGlobals.baseUrl,\n      docAttachments: annotationGlobals.attachments,\n    });\n  }\n\n  getFieldObject() {\n    let type = \"button\";\n    let exportValues;\n    if (this.data.checkBox) {\n      type = \"checkbox\";\n      exportValues = this.data.exportValue;\n    } else if (this.data.radioButton) {\n      type = \"radiobutton\";\n      exportValues = this.data.buttonValue;\n    }\n    return {\n      id: this.data.id,\n      value: this.data.fieldValue || \"Off\",\n      defaultValue: this.data.defaultFieldValue,\n      exportValues,\n      editable: !this.data.readOnly,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      hidden: this.data.hidden,\n      actions: this.data.actions,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      type,\n    };\n  }\n\n  get fallbackFontDict() {\n    const dict = new Dict();\n    dict.setIfName(\"BaseFont\", \"ZapfDingbats\");\n    dict.setIfName(\"Type\", \"FallbackType\");\n    dict.setIfName(\"Subtype\", \"FallbackType\");\n    dict.setIfName(\"Encoding\", \"ZapfDingbatsEncoding\");\n\n    return shadow(this, \"fallbackFontDict\", dict);\n  }\n}\n\nclass ChoiceWidgetAnnotation extends WidgetAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n\n    this.indices = dict.getArray(\"I\");\n    this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0;\n\n    // Determine the options. The options array may consist of strings or\n    // arrays. If the array consists of arrays, then the first element of\n    // each array is the export value and the second element of each array is\n    // the display value. If the array consists of strings, then these\n    // represent both the export and display value. In this case, we convert\n    // it to an array of arrays as well for convenience in the display layer.\n    // Note that the specification does not state that the `Opt` field is\n    // inheritable, but in practice PDF generators do make annotations\n    // inherit the options from a parent annotation (issue 8094).\n    this.data.options = [];\n\n    const options = getInheritableProperty({ dict, key: \"Opt\" });\n    if (Array.isArray(options)) {\n      for (let i = 0, ii = options.length; i < ii; i++) {\n        const option = xref.fetchIfRef(options[i]);\n        const isOptionArray = Array.isArray(option);\n\n        this.data.options[i] = {\n          exportValue: this._decodeFormValue(\n            isOptionArray ? xref.fetchIfRef(option[0]) : option\n          ),\n          displayValue: this._decodeFormValue(\n            isOptionArray ? xref.fetchIfRef(option[1]) : option\n          ),\n        };\n      }\n    }\n\n    if (!this.hasIndices) {\n      // The field value can be `null` if no item is selected, a string if one\n      // item is selected or an array of strings if multiple items are selected.\n      // For consistency in the API and convenience in the display layer, we\n      // always make the field value an array with zero, one or multiple items.\n      if (typeof this.data.fieldValue === \"string\") {\n        this.data.fieldValue = [this.data.fieldValue];\n      } else {\n        this.data.fieldValue ||= [];\n      }\n    } else {\n      // The specs say that we should have an indices array only with\n      // multiselectable Choice and the \"V\" entry should have the\n      // precedence, but Acrobat itself is using it whatever the\n      // the \"V\" entry is (see bug 1770750).\n      this.data.fieldValue = [];\n      const ii = this.data.options.length;\n      for (const i of this.indices) {\n        if (Number.isInteger(i) && i >= 0 && i < ii) {\n          this.data.fieldValue.push(this.data.options[i].exportValue);\n        }\n      }\n    }\n\n    // It's a workaround for the issue #19083.\n    // Normally a choice widget is a mix of a text field and a listbox,\n    // So in the case where the V entry isn't an option we should just set it\n    // as the text field value.\n    if (this.data.options.length === 0 && this.data.fieldValue.length > 0) {\n      // If there are no options, then the field value is the only option.\n      this.data.options = this.data.fieldValue.map(value => ({\n        exportValue: value,\n        displayValue: value,\n      }));\n    }\n\n    // Process field flags for the display layer.\n    this.data.combo = this.hasFieldFlag(AnnotationFieldFlag.COMBO);\n    this.data.multiSelect = this.hasFieldFlag(AnnotationFieldFlag.MULTISELECT);\n    this._hasText = true;\n  }\n\n  getFieldObject() {\n    const type = this.data.combo ? \"combobox\" : \"listbox\";\n    const value =\n      this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;\n    return {\n      id: this.data.id,\n      value,\n      defaultValue: this.data.defaultFieldValue,\n      editable: !this.data.readOnly,\n      name: this.data.fieldName,\n      rect: this.data.rect,\n      numItems: this.data.fieldValue.length,\n      multipleSelection: this.data.multiSelect,\n      hidden: this.data.hidden,\n      actions: this.data.actions,\n      items: this.data.options,\n      page: this.data.pageIndex,\n      strokeColor: this.data.borderColor,\n      fillColor: this.data.backgroundColor,\n      rotation: this.rotation,\n      type,\n    };\n  }\n\n  amendSavedDict(annotationStorage, dict) {\n    if (!this.hasIndices) {\n      return;\n    }\n    let values = annotationStorage?.get(this.data.id)?.value;\n    if (!Array.isArray(values)) {\n      values = [values];\n    }\n    const indices = [];\n    const { options } = this.data;\n    for (let i = 0, j = 0, ii = options.length; i < ii; i++) {\n      if (options[i].exportValue === values[j]) {\n        indices.push(i);\n        j += 1;\n      }\n    }\n    dict.set(\"I\", indices);\n  }\n\n  async _getAppearance(evaluator, task, intent, annotationStorage) {\n    if (this.data.combo) {\n      return super._getAppearance(evaluator, task, intent, annotationStorage);\n    }\n\n    let exportedValue, rotation;\n    const storageEntry = annotationStorage?.get(this.data.id);\n    if (storageEntry) {\n      rotation = storageEntry.rotation;\n      exportedValue = storageEntry.value;\n    }\n\n    if (\n      rotation === undefined &&\n      exportedValue === undefined &&\n      !this._needAppearances\n    ) {\n      // The annotation hasn't been rendered so use the appearance\n      return null;\n    }\n\n    if (exportedValue === undefined) {\n      exportedValue = this.data.fieldValue;\n    } else if (!Array.isArray(exportedValue)) {\n      exportedValue = [exportedValue];\n    }\n\n    const defaultPadding = 1;\n    const defaultHPadding = 2;\n    let { width: totalWidth, height: totalHeight } = this;\n\n    if (rotation === 90 || rotation === 270) {\n      [totalWidth, totalHeight] = [totalHeight, totalWidth];\n    }\n\n    const lineCount = this.data.options.length;\n    const valueIndices = [];\n    for (let i = 0; i < lineCount; i++) {\n      const { exportValue } = this.data.options[i];\n      if (exportedValue.includes(exportValue)) {\n        valueIndices.push(i);\n      }\n    }\n\n    if (!this._defaultAppearance) {\n      // The DA is required and must be a string.\n      // If there is no font named Helvetica in the resource dictionary,\n      // the evaluator will fall back to a default font.\n      // Doing so prevents exceptions and allows saving/printing\n      // the file as expected.\n      this.data.defaultAppearanceData = parseDefaultAppearance(\n        (this._defaultAppearance = \"/Helvetica 0 Tf 0 g\")\n      );\n    }\n\n    const font = await WidgetAnnotation._getFontData(\n      evaluator,\n      task,\n      this.data.defaultAppearanceData,\n      this._fieldResources.mergedResources\n    );\n\n    let defaultAppearance;\n    let { fontSize } = this.data.defaultAppearanceData;\n    if (!fontSize) {\n      const lineHeight = (totalHeight - defaultPadding) / lineCount;\n      let lineWidth = -1;\n      let value;\n      for (const { displayValue } of this.data.options) {\n        const width = this._getTextWidth(displayValue, font);\n        if (width > lineWidth) {\n          lineWidth = width;\n          value = displayValue;\n        }\n      }\n\n      [defaultAppearance, fontSize] = this._computeFontSize(\n        lineHeight,\n        totalWidth - 2 * defaultHPadding,\n        value,\n        font,\n        -1\n      );\n    } else {\n      defaultAppearance = this._defaultAppearance;\n    }\n\n    const lineHeight = fontSize * LINE_FACTOR;\n    const vPadding = (lineHeight - fontSize) / 2;\n    const numberOfVisibleLines = Math.floor(totalHeight / lineHeight);\n\n    let firstIndex = 0;\n    if (valueIndices.length > 0) {\n      const minIndex = Math.min(...valueIndices);\n      const maxIndex = Math.max(...valueIndices);\n\n      firstIndex = Math.max(0, maxIndex - numberOfVisibleLines + 1);\n      if (firstIndex > minIndex) {\n        firstIndex = minIndex;\n      }\n    }\n    const end = Math.min(firstIndex + numberOfVisibleLines + 1, lineCount);\n\n    const buf = [\"/Tx BMC q\", `1 1 ${totalWidth} ${totalHeight} re W n`];\n\n    if (valueIndices.length) {\n      // This value has been copied/pasted from annotation-choice-widget.pdf.\n      // It corresponds to rgb(153, 193, 218).\n      buf.push(\"0.600006 0.756866 0.854904 rg\");\n\n      // Highlight the lines in filling a blue rectangle at the selected\n      // positions.\n      for (const index of valueIndices) {\n        if (firstIndex <= index && index < end) {\n          buf.push(\n            `1 ${\n              totalHeight - (index - firstIndex + 1) * lineHeight\n            } ${totalWidth} ${lineHeight} re f`\n          );\n        }\n      }\n    }\n    buf.push(\"BT\", defaultAppearance, `1 0 0 1 0 ${totalHeight} Tm`);\n\n    const prevInfo = { shift: 0 };\n    for (let i = firstIndex; i < end; i++) {\n      const { displayValue } = this.data.options[i];\n      const vpadding = i === firstIndex ? vPadding : 0;\n      buf.push(\n        this._renderText(\n          displayValue,\n          font,\n          fontSize,\n          totalWidth,\n          0,\n          prevInfo,\n          defaultHPadding,\n          -lineHeight + vpadding\n        )\n      );\n    }\n\n    buf.push(\"ET Q EMC\");\n\n    return buf.join(\"\\n\");\n  }\n}\n\nclass SignatureWidgetAnnotation extends WidgetAnnotation {\n  _hasValueFromXFA = false;\n\n  constructor(params) {\n    super(params);\n\n    // Unset the fieldValue since it's (most likely) a `Dict` which is\n    // non-serializable and will thus cause errors when sending annotations\n    // to the main-thread (issue 10347).\n    this.data.fieldValue = null;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = !this.data.hasOwnCanvas;\n  }\n\n  getFieldObject() {\n    return {\n      id: this.data.id,\n      value: null,\n      page: this.data.pageIndex,\n      type: \"signature\",\n    };\n  }\n}\n\nclass TextAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    const DEFAULT_ICON_SIZE = 22; // px\n\n    super(params);\n\n    // No rotation for Text (see 12.5.6.4).\n    this.data.noRotate = true;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n\n    const { dict } = params;\n\n    if (this.data.hasAppearance) {\n      this.data.name = \"NoIcon\";\n    } else {\n      this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;\n      this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;\n      this.data.name = dict.has(\"Name\") ? dict.get(\"Name\").name : \"Note\";\n    }\n\n    if (dict.has(\"State\")) {\n      this.data.state = dict.get(\"State\") || null;\n      this.data.stateModel = dict.get(\"StateModel\") || null;\n    } else {\n      this.data.state = null;\n      this.data.stateModel = null;\n    }\n  }\n}\n\nclass LinkAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, annotationGlobals } = params;\n\n    // A link is never rendered on the main canvas so we must render its HTML\n    // version.\n    this.data.noHTML = false;\n\n    const quadPoints = getQuadPoints(dict, this.rectangle);\n    if (quadPoints) {\n      this.data.quadPoints = quadPoints;\n    }\n\n    // The color entry for a link annotation is the color of the border.\n    this.data.borderColor ||= this.data.color;\n\n    Catalog.parseDestDictionary({\n      destDict: dict,\n      resultObj: this.data,\n      docBaseUrl: annotationGlobals.baseUrl,\n      docAttachments: annotationGlobals.attachments,\n    });\n  }\n\n  get overlaysTextContent() {\n    return true;\n  }\n}\n\nclass PopupAnnotation extends Annotation {\n  constructor(params) {\n    super(params);\n\n    const { dict } = params;\n\n    // A pop-up is never rendered on the main canvas so we must render its HTML\n    // version.\n    this.data.noHTML = false;\n\n    if (this.width === 0 || this.height === 0) {\n      this.data.rect = null;\n    }\n\n    let parentItem = dict.get(\"Parent\");\n    if (!parentItem) {\n      warn(\"Popup annotation has a missing or invalid parent annotation.\");\n      return;\n    }\n    this.data.parentRect = lookupNormalRect(parentItem.getArray(\"Rect\"), null);\n    this.data.creationDate = parentItem.get(\"CreationDate\") || \"\";\n\n    const rt = parentItem.get(\"RT\");\n    if (isName(rt, AnnotationReplyType.GROUP)) {\n      // Subordinate annotations in a group should inherit\n      // the group attributes from the primary annotation.\n      parentItem = parentItem.get(\"IRT\");\n    }\n\n    if (!parentItem.has(\"M\")) {\n      this.data.modificationDate = null;\n    } else {\n      this.setModificationDate(parentItem.get(\"M\"));\n      this.data.modificationDate = this.modificationDate;\n    }\n\n    if (!parentItem.has(\"C\")) {\n      // Fall back to the default background color.\n      this.data.color = null;\n    } else {\n      this.setColor(parentItem.getArray(\"C\"));\n      this.data.color = this.color;\n    }\n\n    // If the Popup annotation is not viewable, but the parent annotation is,\n    // that is most likely a bug. Fallback to inherit the flags from the parent\n    // annotation (this is consistent with the behaviour in Adobe Reader).\n    if (!this.viewable) {\n      const parentFlags = parentItem.get(\"F\");\n      if (this._isViewable(parentFlags)) {\n        this.setFlags(parentFlags);\n      }\n    }\n\n    this.setTitle(parentItem.get(\"T\"));\n    this.data.titleObj = this._title;\n\n    this.setContents(parentItem.get(\"Contents\"));\n    this.data.contentsObj = this._contents;\n\n    if (parentItem.has(\"RC\")) {\n      this.data.richText = XFAFactory.getRichTextAsHtml(parentItem.get(\"RC\"));\n    }\n\n    this.data.open = !!dict.get(\"Open\");\n  }\n\n  static createNewDict(annotation, xref, _params) {\n    const { oldAnnotation, rect, parent } = annotation;\n    const popup = oldAnnotation || new Dict(xref);\n    popup.setIfNotExists(\"Type\", Name.get(\"Annot\"));\n    popup.setIfNotExists(\"Subtype\", Name.get(\"Popup\"));\n    popup.setIfNotExists(\"Open\", false);\n    popup.setIfArray(\"Rect\", rect);\n    popup.set(\"Parent\", parent);\n\n    return popup;\n  }\n\n  static async createNewAppearanceStream(annotation, xref, params) {\n    return null;\n  }\n}\n\nclass FreeTextAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    // It uses its own canvas in order to be hidden if edited.\n    // But if it has the noHTML flag, it means that we don't want to be able\n    // to modify it so we can just draw it on the main canvas.\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.isEditable = !this.data.noHTML;\n    // We want to be able to add mouse listeners to the annotation.\n    this.data.noHTML = false;\n\n    const { annotationGlobals, xref } = params;\n    this.setDefaultAppearance(params);\n    this._hasAppearance = !!this.appearance;\n\n    if (this._hasAppearance) {\n      const { fontColor, fontSize } = parseAppearanceStream(\n        this.appearance,\n        xref,\n        annotationGlobals.globalColorSpaceCache\n      );\n      this.data.defaultAppearanceData.fontColor = fontColor;\n      this.data.defaultAppearanceData.fontSize = fontSize || 10;\n    } else {\n      this.data.defaultAppearanceData.fontSize ||= 10;\n      const { fontColor, fontSize } = this.data.defaultAppearanceData;\n      if (this._contents.str) {\n        this.data.textContent = this._contents.str\n          .split(/\\r\\n?|\\n/)\n          .map(line => line.trimEnd());\n        const { coords, bbox, matrix } = FakeUnicodeFont.getFirstPositionInfo(\n          this.rectangle,\n          this.rotation,\n          fontSize\n        );\n        this.data.textPosition = this._transformPoint(coords, bbox, matrix);\n      }\n      if (this._isOffscreenCanvasSupported) {\n        const strokeAlpha = params.dict.get(\"CA\");\n        const fakeUnicodeFont = new FakeUnicodeFont(xref, \"sans-serif\");\n        this.appearance = fakeUnicodeFont.createAppearance(\n          this._contents.str,\n          this.rectangle,\n          this.rotation,\n          fontSize,\n          fontColor,\n          strokeAlpha\n        );\n        this._streams.push(this.appearance);\n      } else {\n        warn(\n          \"FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.\"\n        );\n      }\n    }\n  }\n\n  get hasTextContent() {\n    return this._hasAppearance;\n  }\n\n  static createNewDict(annotation, xref, { apRef, ap }) {\n    const {\n      color,\n      date,\n      fontSize,\n      oldAnnotation,\n      rect,\n      rotation,\n      user,\n      value,\n    } = annotation;\n    const freetext = oldAnnotation || new Dict(xref);\n    freetext.setIfNotExists(\"Type\", Name.get(\"Annot\"));\n    freetext.setIfNotExists(\"Subtype\", Name.get(\"FreeText\"));\n    freetext.set(\n      oldAnnotation ? \"M\" : \"CreationDate\",\n      `D:${getModificationDate(date)}`\n    );\n    if (oldAnnotation) {\n      // TODO: We should try to generate a new RC from the content we've.\n      // For now we can just remove it to avoid any issues.\n      freetext.delete(\"RC\");\n    }\n    freetext.setIfArray(\"Rect\", rect);\n    const da = `/Helv ${fontSize} Tf ${getPdfColor(color, /* isFill */ true)}`;\n    freetext.set(\"DA\", da);\n    freetext.setIfDefined(\"Contents\", stringToAsciiOrUTF16BE(value));\n    freetext.setIfNotExists(\"F\", 4);\n    freetext.setIfNotExists(\"Border\", [0, 0, 0]);\n    freetext.setIfNumber(\"Rotate\", rotation);\n    freetext.setIfDefined(\"T\", stringToAsciiOrUTF16BE(user));\n\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      freetext.set(\"AP\", n);\n      n.set(\"N\", apRef || ap);\n    }\n\n    return freetext;\n  }\n\n  static async createNewAppearanceStream(annotation, xref, params) {\n    const { baseFontRef, evaluator, task } = params;\n    const { color, fontSize, rect, rotation, value } = annotation;\n    if (!color) {\n      return null;\n    }\n\n    const resources = new Dict(xref);\n    const font = new Dict(xref);\n\n    if (baseFontRef) {\n      font.set(\"Helv\", baseFontRef);\n    } else {\n      const baseFont = new Dict(xref);\n      baseFont.setIfName(\"BaseFont\", \"Helvetica\");\n      baseFont.setIfName(\"Type\", \"Font\");\n      baseFont.setIfName(\"Subtype\", \"Type1\");\n      baseFont.setIfName(\"Encoding\", \"WinAnsiEncoding\");\n      font.set(\"Helv\", baseFont);\n    }\n    resources.set(\"Font\", font);\n\n    const helv = await WidgetAnnotation._getFontData(\n      evaluator,\n      task,\n      {\n        fontName: \"Helv\",\n        fontSize,\n      },\n      resources\n    );\n\n    const [x1, y1, x2, y2] = rect;\n    let w = x2 - x1;\n    let h = y2 - y1;\n\n    if (rotation % 180 !== 0) {\n      [w, h] = [h, w];\n    }\n\n    const lines = value.split(\"\\n\");\n    const scale = fontSize / 1000;\n    let totalWidth = -Infinity;\n    const encodedLines = [];\n    for (let line of lines) {\n      const encoded = helv.encodeString(line);\n      if (encoded.length > 1) {\n        // The font doesn't contain all the chars.\n        return null;\n      }\n      line = encoded.join(\"\");\n      encodedLines.push(line);\n      let lineWidth = 0;\n      const glyphs = helv.charsToGlyphs(line);\n      for (const glyph of glyphs) {\n        lineWidth += glyph.width * scale;\n      }\n      totalWidth = Math.max(totalWidth, lineWidth);\n    }\n\n    const hscale = totalWidth > w ? w / totalWidth : 1;\n    let vscale = 1;\n    const lineHeight = LINE_FACTOR * fontSize;\n    const lineAscent = (LINE_FACTOR - LINE_DESCENT_FACTOR) * fontSize;\n    const totalHeight = lineHeight * lines.length;\n    if (totalHeight > h) {\n      vscale = h / totalHeight;\n    }\n    const fscale = Math.min(hscale, vscale);\n    const newFontSize = fontSize * fscale;\n    let firstPoint, clipBox, matrix;\n    switch (rotation) {\n      case 0:\n        matrix = [1, 0, 0, 1];\n        clipBox = [rect[0], rect[1], w, h];\n        firstPoint = [rect[0], rect[3] - lineAscent];\n        break;\n      case 90:\n        matrix = [0, 1, -1, 0];\n        clipBox = [rect[1], -rect[2], w, h];\n        firstPoint = [rect[1], -rect[0] - lineAscent];\n        break;\n      case 180:\n        matrix = [-1, 0, 0, -1];\n        clipBox = [-rect[2], -rect[3], w, h];\n        firstPoint = [-rect[2], -rect[1] - lineAscent];\n        break;\n      case 270:\n        matrix = [0, -1, 1, 0];\n        clipBox = [-rect[3], rect[0], w, h];\n        firstPoint = [-rect[3], rect[2] - lineAscent];\n        break;\n    }\n\n    const buffer = [\n      \"q\",\n      `${matrix.join(\" \")} 0 0 cm`,\n      `${clipBox.join(\" \")} re W n`,\n      `BT`,\n      `${getPdfColor(color, /* isFill */ true)}`,\n      `0 Tc /Helv ${numberToString(newFontSize)} Tf`,\n    ];\n\n    buffer.push(\n      `${firstPoint.join(\" \")} Td (${escapeString(encodedLines[0])}) Tj`\n    );\n    const vShift = numberToString(lineHeight);\n    for (let i = 1, ii = encodedLines.length; i < ii; i++) {\n      const line = encodedLines[i];\n      buffer.push(`0 -${vShift} Td (${escapeString(line)}) Tj`);\n    }\n    buffer.push(\"ET\", \"Q\");\n    const appearance = buffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Resources\", resources);\n    appearanceStreamDict.set(\"Matrix\", [1, 0, 0, 1, -rect[0], -rect[1]]);\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n}\n\nclass LineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n\n    const lineCoordinates = lookupRect(dict.getArray(\"L\"), [0, 0, 0, 0]);\n    this.data.lineCoordinates = Util.normalizeRect(lineCoordinates);\n\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      this.setLineEndings(dict.getArray(\"LE\"));\n      this.data.lineEndings = this.lineEndings;\n    }\n\n    if (!this.appearance) {\n      // The default stroke color is black.\n      const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n      const strokeAlpha = dict.get(\"CA\");\n\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      // The default fill color is transparent. Setting the fill colour is\n      // necessary if/when we want to add support for non-default line endings.\n      const fillColor = getPdfColorArray(interiorColor);\n      const fillAlpha = fillColor ? strokeAlpha : null;\n\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n\n      // If the /Rect-entry is empty/wrong, create a fallback rectangle so that\n      // we get similar rendering/highlighting behaviour as in Adobe Reader.\n      const bbox = [\n        this.data.lineCoordinates[0] - borderAdjust,\n        this.data.lineCoordinates[1] - borderAdjust,\n        this.data.lineCoordinates[2] + borderAdjust,\n        this.data.lineCoordinates[3] + borderAdjust,\n      ];\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          buffer.push(\n            `${lineCoordinates[0]} ${lineCoordinates[1]} m`,\n            `${lineCoordinates[2]} ${lineCoordinates[3]} l`,\n            \"S\"\n          );\n          return [\n            points[0] - borderWidth,\n            points[7] - borderWidth,\n            points[2] + borderWidth,\n            points[3] + borderWidth,\n          ];\n        },\n      });\n    }\n  }\n}\n\nclass SquareAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n\n    if (!this.appearance) {\n      // The default stroke color is black.\n      const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n      const strokeAlpha = dict.get(\"CA\");\n\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      // The default fill color is transparent.\n      const fillColor = getPdfColorArray(interiorColor);\n      const fillAlpha = fillColor ? strokeAlpha : null;\n\n      if (this.borderStyle.width === 0 && !fillColor) {\n        // Prevent rendering a \"hairline\" border (fixes issue14164.pdf).\n        return;\n      }\n\n      this._setDefaultAppearance({\n        xref,\n        extra: `${this.borderStyle.width} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          const x = points[4] + this.borderStyle.width / 2;\n          const y = points[5] + this.borderStyle.width / 2;\n          const width = points[6] - points[4] - this.borderStyle.width;\n          const height = points[3] - points[7] - this.borderStyle.width;\n          buffer.push(`${x} ${y} ${width} ${height} re`);\n          if (fillColor) {\n            buffer.push(\"B\");\n          } else {\n            buffer.push(\"S\");\n          }\n          return [points[0], points[7], points[2], points[3]];\n        },\n      });\n    }\n  }\n}\n\nclass CircleAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n\n    if (!this.appearance) {\n      // The default stroke color is black.\n      const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n      const strokeAlpha = dict.get(\"CA\");\n\n      const interiorColor = getRgbColor(dict.getArray(\"IC\"), null);\n      // The default fill color is transparent.\n      const fillColor = getPdfColorArray(interiorColor);\n      const fillAlpha = fillColor ? strokeAlpha : null;\n\n      if (this.borderStyle.width === 0 && !fillColor) {\n        // Prevent rendering a \"hairline\" border (fixes issue14164.pdf).\n        return;\n      }\n\n      // Circles are approximated by Bézier curves with four segments since\n      // there is no circle primitive in the PDF specification. For the control\n      // points distance, see https://stackoverflow.com/a/27863181.\n      const controlPointsDistance = (4 / 3) * Math.tan(Math.PI / (2 * 4));\n\n      this._setDefaultAppearance({\n        xref,\n        extra: `${this.borderStyle.width} w`,\n        strokeColor,\n        fillColor,\n        strokeAlpha,\n        fillAlpha,\n        pointsCallback: (buffer, points) => {\n          const x0 = points[0] + this.borderStyle.width / 2;\n          const y0 = points[1] - this.borderStyle.width / 2;\n          const x1 = points[6] - this.borderStyle.width / 2;\n          const y1 = points[7] + this.borderStyle.width / 2;\n          const xMid = x0 + (x1 - x0) / 2;\n          const yMid = y0 + (y1 - y0) / 2;\n          const xOffset = ((x1 - x0) / 2) * controlPointsDistance;\n          const yOffset = ((y1 - y0) / 2) * controlPointsDistance;\n\n          buffer.push(\n            `${xMid} ${y1} m`,\n            `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`,\n            `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`,\n            `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`,\n            `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`,\n            \"h\"\n          );\n          if (fillColor) {\n            buffer.push(\"B\");\n          } else {\n            buffer.push(\"S\");\n          }\n          return [points[0], points[7], points[2], points[3]];\n        },\n      });\n    }\n  }\n}\n\nclass PolylineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    this.data.vertices = null;\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n      !(this instanceof PolygonAnnotation)\n    ) {\n      // Only meaningful for polyline annotations.\n      this.setLineEndings(dict.getArray(\"LE\"));\n      this.data.lineEndings = this.lineEndings;\n    }\n\n    // The vertices array is an array of numbers representing the alternating\n    // horizontal and vertical coordinates, respectively, of each vertex.\n    // Convert this to an array of objects with x and y coordinates.\n    const rawVertices = dict.getArray(\"Vertices\");\n    if (!isNumberArray(rawVertices, null)) {\n      return;\n    }\n    const vertices = (this.data.vertices = Float32Array.from(rawVertices));\n\n    if (!this.appearance) {\n      // The default stroke color is black.\n      const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n      const strokeAlpha = dict.get(\"CA\");\n\n      let fillColor = getRgbColor(dict.getArray(\"IC\"), null);\n      fillColor &&= getPdfColorArray(fillColor);\n\n      let operator;\n      if (fillColor) {\n        if (this.color) {\n          operator = fillColor.every((c, i) => c === strokeColor[i])\n            ? \"f\"\n            : \"B\";\n        } else {\n          operator = \"f\";\n        }\n      } else {\n        operator = \"S\";\n      }\n\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n\n      // If the /Rect-entry is empty/wrong, create a fallback rectangle so that\n      // we get similar rendering/highlighting behaviour as in Adobe Reader.\n      const bbox = BBOX_INIT.slice();\n      for (let i = 0, ii = vertices.length; i < ii; i += 2) {\n        Util.rectBoundingBox(\n          vertices[i] - borderAdjust,\n          vertices[i + 1] - borderAdjust,\n          vertices[i] + borderAdjust,\n          vertices[i + 1] + borderAdjust,\n          bbox\n        );\n      }\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        strokeAlpha,\n        fillColor,\n        fillAlpha: fillColor ? strokeAlpha : null,\n        pointsCallback: (buffer, points) => {\n          for (let i = 0, ii = vertices.length; i < ii; i += 2) {\n            buffer.push(\n              `${vertices[i]} ${vertices[i + 1]} ${i === 0 ? \"m\" : \"l\"}`\n            );\n          }\n          buffer.push(operator);\n          return [points[0], points[7], points[2], points[3]];\n        },\n      });\n    }\n  }\n}\n\n// Polygons are specific forms of polylines, so reuse their logic.\nclass PolygonAnnotation extends PolylineAnnotation {}\n\nclass CaretAnnotation extends MarkupAnnotation {}\n\nclass InkAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n\n    const { dict, xref } = params;\n    this.data.inkLists = [];\n    this.data.isEditable = !this.data.noHTML;\n    // We want to be able to add mouse listeners to the annotation.\n    this.data.noHTML = false;\n    this.data.opacity = dict.get(\"CA\") || 1;\n\n    const rawInkLists = dict.getArray(\"InkList\");\n    if (!Array.isArray(rawInkLists)) {\n      return;\n    }\n    for (const rawInkList of rawInkLists) {\n      // The raw ink lists array contains arrays of numbers representing\n      // the alternating horizontal and vertical coordinates, respectively,\n      // of each vertex. Convert this to an array of objects with x and y\n      // coordinates.\n      if (!Array.isArray(rawInkList)) {\n        continue;\n      }\n      const inkList = new Float32Array(rawInkList.length);\n      this.data.inkLists.push(inkList);\n      for (let j = 0, jj = rawInkList.length; j < jj; j += 2) {\n        const x = xref.fetchIfRef(rawInkList[j]),\n          y = xref.fetchIfRef(rawInkList[j + 1]);\n        if (typeof x === \"number\" && typeof y === \"number\") {\n          inkList[j] = x;\n          inkList[j + 1] = y;\n        }\n      }\n    }\n\n    if (!this.appearance) {\n      // The default stroke color is black.\n      const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n      const strokeAlpha = dict.get(\"CA\");\n\n      const borderWidth = this.borderStyle.width || 1,\n        borderAdjust = 2 * borderWidth;\n\n      // If the /Rect-entry is empty/wrong, create a fallback rectangle so that\n      // we get similar rendering/highlighting behaviour as in Adobe Reader.\n      const bbox = BBOX_INIT.slice();\n      for (const inkList of this.data.inkLists) {\n        for (let i = 0, ii = inkList.length; i < ii; i += 2) {\n          Util.rectBoundingBox(\n            inkList[i] - borderAdjust,\n            inkList[i + 1] - borderAdjust,\n            inkList[i] + borderAdjust,\n            inkList[i + 1] + borderAdjust,\n            bbox\n          );\n        }\n      }\n      if (!Util.intersect(this.rectangle, bbox)) {\n        this.rectangle = bbox;\n      }\n\n      this._setDefaultAppearance({\n        xref,\n        extra: `${borderWidth} w`,\n        strokeColor,\n        strokeAlpha,\n        pointsCallback: (buffer, points) => {\n          // According to the specification, see \"12.5.6.13 Ink Annotations\":\n          //   When drawn, the points shall be connected by straight lines or\n          //   curves in an implementation-dependent way.\n          // In order to simplify things, we utilize straight lines for now.\n          for (const inkList of this.data.inkLists) {\n            for (let i = 0, ii = inkList.length; i < ii; i += 2) {\n              buffer.push(\n                `${inkList[i]} ${inkList[i + 1]} ${i === 0 ? \"m\" : \"l\"}`\n              );\n            }\n            buffer.push(\"S\");\n          }\n          return [points[0], points[7], points[2], points[3]];\n        },\n      });\n    }\n  }\n\n  static createNewDict(annotation, xref, { apRef, ap }) {\n    const {\n      oldAnnotation,\n      color,\n      date,\n      opacity,\n      paths,\n      outlines,\n      rect,\n      rotation,\n      thickness,\n      user,\n    } = annotation;\n    const ink = oldAnnotation || new Dict(xref);\n    ink.setIfNotExists(\"Type\", Name.get(\"Annot\"));\n    ink.setIfNotExists(\"Subtype\", Name.get(\"Ink\"));\n    ink.set(\n      oldAnnotation ? \"M\" : \"CreationDate\",\n      `D:${getModificationDate(date)}`\n    );\n    ink.setIfArray(\"Rect\", rect);\n    ink.setIfArray(\"InkList\", outlines?.points || paths?.points);\n    ink.setIfNotExists(\"F\", 4);\n    ink.setIfNumber(\"Rotate\", rotation);\n    ink.setIfDefined(\"T\", stringToAsciiOrUTF16BE(user));\n\n    if (outlines) {\n      // Free highlight.\n      // There's nothing about this in the spec, but it's used when highlighting\n      // in Edge's viewer. Acrobat takes into account this parameter to indicate\n      // that the Ink is used for highlighting.\n      ink.setIfName(\"IT\", \"InkHighlight\");\n    }\n\n    // Line thickness.\n    if (thickness > 0) {\n      const bs = new Dict(xref);\n      ink.set(\"BS\", bs);\n      bs.set(\"W\", thickness);\n    }\n\n    // Color.\n    ink.setIfArray(\"C\", getPdfColorArray(color));\n\n    // Opacity.\n    ink.setIfNumber(\"CA\", opacity);\n\n    if (ap || apRef) {\n      const n = new Dict(xref);\n      ink.set(\"AP\", n);\n      n.set(\"N\", apRef || ap);\n    }\n\n    return ink;\n  }\n\n  static async createNewAppearanceStream(annotation, xref, params) {\n    if (annotation.outlines) {\n      return this.createNewAppearanceStreamForHighlight(\n        annotation,\n        xref,\n        params\n      );\n    }\n    const { color, rect, paths, thickness, opacity } = annotation;\n    if (!color) {\n      return null;\n    }\n\n    const appearanceBuffer = [\n      `${thickness} w 1 J 1 j`,\n      `${getPdfColor(color, /* isFill */ false)}`,\n    ];\n\n    if (opacity !== 1) {\n      appearanceBuffer.push(\"/R0 gs\");\n    }\n\n    for (const outline of paths.lines) {\n      appearanceBuffer.push(\n        `${numberToString(outline[4])} ${numberToString(outline[5])} m`\n      );\n      for (let i = 6, ii = outline.length; i < ii; i += 6) {\n        if (isNaN(outline[i])) {\n          appearanceBuffer.push(\n            `${numberToString(outline[i + 4])} ${numberToString(\n              outline[i + 5]\n            )} l`\n          );\n        } else {\n          const [c1x, c1y, c2x, c2y, x, y] = outline.slice(i, i + 6);\n          appearanceBuffer.push(\n            [c1x, c1y, c2x, c2y, x, y].map(numberToString).join(\" \") + \" c\"\n          );\n        }\n      }\n      if (outline.length === 6) {\n        appearanceBuffer.push(\n          `${numberToString(outline[4])} ${numberToString(outline[5])} l`\n        );\n      }\n    }\n    appearanceBuffer.push(\"S\");\n\n    const appearance = appearanceBuffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n\n    if (opacity !== 1) {\n      const resources = new Dict(xref);\n      const extGState = new Dict(xref);\n      const r0 = new Dict(xref);\n      r0.set(\"CA\", opacity);\n      r0.setIfName(\"Type\", \"ExtGState\");\n      extGState.set(\"R0\", r0);\n      resources.set(\"ExtGState\", extGState);\n      appearanceStreamDict.set(\"Resources\", resources);\n    }\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n\n  static async createNewAppearanceStreamForHighlight(annotation, xref, params) {\n    const {\n      color,\n      rect,\n      outlines: { outline },\n      opacity,\n    } = annotation;\n    if (!color) {\n      return null;\n    }\n    const appearanceBuffer = [\n      `${getPdfColor(color, /* isFill */ true)}`,\n      \"/R0 gs\",\n    ];\n\n    appearanceBuffer.push(\n      `${numberToString(outline[4])} ${numberToString(outline[5])} m`\n    );\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      if (isNaN(outline[i])) {\n        appearanceBuffer.push(\n          `${numberToString(outline[i + 4])} ${numberToString(\n            outline[i + 5]\n          )} l`\n        );\n      } else {\n        const [c1x, c1y, c2x, c2y, x, y] = outline.slice(i, i + 6);\n        appearanceBuffer.push(\n          [c1x, c1y, c2x, c2y, x, y].map(numberToString).join(\" \") + \" c\"\n        );\n      }\n    }\n    appearanceBuffer.push(\"h f\");\n    const appearance = appearanceBuffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n\n    const resources = new Dict(xref);\n    const extGState = new Dict(xref);\n    resources.set(\"ExtGState\", extGState);\n    appearanceStreamDict.set(\"Resources\", resources);\n    const r0 = new Dict(xref);\n    extGState.set(\"R0\", r0);\n    r0.setIfName(\"BM\", \"Multiply\");\n\n    if (opacity !== 1) {\n      r0.set(\"ca\", opacity);\n      r0.setIfName(\"Type\", \"ExtGState\");\n    }\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n}\n\nclass HighlightAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n    this.data.isEditable = !this.data.noHTML;\n    // We want to be able to add mouse listeners to the annotation.\n    this.data.noHTML = false;\n    this.data.opacity = dict.get(\"CA\") || 1;\n\n    const quadPoints = (this.data.quadPoints = getQuadPoints(dict, null));\n    if (quadPoints) {\n      if (!this.appearance) {\n        // Default color is yellow in Acrobat Reader\n        const fillColor = getPdfColorArray(this.color, [1, 1, 0]);\n        const fillAlpha = dict.get(\"CA\");\n\n        this._setDefaultAppearance({\n          xref,\n          fillColor,\n          blendMode: \"Multiply\",\n          fillAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(\n              `${points[0]} ${points[1]} m`,\n              `${points[2]} ${points[3]} l`,\n              `${points[6]} ${points[7]} l`,\n              `${points[4]} ${points[5]} l`,\n              \"f\"\n            );\n            return [points[0], points[7], points[2], points[3]];\n          },\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n\n  get overlaysTextContent() {\n    return true;\n  }\n\n  static createNewDict(annotation, xref, { apRef, ap }) {\n    const {\n      color,\n      date,\n      oldAnnotation,\n      opacity,\n      rect,\n      rotation,\n      user,\n      quadPoints,\n    } = annotation;\n    const highlight = oldAnnotation || new Dict(xref);\n    highlight.setIfNotExists(\"Type\", Name.get(\"Annot\"));\n    highlight.setIfNotExists(\"Subtype\", Name.get(\"Highlight\"));\n    highlight.set(\n      oldAnnotation ? \"M\" : \"CreationDate\",\n      `D:${getModificationDate(date)}`\n    );\n    highlight.setIfArray(\"Rect\", rect);\n    highlight.setIfNotExists(\"F\", 4);\n    highlight.setIfNotExists(\"Border\", [0, 0, 0]);\n    highlight.setIfNumber(\"Rotate\", rotation);\n    highlight.setIfArray(\"QuadPoints\", quadPoints);\n    highlight.setIfArray(\"C\", getPdfColorArray(color));\n    highlight.setIfNumber(\"CA\", opacity);\n    highlight.setIfDefined(\"T\", stringToAsciiOrUTF16BE(user));\n\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      highlight.set(\"AP\", n);\n      n.set(\"N\", apRef || ap);\n    }\n\n    return highlight;\n  }\n\n  static async createNewAppearanceStream(annotation, xref, params) {\n    const { color, rect, outlines, opacity } = annotation;\n    if (!color) {\n      return null;\n    }\n\n    const appearanceBuffer = [\n      `${getPdfColor(color, /* isFill */ true)}`,\n      \"/R0 gs\",\n    ];\n\n    const buffer = [];\n    for (const outline of outlines) {\n      buffer.length = 0;\n      buffer.push(\n        `${numberToString(outline[0])} ${numberToString(outline[1])} m`\n      );\n      for (let i = 2, ii = outline.length; i < ii; i += 2) {\n        buffer.push(\n          `${numberToString(outline[i])} ${numberToString(outline[i + 1])} l`\n        );\n      }\n      buffer.push(\"h\");\n      appearanceBuffer.push(buffer.join(\"\\n\"));\n    }\n    appearanceBuffer.push(\"f*\");\n    const appearance = appearanceBuffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n\n    const resources = new Dict(xref);\n    const extGState = new Dict(xref);\n    resources.set(\"ExtGState\", extGState);\n    appearanceStreamDict.set(\"Resources\", resources);\n    const r0 = new Dict(xref);\n    extGState.set(\"R0\", r0);\n    r0.setIfName(\"BM\", \"Multiply\");\n\n    if (opacity !== 1) {\n      r0.set(\"ca\", opacity);\n      r0.setIfName(\"Type\", \"ExtGState\");\n    }\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n}\n\nclass UnderlineAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n\n    const quadPoints = (this.data.quadPoints = getQuadPoints(dict, null));\n    if (quadPoints) {\n      if (!this.appearance) {\n        // Default color is black\n        const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n        const strokeAlpha = dict.get(\"CA\");\n\n        // The values 0.571 and 1.3 below corresponds to what Acrobat is doing.\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 0.571 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(\n              `${points[4]} ${points[5] + 1.3} m`,\n              `${points[6]} ${points[7] + 1.3} l`,\n              \"S\"\n            );\n            return [points[0], points[7], points[2], points[3]];\n          },\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n\n  get overlaysTextContent() {\n    return true;\n  }\n}\n\nclass SquigglyAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n\n    const quadPoints = (this.data.quadPoints = getQuadPoints(dict, null));\n    if (quadPoints) {\n      if (!this.appearance) {\n        // Default color is black\n        const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n        const strokeAlpha = dict.get(\"CA\");\n\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 1 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            const dy = (points[1] - points[5]) / 6;\n            let shift = dy;\n            let x = points[4];\n            const y = points[5];\n            const xEnd = points[6];\n            buffer.push(`${x} ${y + shift} m`);\n            do {\n              x += 2;\n              shift = shift === 0 ? dy : 0;\n              buffer.push(`${x} ${y + shift} l`);\n            } while (x < xEnd);\n            buffer.push(\"S\");\n            return [points[4], y - 2 * dy, xEnd, y + 2 * dy];\n          },\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n\n  get overlaysTextContent() {\n    return true;\n  }\n}\n\nclass StrikeOutAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref } = params;\n\n    const quadPoints = (this.data.quadPoints = getQuadPoints(dict, null));\n    if (quadPoints) {\n      if (!this.appearance) {\n        // Default color is black\n        const strokeColor = getPdfColorArray(this.color, [0, 0, 0]);\n        const strokeAlpha = dict.get(\"CA\");\n\n        this._setDefaultAppearance({\n          xref,\n          extra: \"[] 0 d 1 w\",\n          strokeColor,\n          strokeAlpha,\n          pointsCallback: (buffer, points) => {\n            buffer.push(\n              `${(points[0] + points[4]) / 2} ` +\n                `${(points[1] + points[5]) / 2} m`,\n              `${(points[2] + points[6]) / 2} ` +\n                `${(points[3] + points[7]) / 2} l`,\n              \"S\"\n            );\n            return [points[0], points[7], points[2], points[3]];\n          },\n        });\n      }\n    } else {\n      this.data.popupRef = null;\n    }\n  }\n\n  get overlaysTextContent() {\n    return true;\n  }\n}\n\nclass StampAnnotation extends MarkupAnnotation {\n  #savedHasOwnCanvas = null;\n\n  constructor(params) {\n    super(params);\n\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.isEditable = !this.data.noHTML;\n    // We want to be able to add mouse listeners to the annotation.\n    this.data.noHTML = false;\n  }\n\n  mustBeViewedWhenEditing(isEditing, modifiedIds = null) {\n    if (isEditing) {\n      if (!this.data.isEditable) {\n        return true;\n      }\n      // When we're editing, we want to ensure that the stamp annotation is\n      // drawn on a canvas in order to use it in the annotation editor layer.\n      this.#savedHasOwnCanvas ??= this.data.hasOwnCanvas;\n      this.data.hasOwnCanvas = true;\n      return true;\n    }\n    if (this.#savedHasOwnCanvas !== null) {\n      this.data.hasOwnCanvas = this.#savedHasOwnCanvas;\n      this.#savedHasOwnCanvas = null;\n    }\n\n    return !modifiedIds?.has(this.data.id);\n  }\n\n  static createNewDict(annotation, xref, { apRef, ap }) {\n    const { date, oldAnnotation, rect, rotation, user } = annotation;\n    const stamp = oldAnnotation || new Dict(xref);\n    stamp.setIfNotExists(\"Type\", Name.get(\"Annot\"));\n    stamp.setIfNotExists(\"Subtype\", Name.get(\"Stamp\"));\n    stamp.set(\n      oldAnnotation ? \"M\" : \"CreationDate\",\n      `D:${getModificationDate(date)}`\n    );\n    stamp.setIfArray(\"Rect\", rect);\n    stamp.setIfNotExists(\"F\", 4);\n    stamp.setIfNotExists(\"Border\", [0, 0, 0]);\n    stamp.setIfNumber(\"Rotate\", rotation);\n    stamp.setIfDefined(\"T\", stringToAsciiOrUTF16BE(user));\n\n    if (apRef || ap) {\n      const n = new Dict(xref);\n      stamp.set(\"AP\", n);\n      n.set(\"N\", apRef || ap);\n    }\n\n    return stamp;\n  }\n\n  static async #createNewAppearanceStreamForDrawing(annotation, xref) {\n    const { areContours, color, rect, lines, thickness } = annotation;\n    if (!color) {\n      return null;\n    }\n\n    const appearanceBuffer = [\n      `${thickness} w 1 J 1 j`,\n      `${getPdfColor(color, /* isFill */ areContours)}`,\n    ];\n\n    for (const line of lines) {\n      appearanceBuffer.push(\n        `${numberToString(line[4])} ${numberToString(line[5])} m`\n      );\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        if (isNaN(line[i])) {\n          appearanceBuffer.push(\n            `${numberToString(line[i + 4])} ${numberToString(line[i + 5])} l`\n          );\n        } else {\n          const [c1x, c1y, c2x, c2y, x, y] = line.slice(i, i + 6);\n          appearanceBuffer.push(\n            [c1x, c1y, c2x, c2y, x, y].map(numberToString).join(\" \") + \" c\"\n          );\n        }\n      }\n      if (line.length === 6) {\n        appearanceBuffer.push(\n          `${numberToString(line[4])} ${numberToString(line[5])} l`\n        );\n      }\n    }\n    appearanceBuffer.push(areContours ? \"F\" : \"S\");\n\n    const appearance = appearanceBuffer.join(\"\\n\");\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", rect);\n    appearanceStreamDict.set(\"Length\", appearance.length);\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n\n  static async createNewAppearanceStream(annotation, xref, params) {\n    if (annotation.oldAnnotation) {\n      // We'll use the AP we already have.\n      return null;\n    }\n    if (annotation.isSignature) {\n      return this.#createNewAppearanceStreamForDrawing(annotation, xref);\n    }\n\n    const { rotation } = annotation;\n    const { imageRef, width, height } = params.image;\n    const resources = new Dict(xref);\n    const xobject = new Dict(xref);\n    resources.set(\"XObject\", xobject);\n    xobject.set(\"Im0\", imageRef);\n    const appearance = `q ${width} 0 0 ${height} 0 0 cm /Im0 Do Q`;\n\n    const appearanceStreamDict = new Dict(xref);\n    appearanceStreamDict.set(\"FormType\", 1);\n    appearanceStreamDict.setIfName(\"Subtype\", \"Form\");\n    appearanceStreamDict.setIfName(\"Type\", \"XObject\");\n    appearanceStreamDict.set(\"BBox\", [0, 0, width, height]);\n    appearanceStreamDict.set(\"Resources\", resources);\n\n    if (rotation) {\n      const matrix = getRotationMatrix(rotation, width, height);\n      appearanceStreamDict.set(\"Matrix\", matrix);\n    }\n\n    return new StringStream(appearance, appearanceStreamDict);\n  }\n}\n\nclass FileAttachmentAnnotation extends MarkupAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { annotationGlobals, dict } = params;\n    const fsDict = dict.get(\"FS\");\n\n    this.data.hasOwnCanvas = this.data.noRotate;\n    this.data.noHTML = false;\n    this.data.fileId = this._getAttachmentId(\n      fsDict,\n      dict.getRaw(\"FS\"),\n      annotationGlobals\n    );\n    this.data.file = new FileSpec(fsDict).serializable;\n\n    const name = dict.get(\"Name\");\n    this.data.name =\n      name instanceof Name ? stringToPDFString(name.name) : \"PushPin\";\n\n    const fillAlpha = dict.get(\"ca\");\n    this.data.fillAlpha =\n      typeof fillAlpha === \"number\" && fillAlpha >= 0 && fillAlpha <= 1\n        ? fillAlpha\n        : null;\n  }\n}\n\n/**\n * Shared base for annotations that play an embedded audio/video clip:\n * `RichMedia` (via `RichMediaContent`) and `Screen` (via a rendition action).\n * Both resolve a single embedded media file and expose it identically through\n * `data.richMedia`, so the display layer can render them with one element.\n */\nclass MediaAnnotation extends Annotation {\n  // The MIME types we can build a `<video>`/`<audio>` element for.\n  static #MEDIA_MIME_TYPE_RE = /^(?:video|audio)\\//;\n\n  constructor(params) {\n    super(params);\n\n    // No HTML element until a playable asset is found below by the subclass.\n    this.data.noHTML = true;\n  }\n\n  /**\n   * Expose a resolved embedded media asset as `data.richMedia`.\n   *\n   * @param {Object} asset\n   * @param {Ref | null} asset.assetRef\n   *   Reference to the file-spec dictionary (or, for an inline file-spec, the\n   *   embedded-file stream); used to lazily fetch the bytes on the main thread.\n   * @param {Dict} asset.assetDict\n   *   The file-spec (or stream) dictionary, used to locate the embedded file\n   *   when `assetRef` isn't itself a reference.\n   * @param {string} asset.filename\n   * @param {string} asset.contentType\n   * @param {boolean} [asset.wrapSound]\n   *   When set, the embedded bytes are raw PDF sound samples that the catalog\n   *   wraps in a WAV container when fetched (see `soundStreamToWav`).\n   * @param {Object} annotationGlobals\n   */\n  _setMediaData(\n    { assetRef, assetDict, filename, contentType, wrapSound = false },\n    annotationGlobals\n  ) {\n    this.data.noHTML = false;\n    this.data.richMedia = {\n      fileId: this._getAttachmentId(\n        assetDict,\n        assetRef,\n        annotationGlobals,\n        wrapSound\n      ),\n      filename,\n      contentType,\n    };\n  }\n\n  /**\n   * Determine the MIME type used to build the `<video>`/`<audio>` element.\n   *\n   * When the media dictionary provides an explicit type (e.g. a MediaClip\n   * `/CT`), it's honored if it names an audio/video type. Otherwise, per the\n   * spec (ISO 32000-2, 7.11.4) an embedded file stream declares its MIME type\n   * through its own `/Subtype`, with characters not allowed in a name\n   * hex-escaped (e.g. `/video#2Fmp4` -> `video/mp4`). We trust that when it\n   * names an audio/video type, and otherwise fall back to mapping the filename\n   * extension. Returns `null` when the asset isn't a recognized audio/video\n   * type (e.g. Flash `.swf` or 3D models), so we don't build a player that\n   * can't play anything.\n   *\n   * @param {Dict} assetDict\n   * @param {string} filename\n   * @param {string | null} [contentType]\n   * @returns {string | null}\n   */\n  static _getContentType(assetDict, filename, contentType = null) {\n    if (\n      typeof contentType === \"string\" &&\n      MediaAnnotation.#MEDIA_MIME_TYPE_RE.test(contentType)\n    ) {\n      return contentType;\n    }\n\n    // The embedded file stream is keyed like a file-spec platform item.\n    const stream = FileSpec.pickPlatformItem(assetDict.get(\"EF\"));\n    const subtype =\n      stream instanceof BaseStream ? stream.dict?.get(\"Subtype\") : null;\n    if (\n      subtype instanceof Name &&\n      MediaAnnotation.#MEDIA_MIME_TYPE_RE.test(subtype.name)\n    ) {\n      return subtype.name;\n    }\n\n    const ext = filename.split(\".\").at(-1)?.toLowerCase();\n    switch (ext) {\n      case \"mp4\":\n      case \"m4v\":\n        return \"video/mp4\";\n      case \"webm\":\n        return \"video/webm\";\n      case \"ogv\":\n        return \"video/ogg\";\n      case \"mov\":\n        return \"video/quicktime\";\n      case \"mp3\":\n        return \"audio/mpeg\";\n      case \"m4a\":\n        return \"audio/mp4\";\n      case \"wav\":\n        return \"audio/wav\";\n      case \"oga\":\n      case \"ogg\":\n        return \"audio/ogg\";\n      default:\n        return null;\n    }\n  }\n}\n\nclass RichMediaAnnotation extends MediaAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref, annotationGlobals } = params;\n\n    const content = dict.get(\"RichMediaContent\");\n    if (!(content instanceof Dict)) {\n      return;\n    }\n\n    const asset = RichMediaAnnotation.#findAsset(content, xref);\n    if (!asset) {\n      warn(\"RichMedia annotation has no playable asset.\");\n      return;\n    }\n    this._setMediaData(asset, annotationGlobals);\n  }\n\n  /**\n   * Locate the primary playable embedded media asset.\n   *\n   * Per the spec (ISO 32000-2, 13.7), the asset to play is selected through\n   * `Configurations -> Instances -> Asset`. We pick the first instance with a\n   * natively playable asset rather than honoring the default configuration\n   * indicated by `RichMediaSettings`/activation; this keeps selection simple\n   * and matches the common single-configuration case. The `/Assets` name tree\n   * merely enumerates every embedded file; we don't use it as a fallback, since\n   * Acrobat itself won't play media that's only reachable that way. Flash\n   * instances are skipped, since they can't be played natively.\n   *\n   * @returns {{\n   *   assetRef: Ref | null,\n   *   assetDict: Dict,\n   *   filename: string,\n   *   contentType: string,\n   * } | null}\n   */\n  static #findAsset(content, xref) {\n    const configurations = content.get(\"Configurations\");\n    if (!Array.isArray(configurations)) {\n      return null;\n    }\n    for (const configRef of configurations) {\n      const config = xref.fetchIfRef(configRef);\n      if (!(config instanceof Dict)) {\n        continue;\n      }\n      const instances = config.get(\"Instances\");\n      if (!Array.isArray(instances)) {\n        continue;\n      }\n      for (const instanceRef of instances) {\n        const instance = xref.fetchIfRef(instanceRef);\n        if (!(instance instanceof Dict)) {\n          continue;\n        }\n        // Skip Flash instances: it's obsolete.\n        if (isName(instance.get(\"Subtype\"), \"Flash\")) {\n          // Flash has been supported (see PDF 1.7 Extension Level 3).\n          continue;\n        }\n        const rawAsset = instance.getRaw(\"Asset\");\n        const asset = xref.fetchIfRef(rawAsset);\n        if (!(asset instanceof Dict)) {\n          continue;\n        }\n        // Skip assets that only reference an external file we can't read.\n        if (!FileSpec.hasEmbeddedFile(asset)) {\n          continue;\n        }\n        const { filename } = new FileSpec(asset).serializable;\n        const contentType = MediaAnnotation._getContentType(asset, filename);\n        if (!contentType) {\n          continue;\n        }\n        return {\n          assetRef: rawAsset instanceof Ref ? rawAsset : null,\n          assetDict: asset,\n          filename,\n          contentType,\n        };\n      }\n    }\n\n    return null;\n  }\n}\n\nclass ScreenAnnotation extends MediaAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref, annotationGlobals } = params;\n    const asset = ScreenAnnotation.#findAsset(dict, xref);\n    if (!asset) {\n      // Not every Screen annotation plays embedded media (e.g. a URL stream or\n      // a /Movie); such ones simply render their appearance, so don't warn.\n      return;\n    }\n    this._setMediaData(asset, annotationGlobals);\n  }\n\n  /**\n   * Locate the embedded media played by the annotation's rendition action.\n   *\n   * Per the spec (ISO 32000-1, 12.6.4.13 and 13.2) the chain is:\n   *   Screen `/A` (or `/AA`) rendition action -> `/R` rendition (`/MR`)\n   *   -> `/C` media clip (`/MCD`) -> `/D` file-spec -> `/EF` embedded file.\n   * Selector renditions (`/SR`) are unwrapped to their first playable media\n   * rendition. This mirrors `RichMediaAnnotation`, which also targets the\n   * common single embedded-media case.\n   *\n   * @returns {{\n   *   assetRef: Ref | null,\n   *   assetDict: Dict,\n   *   filename: string,\n   *   contentType: string,\n   * } | null}\n   */\n  static #findAsset(dict, xref) {\n    for (const action of this.#renditionActions(dict)) {\n      const asset = this.#findRenditionAsset(\n        action.get(\"R\"),\n        xref,\n        new RefSet()\n      );\n      if (asset) {\n        return asset;\n      }\n    }\n    return null;\n  }\n\n  static *#renditionActions(dict) {\n    // The rendition action may be the activation action (/A) or one of the\n    // additional actions (/AA), e.g. page-open.\n    const action = dict.get(\"A\");\n    if (\n      action instanceof Dict &&\n      isName(action.get(\"S\"), \"Rendition\") &&\n      this.#isPlayAction(action)\n    ) {\n      yield action;\n    }\n    const additionalActions = dict.get(\"AA\");\n    if (additionalActions instanceof Dict) {\n      for (const [, aa] of additionalActions) {\n        if (\n          aa instanceof Dict &&\n          isName(aa.get(\"S\"), \"Rendition\") &&\n          this.#isPlayAction(aa)\n        ) {\n          yield aa;\n        }\n      }\n    }\n  }\n\n  static #isPlayAction(action) {\n    // Rendition action /OP (ISO 32000-1, Table 214): PLAY_OR_RESUME and PLAY\n    // play; STOP/PAUSE/RESUME don't start playback. When absent, the action is\n    // JS-driven (/JS), which we can't run, so assume play.\n    const operation = action.get(\"OP\");\n    return (\n      operation === undefined ||\n      operation === AnnotationRenditionOperation.PLAY_OR_RESUME ||\n      operation === AnnotationRenditionOperation.PLAY\n    );\n  }\n\n  static #findRenditionAsset(rendition, xref, seen) {\n    if (!(rendition instanceof Dict)) {\n      return null;\n    }\n    const subtype = rendition.get(\"S\");\n    if (isName(subtype, \"MR\")) {\n      return this.#findClipAsset(rendition.get(\"C\"), xref);\n    }\n    if (isName(subtype, \"SR\")) {\n      // A selector rendition lists candidate renditions; play the first that\n      // resolves to embedded media.\n      const renditions = rendition.get(\"R\");\n      if (Array.isArray(renditions)) {\n        for (const ref of renditions) {\n          // Guard against renditions referencing each other in a cycle.\n          if (ref instanceof Ref) {\n            if (seen.has(ref)) {\n              continue;\n            }\n            seen.put(ref);\n          }\n          const asset = this.#findRenditionAsset(\n            xref.fetchIfRef(ref),\n            xref,\n            seen\n          );\n          if (asset) {\n            return asset;\n          }\n        }\n      }\n    }\n    return null;\n  }\n\n  static #findClipAsset(clip, xref) {\n    if (!(clip instanceof Dict) || !isName(clip.get(\"S\"), \"MCD\")) {\n      return null;\n    }\n    const rawData = clip.getRaw(\"D\");\n    const data = xref.fetchIfRef(rawData);\n    const contentTypeHint = clip.get(\"CT\");\n    let explicitType =\n      typeof contentTypeHint === \"string\" ? contentTypeHint : null;\n\n    let assetDict, filename;\n    if (data instanceof BaseStream) {\n      // `/D` is the embedded media stream directly.\n      assetDict = data.dict;\n      // `/N` is a human-readable label, not a filename, so it's an unreliable\n      // source for a file extension. When `/CT` is absent, prefer the stream's\n      // own `/Subtype` if it declares a media MIME type (as embedded-file\n      // streams do); `_getContentType` ignores a non-media value.\n      const name = clip.get(\"N\");\n      filename = typeof name === \"string\" ? stringToPDFString(name) : \"\";\n      if (!explicitType) {\n        const subtype = data.dict.get(\"Subtype\");\n        if (subtype instanceof Name) {\n          explicitType = subtype.name;\n        }\n      }\n    } else if (data instanceof Dict) {\n      // `/D` is a file specification; require a readable embedded file.\n      if (!FileSpec.hasEmbeddedFile(data)) {\n        return null;\n      }\n      assetDict = data;\n      ({ filename } = new FileSpec(data).serializable);\n    } else {\n      return null;\n    }\n\n    const contentType = MediaAnnotation._getContentType(\n      assetDict,\n      filename,\n      explicitType\n    );\n    if (!contentType) {\n      return null;\n    }\n    return {\n      assetRef: rawData instanceof Ref ? rawData : null,\n      assetDict,\n      filename,\n      contentType,\n    };\n  }\n}\n\nclass SoundAnnotation extends MediaAnnotation {\n  constructor(params) {\n    super(params);\n\n    const { dict, xref, annotationGlobals } = params;\n    const soundRef = dict.getRaw(\"Sound\");\n    if (!(soundRef instanceof Ref)) {\n      return;\n    }\n    let sound;\n    try {\n      sound = xref.fetch(soundRef);\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      // A corrupt sound stream: fall back to rendering the appearance.\n      warn(`SoundAnnotation: \"${ex}\".`);\n      return;\n    }\n    if (!(sound instanceof BaseStream) || !getSoundFormat(sound.dict)) {\n      // No embedded samples, or an encoding we can't turn into a playable WAV\n      // (compressed, or an unusual bit depth); just render the appearance.\n      return;\n    }\n\n    this._setMediaData(\n      {\n        assetRef: soundRef,\n        assetDict: sound.dict,\n        filename: \"sound.wav\",\n        contentType: \"audio/wav\",\n        wrapSound: true,\n      },\n      annotationGlobals\n    );\n  }\n}\n\nexport {\n  Annotation,\n  AnnotationBorderStyle,\n  AnnotationFactory,\n  getQuadPoints,\n  MarkupAnnotation,\n  PopupAnnotation,\n  WidgetAnnotation,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow } from \"../shared/util.js\";\n\nconst PARAMS = {\n  get r() {\n    return shadow(\n      this,\n      \"r\",\n      new Uint8Array([\n        7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14,\n        20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16,\n        23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10,\n        15, 21, 6, 10, 15, 21,\n      ])\n    );\n  },\n\n  get k() {\n    return shadow(\n      this,\n      \"k\",\n      new Int32Array([\n        -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426,\n        -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162,\n        1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632,\n        643717713, -373897302, -701558691, 38016083, -660478335, -405537848,\n        568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784,\n        1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556,\n        -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222,\n        -722521979, 76029189, -640364487, -421815835, 530742520, -995338651,\n        -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606,\n        -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649,\n        -145523070, -1120210379, 718787259, -343485551,\n      ])\n    );\n  },\n};\n\nfunction calculateMD5(data, offset, length) {\n  let h0 = 1732584193,\n    h1 = -271733879,\n    h2 = -1732584194,\n    h3 = 271733878;\n  // pre-processing\n  const paddedLength = (length + 72) & ~63; // data + 9 extra bytes\n  const padded = new Uint8Array(paddedLength);\n  let i, j;\n  for (i = 0; i < length; ++i) {\n    padded[i] = data[offset++];\n  }\n  padded[i++] = 0x80;\n  const n = paddedLength - 8;\n  if (i < n) {\n    i = n;\n  }\n  padded[i++] = (length << 3) & 0xff;\n  padded[i++] = (length >> 5) & 0xff;\n  padded[i++] = (length >> 13) & 0xff;\n  padded[i++] = (length >> 21) & 0xff;\n  padded[i++] = (length >>> 29) & 0xff;\n  i += 3;\n  const w = new Int32Array(16);\n  const { k, r } = PARAMS;\n  for (i = 0; i < paddedLength;) {\n    for (j = 0; j < 16; ++j, i += 4) {\n      w[j] =\n        padded[i] |\n        (padded[i + 1] << 8) |\n        (padded[i + 2] << 16) |\n        (padded[i + 3] << 24);\n    }\n    let a = h0,\n      b = h1,\n      c = h2,\n      d = h3,\n      f,\n      g;\n    for (j = 0; j < 64; ++j) {\n      if (j < 16) {\n        f = (b & c) | (~b & d);\n        g = j;\n      } else if (j < 32) {\n        f = (d & b) | (~d & c);\n        g = (5 * j + 1) & 15;\n      } else if (j < 48) {\n        f = b ^ c ^ d;\n        g = (3 * j + 5) & 15;\n      } else {\n        f = c ^ (b | ~d);\n        g = (7 * j) & 15;\n      }\n      const tmp = d,\n        rotateArg = (a + f + k[j] + w[g]) | 0,\n        rotate = r[j];\n      d = c;\n      c = b;\n      b = (b + ((rotateArg << rotate) | (rotateArg >>> (32 - rotate)))) | 0;\n      a = tmp;\n    }\n    h0 = (h0 + a) | 0;\n    h1 = (h1 + b) | 0;\n    h2 = (h2 + c) | 0;\n    h3 = (h3 + d) | 0;\n  }\n  // prettier-ignore\n  return new Uint8Array([\n    h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n    h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n    h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n    h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF\n  ]);\n}\n\nexport { calculateMD5 };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToUTF8String, warn } from \"../shared/util.js\";\nimport { parseXFAPath } from \"./core_utils.js\";\nimport { SimpleXMLParser } from \"./xml_parser.js\";\n\nfunction decodeString(str) {\n  try {\n    return stringToUTF8String(str);\n  } catch (ex) {\n    warn(`UTF-8 decoding failed: \"${ex}\".`);\n    return str;\n  }\n}\n\nclass DatasetXMLParser extends SimpleXMLParser {\n  node = null;\n\n  onEndElement(name) {\n    const node = super.onEndElement(name);\n    if (node && name === \"xfa:datasets\") {\n      this.node = node;\n\n      // We don't need anything else, so just kill the parser.\n      throw new Error(\"Aborting DatasetXMLParser.\");\n    }\n  }\n}\n\nclass DatasetReader {\n  constructor(data) {\n    if (data.datasets) {\n      this.node = new SimpleXMLParser({ hasAttributes: true }).parseFromString(\n        data.datasets\n      ).documentElement;\n    } else {\n      const parser = new DatasetXMLParser({ hasAttributes: true });\n      try {\n        parser.parseFromString(data[\"xdp:xdp\"]);\n      } catch {}\n      this.node = parser.node;\n    }\n  }\n\n  getValue(path) {\n    if (!this.node || !path) {\n      return \"\";\n    }\n    const node = this.node.searchNode(parseXFAPath(path), 0);\n\n    if (!node) {\n      return \"\";\n    }\n\n    const first = node.firstChild;\n    if (first?.nodeName === \"value\") {\n      return node.children.map(child => decodeString(child.textContent));\n    }\n\n    return decodeString(node.textContent);\n  }\n}\n\nexport { DatasetReader };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass SingleIntersector {\n  #annotation;\n\n  minX = Infinity;\n\n  minY = Infinity;\n\n  maxX = -Infinity;\n\n  maxY = -Infinity;\n\n  #quadPoints = null;\n\n  #text = [];\n\n  #extraChars = [];\n\n  #lastIntersectingQuadIndex = -1;\n\n  #canTakeExtraChars = false;\n\n  constructor(annotation) {\n    this.#annotation = annotation;\n    const quadPoints = annotation.data.quadPoints;\n    if (!quadPoints) {\n      // If there are no quad points, we use the rectangle to determine the\n      // bounds of the annotation.\n      [this.minX, this.minY, this.maxX, this.maxY] = annotation.data.rect;\n      return;\n    }\n\n    for (let i = 0, ii = quadPoints.length; i < ii; i += 8) {\n      this.minX = Math.min(this.minX, quadPoints[i]);\n      this.maxX = Math.max(this.maxX, quadPoints[i + 2]);\n      this.minY = Math.min(this.minY, quadPoints[i + 5]);\n      this.maxY = Math.max(this.maxY, quadPoints[i + 1]);\n    }\n    if (quadPoints.length > 8) {\n      this.#quadPoints = quadPoints;\n    }\n  }\n\n  /**\n   * Check if the given point intersects with the annotation's quad points.\n   * The point (x, y) is supposed to be the center of the glyph.\n   * @param {number} x\n   * @param {number} y\n   * @returns {boolean}\n   */\n  #intersects(x, y) {\n    if (this.minX >= x || this.maxX <= x || this.minY >= y || this.maxY <= y) {\n      return false;\n    }\n\n    const quadPoints = this.#quadPoints;\n    if (!quadPoints) {\n      // We've only one quad, so if we intersect min/max bounds then we\n      // intersect the quad.\n      return true;\n    }\n\n    if (this.#lastIntersectingQuadIndex >= 0) {\n      const i = this.#lastIntersectingQuadIndex;\n      if (!(\n        quadPoints[i] >= x ||\n        quadPoints[i + 2] <= x ||\n        quadPoints[i + 5] >= y ||\n        quadPoints[i + 1] <= y\n      )) {\n        return true;\n      }\n      this.#lastIntersectingQuadIndex = -1;\n    }\n\n    for (let i = 0, ii = quadPoints.length; i < ii; i += 8) {\n      if (!(\n        quadPoints[i] >= x ||\n        quadPoints[i + 2] <= x ||\n        quadPoints[i + 5] >= y ||\n        quadPoints[i + 1] <= y\n      )) {\n        this.#lastIntersectingQuadIndex = i;\n        return true;\n      }\n    }\n    return false;\n  }\n\n  addGlyph(x, y, glyph) {\n    if (!this.#intersects(x, y)) {\n      this.disableExtraChars();\n      return false;\n    }\n\n    if (this.#extraChars.length > 0) {\n      this.#text.push(this.#extraChars.join(\"\"));\n      this.#extraChars.length = 0;\n    }\n    this.#text.push(glyph);\n    this.#canTakeExtraChars = true;\n\n    return true;\n  }\n\n  addExtraChar(char) {\n    if (this.#canTakeExtraChars) {\n      this.#extraChars.push(char);\n    }\n  }\n\n  disableExtraChars() {\n    if (!this.#canTakeExtraChars) {\n      return;\n    }\n    this.#canTakeExtraChars = false;\n    this.#extraChars.length = 0;\n  }\n\n  setText() {\n    this.#annotation.data.overlaidText = this.#text.join(\"\");\n  }\n}\n\n// The grid is STEPS x STEPS.\nconst STEPS = 64;\n\nclass Intersector {\n  #intersectors = [];\n\n  #grid = [];\n\n  #minX;\n\n  #maxX;\n\n  #minY;\n\n  #maxY;\n\n  #invXRatio;\n\n  #invYRatio;\n\n  constructor(annotations) {\n    let minX = Infinity;\n    let minY = Infinity;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    const intersectors = this.#intersectors;\n    for (const annotation of annotations) {\n      if (!annotation.data.quadPoints && !annotation.data.rect) {\n        continue;\n      }\n      const intersector = new SingleIntersector(annotation);\n      intersectors.push(intersector);\n      minX = Math.min(minX, intersector.minX);\n      minY = Math.min(minY, intersector.minY);\n      maxX = Math.max(maxX, intersector.maxX);\n      maxY = Math.max(maxY, intersector.maxY);\n    }\n    this.#minX = minX;\n    this.#minY = minY;\n    this.#maxX = maxX;\n    this.#maxY = maxY;\n    this.#invXRatio = (STEPS - 1) / (maxX - minX);\n    this.#invYRatio = (STEPS - 1) / (maxY - minY);\n    for (const intersector of intersectors) {\n      // TODO: instead of using the intersector bounds, we could iterate over\n      // the grid cells that the quad points intersect.\n      const iMin = this.#getGridIndex(intersector.minX, intersector.minY);\n      const iMax = this.#getGridIndex(intersector.maxX, intersector.maxY);\n      const w = (iMax - iMin) % STEPS;\n      const h = Math.floor((iMax - iMin) / STEPS);\n      for (let i = iMin; i <= iMin + h * STEPS; i += STEPS) {\n        for (let j = 0; j <= w; j++) {\n          (this.#grid[i + j] ??= []).push(intersector);\n        }\n      }\n    }\n  }\n\n  #getGridIndex(x, y) {\n    const i = Math.floor((x - this.#minX) * this.#invXRatio);\n    const j = Math.floor((y - this.#minY) * this.#invYRatio);\n    return i + j * STEPS;\n  }\n\n  addGlyph(transform, width, height, glyph) {\n    const x = transform[4] + width / 2;\n    const y = transform[5] + height / 2;\n    if (x < this.#minX || y < this.#minY || x > this.#maxX || y > this.#maxY) {\n      return;\n    }\n    const intersectors = this.#grid[this.#getGridIndex(x, y)];\n    if (!intersectors) {\n      return;\n    }\n\n    for (const intersector of intersectors) {\n      intersector.addGlyph(x, y, glyph);\n    }\n  }\n\n  addExtraChar(char) {\n    for (const intersector of this.#intersectors) {\n      intersector.addExtraChar(char);\n    }\n  }\n\n  setText() {\n    for (const intersector of this.#intersectors) {\n      intersector.setText();\n    }\n  }\n}\n\nexport { Intersector };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow } from \"../shared/util.js\";\n\nclass Word64 {\n  constructor(highInteger, lowInteger) {\n    this.high = highInteger | 0;\n    this.low = lowInteger | 0;\n  }\n\n  and(word) {\n    this.high &= word.high;\n    this.low &= word.low;\n  }\n\n  xor(word) {\n    this.high ^= word.high;\n    this.low ^= word.low;\n  }\n\n  shiftRight(places) {\n    if (places >= 32) {\n      this.low = (this.high >>> (places - 32)) | 0;\n      this.high = 0;\n    } else {\n      this.low = (this.low >>> places) | (this.high << (32 - places));\n      this.high = (this.high >>> places) | 0;\n    }\n  }\n\n  rotateRight(places) {\n    let low, high;\n    if (places & 32) {\n      high = this.low;\n      low = this.high;\n    } else {\n      low = this.low;\n      high = this.high;\n    }\n    places &= 31;\n    this.low = (low >>> places) | (high << (32 - places));\n    this.high = (high >>> places) | (low << (32 - places));\n  }\n\n  not() {\n    this.high = ~this.high;\n    this.low = ~this.low;\n  }\n\n  add(word) {\n    const lowAdd = (this.low >>> 0) + (word.low >>> 0);\n    let highAdd = (this.high >>> 0) + (word.high >>> 0);\n    if (lowAdd > 0xffffffff) {\n      highAdd += 1;\n    }\n    this.low = lowAdd | 0;\n    this.high = highAdd | 0;\n  }\n\n  copyTo(bytes, offset) {\n    bytes[offset] = (this.high >>> 24) & 0xff;\n    bytes[offset + 1] = (this.high >> 16) & 0xff;\n    bytes[offset + 2] = (this.high >> 8) & 0xff;\n    bytes[offset + 3] = this.high & 0xff;\n    bytes[offset + 4] = (this.low >>> 24) & 0xff;\n    bytes[offset + 5] = (this.low >> 16) & 0xff;\n    bytes[offset + 6] = (this.low >> 8) & 0xff;\n    bytes[offset + 7] = this.low & 0xff;\n  }\n\n  assign(word) {\n    this.high = word.high;\n    this.low = word.low;\n  }\n}\n\nconst PARAMS = {\n  get k() {\n    return shadow(this, \"k\", [\n      new Word64(0x428a2f98, 0xd728ae22),\n      new Word64(0x71374491, 0x23ef65cd),\n      new Word64(0xb5c0fbcf, 0xec4d3b2f),\n      new Word64(0xe9b5dba5, 0x8189dbbc),\n      new Word64(0x3956c25b, 0xf348b538),\n      new Word64(0x59f111f1, 0xb605d019),\n      new Word64(0x923f82a4, 0xaf194f9b),\n      new Word64(0xab1c5ed5, 0xda6d8118),\n      new Word64(0xd807aa98, 0xa3030242),\n      new Word64(0x12835b01, 0x45706fbe),\n      new Word64(0x243185be, 0x4ee4b28c),\n      new Word64(0x550c7dc3, 0xd5ffb4e2),\n      new Word64(0x72be5d74, 0xf27b896f),\n      new Word64(0x80deb1fe, 0x3b1696b1),\n      new Word64(0x9bdc06a7, 0x25c71235),\n      new Word64(0xc19bf174, 0xcf692694),\n      new Word64(0xe49b69c1, 0x9ef14ad2),\n      new Word64(0xefbe4786, 0x384f25e3),\n      new Word64(0x0fc19dc6, 0x8b8cd5b5),\n      new Word64(0x240ca1cc, 0x77ac9c65),\n      new Word64(0x2de92c6f, 0x592b0275),\n      new Word64(0x4a7484aa, 0x6ea6e483),\n      new Word64(0x5cb0a9dc, 0xbd41fbd4),\n      new Word64(0x76f988da, 0x831153b5),\n      new Word64(0x983e5152, 0xee66dfab),\n      new Word64(0xa831c66d, 0x2db43210),\n      new Word64(0xb00327c8, 0x98fb213f),\n      new Word64(0xbf597fc7, 0xbeef0ee4),\n      new Word64(0xc6e00bf3, 0x3da88fc2),\n      new Word64(0xd5a79147, 0x930aa725),\n      new Word64(0x06ca6351, 0xe003826f),\n      new Word64(0x14292967, 0x0a0e6e70),\n      new Word64(0x27b70a85, 0x46d22ffc),\n      new Word64(0x2e1b2138, 0x5c26c926),\n      new Word64(0x4d2c6dfc, 0x5ac42aed),\n      new Word64(0x53380d13, 0x9d95b3df),\n      new Word64(0x650a7354, 0x8baf63de),\n      new Word64(0x766a0abb, 0x3c77b2a8),\n      new Word64(0x81c2c92e, 0x47edaee6),\n      new Word64(0x92722c85, 0x1482353b),\n      new Word64(0xa2bfe8a1, 0x4cf10364),\n      new Word64(0xa81a664b, 0xbc423001),\n      new Word64(0xc24b8b70, 0xd0f89791),\n      new Word64(0xc76c51a3, 0x0654be30),\n      new Word64(0xd192e819, 0xd6ef5218),\n      new Word64(0xd6990624, 0x5565a910),\n      new Word64(0xf40e3585, 0x5771202a),\n      new Word64(0x106aa070, 0x32bbd1b8),\n      new Word64(0x19a4c116, 0xb8d2d0c8),\n      new Word64(0x1e376c08, 0x5141ab53),\n      new Word64(0x2748774c, 0xdf8eeb99),\n      new Word64(0x34b0bcb5, 0xe19b48a8),\n      new Word64(0x391c0cb3, 0xc5c95a63),\n      new Word64(0x4ed8aa4a, 0xe3418acb),\n      new Word64(0x5b9cca4f, 0x7763e373),\n      new Word64(0x682e6ff3, 0xd6b2b8a3),\n      new Word64(0x748f82ee, 0x5defb2fc),\n      new Word64(0x78a5636f, 0x43172f60),\n      new Word64(0x84c87814, 0xa1f0ab72),\n      new Word64(0x8cc70208, 0x1a6439ec),\n      new Word64(0x90befffa, 0x23631e28),\n      new Word64(0xa4506ceb, 0xde82bde9),\n      new Word64(0xbef9a3f7, 0xb2c67915),\n      new Word64(0xc67178f2, 0xe372532b),\n      new Word64(0xca273ece, 0xea26619c),\n      new Word64(0xd186b8c7, 0x21c0c207),\n      new Word64(0xeada7dd6, 0xcde0eb1e),\n      new Word64(0xf57d4f7f, 0xee6ed178),\n      new Word64(0x06f067aa, 0x72176fba),\n      new Word64(0x0a637dc5, 0xa2c898a6),\n      new Word64(0x113f9804, 0xbef90dae),\n      new Word64(0x1b710b35, 0x131c471b),\n      new Word64(0x28db77f5, 0x23047d84),\n      new Word64(0x32caab7b, 0x40c72493),\n      new Word64(0x3c9ebe0a, 0x15c9bebc),\n      new Word64(0x431d67c4, 0x9c100d4c),\n      new Word64(0x4cc5d4be, 0xcb3e42b6),\n      new Word64(0x597f299c, 0xfc657e2a),\n      new Word64(0x5fcb6fab, 0x3ad6faec),\n      new Word64(0x6c44198c, 0x4a475817),\n    ]);\n  },\n};\n\nfunction ch(result, x, y, z, tmp) {\n  result.assign(x);\n  result.and(y);\n  tmp.assign(x);\n  tmp.not();\n  tmp.and(z);\n  result.xor(tmp);\n}\n\nfunction maj(result, x, y, z, tmp) {\n  result.assign(x);\n  result.and(y);\n  tmp.assign(x);\n  tmp.and(z);\n  result.xor(tmp);\n  tmp.assign(y);\n  tmp.and(z);\n  result.xor(tmp);\n}\n\nfunction sigma(result, x, tmp) {\n  result.assign(x);\n  result.rotateRight(28);\n  tmp.assign(x);\n  tmp.rotateRight(34);\n  result.xor(tmp);\n  tmp.assign(x);\n  tmp.rotateRight(39);\n  result.xor(tmp);\n}\n\nfunction sigmaPrime(result, x, tmp) {\n  result.assign(x);\n  result.rotateRight(14);\n  tmp.assign(x);\n  tmp.rotateRight(18);\n  result.xor(tmp);\n  tmp.assign(x);\n  tmp.rotateRight(41);\n  result.xor(tmp);\n}\n\nfunction littleSigma(result, x, tmp) {\n  result.assign(x);\n  result.rotateRight(1);\n  tmp.assign(x);\n  tmp.rotateRight(8);\n  result.xor(tmp);\n  tmp.assign(x);\n  tmp.shiftRight(7);\n  result.xor(tmp);\n}\n\nfunction littleSigmaPrime(result, x, tmp) {\n  result.assign(x);\n  result.rotateRight(19);\n  tmp.assign(x);\n  tmp.rotateRight(61);\n  result.xor(tmp);\n  tmp.assign(x);\n  tmp.shiftRight(6);\n  result.xor(tmp);\n}\n\nfunction calculateSHA512(data, offset, length, mode384 = false) {\n  // initial hash values\n  let h0, h1, h2, h3, h4, h5, h6, h7;\n  if (!mode384) {\n    h0 = new Word64(0x6a09e667, 0xf3bcc908);\n    h1 = new Word64(0xbb67ae85, 0x84caa73b);\n    h2 = new Word64(0x3c6ef372, 0xfe94f82b);\n    h3 = new Word64(0xa54ff53a, 0x5f1d36f1);\n    h4 = new Word64(0x510e527f, 0xade682d1);\n    h5 = new Word64(0x9b05688c, 0x2b3e6c1f);\n    h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);\n    h7 = new Word64(0x5be0cd19, 0x137e2179);\n  } else {\n    // SHA384 is exactly the same\n    // except with different starting values and a trimmed result\n    h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);\n    h1 = new Word64(0x629a292a, 0x367cd507);\n    h2 = new Word64(0x9159015a, 0x3070dd17);\n    h3 = new Word64(0x152fecd8, 0xf70e5939);\n    h4 = new Word64(0x67332667, 0xffc00b31);\n    h5 = new Word64(0x8eb44a87, 0x68581511);\n    h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);\n    h7 = new Word64(0x47b5481d, 0xbefa4fa4);\n  }\n\n  // pre-processing\n  const paddedLength = Math.ceil((length + 17) / 128) * 128;\n  const padded = new Uint8Array(paddedLength);\n  let i, j;\n  for (i = 0; i < length; ++i) {\n    padded[i] = data[offset++];\n  }\n  padded[i++] = 0x80;\n  const n = paddedLength - 16;\n  if (i < n) {\n    i = n;\n  }\n  i += 11;\n  padded[i++] = (length >>> 29) & 0xff;\n  padded[i++] = (length >> 21) & 0xff;\n  padded[i++] = (length >> 13) & 0xff;\n  padded[i++] = (length >> 5) & 0xff;\n  padded[i++] = (length << 3) & 0xff;\n\n  const w = new Array(80);\n  for (i = 0; i < 80; i++) {\n    w[i] = new Word64(0, 0);\n  }\n  const { k } = PARAMS;\n\n  let a = new Word64(0, 0),\n    b = new Word64(0, 0),\n    c = new Word64(0, 0);\n  let d = new Word64(0, 0),\n    e = new Word64(0, 0),\n    f = new Word64(0, 0);\n  let g = new Word64(0, 0),\n    h = new Word64(0, 0);\n  const t1 = new Word64(0, 0),\n    t2 = new Word64(0, 0);\n  const tmp1 = new Word64(0, 0),\n    tmp2 = new Word64(0, 0);\n  let tmp3;\n\n  // for each 1024 bit block\n  for (i = 0; i < paddedLength;) {\n    for (j = 0; j < 16; ++j) {\n      w[j].high =\n        (padded[i] << 24) |\n        (padded[i + 1] << 16) |\n        (padded[i + 2] << 8) |\n        padded[i + 3];\n      w[j].low =\n        (padded[i + 4] << 24) |\n        (padded[i + 5] << 16) |\n        (padded[i + 6] << 8) |\n        padded[i + 7];\n      i += 8;\n    }\n    for (j = 16; j < 80; ++j) {\n      tmp3 = w[j];\n      littleSigmaPrime(tmp3, w[j - 2], tmp2);\n      tmp3.add(w[j - 7]);\n      littleSigma(tmp1, w[j - 15], tmp2);\n      tmp3.add(tmp1);\n      tmp3.add(w[j - 16]);\n    }\n\n    a.assign(h0);\n    b.assign(h1);\n    c.assign(h2);\n    d.assign(h3);\n    e.assign(h4);\n    f.assign(h5);\n    g.assign(h6);\n    h.assign(h7);\n    for (j = 0; j < 80; ++j) {\n      t1.assign(h);\n      sigmaPrime(tmp1, e, tmp2);\n      t1.add(tmp1);\n      ch(tmp1, e, f, g, tmp2);\n      t1.add(tmp1);\n      t1.add(k[j]);\n      t1.add(w[j]);\n\n      sigma(t2, a, tmp2);\n      maj(tmp1, a, b, c, tmp2);\n      t2.add(tmp1);\n\n      tmp3 = h;\n      h = g;\n      g = f;\n      f = e;\n      d.add(t1);\n      e = d;\n      d = c;\n      c = b;\n      b = a;\n      tmp3.assign(t1);\n      tmp3.add(t2);\n      a = tmp3;\n    }\n    h0.add(a);\n    h1.add(b);\n    h2.add(c);\n    h3.add(d);\n    h4.add(e);\n    h5.add(f);\n    h6.add(g);\n    h7.add(h);\n  }\n\n  let result;\n  if (!mode384) {\n    result = new Uint8Array(64);\n    h0.copyTo(result, 0);\n    h1.copyTo(result, 8);\n    h2.copyTo(result, 16);\n    h3.copyTo(result, 24);\n    h4.copyTo(result, 32);\n    h5.copyTo(result, 40);\n    h6.copyTo(result, 48);\n    h7.copyTo(result, 56);\n  } else {\n    result = new Uint8Array(48);\n    h0.copyTo(result, 0);\n    h1.copyTo(result, 8);\n    h2.copyTo(result, 16);\n    h3.copyTo(result, 24);\n    h4.copyTo(result, 32);\n    h5.copyTo(result, 40);\n  }\n  return result;\n}\n\nfunction calculateSHA384(data, offset, length) {\n  return calculateSHA512(data, offset, length, /* mode384 = */ true);\n}\n\nexport { calculateSHA384, calculateSHA512 };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow } from \"../shared/util.js\";\n\nconst PARAMS = {\n  get k() {\n    return shadow(\n      this,\n      \"k\",\n      [\n        0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n        0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n        0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n        0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n        0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n        0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n        0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n        0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n        0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n        0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n        0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n      ]\n    );\n  },\n};\n\nfunction rotr(x, n) {\n  return (x >>> n) | (x << (32 - n));\n}\n\nfunction ch(x, y, z) {\n  return (x & y) ^ (~x & z);\n}\n\nfunction maj(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\n\nfunction sigma(x) {\n  return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);\n}\n\nfunction sigmaPrime(x) {\n  return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);\n}\n\nfunction littleSigma(x) {\n  return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3);\n}\n\nfunction littleSigmaPrime(x) {\n  return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10);\n}\n\nfunction calculateSHA256(data, offset, length) {\n  // initial hash values\n  let h0 = 0x6a09e667,\n    h1 = 0xbb67ae85,\n    h2 = 0x3c6ef372,\n    h3 = 0xa54ff53a,\n    h4 = 0x510e527f,\n    h5 = 0x9b05688c,\n    h6 = 0x1f83d9ab,\n    h7 = 0x5be0cd19;\n  // pre-processing\n  const paddedLength = Math.ceil((length + 9) / 64) * 64;\n  const padded = new Uint8Array(paddedLength);\n  let i, j;\n  for (i = 0; i < length; ++i) {\n    padded[i] = data[offset++];\n  }\n  padded[i++] = 0x80;\n  const n = paddedLength - 8;\n  if (i < n) {\n    i = n;\n  }\n  i += 3;\n  padded[i++] = (length >>> 29) & 0xff;\n  padded[i++] = (length >> 21) & 0xff;\n  padded[i++] = (length >> 13) & 0xff;\n  padded[i++] = (length >> 5) & 0xff;\n  padded[i++] = (length << 3) & 0xff;\n  const w = new Uint32Array(64);\n  const { k } = PARAMS;\n  // for each 512 bit block\n  for (i = 0; i < paddedLength;) {\n    for (j = 0; j < 16; ++j) {\n      w[j] =\n        (padded[i] << 24) |\n        (padded[i + 1] << 16) |\n        (padded[i + 2] << 8) |\n        padded[i + 3];\n      i += 4;\n    }\n\n    for (j = 16; j < 64; ++j) {\n      w[j] =\n        (littleSigmaPrime(w[j - 2]) +\n          w[j - 7] +\n          littleSigma(w[j - 15]) +\n          w[j - 16]) |\n        0;\n    }\n    let a = h0,\n      b = h1,\n      c = h2,\n      d = h3,\n      e = h4,\n      f = h5,\n      g = h6,\n      h = h7,\n      t1,\n      t2;\n    for (j = 0; j < 64; ++j) {\n      t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];\n      t2 = sigma(a) + maj(a, b, c);\n      h = g;\n      g = f;\n      f = e;\n      e = (d + t1) | 0;\n      d = c;\n      c = b;\n      b = a;\n      a = (t1 + t2) | 0;\n    }\n    h0 = (h0 + a) | 0;\n    h1 = (h1 + b) | 0;\n    h2 = (h2 + c) | 0;\n    h3 = (h3 + d) | 0;\n    h4 = (h4 + e) | 0;\n    h5 = (h5 + f) | 0;\n    h6 = (h6 + g) | 0;\n    h7 = (h7 + h) | 0;\n  }\n  // prettier-ignore\n  return new Uint8Array([\n    (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, (h0) & 0xFF,\n    (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, (h1) & 0xFF,\n    (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, (h2) & 0xFF,\n    (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, (h3) & 0xFF,\n    (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, (h4) & 0xFF,\n    (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, (h5) & 0xFF,\n    (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, (h6) & 0xFF,\n    (h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, (h7) & 0xFF\n  ]);\n}\n\nexport { calculateSHA256 };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DecodeStream } from \"./decode_stream.js\";\n\nconst chunkSize = 512;\n\nclass DecryptStream extends DecodeStream {\n  #nextChunk = null;\n\n  constructor(str, maybeLength, decrypt) {\n    super(maybeLength);\n\n    this.stream = str;\n    this.dict = str.dict;\n    this.decrypt = decrypt;\n  }\n\n  readBlock() {\n    let chunk = this.#nextChunk ?? this.stream.getBytes(chunkSize);\n    if (!chunk?.length) {\n      this.eof = true;\n      return;\n    }\n    this.#nextChunk = this.stream.getBytes(chunkSize);\n    const hasMoreData = this.#nextChunk?.length > 0;\n\n    const decrypt = this.decrypt;\n    chunk = decrypt(chunk, !hasMoreData);\n\n    const bufferLength = this.bufferLength,\n      newLength = bufferLength + chunk.length,\n      buffer = this.ensureBuffer(newLength);\n    buffer.set(chunk, bufferLength);\n    this.bufferLength = newLength;\n  }\n\n  getOriginalStream() {\n    return this;\n  }\n}\n\nexport { DecryptStream };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst NON_ASCII_SPACES = new Set([\n  0x00a0, 0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n  0x2007, 0x2008, 0x2009, 0x200a, 0x200b, 0x202f, 0x205f, 0x3000,\n]);\n\nconst COMMONLY_MAPPED_TO_NOTHING = new Set([\n  0x00ad, 0x034f, 0x1806, 0x180b, 0x180c, 0x180d, 0x200b, 0x200c, 0x200d,\n  0x2060, 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07,\n  0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f, 0xfeff,\n]);\n\nfunction saslPrep(str) {\n  let mapped = \"\";\n  for (const char of str) {\n    const code = char.codePointAt(0);\n    if (NON_ASCII_SPACES.has(code)) {\n      mapped += \" \";\n    } else if (!COMMONLY_MAPPED_TO_NOTHING.has(code)) {\n      mapped += char;\n    }\n  }\n\n  // SASLprep also specifies prohibited-output and bidirectional-text checks.\n  // They are intentionally omitted here since this function is only used to\n  // derive password candidates when opening PDFs. Being permissive lets us\n  // handle non-conforming files whose producers omitted those checks too; the\n  // derived candidate must still pass the PDF password verification.\n\n  // TODO: SASLprep is based on Unicode 3.2, whereas String.prototype.normalize\n  // uses the Unicode version provided by the JavaScript runtime. Use frozen\n  // Unicode 3.2 normalization data if this difference causes interoperability\n  // problems in practice.\n  return mapped.normalize(\"NFKC\");\n}\n\nexport { saslPrep };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @import {BaseStream} from \"./base_stream.js\";\n */\n\nimport {\n  bytesToString,\n  FormatError,\n  isArrayEqual,\n  PasswordException,\n  PasswordResponses,\n  shadow,\n  stringToBytes,\n  unreachable,\n  utf8StringToString,\n  warn,\n} from \"../shared/util.js\";\nimport { calculateSHA384, calculateSHA512 } from \"./calculate_sha_other.js\";\nimport { Dict, isDict, isName, Name } from \"./primitives.js\";\nimport { calculateMD5 } from \"./calculate_md5.js\";\nimport { calculateSHA256 } from \"./calculate_sha256.js\";\nimport { DecryptStream } from \"./decrypt_stream.js\";\nimport { saslPrep } from \"./sasl_prep.js\";\n\n/**\n * @typedef {typeof AES128Cipher | typeof AES256Cipher | typeof ARCFourCipher\n * | typeof NullCipher} CipherConstructors\n */\n\n/**\n * @callback ResolveCipher\n *   Find the appropriate cipher class based on the filter name.\n * @param {Name | null} [filterName]\n *   Name.\n * @returns {CipherConstructors}\n *   Cipher constructor.\n */\n\nclass ARCFourCipher {\n  a = 0;\n\n  b = 0;\n\n  constructor(key) {\n    const s = new Uint8Array(256);\n    const keyLength = key.length;\n\n    for (let i = 0; i < 256; ++i) {\n      s[i] = i;\n    }\n    for (let i = 0, j = 0; i < 256; ++i) {\n      const tmp = s[i];\n      j = (j + tmp + key[i % keyLength]) & 0xff;\n      s[i] = s[j];\n      s[j] = tmp;\n    }\n    this.s = s;\n  }\n\n  encryptBlock(data) {\n    let a = this.a,\n      b = this.b;\n    const s = this.s;\n    const n = data.length;\n    const output = new Uint8Array(n);\n    for (let i = 0; i < n; ++i) {\n      a = (a + 1) & 0xff;\n      const tmp = s[a];\n      b = (b + tmp) & 0xff;\n      const tmp2 = s[b];\n      s[a] = tmp2;\n      s[b] = tmp;\n      output[i] = data[i] ^ s[(tmp + tmp2) & 0xff];\n    }\n    this.a = a;\n    this.b = b;\n    return output;\n  }\n\n  decryptBlock(data) {\n    return this.encryptBlock(data);\n  }\n\n  encrypt(data) {\n    return this.encryptBlock(data);\n  }\n}\n\nclass NullCipher {\n  decryptBlock(data) {\n    return data;\n  }\n\n  encrypt(data) {\n    return data;\n  }\n}\n\nclass AESBaseCipher {\n  _s = new Uint8Array([\n    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,\n    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,\n    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,\n    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,\n    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,\n    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,\n    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,\n    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,\n    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,\n    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,\n    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,\n    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,\n    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,\n    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,\n    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,\n    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,\n    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,\n    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,\n    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,\n    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,\n    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,\n    0xb0, 0x54, 0xbb, 0x16,\n  ]);\n\n  _inv_s = new Uint8Array([\n    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,\n    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,\n    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,\n    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,\n    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,\n    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,\n    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,\n    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,\n    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,\n    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,\n    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,\n    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,\n    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,\n    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,\n    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,\n    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,\n    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,\n    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,\n    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,\n    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,\n    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,\n    0x55, 0x21, 0x0c, 0x7d,\n  ]);\n\n  _mix = new Uint32Array([\n    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,\n    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,\n    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,\n    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,\n    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,\n    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,\n    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,\n    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,\n    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,\n    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,\n    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,\n    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,\n    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,\n    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,\n    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,\n    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,\n    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,\n    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,\n    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,\n    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,\n    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,\n    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,\n    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,\n    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,\n    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,\n    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,\n    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,\n    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,\n    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,\n    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,\n    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,\n    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,\n    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,\n    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,\n    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,\n    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,\n    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,\n    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,\n    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,\n    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,\n    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,\n    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,\n    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3,\n  ]);\n\n  _mixCol = new Uint8Array(256).map((_, i) =>\n    i < 128 ? i << 1 : (i << 1) ^ 0x1b\n  );\n\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === AESBaseCipher\n    ) {\n      unreachable(\"Cannot initialize AESBaseCipher.\");\n    }\n    this.buffer = new Uint8Array(16);\n    this.bufferPosition = 0;\n  }\n\n  _expandKey(cipherKey) {\n    unreachable(\"Cannot call `_expandKey` on the base class\");\n  }\n\n  _decrypt(input, key) {\n    let t, u, v;\n    const state = new Uint8Array(16);\n    state.set(input);\n\n    // AddRoundKey\n    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n      state[j] ^= key[k];\n    }\n    for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {\n      // InvShiftRows\n      t = state[13];\n      state[13] = state[9];\n      state[9] = state[5];\n      state[5] = state[1];\n      state[1] = t;\n      t = state[14];\n      u = state[10];\n      state[14] = state[6];\n      state[10] = state[2];\n      state[6] = t;\n      state[2] = u;\n      t = state[15];\n      u = state[11];\n      v = state[7];\n      state[15] = state[3];\n      state[11] = t;\n      state[7] = u;\n      state[3] = v;\n      // InvSubBytes\n      for (let j = 0; j < 16; ++j) {\n        state[j] = this._inv_s[state[j]];\n      }\n      // AddRoundKey\n      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n        state[j] ^= key[k];\n      }\n      // InvMixColumns\n      for (let j = 0; j < 16; j += 4) {\n        const s0 = this._mix[state[j]];\n        const s1 = this._mix[state[j + 1]];\n        const s2 = this._mix[state[j + 2]];\n        const s3 = this._mix[state[j + 3]];\n        t =\n          s0 ^\n          (s1 >>> 8) ^\n          (s1 << 24) ^\n          (s2 >>> 16) ^\n          (s2 << 16) ^\n          (s3 >>> 24) ^\n          (s3 << 8);\n        state[j] = (t >>> 24) & 0xff;\n        state[j + 1] = (t >> 16) & 0xff;\n        state[j + 2] = (t >> 8) & 0xff;\n        state[j + 3] = t & 0xff;\n      }\n    }\n    // InvShiftRows\n    t = state[13];\n    state[13] = state[9];\n    state[9] = state[5];\n    state[5] = state[1];\n    state[1] = t;\n    t = state[14];\n    u = state[10];\n    state[14] = state[6];\n    state[10] = state[2];\n    state[6] = t;\n    state[2] = u;\n    t = state[15];\n    u = state[11];\n    v = state[7];\n    state[15] = state[3];\n    state[11] = t;\n    state[7] = u;\n    state[3] = v;\n    for (let j = 0; j < 16; ++j) {\n      // InvSubBytes\n      state[j] = this._inv_s[state[j]];\n      // AddRoundKey\n      state[j] ^= key[j];\n    }\n    return state;\n  }\n\n  _encrypt(input, key) {\n    const s = this._s;\n\n    let t, u, v;\n    const state = new Uint8Array(16);\n    state.set(input);\n\n    for (let j = 0; j < 16; ++j) {\n      // AddRoundKey\n      state[j] ^= key[j];\n    }\n\n    for (let i = 1; i < this._cyclesOfRepetition; i++) {\n      // SubBytes\n      for (let j = 0; j < 16; ++j) {\n        state[j] = s[state[j]];\n      }\n      // ShiftRows\n      v = state[1];\n      state[1] = state[5];\n      state[5] = state[9];\n      state[9] = state[13];\n      state[13] = v;\n      v = state[2];\n      u = state[6];\n      state[2] = state[10];\n      state[6] = state[14];\n      state[10] = v;\n      state[14] = u;\n      v = state[3];\n      u = state[7];\n      t = state[11];\n      state[3] = state[15];\n      state[7] = v;\n      state[11] = u;\n      state[15] = t;\n      // MixColumns\n      for (let j = 0; j < 16; j += 4) {\n        const s0 = state[j];\n        const s1 = state[j + 1];\n        const s2 = state[j + 2];\n        const s3 = state[j + 3];\n        t = s0 ^ s1 ^ s2 ^ s3;\n        state[j] ^= t ^ this._mixCol[s0 ^ s1];\n        state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];\n        state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];\n        state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];\n      }\n      // AddRoundKey\n      for (let j = 0, k = i * 16; j < 16; ++j, ++k) {\n        state[j] ^= key[k];\n      }\n    }\n\n    // SubBytes\n    for (let j = 0; j < 16; ++j) {\n      state[j] = s[state[j]];\n    }\n    // ShiftRows\n    v = state[1];\n    state[1] = state[5];\n    state[5] = state[9];\n    state[9] = state[13];\n    state[13] = v;\n    v = state[2];\n    u = state[6];\n    state[2] = state[10];\n    state[6] = state[14];\n    state[10] = v;\n    state[14] = u;\n    v = state[3];\n    u = state[7];\n    t = state[11];\n    state[3] = state[15];\n    state[7] = v;\n    state[11] = u;\n    state[15] = t;\n    // AddRoundKey\n    for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {\n      state[j] ^= key[k];\n    }\n    return state;\n  }\n\n  _decryptBlock2(data, finalize) {\n    const sourceLength = data.length;\n    let buffer = this.buffer,\n      bufferLength = this.bufferPosition;\n    const result = [];\n    let iv = this.iv;\n\n    for (let i = 0; i < sourceLength; ++i) {\n      buffer[bufferLength] = data[i];\n      ++bufferLength;\n      if (bufferLength < 16) {\n        continue;\n      }\n      // buffer is full, decrypting\n      const plain = this._decrypt(buffer, this._key);\n      // xor-ing the IV vector to get plain text\n      for (let j = 0; j < 16; ++j) {\n        plain[j] ^= iv[j];\n      }\n      iv = buffer;\n      result.push(plain);\n      buffer = new Uint8Array(16);\n      bufferLength = 0;\n    }\n    // saving incomplete buffer\n    this.buffer = buffer;\n    this.bufferLength = bufferLength;\n    this.iv = iv;\n    if (result.length === 0) {\n      return new Uint8Array(0);\n    }\n    // combining plain text blocks into one\n    let outputLength = 16 * result.length;\n    if (finalize) {\n      // undo a padding that is described in RFC 2898\n      const lastBlock = result.at(-1);\n      let psLen = lastBlock[15];\n      if (psLen <= 16) {\n        for (let i = 15, ii = 16 - psLen; i >= ii; --i) {\n          if (lastBlock[i] !== psLen) {\n            // Invalid padding, assume that the block has no padding.\n            psLen = 0;\n            break;\n          }\n        }\n        outputLength -= psLen;\n        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);\n      }\n    }\n    const output = new Uint8Array(outputLength);\n    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n      output.set(result[i], j);\n    }\n    return output;\n  }\n\n  decryptBlock(data, finalize, iv = null) {\n    const sourceLength = data.length;\n    const buffer = this.buffer;\n    let bufferLength = this.bufferPosition;\n    // If an IV is not supplied, wait for IV values. They are at the start\n    // of the stream.\n    if (iv) {\n      this.iv = iv;\n    } else {\n      for (\n        let i = 0;\n        bufferLength < 16 && i < sourceLength;\n        ++i, ++bufferLength\n      ) {\n        buffer[bufferLength] = data[i];\n      }\n      if (bufferLength < 16) {\n        // Need more data.\n        this.bufferLength = bufferLength;\n        return new Uint8Array(0);\n      }\n      this.iv = buffer;\n      data = data.subarray(16);\n    }\n    this.buffer = new Uint8Array(16);\n    this.bufferLength = 0;\n    // starting decryption\n    this.decryptBlock = this._decryptBlock2;\n    return this.decryptBlock(data, finalize);\n  }\n\n  encrypt(data, iv) {\n    const sourceLength = data.length;\n    let buffer = this.buffer,\n      bufferLength = this.bufferPosition;\n    const result = [];\n\n    iv ||= new Uint8Array(16);\n    for (let i = 0; i < sourceLength; ++i) {\n      buffer[bufferLength] = data[i];\n      ++bufferLength;\n      if (bufferLength < 16) {\n        continue;\n      }\n\n      for (let j = 0; j < 16; ++j) {\n        buffer[j] ^= iv[j];\n      }\n\n      // buffer is full, encrypting\n      const cipher = this._encrypt(buffer, this._key);\n      iv = cipher;\n      result.push(cipher);\n      buffer = new Uint8Array(16);\n      bufferLength = 0;\n    }\n    // saving incomplete buffer\n    this.buffer = buffer;\n    this.bufferLength = bufferLength;\n    this.iv = iv;\n    if (result.length === 0) {\n      return new Uint8Array(0);\n    }\n    // combining plain text blocks into one\n    const outputLength = 16 * result.length;\n    const output = new Uint8Array(outputLength);\n    for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {\n      output.set(result[i], j);\n    }\n    return output;\n  }\n}\n\nclass AES128Cipher extends AESBaseCipher {\n  _rcon = new Uint8Array([\n    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,\n    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,\n    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,\n    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,\n    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,\n    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,\n    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,\n    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,\n    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,\n    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,\n    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,\n    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,\n    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,\n    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,\n    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,\n    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,\n    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,\n    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,\n    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,\n    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,\n    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,\n    0x74, 0xe8, 0xcb, 0x8d,\n  ]);\n\n  constructor(key) {\n    super();\n\n    this._cyclesOfRepetition = 10;\n    this._keySize = 160; // bits\n\n    this._key = this._expandKey(key);\n  }\n\n  _expandKey(cipherKey) {\n    const b = 176;\n    const s = this._s;\n    const rcon = this._rcon;\n\n    const result = new Uint8Array(b);\n    result.set(cipherKey);\n\n    for (let j = 16, i = 1; j < b; ++i) {\n      // RotWord\n      let t1 = result[j - 3];\n      let t2 = result[j - 2];\n      let t3 = result[j - 1];\n      let t4 = result[j - 4];\n      // SubWord\n      t1 = s[t1];\n      t2 = s[t2];\n      t3 = s[t3];\n      t4 = s[t4];\n      // Rcon\n      t1 ^= rcon[i];\n      for (let n = 0; n < 4; ++n) {\n        result[j] = t1 ^= result[j - 16];\n        j++;\n        result[j] = t2 ^= result[j - 16];\n        j++;\n        result[j] = t3 ^= result[j - 16];\n        j++;\n        result[j] = t4 ^= result[j - 16];\n        j++;\n      }\n    }\n    return result;\n  }\n}\n\nclass AES256Cipher extends AESBaseCipher {\n  constructor(key) {\n    super();\n\n    this._cyclesOfRepetition = 14;\n    this._keySize = 224; // bits\n\n    this._key = this._expandKey(key);\n  }\n\n  _expandKey(cipherKey) {\n    const b = 240;\n    const s = this._s;\n\n    const result = new Uint8Array(b);\n    result.set(cipherKey);\n\n    let r = 1;\n    let t1, t2, t3, t4;\n    for (let j = 32, i = 1; j < b; ++i) {\n      if (j % 32 === 16) {\n        t1 = s[t1];\n        t2 = s[t2];\n        t3 = s[t3];\n        t4 = s[t4];\n      } else if (j % 32 === 0) {\n        // RotWord\n        t1 = result[j - 3];\n        t2 = result[j - 2];\n        t3 = result[j - 1];\n        t4 = result[j - 4];\n        // SubWord\n        t1 = s[t1];\n        t2 = s[t2];\n        t3 = s[t3];\n        t4 = s[t4];\n        // Rcon\n        t1 ^= r;\n        if ((r <<= 1) >= 256) {\n          r = (r ^ 0x1b) & 0xff;\n        }\n      }\n\n      for (let n = 0; n < 4; ++n) {\n        result[j] = t1 ^= result[j - 32];\n        j++;\n        result[j] = t2 ^= result[j - 32];\n        j++;\n        result[j] = t3 ^= result[j - 32];\n        j++;\n        result[j] = t4 ^= result[j - 32];\n        j++;\n      }\n    }\n    return result;\n  }\n}\n\nclass PDFBase {\n  constructor() {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === PDFBase\n    ) {\n      unreachable(\"Cannot initialize PDFBase.\");\n    }\n  }\n\n  _hash(password, input, userBytes) {\n    unreachable(\"Abstract method `_hash` called\");\n  }\n\n  checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerValidationSalt, password.length);\n    hashData.set(userBytes, password.length + ownerValidationSalt.length);\n    const result = this._hash(password, hashData, userBytes);\n    return isArrayEqual(result, ownerPassword);\n  }\n\n  checkUserPassword(password, userValidationSalt, userPassword) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userValidationSalt, password.length);\n    const result = this._hash(password, hashData, []);\n    return isArrayEqual(result, userPassword);\n  }\n\n  getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\n    const hashData = new Uint8Array(password.length + 56);\n    hashData.set(password, 0);\n    hashData.set(ownerKeySalt, password.length);\n    hashData.set(userBytes, password.length + ownerKeySalt.length);\n    const key = this._hash(password, hashData, userBytes);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\n  }\n\n  getUserKey(password, userKeySalt, userEncryption) {\n    const hashData = new Uint8Array(password.length + 8);\n    hashData.set(password, 0);\n    hashData.set(userKeySalt, password.length);\n    // `key` is the decryption key for the UE string.\n    const key = this._hash(password, hashData, []);\n    const cipher = new AES256Cipher(key);\n    return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\n  }\n}\n\nclass PDF17 extends PDFBase {\n  _hash(password, input, userBytes) {\n    return calculateSHA256(input, 0, input.length);\n  }\n}\n\nclass PDF20 extends PDFBase {\n  _hash(password, input, userBytes) {\n    // This refers to Algorithm 2.B as defined in ISO 32000-2.\n    let k = calculateSHA256(input, 0, input.length).subarray(0, 32);\n    let e = [0];\n    let i = 0;\n    while (i < 64 || e.at(-1) > i - 32) {\n      const combinedLength = password.length + k.length + userBytes.length,\n        combinedArray = new Uint8Array(combinedLength);\n      let writeOffset = 0;\n      combinedArray.set(password, writeOffset);\n      writeOffset += password.length;\n      combinedArray.set(k, writeOffset);\n      writeOffset += k.length;\n      combinedArray.set(userBytes, writeOffset);\n\n      const k1 = new Uint8Array(combinedLength * 64);\n      for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) {\n        k1.set(combinedArray, pos);\n      }\n      // AES128 CBC NO PADDING with first 16 bytes of k as the key\n      // and the second 16 as the iv.\n      const cipher = new AES128Cipher(k.subarray(0, 16));\n      e = cipher.encrypt(k1, k.subarray(16, 32));\n      // Now we have to take the first 16 bytes of an unsigned big endian\n      // integer and compute the remainder modulo 3. That is a fairly large\n      // number and JavaScript isn't going to handle that well.\n      // The number is e0 + 256 * e1 + 256^2 * e2... and 256 % 3 === 1, hence\n      // the powers of 256 are === 1 modulo 3 and finally the number modulo 3\n      // is equal to the remainder modulo 3 of the sum of the e_n.\n      const remainder = Math.sumPrecise(e.slice(0, 16)) % 3;\n      if (remainder === 0) {\n        k = calculateSHA256(e, 0, e.length);\n      } else if (remainder === 1) {\n        k = calculateSHA384(e, 0, e.length);\n      } else if (remainder === 2) {\n        k = calculateSHA512(e, 0, e.length);\n      }\n      i++;\n    }\n    return k.subarray(0, 32);\n  }\n}\n\nclass CipherTransform {\n  /** @type {Map<string, CipherConstructors>} */\n  #cipherCache = new Map();\n\n  /** @type {Name | null} */\n  embeddedFilterName = null;\n\n  /**\n   * @param {ResolveCipher} resolveCipher\n   *   Resolve a cipher constructor from a crypt filter name.\n   * @param {Name | null} [stringFilterName]\n   *   Default crypt filter for strings.\n   * @param {Name | null} [streamFilterName]\n   *   Default crypt filter for streams.\n   */\n  constructor(resolveCipher, stringFilterName = null, streamFilterName = null) {\n    this.resolveCipher = resolveCipher;\n    this.streamFilterName = streamFilterName;\n    this.stringFilterName = stringFilterName;\n  }\n\n  /**\n   * @param {Name | null} [filterName]\n   *   Crypt filter name.\n   * @returns {CipherConstructors}\n   *   Cipher constructor.\n   */\n  #getCipher(filterName = null) {\n    const key = filterName instanceof Name ? filterName.name : \"__default__\";\n\n    return this.#cipherCache.getOrInsertComputed(key, () =>\n      this.resolveCipher(filterName)\n    );\n  }\n\n  /**\n   * @param {BaseStream} stream\n   * @param {number | null} length\n   * @param {Name | null} [cryptFilterName]\n   * @returns {DecryptStream}\n   */\n  createStream(stream, length, cryptFilterName = null) {\n    const defaultFilterName =\n      this.embeddedFilterName && isDict(stream.dict, \"EmbeddedFile\")\n        ? this.embeddedFilterName\n        : this.streamFilterName;\n    const Cipher = this.#getCipher(cryptFilterName || defaultFilterName);\n    const cipher = new Cipher();\n    return new DecryptStream(\n      stream,\n      length,\n      function cipherTransformDecryptStream(data, finalize) {\n        return cipher.decryptBlock(data, finalize);\n      }\n    );\n  }\n\n  decryptString(s) {\n    const Cipher = this.#getCipher(this.stringFilterName);\n    const cipher = new Cipher();\n    let data = stringToBytes(s);\n    data = cipher.decryptBlock(data, true);\n    return bytesToString(data);\n  }\n\n  encryptString(s) {\n    const Cipher = this.#getCipher(this.stringFilterName);\n    const cipher = new Cipher();\n    if (cipher instanceof AESBaseCipher) {\n      // Append some chars equal to \"16 - (M mod 16)\"\n      // where M is the string length (see section 7.6.2 in PDF specification)\n      // to have a final string where the length is a multiple of 16.\n      // Special note:\n      //   \"Note that the pad is present when M is evenly divisible by 16;\n      //   it contains 16 bytes of 0x10.\"\n      const strLen = s.length;\n      const pad = 16 - (strLen % 16);\n      s += String.fromCharCode(pad).repeat(pad);\n\n      // Generate an initialization vector\n      const iv = new Uint8Array(16);\n      crypto.getRandomValues(iv);\n\n      let data = stringToBytes(s);\n      data = cipher.encrypt(data, iv);\n\n      const buf = new Uint8Array(16 + data.length);\n      buf.set(iv);\n      buf.set(data, 16);\n\n      return bytesToString(buf);\n    }\n\n    let data = stringToBytes(s);\n    data = cipher.encrypt(data);\n    return bytesToString(data);\n  }\n}\n\nfunction utf8PasswordToBytes(password) {\n  try {\n    password = utf8StringToString(password);\n  } catch {\n    warn(\"CipherTransformFactory: Unable to convert UTF8 encoded password.\");\n  }\n  return stringToBytes(password);\n}\n\nclass CipherTransformFactory {\n  #fileId;\n\n  static get _defaultPasswordBytes() {\n    return shadow(\n      this,\n      \"_defaultPasswordBytes\",\n      new Uint8Array([\n        0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56,\n        0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80,\n        0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a,\n      ])\n    );\n  }\n\n  #createEncryptionKey20(\n    revision,\n    password,\n    ownerPassword,\n    ownerValidationSalt,\n    ownerKeySalt,\n    uBytes,\n    userPassword,\n    userValidationSalt,\n    userKeySalt,\n    ownerEncryption,\n    userEncryption,\n    perms\n  ) {\n    if (password) {\n      const passwordLength = Math.min(127, password.length);\n      password = password.subarray(0, passwordLength);\n    } else {\n      password = [];\n    }\n    const pdfAlgorithm = revision === 6 ? new PDF20() : new PDF17();\n\n    if (\n      pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)\n    ) {\n      return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);\n    } else if (\n      password.length &&\n      pdfAlgorithm.checkOwnerPassword(\n        password,\n        ownerValidationSalt,\n        uBytes,\n        ownerPassword\n      )\n    ) {\n      return pdfAlgorithm.getOwnerKey(\n        password,\n        ownerKeySalt,\n        uBytes,\n        ownerEncryption\n      );\n    }\n\n    return null;\n  }\n\n  #prepareKeyData(\n    fileId,\n    password,\n    ownerPassword,\n    userPassword,\n    flags,\n    revision,\n    keyLength,\n    encryptMetadata\n  ) {\n    const hashDataSize = 40 + ownerPassword.length + fileId.length;\n    const hashData = new Uint8Array(hashDataSize);\n    let i = 0,\n      j,\n      n;\n    if (password) {\n      n = Math.min(32, password.length);\n      for (; i < n; ++i) {\n        hashData[i] = password[i];\n      }\n    }\n    j = 0;\n    while (i < 32) {\n      hashData[i++] = CipherTransformFactory._defaultPasswordBytes[j++];\n    }\n    // as now the padded password in the hashData[0..i]\n    hashData.set(ownerPassword, i);\n    i += ownerPassword.length;\n    hashData[i++] = flags & 0xff;\n    hashData[i++] = (flags >> 8) & 0xff;\n    hashData[i++] = (flags >> 16) & 0xff;\n    hashData[i++] = (flags >>> 24) & 0xff;\n    hashData.set(fileId, i);\n    i += fileId.length;\n    if (revision >= 4 && !encryptMetadata) {\n      hashData.fill(0xff, i, i + 4);\n      i += 4;\n    }\n    let hash = calculateMD5(hashData, 0, i);\n    const keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, keyLengthInBytes);\n      }\n    }\n    const encryptionKey = hash.subarray(0, keyLengthInBytes);\n    let cipher, checkData;\n\n    if (revision >= 3) {\n      i = 0;\n      hashData.set(CipherTransformFactory._defaultPasswordBytes, i);\n      i += 32;\n      hashData.set(fileId, i);\n      i += fileId.length;\n\n      cipher = new ARCFourCipher(encryptionKey);\n      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));\n      n = encryptionKey.length;\n      const derivedKey = new Uint8Array(n);\n      for (j = 1; j <= 19; ++j) {\n        for (let k = 0; k < n; ++k) {\n          derivedKey[k] = encryptionKey[k] ^ j;\n        }\n        cipher = new ARCFourCipher(derivedKey);\n        checkData = cipher.encryptBlock(checkData);\n      }\n    } else {\n      cipher = new ARCFourCipher(encryptionKey);\n      checkData = cipher.encryptBlock(\n        CipherTransformFactory._defaultPasswordBytes\n      );\n    }\n    return checkData.every((data, k) => userPassword[k] === data)\n      ? encryptionKey\n      : null;\n  }\n\n  #decodeUserPassword(password, ownerPassword, revision, keyLength) {\n    const hashData = new Uint8Array(32);\n    let i = 0;\n    const n = Math.min(32, password.length);\n    for (; i < n; ++i) {\n      hashData[i] = password[i];\n    }\n    let j = 0;\n    while (i < 32) {\n      hashData[i++] = CipherTransformFactory._defaultPasswordBytes[j++];\n    }\n    let hash = calculateMD5(hashData, 0, i);\n    const keyLengthInBytes = keyLength >> 3;\n    if (revision >= 3) {\n      for (j = 0; j < 50; ++j) {\n        hash = calculateMD5(hash, 0, hash.length);\n      }\n    }\n\n    let cipher, userPassword;\n    if (revision >= 3) {\n      userPassword = ownerPassword;\n      const derivedKey = new Uint8Array(keyLengthInBytes);\n      for (j = 19; j >= 0; j--) {\n        for (let k = 0; k < keyLengthInBytes; ++k) {\n          derivedKey[k] = hash[k] ^ j;\n        }\n        cipher = new ARCFourCipher(derivedKey);\n        userPassword = cipher.encryptBlock(userPassword);\n      }\n    } else {\n      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));\n      userPassword = cipher.encryptBlock(ownerPassword);\n    }\n    return userPassword;\n  }\n\n  #buildObjectKey(num, gen, encryptionKey, isAes = false) {\n    const n = encryptionKey.length;\n    const key = new Uint8Array(n + 9);\n    key.set(encryptionKey);\n    let i = n;\n    key[i++] = num & 0xff;\n    key[i++] = (num >> 8) & 0xff;\n    key[i++] = (num >> 16) & 0xff;\n    key[i++] = gen & 0xff;\n    key[i++] = (gen >> 8) & 0xff;\n    if (isAes) {\n      key[i++] = 0x73;\n      key[i++] = 0x41;\n      key[i++] = 0x6c;\n      key[i++] = 0x54;\n    }\n    const hash = calculateMD5(key, 0, i);\n    return hash.subarray(0, Math.min(n + 5, 16));\n  }\n\n  constructor(dict, fileId, password) {\n    const filter = dict.get(\"Filter\");\n    if (!isName(filter, \"Standard\")) {\n      throw new FormatError(\"unknown encryption method\");\n    }\n    this.filterName = filter.name;\n    this.dict = dict;\n    this.#fileId = fileId;\n    const algorithm = dict.get(\"V\");\n    if (\n      !Number.isInteger(algorithm) ||\n      (algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5)\n    ) {\n      throw new FormatError(\"unsupported encryption algorithm\");\n    }\n    this.algorithm = algorithm;\n    let keyLength = dict.get(\"Length\");\n    if (!keyLength) {\n      // Spec asks to rely on encryption dictionary's Length entry, however\n      // some PDFs don't have it. Trying to recover.\n      if (algorithm <= 3) {\n        // For 1 and 2 it's fixed to 40-bit, for 3 40-bit is a minimal value.\n        keyLength = 40;\n      } else {\n        // Trying to find default handler -- it usually has Length.\n        const cfDict = dict.get(\"CF\");\n        const streamCryptoName = dict.get(\"StmF\");\n        if (cfDict instanceof Dict && streamCryptoName instanceof Name) {\n          cfDict.suppressEncryption = true; // See comment below.\n          const handlerDict = cfDict.get(streamCryptoName.name);\n          keyLength = handlerDict?.get(\"Length\") || 128;\n          if (keyLength < 40) {\n            // Sometimes it's incorrect value of bits, generators specify\n            // bytes.\n            keyLength <<= 3;\n          }\n        }\n      }\n    }\n    if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {\n      throw new FormatError(\"invalid key length\");\n    }\n\n    let cf = null;\n    let stmf = Name.get(\"Identity\");\n    let strf = Name.get(\"Identity\");\n    let eff = stmf;\n\n    if (algorithm >= 4) {\n      cf = dict.get(\"CF\");\n      if (cf instanceof Dict) {\n        // The 'CF' dictionary itself should not be encrypted, and by setting\n        // `suppressEncryption` we can prevent an infinite loop inside of\n        // `XRef_fetchUncompressed` if the dictionary contains indirect\n        // objects (fixes issue7665.pdf).\n        cf.suppressEncryption = true;\n      }\n      stmf = dict.get(\"StmF\") || Name.get(\"Identity\");\n      strf = dict.get(\"StrF\") || Name.get(\"Identity\");\n      eff = dict.get(\"EFF\") || stmf;\n    }\n    this.cf = cf;\n    this.stmf = stmf;\n    this.strf = strf;\n    this.eff = eff;\n\n    const ownerBytes = stringToBytes(dict.get(\"O\")),\n      userBytes = stringToBytes(dict.get(\"U\"));\n    // prepare keys\n    const ownerPassword = ownerBytes.subarray(0, 32);\n    const userPassword = userBytes.subarray(0, 32);\n    const flags = dict.get(\"P\");\n    const revision = dict.get(\"R\");\n    // meaningful when V is 4 or 5\n    const encryptMetadata =\n      (algorithm === 4 || algorithm === 5) &&\n      dict.get(\"EncryptMetadata\") !== false;\n    this.encryptMetadata = encryptMetadata;\n\n    const fileIdBytes = stringToBytes(fileId);\n    let passwordBytes, rawPasswordBytes;\n    if (password) {\n      if (revision === 6) {\n        const preppedPassword = saslPrep(password);\n        passwordBytes = utf8PasswordToBytes(preppedPassword);\n        if (preppedPassword !== password) {\n          rawPasswordBytes = utf8PasswordToBytes(password);\n        }\n      } else if (algorithm === 5) {\n        passwordBytes = utf8PasswordToBytes(password);\n      } else {\n        passwordBytes = stringToBytes(password);\n      }\n    }\n\n    let encryptionKey;\n    if (algorithm !== 5) {\n      encryptionKey = this.#prepareKeyData(\n        fileIdBytes,\n        passwordBytes,\n        ownerPassword,\n        userPassword,\n        flags,\n        revision,\n        keyLength,\n        encryptMetadata\n      );\n    } else {\n      const ownerValidationSalt = ownerBytes.subarray(32, 40);\n      const ownerKeySalt = ownerBytes.subarray(40, 48);\n      const uBytes = userBytes.subarray(0, 48);\n      const userValidationSalt = userBytes.subarray(32, 40);\n      const userKeySalt = userBytes.subarray(40, 48);\n      const ownerEncryption = stringToBytes(dict.get(\"OE\"));\n      const userEncryption = stringToBytes(dict.get(\"UE\"));\n      const perms = stringToBytes(dict.get(\"Perms\"));\n      for (const candidate of rawPasswordBytes\n        ? [passwordBytes, rawPasswordBytes]\n        : [passwordBytes]) {\n        encryptionKey = this.#createEncryptionKey20(\n          revision,\n          candidate,\n          ownerPassword,\n          ownerValidationSalt,\n          ownerKeySalt,\n          uBytes,\n          userPassword,\n          userValidationSalt,\n          userKeySalt,\n          ownerEncryption,\n          userEncryption,\n          perms\n        );\n        if (encryptionKey) {\n          break;\n        }\n      }\n    }\n    if (!encryptionKey) {\n      if (!password) {\n        if (\n          this.algorithm >= 4 &&\n          isName(this.stmf, \"Identity\") &&\n          isName(this.strf, \"Identity\")\n        ) {\n          const effCF = this.cf?.get(this.eff.name);\n          const authEvent = effCF?.get(\"AuthEvent\");\n\n          if (isName(authEvent, \"EFOpen\")) {\n            // For EFOpen with Identity as default stream/string filters, defer\n            // password prompting until an EmbeddedFile stream is actually read.\n            this.encryptionKey = null;\n            return;\n          }\n        }\n        throw new PasswordException(\n          \"No password given\",\n          PasswordResponses.NEED_PASSWORD\n        );\n      }\n      // Attempting use the password as an owner password\n      const decodedPassword = this.#decodeUserPassword(\n        passwordBytes,\n        ownerPassword,\n        revision,\n        keyLength\n      );\n      encryptionKey = this.#prepareKeyData(\n        fileIdBytes,\n        decodedPassword,\n        ownerPassword,\n        userPassword,\n        flags,\n        revision,\n        keyLength,\n        encryptMetadata\n      );\n    }\n\n    if (!encryptionKey) {\n      throw new PasswordException(\n        \"Incorrect Password\",\n        PasswordResponses.INCORRECT_PASSWORD\n      );\n    }\n\n    if (algorithm === 4 && encryptionKey.length < 16) {\n      // Extend key to 16 byte minimum (undocumented),\n      // fixes issue19484_1.pdf and issue19484_2.pdf.\n      this.encryptionKey = new Uint8Array(16);\n      this.encryptionKey.set(encryptionKey);\n    } else {\n      this.encryptionKey = encryptionKey;\n    }\n  }\n\n  /**\n   * Set password.\n   *\n   * @param {string} password\n   *   New password.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  setPassword(password) {\n    const transform = new CipherTransformFactory(\n      this.dict,\n      this.#fileId,\n      password\n    );\n    this.encryptionKey = transform.encryptionKey;\n  }\n\n  /**\n   * @param {number} num\n   *   Object number.\n   * @param {number} gen\n   *   Generation number.\n   * @returns {CipherTransform}\n   *   Cipher transform.\n   */\n  createCipherTransform(num, gen) {\n    if (this.algorithm === 4 || this.algorithm === 5) {\n      /** @type {ResolveCipher} */\n      const resolveCipher = filterName => {\n        if (!(filterName instanceof Name)) {\n          throw new FormatError(\"Invalid crypt filter name.\");\n        }\n        const cryptFilter = this.cf.get(filterName.name);\n        const cfm = cryptFilter?.get(\"CFM\");\n\n        if (!cfm || cfm.name === \"None\") {\n          return NullCipher;\n        }\n        if (!this.encryptionKey) {\n          throw new PasswordException(\n            \"No password given\",\n            PasswordResponses.NEED_PASSWORD\n          );\n        }\n        if (this.algorithm === 5 || cfm.name === \"AESV3\") {\n          // V=5 always uses 256-bit AES with the file encryption key, even\n          // when a producer wrongly sets the crypt filter's CFM to AESV2\n          // (bug 2046659).\n          return AES256Cipher.bind(null, this.encryptionKey);\n        }\n        if (cfm.name === \"V2\") {\n          return ARCFourCipher.bind(\n            null,\n            this.#buildObjectKey(\n              num,\n              gen,\n              this.encryptionKey,\n              /* isAes = */ false\n            )\n          );\n        }\n        if (cfm.name === \"AESV2\") {\n          return AES128Cipher.bind(\n            null,\n            this.#buildObjectKey(\n              num,\n              gen,\n              this.encryptionKey,\n              /* isAes = */ true\n            )\n          );\n        }\n        throw new FormatError(\"Unknown crypto method\");\n      };\n\n      const transform = new CipherTransform(\n        resolveCipher,\n        this.strf,\n        this.stmf\n      );\n      transform.embeddedFilterName = this.eff;\n      return transform;\n    }\n\n    // algorithms 1 and 2\n    /** @type {ResolveCipher} */\n    const resolveCipher = () =>\n      ARCFourCipher.bind(\n        null,\n        this.#buildObjectKey(num, gen, this.encryptionKey, /* isAes = */ false)\n      );\n    return new CipherTransform(resolveCipher);\n  }\n}\n\nexport {\n  AES128Cipher,\n  AES256Cipher,\n  ARCFourCipher,\n  CipherTransform,\n  CipherTransformFactory,\n  PDF17,\n  PDF20,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  assert,\n  bytesToString,\n  FormatError,\n  info,\n  InvalidPDFException,\n  warn,\n} from \"../shared/util.js\";\nimport { CIRCULAR_REF, Cmd, Dict, isCmd, Ref, RefSet } from \"./primitives.js\";\nimport { Lexer, Parser } from \"./parser.js\";\nimport {\n  MissingDataException,\n  ParserEOFException,\n  XRefEntryException,\n  XRefParseException,\n} from \"./core_utils.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { CipherTransformFactory } from \"./crypto.js\";\n\nclass XRef {\n  #cacheMap = new Map();\n\n  #entries = [];\n\n  #newPersistentRefNum = null;\n\n  #newTemporaryRefNum = null;\n\n  #parsedWithRecovery = false;\n\n  #pendingRefs = new RefSet();\n\n  #persistentRefsCache = null;\n\n  #xrefSectionOffsets = new Set();\n\n  #xrefSectionsComplete = true;\n\n  #xrefStms = new Set();\n\n  constructor(stream, pdfManager) {\n    this.stream = stream;\n    this.pdfManager = pdfManager;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      // For testing purposes.\n      Object.defineProperty(this, \"xrefSectionOffsetsAdd\", {\n        value: offset => this.#xrefSectionOffsets.add(offset),\n      });\n    }\n  }\n\n  getNewPersistentRef(obj) {\n    // When printing we don't care that much about the ref number by itself, it\n    // can increase for ever and it allows to keep some re-usable refs.\n    if (this.#newPersistentRefNum === null) {\n      this.#newPersistentRefNum = this.#entries.length || 1;\n    }\n    const num = this.#newPersistentRefNum++;\n    this.#cacheMap.set(num, obj);\n    return Ref.get(num, 0);\n  }\n\n  getNewTemporaryRef() {\n    // When saving we want to have some minimal numbers.\n    // Those refs are only created in order to be written in the final pdf\n    // stream.\n    if (this.#newTemporaryRefNum === null) {\n      this.#newTemporaryRefNum = this.#entries.length || 1;\n      if (this.#newPersistentRefNum) {\n        this.#persistentRefsCache = new Map();\n        for (\n          let i = this.#newTemporaryRefNum;\n          i < this.#newPersistentRefNum;\n          i++\n        ) {\n          // We *temporarily* clear the cache, see `resetNewTemporaryRef` below,\n          // to avoid any conflict with the refs created during saving.\n          this.#persistentRefsCache.set(i, this.#cacheMap.get(i));\n          this.#cacheMap.delete(i);\n        }\n      }\n    }\n    return Ref.get(this.#newTemporaryRefNum++, 0);\n  }\n\n  resetNewTemporaryRef() {\n    // Called once saving is finished.\n    this.#newTemporaryRefNum = null;\n    if (this.#persistentRefsCache) {\n      for (const [num, obj] of this.#persistentRefsCache) {\n        this.#cacheMap.set(num, obj);\n      }\n    }\n    this.#persistentRefsCache = null;\n  }\n\n  setStartXRef(startXRef) {\n    // Store the starting positions of xref tables as we process them\n    // so we can recover from missing data errors\n    this.startXRefQueue = [startXRef];\n  }\n\n  parse(recoveryMode = false) {\n    this.#parsedWithRecovery = recoveryMode;\n    let trailerDict;\n    if (!recoveryMode) {\n      trailerDict = this.readXRef();\n    } else {\n      warn(\"Indexing all PDF objects\");\n      trailerDict = this.indexObjects();\n    }\n    trailerDict.assignXref(this);\n    this.trailer = trailerDict;\n\n    let encrypt;\n    try {\n      encrypt = trailerDict.get(\"Encrypt\");\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`XRef.parse - Invalid \"Encrypt\" reference: \"${ex}\".`);\n    }\n    if (encrypt instanceof Dict) {\n      const ids = trailerDict.get(\"ID\");\n      const fileId = ids?.length ? ids[0] : \"\";\n      // The 'Encrypt' dictionary itself should not be encrypted, and by\n      // setting `suppressEncryption` we can prevent an infinite loop inside\n      // of `XRef_fetchUncompressed` if the dictionary contains indirect\n      // objects (fixes issue7665.pdf).\n      encrypt.suppressEncryption = true;\n      this.encrypt = new CipherTransformFactory(\n        encrypt,\n        fileId,\n        this.pdfManager.password\n      );\n    }\n\n    // Get the root dictionary (catalog) object, and do some basic validation.\n    let root;\n    try {\n      root = trailerDict.get(\"Root\");\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`XRef.parse - Invalid \"Root\" reference: \"${ex}\".`);\n    }\n    if (root instanceof Dict) {\n      try {\n        const pages = root.get(\"Pages\");\n        if (pages instanceof Dict) {\n          this.root = root;\n          return;\n        }\n      } catch (ex) {\n        if (ex instanceof MissingDataException) {\n          throw ex;\n        }\n        warn(`XRef.parse - Invalid \"Pages\" reference: \"${ex}\".`);\n      }\n    }\n\n    if (!recoveryMode) {\n      throw new XRefParseException();\n    }\n    // Even recovery failed, there's nothing more we can do here.\n    throw new InvalidPDFException(\"Invalid Root reference.\");\n  }\n\n  processXRefTable(parser) {\n    // Stores state of the table as we process it so we can resume\n    // from middle of table in case of missing data error\n    this._tableState ??= {\n      entryNum: 0,\n      streamPos: parser.lexer.stream.pos,\n      parserBuf1: parser.buf1,\n      parserBuf2: parser.buf2,\n    };\n\n    const obj = this.readXRefTable(parser);\n\n    // Sanity check\n    if (!isCmd(obj, \"trailer\")) {\n      throw new FormatError(\n        \"Invalid XRef table: could not find trailer dictionary\"\n      );\n    }\n    // Read trailer dictionary, e.g.\n    // trailer\n    //    << /Size 22\n    //      /Root 20R\n    //      /Info 10R\n    //      /ID [ <81b14aafa313db63dbd6f981e49f94f4> ]\n    //    >>\n    // The parser goes through the entire stream << ... >> and provides\n    // a getter interface for the key-value table\n    let dict = parser.getObj();\n\n    // The pdflib PDF generator can generate a nested trailer dictionary\n    if (dict instanceof BaseStream) {\n      dict = dict.dict;\n    }\n    if (!(dict instanceof Dict)) {\n      throw new FormatError(\n        \"Invalid XRef table: could not parse trailer dictionary\"\n      );\n    }\n    delete this._tableState;\n\n    return dict;\n  }\n\n  readXRefTable(parser) {\n    // Example of cross-reference table:\n    // xref\n    // 0 1                    <-- subsection header (first obj #, obj count)\n    // 0000000000 65535 f     <-- actual object (offset, generation #, f/n)\n    // 23 2                   <-- subsection header ... and so on ...\n    // 0000025518 00002 n\n    // 0000025635 00000 n\n    // trailer\n    // ...\n\n    const stream = parser.lexer.stream;\n    const tableState = this._tableState;\n    stream.pos = tableState.streamPos;\n    parser.buf1 = tableState.parserBuf1;\n    parser.buf2 = tableState.parserBuf2;\n\n    // Outer loop is over subsection headers\n    let obj;\n\n    while (true) {\n      if (!(\"firstEntryNum\" in tableState) || !(\"entryCount\" in tableState)) {\n        if (isCmd((obj = parser.getObj()), \"trailer\")) {\n          break;\n        }\n        tableState.firstEntryNum = obj;\n        tableState.entryCount = parser.getObj();\n      }\n\n      let first = tableState.firstEntryNum;\n      const count = tableState.entryCount;\n      if (!Number.isInteger(first) || !Number.isInteger(count)) {\n        throw new FormatError(\n          \"Invalid XRef table: wrong types in subsection header\"\n        );\n      }\n      // Inner loop is over objects themselves\n      for (let i = tableState.entryNum; i < count; i++) {\n        tableState.streamPos = stream.pos;\n        tableState.entryNum = i;\n        tableState.parserBuf1 = parser.buf1;\n        tableState.parserBuf2 = parser.buf2;\n\n        const entry = {\n          offset: parser.getObj(),\n          gen: parser.getObj(),\n        };\n        const type = parser.getObj();\n\n        if (type instanceof Cmd) {\n          switch (type.cmd) {\n            case \"f\":\n              entry.free = true;\n              break;\n            case \"n\":\n              entry.uncompressed = true;\n              break;\n          }\n        }\n\n        // Validate entry obj\n        if (\n          !Number.isInteger(entry.offset) ||\n          !Number.isInteger(entry.gen) ||\n          !(entry.free || entry.uncompressed)\n        ) {\n          throw new FormatError(\n            `Invalid entry in XRef subsection: ${first}, ${count}`\n          );\n        }\n\n        // The first xref table entry, i.e. obj 0, should be free. Attempting\n        // to adjust an incorrect first obj # (fixes issue 3248 and 7229).\n        if (i === 0 && entry.free && first === 1) {\n          first = 0;\n        }\n        this.#entries[first + i] ??= entry;\n      }\n\n      tableState.entryNum = 0;\n      tableState.streamPos = stream.pos;\n      tableState.parserBuf1 = parser.buf1;\n      tableState.parserBuf2 = parser.buf2;\n      delete tableState.firstEntryNum;\n      delete tableState.entryCount;\n    }\n\n    // Sanity check: as per spec, first object must be free\n    if (this.#entries[0] && !this.#entries[0].free) {\n      throw new FormatError(\"Invalid XRef table: unexpected first object\");\n    }\n    return obj;\n  }\n\n  processXRefStream(stream) {\n    if (!(\"streamState\" in this)) {\n      // Stores state of the stream as we process it so we can resume\n      // from middle of stream in case of missing data error\n      const { dict, pos } = stream;\n      const byteWidths = dict.get(\"W\");\n      const range = dict.get(\"Index\") || [0, dict.get(\"Size\")];\n\n      this.streamState = {\n        entryRanges: range,\n        byteWidths,\n        entryNum: 0,\n        streamPos: pos,\n      };\n    }\n    this.readXRefStream(stream);\n    delete this.streamState;\n\n    return stream.dict;\n  }\n\n  readXRefStream(stream) {\n    const streamState = this.streamState;\n    stream.pos = streamState.streamPos;\n\n    const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] =\n      streamState.byteWidths;\n\n    const entryRanges = streamState.entryRanges;\n    while (entryRanges.length > 0) {\n      const [first, n] = entryRanges;\n\n      if (!Number.isInteger(first) || !Number.isInteger(n)) {\n        throw new FormatError(`Invalid XRef range fields: ${first}, ${n}`);\n      }\n      if (\n        !Number.isInteger(typeFieldWidth) ||\n        !Number.isInteger(offsetFieldWidth) ||\n        !Number.isInteger(generationFieldWidth)\n      ) {\n        throw new FormatError(\n          `Invalid XRef entry fields length: ${first}, ${n}`\n        );\n      }\n      for (let i = streamState.entryNum; i < n; ++i) {\n        streamState.entryNum = i;\n        streamState.streamPos = stream.pos;\n\n        let type = 0,\n          offset = 0,\n          generation = 0;\n        for (let j = 0; j < typeFieldWidth; ++j) {\n          const typeByte = stream.getByte();\n          if (typeByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'type'.\");\n          }\n          type = (type << 8) | typeByte;\n        }\n        // if type field is absent, its default value is 1\n        if (typeFieldWidth === 0) {\n          type = 1;\n        }\n        for (let j = 0; j < offsetFieldWidth; ++j) {\n          const offsetByte = stream.getByte();\n          if (offsetByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'offset'.\");\n          }\n          offset = (offset << 8) | offsetByte;\n        }\n        for (let j = 0; j < generationFieldWidth; ++j) {\n          const generationByte = stream.getByte();\n          if (generationByte === -1) {\n            throw new FormatError(\"Invalid XRef byteWidths 'generation'.\");\n          }\n          generation = (generation << 8) | generationByte;\n        }\n        const entry = {\n          offset,\n          gen: generation,\n        };\n        switch (type) {\n          case 0:\n            entry.free = true;\n            break;\n          case 1:\n            entry.uncompressed = true;\n            break;\n          case 2:\n            break;\n          default:\n            throw new FormatError(`Invalid XRef entry type: ${type}`);\n        }\n        this.#entries[first + i] ??= entry;\n      }\n\n      streamState.entryNum = 0;\n      streamState.streamPos = stream.pos;\n      entryRanges.splice(0, 2);\n    }\n  }\n\n  indexObjects() {\n    // Simple scan through the PDF content to find objects,\n    // trailers and XRef streams.\n    const TAB = 0x9,\n      LF = 0xa,\n      CR = 0xd,\n      SPACE = 0x20;\n    const PERCENT = 0x25,\n      LT = 0x3c;\n\n    function readToken(data, offset) {\n      let token = \"\",\n        ch = data[offset];\n      while (ch !== LF && ch !== CR && ch !== LT) {\n        if (++offset >= data.length) {\n          break;\n        }\n        token += String.fromCharCode(ch);\n        ch = data[offset];\n      }\n      return token;\n    }\n    function skipUntil(data, offset, what) {\n      const length = what.length,\n        dataLength = data.length;\n      let skipped = 0;\n      // finding byte sequence\n      while (offset < dataLength) {\n        let i = 0;\n        while (i < length && data[offset + i] === what[i]) {\n          ++i;\n        }\n        if (i >= length) {\n          break; // sequence found\n        }\n        offset++;\n        skipped++;\n      }\n      return skipped;\n    }\n    const gEndobjRegExp = /\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g;\n    const gStartxrefRegExp = /\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g;\n    const objRegExp = /^(\\d+)\\s+(\\d+)\\s+obj\\b/;\n\n    const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);\n    const startxrefBytes = new Uint8Array([\n      115, 116, 97, 114, 116, 120, 114, 101, 102,\n    ]);\n    const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);\n\n    // Clear out any existing entries, since they may be bogus.\n    this.#entries.length = 0;\n    this.#cacheMap.clear();\n\n    const stream = this.stream;\n    stream.pos = 0;\n    const buffer = stream.getBytes(),\n      bufferStr = bytesToString(buffer),\n      length = buffer.length;\n    let position = stream.start;\n    const trailers = [],\n      xrefStms = [];\n    while (position < length) {\n      let ch = buffer[position];\n      if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {\n        ++position;\n        continue;\n      }\n      if (ch === PERCENT) {\n        // %-comment\n        do {\n          ++position;\n          if (position >= length) {\n            break;\n          }\n          ch = buffer[position];\n        } while (ch !== LF && ch !== CR);\n        continue;\n      }\n      const token = readToken(buffer, position);\n      let m;\n      if (\n        token.startsWith(\"xref\") &&\n        (token.length === 4 || /\\s/.test(token[4]))\n      ) {\n        position += skipUntil(buffer, position, trailerBytes);\n        trailers.push(position);\n        position += skipUntil(buffer, position, startxrefBytes);\n      } else if ((m = objRegExp.exec(token))) {\n        const num = m[1] | 0,\n          gen = m[2] | 0;\n\n        const startPos = position + token.length;\n        let contentLength,\n          updateEntries = false;\n        if (!this.#entries[num]) {\n          updateEntries = true;\n        } else if (this.#entries[num].gen === gen) {\n          // Before overwriting an existing entry, ensure that the new one won't\n          // cause *immediate* errors when it's accessed (fixes issue13783.pdf).\n          try {\n            const parser = new Parser({\n              lexer: new Lexer(stream.makeSubStream(startPos)),\n            });\n            parser.getObj();\n            updateEntries = true;\n          } catch (ex) {\n            if (ex instanceof ParserEOFException) {\n              warn(`indexObjects -- checking object (${token}): \"${ex}\".`);\n            } else {\n              // The error may come from the `Parser`-instance being initialized\n              // without an `XRef`-instance (we don't have a usable one yet).\n              updateEntries = true;\n            }\n          }\n        }\n        if (updateEntries) {\n          this.#entries[num] = {\n            offset: position - stream.start,\n            gen,\n            uncompressed: true,\n          };\n        }\n\n        // Find the next \"obj\" string, rather than \"endobj\", to ensure that\n        // we won't skip over a new 'obj' operator in corrupt files where\n        // 'endobj' operators are missing (fixes issue9105_reduced.pdf).\n        gEndobjRegExp.lastIndex = startPos;\n        const match = gEndobjRegExp.exec(bufferStr);\n\n        if (match) {\n          const endPos = gEndobjRegExp.lastIndex + 1;\n          contentLength = endPos - position;\n\n          if (match[1] !== \"endobj\") {\n            warn(\n              `indexObjects: Found \"${match[1]}\" inside of another \"obj\", ` +\n                'caused by missing \"endobj\" -- trying to recover.'\n            );\n            contentLength -= match[1].length + 1;\n          }\n        } else {\n          contentLength = length - position;\n        }\n        const content = buffer.subarray(position, position + contentLength);\n\n        // checking XRef stream suspect\n        // (it shall have '/XRef' and next char is not a letter)\n        const xrefTagOffset = skipUntil(content, 0, xrefBytes);\n        if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {\n          xrefStms.push(position - stream.start);\n          this.#xrefStms.add(position - stream.start); // Avoid recursion\n        }\n\n        position += contentLength;\n      } else if (\n        token.startsWith(\"trailer\") &&\n        (token.length === 7 || /\\s/.test(token[7]))\n      ) {\n        trailers.push(position);\n\n        const startPos = position + token.length;\n        let contentLength;\n        // Attempt to handle (some) corrupt documents, where no 'startxref'\n        // operators are present (fixes issue15590.pdf).\n        gStartxrefRegExp.lastIndex = startPos;\n        const match = gStartxrefRegExp.exec(bufferStr);\n\n        if (match) {\n          const endPos = gStartxrefRegExp.lastIndex + 1;\n          contentLength = endPos - position;\n\n          if (match[1] !== \"startxref\") {\n            warn(\n              `indexObjects: Found \"${match[1]}\" after \"trailer\", ` +\n                'caused by missing \"startxref\" -- trying to recover.'\n            );\n            contentLength -= match[1].length + 1;\n          }\n        } else {\n          contentLength = length - position;\n        }\n        position += contentLength;\n      } else {\n        position += token.length + 1;\n      }\n    }\n    // reading XRef streams\n    for (const xrefStm of xrefStms) {\n      this.startXRefQueue.push(xrefStm);\n      this.readXRef(/* recoveryMode */ true);\n    }\n\n    const trailerDicts = [];\n    // Pre-parsing the trailers to check if the document is possibly encrypted.\n    let isEncrypted = false;\n    for (const trailer of trailers) {\n      stream.pos = trailer;\n      const parser = new Parser({\n        lexer: new Lexer(stream),\n        xref: this,\n        allowStreams: true,\n        recoveryMode: true,\n      });\n      const obj = parser.getObj();\n      if (!isCmd(obj, \"trailer\")) {\n        continue;\n      }\n      // read the trailer dictionary\n      const dict = parser.getObj();\n      if (!(dict instanceof Dict)) {\n        continue;\n      }\n      trailerDicts.push(dict);\n\n      if (dict.has(\"Encrypt\")) {\n        isEncrypted = true;\n      }\n    }\n\n    // finding main trailer\n    let trailerDict, trailerError;\n    for (const dict of [...trailerDicts, \"genFallback\", ...trailerDicts]) {\n      if (dict === \"genFallback\") {\n        if (!trailerError) {\n          break; // No need to fallback if there were no validation errors.\n        }\n        this._generationFallback = true;\n        continue;\n      }\n      // Do some basic validation of the trailer/root dictionary candidate.\n      let validPagesDict = false;\n      try {\n        const rootDict = dict.get(\"Root\");\n        if (!(rootDict instanceof Dict)) {\n          continue;\n        }\n        const pagesDict = rootDict.get(\"Pages\");\n        if (!(pagesDict instanceof Dict)) {\n          continue;\n        }\n        const pagesCount = pagesDict.get(\"Count\");\n        if (Number.isInteger(pagesCount)) {\n          validPagesDict = true;\n        }\n        // The top-level /Pages dictionary isn't obviously corrupt.\n      } catch (ex) {\n        trailerError = ex;\n        continue;\n      }\n      // taking the first one with 'ID'\n      if (\n        validPagesDict &&\n        (!isEncrypted || dict.has(\"Encrypt\")) &&\n        dict.has(\"ID\")\n      ) {\n        return dict;\n      }\n      // The current dictionary is a candidate, but continue searching.\n      trailerDict = dict;\n    }\n    // No trailer with 'ID', taking last one (if exists).\n    if (trailerDict) {\n      return trailerDict;\n    }\n    // No trailer dictionary found, taking the \"top\"-dictionary (if exists).\n    if (this.topDict) {\n      return this.topDict;\n    }\n\n    // When no trailer dictionary candidate exists, try picking the first\n    // dictionary that contains a /Root entry (fixes issue18986.pdf).\n    if (!trailerDicts.length) {\n      // In case, this.#entries is a sparse array we don't want to\n      // iterate over empty entries so we use the `in` operator instead of\n      // using for..of on entries() or a for with the array length.\n      for (const num in this.#entries) {\n        const entry = this.#entries[num];\n        if (!entry) {\n          continue;\n        }\n        const ref = Ref.get(parseInt(num, 10), entry.gen);\n        let obj;\n\n        try {\n          obj = this.fetch(ref);\n        } catch {\n          continue;\n        }\n        if (obj instanceof BaseStream) {\n          obj = obj.dict;\n        }\n        if (obj instanceof Dict && obj.has(\"Root\")) {\n          return obj;\n        }\n      }\n    }\n\n    // nothing helps\n    throw new InvalidPDFException(\"Invalid PDF structure.\");\n  }\n\n  readXRef(recoveryMode = false) {\n    const stream = this.stream;\n    // Keep track of already parsed XRef tables, to prevent an infinite loop\n    // when parsing corrupt PDF files where e.g. the /Prev entries create a\n    // circular dependency between tables (fixes bug1393476.pdf).\n    const startXRefParsedCache = new Set();\n\n    while (this.startXRefQueue.length) {\n      try {\n        const startXRef = this.startXRefQueue[0];\n\n        if (startXRefParsedCache.has(startXRef)) {\n          warn(\"readXRef - skipping XRef table since it was already parsed.\");\n          this.startXRefQueue.shift();\n          continue;\n        }\n        startXRefParsedCache.add(startXRef);\n\n        stream.pos = startXRef + stream.start;\n\n        const parser = new Parser({\n          lexer: new Lexer(stream),\n          xref: this,\n          allowStreams: true,\n        });\n        let obj = parser.getObj();\n        let dict;\n\n        // Get dictionary\n        if (isCmd(obj, \"xref\")) {\n          // Parse end-of-file XRef\n          dict = this.processXRefTable(parser);\n          this.topDict ||= dict;\n\n          // Recursively get other XRefs 'XRefStm', if any\n          obj = dict.get(\"XRefStm\");\n          if (Number.isInteger(obj) && !this.#xrefStms.has(obj)) {\n            // ignore previously loaded xref streams\n            // (possible infinite recursion)\n            this.#xrefStms.add(obj);\n            this.startXRefQueue.push(obj);\n          }\n        } else if (Number.isInteger(obj)) {\n          // Parse in-stream XRef\n          if (\n            !Number.isInteger(parser.getObj()) ||\n            !isCmd(parser.getObj(), \"obj\") ||\n            !((obj = parser.getObj()) instanceof BaseStream)\n          ) {\n            throw new FormatError(\"Invalid XRef stream\");\n          }\n          dict = this.processXRefStream(obj);\n          this.topDict ||= dict;\n\n          if (!dict) {\n            throw new FormatError(\"Failed to read XRef stream\");\n          }\n        } else {\n          throw new FormatError(\"Invalid XRef stream header\");\n        }\n\n        this.#xrefSectionOffsets.add(startXRef);\n\n        // Recursively get previous dictionary, if any\n        obj = dict.get(\"Prev\");\n        if (Number.isInteger(obj)) {\n          this.startXRefQueue.push(obj);\n        } else if (obj instanceof Ref) {\n          // The spec says Prev must not be a reference, i.e. \"/Prev NNN\"\n          // This is a fallback for non-compliant PDFs, i.e. \"/Prev NNN 0 R\"\n          this.startXRefQueue.push(obj.num);\n        }\n      } catch (e) {\n        if (e instanceof MissingDataException) {\n          throw e;\n        }\n        this.#xrefSectionsComplete = false;\n        info(\"(while reading XRef): \" + e);\n      }\n      this.startXRefQueue.shift();\n    }\n\n    if (this.topDict) {\n      return this.topDict;\n    }\n    if (recoveryMode) {\n      return undefined;\n    }\n    throw new XRefParseException();\n  }\n\n  countUpdatesAfter(offset) {\n    if (this.#parsedWithRecovery || !this.#xrefSectionsComplete) {\n      return null;\n    }\n    const relativeOffset = offset - this.stream.start;\n    let count = 0;\n    for (const sectionOffset of this.#xrefSectionOffsets) {\n      if (\n        sectionOffset >= relativeOffset &&\n        !this.#xrefStms.has(sectionOffset)\n      ) {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  getEntry(i) {\n    const entry = this.#entries[i];\n    return entry && !entry.free && entry.offset ? entry : null;\n  }\n\n  fetchIfRef(obj, suppressEncryption = false) {\n    return obj instanceof Ref ? this.fetch(obj, suppressEncryption) : obj;\n  }\n\n  fetch(ref, suppressEncryption = false) {\n    if (!(ref instanceof Ref)) {\n      throw new Error(\"ref object is not a reference\");\n    }\n    const num = ref.num;\n\n    // The XRef cache is populated with objects which are obtained through\n    // `Parser.getObj`, and indirectly via `Lexer.getObj`. Neither of these\n    // methods should ever return `undefined` (note the `assert` calls below).\n    const cacheEntry = this.#cacheMap.get(num);\n    if (cacheEntry !== undefined) {\n      // In documents with Object Streams, it's possible that cached `Dict`s\n      // have not been assigned an `objId` yet (see e.g. issue3115r.pdf).\n      if (cacheEntry instanceof Dict && !cacheEntry.objId) {\n        cacheEntry.objId = ref.toString();\n      }\n      return cacheEntry;\n    }\n    let xrefEntry = this.getEntry(num);\n\n    if (xrefEntry === null) {\n      // The referenced entry can be free.\n      return xrefEntry;\n    }\n    // Prevent circular references, in corrupt PDF documents, from hanging the\n    // worker-thread. This relies, implicitly, on the parsing being synchronous.\n    if (this.#pendingRefs.has(ref)) {\n      this.#pendingRefs.remove(ref);\n\n      warn(`Ignoring circular reference: ${ref}.`);\n      return CIRCULAR_REF;\n    }\n    this.#pendingRefs.put(ref);\n\n    try {\n      xrefEntry = xrefEntry.uncompressed\n        ? this.fetchUncompressed(ref, xrefEntry, suppressEncryption)\n        : this.fetchCompressed(ref, xrefEntry, suppressEncryption);\n      this.#pendingRefs.remove(ref);\n    } catch (ex) {\n      this.#pendingRefs.remove(ref);\n      throw ex;\n    }\n    if (xrefEntry instanceof Dict) {\n      xrefEntry.objId = ref.toString();\n    } else if (xrefEntry instanceof BaseStream) {\n      xrefEntry.dict.objId = ref.toString();\n    }\n    return xrefEntry;\n  }\n\n  fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {\n    const gen = ref.gen;\n    let num = ref.num;\n    if (xrefEntry.gen !== gen) {\n      const msg = `Inconsistent generation in XRef: ${ref}`;\n      // Try falling back to a *previous* generation (fixes issue15577.pdf).\n      if (this._generationFallback && xrefEntry.gen < gen) {\n        warn(msg);\n        return this.fetchUncompressed(\n          Ref.get(num, xrefEntry.gen),\n          xrefEntry,\n          suppressEncryption\n        );\n      }\n      throw new XRefEntryException(msg);\n    }\n    const stream = this.stream.makeSubStream(\n      xrefEntry.offset + this.stream.start\n    );\n    const parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: this,\n      allowStreams: true,\n    });\n    const obj1 = parser.getObj();\n    const obj2 = parser.getObj();\n    const obj3 = parser.getObj();\n\n    if (obj1 !== num || obj2 !== gen || !(obj3 instanceof Cmd)) {\n      throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n    }\n    if (obj3.cmd !== \"obj\") {\n      // some bad PDFs use \"obj1234\" and really mean 1234\n      if (obj3.cmd.startsWith(\"obj\")) {\n        num = parseInt(obj3.cmd.substring(3), 10);\n        if (!Number.isNaN(num)) {\n          return num;\n        }\n      }\n      throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);\n    }\n    xrefEntry =\n      this.encrypt && !suppressEncryption\n        ? parser.getObj(this.encrypt.createCipherTransform(num, gen))\n        : parser.getObj();\n    if (!(xrefEntry instanceof BaseStream)) {\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n        assert(\n          xrefEntry !== undefined,\n          'fetchUncompressed: The \"xrefEntry\" cannot be undefined.'\n        );\n      }\n      this.#cacheMap.set(num, xrefEntry);\n    }\n    return xrefEntry;\n  }\n\n  fetchCompressed(ref, xrefEntry, suppressEncryption = false) {\n    const tableOffset = xrefEntry.offset;\n    const stream = this.fetch(Ref.get(tableOffset, 0));\n    if (!(stream instanceof BaseStream)) {\n      throw new FormatError(\"bad ObjStm stream\");\n    }\n    const first = stream.dict.get(\"First\");\n    const n = stream.dict.get(\"N\");\n    if (!Number.isInteger(first) || !Number.isInteger(n)) {\n      throw new FormatError(\"invalid first and n parameters for ObjStm stream\");\n    }\n    let parser = new Parser({\n      lexer: new Lexer(stream),\n      xref: this,\n      allowStreams: true,\n    });\n    const nums = new Array(n);\n    const offsets = new Array(n);\n    // read the object numbers to populate cache\n    for (let i = 0; i < n; ++i) {\n      const num = parser.getObj();\n      if (!Number.isInteger(num)) {\n        throw new FormatError(\n          `invalid object number in the ObjStm stream: ${num}`\n        );\n      }\n      const offset = parser.getObj();\n      if (!Number.isInteger(offset)) {\n        throw new FormatError(\n          `invalid object offset in the ObjStm stream: ${offset}`\n        );\n      }\n      nums[i] = num;\n\n      // The entry in the xref table is the object number followed by the index.\n      // So if index (gen number) is not the same as the index (i), we fix it\n      // (fixes bug 1978317).\n      const entry = this.getEntry(num);\n      if (entry?.offset === tableOffset && entry.gen !== i) {\n        entry.gen = i;\n      }\n\n      offsets[i] = offset;\n    }\n\n    const start = (stream.start || 0) + first;\n    const entries = new Array(n);\n    // read stream objects for cache\n    for (let i = 0; i < n; ++i) {\n      const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined;\n      if (length < 0) {\n        throw new FormatError(\"Invalid offset in the ObjStm stream.\");\n      }\n      parser = new Parser({\n        lexer: new Lexer(\n          stream.makeSubStream(start + offsets[i], length, stream.dict)\n        ),\n        xref: this,\n        allowStreams: true,\n      });\n\n      const obj = parser.getObj();\n      entries[i] = obj;\n      if (obj instanceof BaseStream) {\n        continue;\n      }\n      const num = nums[i],\n        entry = this.#entries[num];\n      if (entry && entry.offset === tableOffset && entry.gen === i) {\n        if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n          assert(\n            obj !== undefined,\n            'fetchCompressed: The \"obj\" cannot be undefined.'\n          );\n        }\n        this.#cacheMap.set(num, obj);\n      }\n    }\n    xrefEntry = entries[xrefEntry.gen];\n    if (xrefEntry === undefined) {\n      throw new XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);\n    }\n    return xrefEntry;\n  }\n\n  async fetchIfRefAsync(obj, suppressEncryption) {\n    return obj instanceof Ref ? this.fetchAsync(obj, suppressEncryption) : obj;\n  }\n\n  async fetchAsync(ref, suppressEncryption) {\n    try {\n      return this.fetch(ref, suppressEncryption);\n    } catch (ex) {\n      if (!(ex instanceof MissingDataException)) {\n        throw ex;\n      }\n      await this.pdfManager.requestRange(ex.begin, ex.end);\n      return this.fetchAsync(ref, suppressEncryption);\n    }\n  }\n\n  getCatalogObj() {\n    return this.root;\n  }\n}\n\nexport { XRef };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnnotationEditorPrefix,\n  assert,\n  FormatError,\n  info,\n  InvalidPDFException,\n  isArrayEqual,\n  makeArr,\n  PageActionEventType,\n  RenderingIntentFlag,\n  shadow,\n  stringToBytes,\n  stringToUTF8String,\n  unreachable,\n  Util,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  AnnotationFactory,\n  PopupAnnotation,\n  WidgetAnnotation,\n} from \"./annotation.js\";\nimport {\n  collectActions,\n  getInheritableProperty,\n  getNewAnnotationsMap,\n  isWhiteSpace,\n  lookupNormalRect,\n  MissingDataException,\n  PDF_VERSION_REGEXP,\n  RESOURCES_KEYS_OPERATOR_LIST,\n  RESOURCES_KEYS_TEXT_CONTENT,\n  validateCSSFont,\n  XRefEntryException,\n  XRefParseException,\n} from \"./core_utils.js\";\nimport {\n  Dict,\n  isName,\n  isRefsEqual,\n  Name,\n  Ref,\n  RefSet,\n  RefSetCache,\n} from \"./primitives.js\";\nimport { FunctionType, PDFFunctionFactory } from \"./function.js\";\nimport { getXfaFontDict, getXfaFontName } from \"./xfa_fonts.js\";\nimport { NullStream, Stream } from \"./stream.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { calculateMD5 } from \"./calculate_md5.js\";\nimport { Catalog } from \"./catalog.js\";\nimport { clearGlobalCaches } from \"./cleanup_helper.js\";\nimport { DatasetReader } from \"./dataset_reader.js\";\nimport { Intersector } from \"./intersector.js\";\nimport { Linearization } from \"./parser.js\";\nimport { LocalColorSpaceCache } from \"./image_utils.js\";\nimport { ObjectLoader } from \"./object_loader.js\";\nimport { OperatorList } from \"./operator_list.js\";\nimport { PartialEvaluator } from \"./evaluator.js\";\nimport { PDFImage } from \"./image.js\";\nimport { StreamsSequenceStream } from \"./decode_stream.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\nimport { StructTreePage } from \"./struct_tree.js\";\nimport { XFAFactory } from \"./xfa/factory.js\";\nimport { XRef } from \"./xref.js\";\n\nconst LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];\nconst SIGNATURE_TAIL_CHUNK_SIZE = 65536;\n\nclass Page {\n  #resourcesPromise = null;\n\n  constructor({\n    pdfManager,\n    xref,\n    pageIndex,\n    pageDict,\n    ref,\n    globalIdFactory,\n    fontCache,\n    builtInCMapCache,\n    standardFontDataCache,\n    globalColorSpaceCache,\n    globalImageCache,\n    systemFontCache,\n    nonBlendModesSet,\n    xfaFactory,\n  }) {\n    this.pdfManager = pdfManager;\n    this.pageIndex = pageIndex;\n    this.pageDict = pageDict;\n    this.xref = xref;\n    this.ref = ref;\n    this.fontCache = fontCache;\n    this.builtInCMapCache = builtInCMapCache;\n    this.standardFontDataCache = standardFontDataCache;\n    this.globalColorSpaceCache = globalColorSpaceCache;\n    this.globalImageCache = globalImageCache;\n    this.systemFontCache = systemFontCache;\n    this.nonBlendModesSet = nonBlendModesSet;\n    this.evaluatorOptions = pdfManager.evaluatorOptions;\n    this.xfaFactory = xfaFactory;\n\n    const idCounters = {\n      obj: 0,\n    };\n    this._localIdFactory = class extends globalIdFactory {\n      static createObjId() {\n        return `p${pageIndex}_${++idCounters.obj}`;\n      }\n\n      static getPageObjId() {\n        return `p${ref.toString()}`;\n      }\n    };\n  }\n\n  #createPartialEvaluator(handler, pageIndex = this.pageIndex) {\n    // The pageIndex is used to identify the page some objects (like images)\n    // belong to.\n\n    return new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex,\n      idFactory: this._localIdFactory,\n      fontCache: this.fontCache,\n      builtInCMapCache: this.builtInCMapCache,\n      standardFontDataCache: this.standardFontDataCache,\n      globalColorSpaceCache: this.globalColorSpaceCache,\n      globalImageCache: this.globalImageCache,\n      systemFontCache: this.systemFontCache,\n      options: this.evaluatorOptions,\n    });\n  }\n\n  createAnnotationEvaluator(handler) {\n    return this.#createPartialEvaluator(handler);\n  }\n\n  #getInheritableProperty(key, getArray = false) {\n    const value = getInheritableProperty({\n      dict: this.pageDict,\n      key,\n      getArray,\n      stopWhenFound: false,\n    });\n    if (!Array.isArray(value)) {\n      return value;\n    }\n    if (value.length === 1 || !(value[0] instanceof Dict)) {\n      return value[0];\n    }\n    return Dict.merge({ xref: this.xref, dictArray: value });\n  }\n\n  get content() {\n    return this.pageDict.getArray(\"Contents\");\n  }\n\n  get resources() {\n    // For robustness: The spec states that a \\Resources entry has to be\n    // present, but can be empty. Some documents still omit it; in this case\n    // we return an empty dictionary.\n    const resources = this.#getInheritableProperty(\"Resources\");\n\n    return shadow(\n      this,\n      \"resources\",\n      resources instanceof Dict ? resources : Dict.empty\n    );\n  }\n\n  getBoundingBox(name) {\n    if (this.xfaData) {\n      return this.xfaData.bbox;\n    }\n    const box = lookupNormalRect(\n      this.#getInheritableProperty(name, /* getArray = */ true),\n      null\n    );\n\n    if (box) {\n      if (box[2] - box[0] > 0 && box[3] - box[1] > 0) {\n        return box;\n      }\n      warn(`Empty, or invalid, /${name} entry.`);\n    }\n    return null;\n  }\n\n  get mediaBox() {\n    // Reset invalid media box to letter size.\n    return shadow(\n      this,\n      \"mediaBox\",\n      this.getBoundingBox(\"MediaBox\") || LETTER_SIZE_MEDIABOX\n    );\n  }\n\n  get cropBox() {\n    // Reset invalid crop box to media box.\n    return shadow(\n      this,\n      \"cropBox\",\n      this.getBoundingBox(\"CropBox\") || this.mediaBox\n    );\n  }\n\n  get userUnit() {\n    const obj = this.pageDict.get(\"UserUnit\");\n    return shadow(\n      this,\n      \"userUnit\",\n      typeof obj === \"number\" && obj > 0 ? obj : 1.0\n    );\n  }\n\n  get view() {\n    // From the spec, 6th ed., p.963:\n    // \"The crop, bleed, trim, and art boxes should not ordinarily\n    // extend beyond the boundaries of the media box. If they do, they are\n    // effectively reduced to their intersection with the media box.\"\n    const { cropBox, mediaBox } = this;\n\n    if (cropBox !== mediaBox && !isArrayEqual(cropBox, mediaBox)) {\n      const box = Util.intersect(cropBox, mediaBox);\n      if (box && box[2] - box[0] > 0 && box[3] - box[1] > 0) {\n        return shadow(this, \"view\", box);\n      }\n      warn(\"Empty /CropBox and /MediaBox intersection.\");\n    }\n    return shadow(this, \"view\", mediaBox);\n  }\n\n  get rotate() {\n    let rotate = this.#getInheritableProperty(\"Rotate\") || 0;\n\n    // Normalize rotation so it's a multiple of 90 and between 0 and 270.\n    if (rotate % 90 !== 0) {\n      rotate = 0;\n    } else if (rotate >= 360) {\n      rotate %= 360;\n    } else if (rotate < 0) {\n      // The spec doesn't cover negatives. Assume it's counterclockwise\n      // rotation. The following is the other implementation of modulo.\n      rotate = ((rotate % 360) + 360) % 360;\n    }\n    return shadow(this, \"rotate\", rotate);\n  }\n\n  #onSubStreamError(reason, objId) {\n    if (this.evaluatorOptions.ignoreErrors) {\n      warn(`getContentStream - ignoring sub-stream (${objId}): \"${reason}\".`);\n      return;\n    }\n    throw reason;\n  }\n\n  /**\n   * @returns {Promise<BaseStream>}\n   */\n  async getContentStream() {\n    const content = await this.pdfManager.ensure(this, \"content\");\n\n    if (content instanceof BaseStream && !content.isImageStream) {\n      if (content.isAsync) {\n        const bytes = await content.asyncGetBytes();\n        if (bytes) {\n          return new Stream(bytes, 0, bytes.length, content.dict);\n        }\n      }\n      return content;\n    }\n    if (Array.isArray(content)) {\n      const promises = [];\n      for (let i = 0, ii = content.length; i < ii; i++) {\n        const item = content[i];\n        if (item instanceof BaseStream && item.isAsync) {\n          promises.push(\n            item.asyncGetBytes().then(bytes => {\n              if (bytes) {\n                content[i] = new Stream(bytes, 0, bytes.length, item.dict);\n              }\n            })\n          );\n        }\n      }\n      if (promises.length > 0) {\n        await Promise.all(promises);\n      }\n      return new StreamsSequenceStream(\n        content,\n        this.#onSubStreamError.bind(this)\n      );\n    }\n    // Replace non-existent page content with empty content.\n    return new NullStream();\n  }\n\n  get xfaData() {\n    return shadow(\n      this,\n      \"xfaData\",\n      this.xfaFactory\n        ? { bbox: this.xfaFactory.getBoundingBox(this.pageIndex) }\n        : null\n    );\n  }\n\n  async #replaceIdByRef(annotations, deletedAnnotations, existingAnnotations) {\n    const promises = [];\n    for (const annotation of annotations) {\n      if (annotation.id) {\n        const ref = Ref.fromString(annotation.id);\n        if (!ref) {\n          warn(`A non-linked annotation cannot be modified: ${annotation.id}`);\n          continue;\n        }\n        if (annotation.deleted) {\n          deletedAnnotations.put(ref, ref);\n          if (annotation.popupRef) {\n            const popupRef = Ref.fromString(annotation.popupRef);\n            if (popupRef) {\n              deletedAnnotations.put(popupRef, popupRef);\n            }\n          }\n          continue;\n        }\n        if (annotation.popup?.deleted) {\n          const popupRef = Ref.fromString(annotation.popupRef);\n          if (popupRef) {\n            deletedAnnotations.put(popupRef, popupRef);\n          }\n        }\n        existingAnnotations?.put(ref);\n        annotation.ref = ref;\n        promises.push(\n          this.xref.fetchAsync(ref).then(\n            obj => {\n              if (obj instanceof Dict) {\n                annotation.oldAnnotation = obj.clone();\n              }\n            },\n            () => {\n              warn(`Cannot fetch \\`oldAnnotation\\` for: ${ref}.`);\n            }\n          )\n        );\n        delete annotation.id;\n      }\n    }\n    await Promise.all(promises);\n  }\n\n  async saveNewAnnotations(handler, task, annotations, imagePromises, changes) {\n    if (this.xfaFactory) {\n      throw new Error(\"XFA: Cannot save new annotations.\");\n    }\n    const partialEvaluator = this.#createPartialEvaluator(handler);\n\n    const deletedAnnotations = new RefSetCache();\n    const existingAnnotations = new RefSet();\n    await this.#replaceIdByRef(\n      annotations,\n      deletedAnnotations,\n      existingAnnotations\n    );\n\n    const pageDict = this.pageDict;\n    const annotationsArray = this.annotations.filter(\n      a => !(a instanceof Ref && deletedAnnotations.has(a))\n    );\n    const newData = await AnnotationFactory.saveNewAnnotations(\n      partialEvaluator,\n      this.xref,\n      task,\n      annotations,\n      imagePromises,\n      changes\n    );\n\n    for (const { ref } of newData.annotations) {\n      // Don't add an existing annotation ref to the annotations array.\n      if (ref instanceof Ref && !existingAnnotations.has(ref)) {\n        annotationsArray.push(ref);\n      }\n    }\n\n    const dict = pageDict.clone();\n    dict.set(\"Annots\", annotationsArray);\n    changes.put(this.ref, {\n      data: dict,\n    });\n\n    for (const deletedRef of deletedAnnotations) {\n      changes.put(deletedRef, {\n        data: null,\n      });\n    }\n  }\n\n  async save(handler, task, annotationStorage, changes) {\n    const partialEvaluator = this.#createPartialEvaluator(handler);\n\n    // Fetch the page's annotations and save the content\n    // in case of interactive form fields.\n    const annotations = await this._parsedAnnotations;\n\n    const promises = [];\n    for (const annotation of annotations) {\n      promises.push(\n        annotation\n          .save(partialEvaluator, task, annotationStorage, changes)\n          .catch(function (reason) {\n            warn(\n              \"save - ignoring annotation data during \" +\n                `\"${task.name}\" task: \"${reason}\".`\n            );\n            return null;\n          })\n      );\n    }\n    return Promise.all(promises);\n  }\n\n  async loadResources(keys) {\n    // TODO: add async `#getInheritableProperty` and remove this.\n    await (this.#resourcesPromise ??= this.pdfManager.ensure(\n      this,\n      \"resources\"\n    ));\n\n    await ObjectLoader.load(this.resources, keys, this.xref);\n  }\n\n  async #getMergedResources(streamDict, keys) {\n    // In rare cases /Resources are also found in the /Contents stream-dict,\n    // in addition to in the /Page dict, hence we need to prefer those when\n    // available (see issue18894.pdf).\n    const localResources = streamDict?.get(\"Resources\");\n\n    if (!(localResources instanceof Dict && localResources.size)) {\n      return this.resources;\n    }\n    await ObjectLoader.load(localResources, keys, this.xref);\n\n    return Dict.merge({\n      xref: this.xref,\n      dictArray: [localResources, this.resources],\n      mergeSubDicts: true,\n    });\n  }\n\n  async getOperatorList({\n    handler,\n    sink,\n    task,\n    intent,\n    cacheKey,\n    pageIndex = this.pageIndex,\n    annotationStorage = null,\n    modifiedIds = null,\n  }) {\n    const contentStreamPromise = this.getContentStream();\n    const resourcesPromise = this.loadResources(RESOURCES_KEYS_OPERATOR_LIST);\n\n    const partialEvaluator = this.#createPartialEvaluator(handler, pageIndex);\n\n    const newAnnotsByPage = !this.xfaFactory\n      ? getNewAnnotationsMap(annotationStorage)\n      : null;\n    const newAnnots = newAnnotsByPage?.get(this.pageIndex);\n    let newAnnotationsPromise = Promise.resolve(null);\n    let deletedAnnotations = null;\n\n    if (newAnnots) {\n      const annotationGlobalsPromise =\n        this.pdfManager.ensureDoc(\"annotationGlobals\");\n      let imagePromises;\n\n      // An annotation can contain a reference to a bitmap, but this bitmap\n      // is defined in another annotation. So we need to find this annotation\n      // and generate the bitmap.\n      const missingBitmaps = new Set();\n      for (const { bitmapId, bitmap } of newAnnots) {\n        if (bitmapId && !bitmap && !missingBitmaps.has(bitmapId)) {\n          missingBitmaps.add(bitmapId);\n        }\n      }\n\n      const { isOffscreenCanvasSupported } = this.evaluatorOptions;\n      if (missingBitmaps.size > 0) {\n        const annotationWithBitmaps = newAnnots.slice();\n        for (const [key, annotation] of annotationStorage) {\n          if (!key.startsWith(AnnotationEditorPrefix)) {\n            continue;\n          }\n          if (annotation.bitmap && missingBitmaps.has(annotation.bitmapId)) {\n            annotationWithBitmaps.push(annotation);\n          }\n        }\n        // The array annotationWithBitmaps cannot be empty: the check above\n        // makes sure to have at least one annotation containing the bitmap.\n        imagePromises = AnnotationFactory.generateImages(\n          annotationWithBitmaps,\n          this.xref,\n          isOffscreenCanvasSupported\n        );\n      } else {\n        imagePromises = AnnotationFactory.generateImages(\n          newAnnots,\n          this.xref,\n          isOffscreenCanvasSupported\n        );\n      }\n\n      deletedAnnotations = new RefSet();\n\n      newAnnotationsPromise = Promise.all([\n        annotationGlobalsPromise,\n        this.#replaceIdByRef(newAnnots, deletedAnnotations, null),\n      ]).then(([annotationGlobals]) => {\n        if (!annotationGlobals) {\n          return null;\n        }\n\n        return AnnotationFactory.printNewAnnotations(\n          annotationGlobals,\n          partialEvaluator,\n          task,\n          newAnnots,\n          imagePromises\n        );\n      });\n    }\n\n    const pageListPromise = Promise.all([\n      contentStreamPromise,\n      resourcesPromise,\n    ]).then(async ([contentStream]) => {\n      const resources = await this.#getMergedResources(\n        contentStream.dict,\n        RESOURCES_KEYS_OPERATOR_LIST\n      );\n      const opList = new OperatorList(intent, sink);\n      handler.send(\"StartRenderPage\", {\n        transparency: partialEvaluator.hasBlendModes(\n          resources,\n          this.nonBlendModesSet\n        ),\n        pageIndex,\n        cacheKey,\n      });\n\n      await partialEvaluator.getOperatorList({\n        stream: contentStream,\n        task,\n        resources,\n        operatorList: opList,\n      });\n      return opList;\n    });\n\n    // Fetch the page's annotations and add their operator lists to the\n    // page's operator list to render them.\n    // eslint-disable-next-line prefer-const\n    let [pageOpList, annotations, newAnnotations] = await Promise.all([\n      pageListPromise,\n      this._parsedAnnotations,\n      newAnnotationsPromise,\n    ]);\n\n    if (newAnnotations) {\n      // Some annotations can already exist (if it has the refToReplace\n      // property). In this case, we replace the old annotation by the new one.\n      annotations = annotations.filter(\n        a => !(a.ref && deletedAnnotations.has(a.ref))\n      );\n      for (let i = 0, ii = newAnnotations.length; i < ii; i++) {\n        const newAnnotation = newAnnotations[i];\n        if (newAnnotation.refToReplace) {\n          const j = annotations.findIndex(\n            a => a.ref && isRefsEqual(a.ref, newAnnotation.refToReplace)\n          );\n          if (j >= 0) {\n            annotations.splice(j, 1, newAnnotation);\n            newAnnotations.splice(i--, 1);\n            ii--;\n          }\n        }\n      }\n      annotations = annotations.concat(newAnnotations);\n    }\n    if (\n      annotations.length === 0 ||\n      intent & RenderingIntentFlag.ANNOTATIONS_DISABLE\n    ) {\n      pageOpList.flush(/* lastChunk = */ true);\n      return { length: pageOpList.totalLength };\n    }\n    const renderForms = !!(intent & RenderingIntentFlag.ANNOTATIONS_FORMS),\n      isEditing = !!(intent & RenderingIntentFlag.IS_EDITING),\n      intentAny = !!(intent & RenderingIntentFlag.ANY),\n      intentDisplay = !!(intent & RenderingIntentFlag.DISPLAY),\n      intentPrint = !!(intent & RenderingIntentFlag.PRINT);\n\n    // Collect the operator list promises for the annotations. Each promise\n    // is resolved with the complete operator list for a single annotation.\n    const opListPromises = [];\n    for (const annotation of annotations) {\n      if (\n        intentAny ||\n        (intentDisplay &&\n          annotation.mustBeViewed(annotationStorage, renderForms) &&\n          annotation.mustBeViewedWhenEditing(isEditing, modifiedIds)) ||\n        (intentPrint && annotation.mustBePrinted(annotationStorage))\n      ) {\n        opListPromises.push(\n          annotation\n            .getOperatorList(partialEvaluator, task, intent, annotationStorage)\n            .catch(function (reason) {\n              warn(\n                \"getOperatorList - ignoring annotation data during \" +\n                  `\"${task.name}\" task: \"${reason}\".`\n              );\n              return {\n                opList: null,\n                separateForm: false,\n                separateCanvas: false,\n              };\n            })\n        );\n      }\n    }\n\n    const opLists = await Promise.all(opListPromises);\n    let form = false,\n      canvas = false;\n\n    for (const { opList, separateForm, separateCanvas } of opLists) {\n      pageOpList.addOpList(opList);\n\n      form ||= separateForm;\n      canvas ||= separateCanvas;\n    }\n    pageOpList.flush(\n      /* lastChunk = */ true,\n      /* separateAnnots = */ { form, canvas }\n    );\n    return { length: pageOpList.totalLength };\n  }\n\n  async extractTextContent({\n    handler,\n    task,\n    includeMarkedContent,\n    disableNormalization,\n    sink,\n    intersector = null,\n  }) {\n    const contentStreamPromise = this.getContentStream();\n    const resourcesPromise = this.loadResources(RESOURCES_KEYS_TEXT_CONTENT);\n    const langPromise = this.pdfManager.ensureCatalog(\"lang\");\n\n    const [contentStream, , lang] = await Promise.all([\n      contentStreamPromise,\n      resourcesPromise,\n      langPromise,\n    ]);\n    const resources = await this.#getMergedResources(\n      contentStream.dict,\n      RESOURCES_KEYS_TEXT_CONTENT\n    );\n\n    const partialEvaluator = this.#createPartialEvaluator(handler);\n\n    return partialEvaluator.getTextContent({\n      stream: contentStream,\n      task,\n      resources,\n      includeMarkedContent,\n      disableNormalization,\n      sink,\n      viewBox: this.view,\n      lang,\n      intersector,\n    });\n  }\n\n  async getStructTree() {\n    const structTreeRoot =\n      await this.pdfManager.ensureCatalog(\"structTreeRoot\");\n    if (!structTreeRoot) {\n      return null;\n    }\n    // Ensure that the structTree will contain the page's annotations.\n    await this._parsedAnnotations;\n\n    try {\n      const structTree = await this.pdfManager.ensure(\n        this,\n        \"_parseStructTree\",\n        [structTreeRoot]\n      );\n      return await this.pdfManager.ensure(structTree, \"serializable\");\n    } catch (ex) {\n      warn(`getStructTree: \"${ex}\".`);\n      return null;\n    }\n  }\n\n  /**\n   * @private\n   */\n  _parseStructTree(structTreeRoot) {\n    const tree = new StructTreePage(structTreeRoot, this.pageDict);\n    tree.parse(this.ref);\n    return tree;\n  }\n\n  async getAnnotationsData(handler, task, intent) {\n    const annotations = await this._parsedAnnotations;\n    if (annotations.length === 0) {\n      return annotations;\n    }\n\n    const annotationsData = [],\n      textContentPromises = [];\n    let partialEvaluator;\n\n    const intentAny = !!(intent & RenderingIntentFlag.ANY),\n      intentDisplay = !!(intent & RenderingIntentFlag.DISPLAY),\n      intentPrint = !!(intent & RenderingIntentFlag.PRINT);\n\n    const highlightedAnnotations = [];\n\n    for (const annotation of annotations) {\n      // Get the annotation even if it's hidden because\n      // JS can change its display.\n      const isVisible = intentAny || (intentDisplay && annotation.viewable);\n      if (isVisible || (intentPrint && annotation.printable)) {\n        annotationsData.push(annotation.data);\n      }\n\n      if (annotation.hasTextContent && isVisible) {\n        partialEvaluator ??= this.#createPartialEvaluator(handler);\n\n        textContentPromises.push(\n          annotation\n            .extractTextContent(partialEvaluator, task, [\n              -Infinity,\n              -Infinity,\n              Infinity,\n              Infinity,\n            ])\n            .catch(function (reason) {\n              warn(\n                `getAnnotationsData - ignoring textContent during \"${task.name}\" task: \"${reason}\".`\n              );\n            })\n        );\n      } else if (annotation.overlaysTextContent && isVisible) {\n        highlightedAnnotations.push(annotation);\n      }\n    }\n\n    if (highlightedAnnotations.length > 0) {\n      const intersector = new Intersector(highlightedAnnotations);\n      textContentPromises.push(\n        this.extractTextContent({\n          handler,\n          task,\n          includeMarkedContent: false,\n          disableNormalization: false,\n          sink: null,\n          intersector,\n        }).then(() => {\n          intersector.setText();\n        })\n      );\n    }\n\n    await Promise.all(textContentPromises);\n    return annotationsData;\n  }\n\n  get annotations() {\n    const annots = this.#getInheritableProperty(\"Annots\");\n    return shadow(this, \"annotations\", Array.isArray(annots) ? annots : []);\n  }\n\n  get _parsedAnnotations() {\n    const promise = this.pdfManager\n      .ensure(this, \"annotations\")\n      .then(async annots => {\n        if (annots.length === 0) {\n          return annots;\n        }\n\n        const [annotationGlobals, fieldObjects] = await Promise.all([\n          this.pdfManager.ensureDoc(\"annotationGlobals\"),\n          this.pdfManager.ensureDoc(\"fieldObjects\"),\n        ]);\n        if (!annotationGlobals) {\n          return [];\n        }\n\n        const orphanFields = fieldObjects?.orphanFields;\n        const annotationPromises = [];\n        for (const annotationRef of annots) {\n          annotationPromises.push(\n            AnnotationFactory.create(\n              this.xref,\n              annotationRef,\n              annotationGlobals,\n              this._localIdFactory,\n              /* collectFields */ false,\n              orphanFields,\n              /* collectByType */ null,\n              this.ref\n            ).catch(function (reason) {\n              warn(`_parsedAnnotations: \"${reason}\".`);\n              return null;\n            })\n          );\n        }\n\n        const sortedAnnotations = [];\n        let popupAnnotations, widgetAnnotations;\n        // Ensure that PopupAnnotations are handled last, since they depend on\n        // their parent Annotation in the display layer; fixes issue 11362.\n        for (const annotation of await Promise.all(annotationPromises)) {\n          if (!annotation) {\n            continue;\n          }\n          if (annotation instanceof WidgetAnnotation) {\n            (widgetAnnotations ||= []).push(annotation);\n            continue;\n          }\n          if (annotation instanceof PopupAnnotation) {\n            (popupAnnotations ||= []).push(annotation);\n            continue;\n          }\n          sortedAnnotations.push(annotation);\n        }\n        if (widgetAnnotations) {\n          sortedAnnotations.push(...widgetAnnotations);\n        }\n        if (popupAnnotations) {\n          sortedAnnotations.push(...popupAnnotations);\n        }\n\n        return sortedAnnotations;\n      });\n\n    return shadow(this, \"_parsedAnnotations\", promise);\n  }\n\n  get jsActions() {\n    const actions = collectActions(\n      this.xref,\n      this.pageDict,\n      PageActionEventType\n    );\n    return shadow(this, \"jsActions\", actions);\n  }\n\n  async collectAnnotationsByType(\n    handler,\n    task,\n    types,\n    promises,\n    annotationGlobals\n  ) {\n    const { pageIndex } = this;\n\n    if (Object.hasOwn(this, \"_parsedAnnotations\")) {\n      const cachedAnnotations = await this._parsedAnnotations;\n      for (const { data } of cachedAnnotations) {\n        if (!types || types.has(data.annotationType)) {\n          data.pageIndex = pageIndex;\n          promises.push(Promise.resolve(data));\n        }\n      }\n      return;\n    }\n\n    const annots = await this.pdfManager.ensure(this, \"annotations\");\n    let partialEvaluator;\n\n    for (const annotationRef of annots) {\n      promises.push(\n        AnnotationFactory.create(\n          this.xref,\n          annotationRef,\n          annotationGlobals,\n          this._localIdFactory,\n          /* collectFields */ false,\n          /* orphanFields */ null,\n          /* collectByType */ types,\n          this.ref\n        )\n          .then(async annotation => {\n            if (!annotation) {\n              return null;\n            }\n            annotation.data.pageIndex = pageIndex;\n            if (annotation.hasTextContent && annotation.viewable) {\n              partialEvaluator ??= this.#createPartialEvaluator(handler);\n\n              await annotation.extractTextContent(partialEvaluator, task, [\n                -Infinity,\n                -Infinity,\n                Infinity,\n                Infinity,\n              ]);\n            }\n            return annotation.data;\n          })\n          .catch(function (reason) {\n            warn(`collectAnnotationsByType: \"${reason}\".`);\n            return null;\n          })\n      );\n    }\n  }\n}\n\nconst PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);\nconst STARTXREF_SIGNATURE = new Uint8Array([\n  0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66,\n]);\nconst ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);\n\nfunction find(stream, signature, limit = 1024, backwards = false) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(limit > 0, 'The \"limit\" must be a positive integer.');\n  }\n  const signatureLength = signature.length;\n\n  const scanBytes = stream.peekBytes(limit);\n  const scanLength = scanBytes.length - signatureLength;\n\n  if (scanLength <= 0) {\n    return false;\n  }\n  if (backwards) {\n    const signatureEnd = signatureLength - 1;\n\n    let pos = scanBytes.length - 1;\n    while (pos >= signatureEnd) {\n      let j = 0;\n      while (\n        j < signatureLength &&\n        scanBytes[pos - j] === signature[signatureEnd - j]\n      ) {\n        j++;\n      }\n      if (j >= signatureLength) {\n        // `signature` found.\n        stream.pos += pos - signatureEnd;\n        return true;\n      }\n      pos--;\n    }\n  } else {\n    // forwards\n    let pos = 0;\n    while (pos <= scanLength) {\n      let j = 0;\n      while (j < signatureLength && scanBytes[pos + j] === signature[j]) {\n        j++;\n      }\n      if (j >= signatureLength) {\n        // `signature` found.\n        stream.pos += pos;\n        return true;\n      }\n      pos++;\n    }\n  }\n  return false;\n}\n\n/**\n * The `PDFDocument` class holds all the (worker-thread) data of the PDF file.\n */\nclass PDFDocument {\n  #pagePromises = new Map();\n\n  // Map<id, {byteRange: number[4], pkcs7: Uint8Array}> — populated by the\n  // `signatures` getter, consumed by `getSignatureData`. We deliberately\n  // keep the signed byte spans out of the metadata array and only slice\n  // them out of the stream when the viewer actually asks to verify.\n  #signatureData = null;\n\n  #version = null;\n\n  constructor(pdfManager, stream) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        stream instanceof BaseStream,\n        'PDFDocument: Invalid \"stream\" argument.'\n      );\n    }\n    if (stream.length <= 0) {\n      throw new InvalidPDFException(\n        \"The PDF file is empty, i.e. its size is zero bytes.\"\n      );\n    }\n\n    this.pdfManager = pdfManager;\n    this.stream = stream;\n    this.xref = new XRef(stream, pdfManager);\n\n    const idCounters = {\n      font: 0,\n    };\n    this._globalIdFactory = class {\n      static getDocId() {\n        return `g_${pdfManager.docId}`;\n      }\n\n      static createFontId() {\n        return `f${++idCounters.font}`;\n      }\n\n      static createObjId() {\n        unreachable(\"Abstract method `createObjId` called.\");\n      }\n\n      static getPageObjId() {\n        unreachable(\"Abstract method `getPageObjId` called.\");\n      }\n    };\n  }\n\n  parse(recoveryMode) {\n    this.xref.parse(recoveryMode);\n    this.catalog = new Catalog(this.pdfManager, this.xref);\n  }\n\n  get linearization() {\n    let linearization = null;\n    try {\n      linearization = Linearization.create(this.stream);\n    } catch (err) {\n      if (err instanceof MissingDataException) {\n        throw err;\n      }\n      info(err);\n    }\n    return shadow(this, \"linearization\", linearization);\n  }\n\n  get startXRef() {\n    const stream = this.stream;\n    let startXRef = 0;\n\n    if (this.linearization) {\n      // Find the end of the first object.\n      stream.reset();\n      if (find(stream, ENDOBJ_SIGNATURE)) {\n        stream.skip(6);\n\n        let ch = stream.peekByte();\n        while (isWhiteSpace(ch)) {\n          stream.pos++;\n          ch = stream.peekByte();\n        }\n        startXRef = stream.pos - stream.start;\n      }\n    } else {\n      // Find `startxref` by checking backwards from the end of the file.\n      const step = 1024;\n      const startXRefLength = STARTXREF_SIGNATURE.length;\n      let found = false,\n        pos = stream.end;\n\n      while (!found && pos > 0) {\n        pos -= step - startXRefLength;\n        if (pos < 0) {\n          pos = 0;\n        }\n        stream.pos = pos;\n        found = find(stream, STARTXREF_SIGNATURE, step, true);\n      }\n\n      if (found) {\n        stream.skip(9);\n        let ch;\n        do {\n          ch = stream.getByte();\n        } while (isWhiteSpace(ch));\n        let str = \"\";\n        while (ch >= /* Space = */ 0x20 && ch <= /* '9' = */ 0x39) {\n          str += String.fromCharCode(ch);\n          ch = stream.getByte();\n        }\n        startXRef = parseInt(str, 10);\n        if (isNaN(startXRef)) {\n          startXRef = 0;\n        }\n      }\n    }\n    return shadow(this, \"startXRef\", startXRef);\n  }\n\n  // Find the header, get the PDF format version and setup the\n  // stream to start from the header.\n  checkHeader() {\n    const stream = this.stream;\n    stream.reset();\n\n    if (!find(stream, PDF_HEADER_SIGNATURE)) {\n      // May not be a PDF file, but don't throw an error and let\n      // parsing continue.\n      return;\n    }\n    stream.moveStart();\n\n    // Skip over the \"%PDF-\" prefix, since it was found above.\n    stream.skip(PDF_HEADER_SIGNATURE.length);\n    // Read the PDF format version.\n    let version = \"\",\n      ch;\n    while (\n      (ch = stream.getByte()) > /* Space = */ 0x20 &&\n      version.length < /* MAX_PDF_VERSION_LENGTH = */ 7\n    ) {\n      version += String.fromCharCode(ch);\n    }\n\n    if (PDF_VERSION_REGEXP.test(version)) {\n      this.#version = version;\n    } else {\n      warn(`Invalid PDF header version: ${version}`);\n    }\n  }\n\n  parseStartXRef() {\n    this.xref.setStartXRef(this.startXRef);\n  }\n\n  get numPages() {\n    let num = 0;\n    if (this.catalog.hasActualNumPages) {\n      num = this.catalog.numPages;\n    } else if (this.xfaFactory) {\n      // num is a Promise.\n      num = this.xfaFactory.getNumPages();\n    } else if (this.linearization) {\n      num = this.linearization.numPages;\n    } else {\n      num = this.catalog.numPages;\n    }\n    return shadow(this, \"numPages\", num);\n  }\n\n  #hasOnlyDocumentSignatures(fields, recursionDepth = 0) {\n    const RECURSION_LIMIT = 10;\n\n    if (!Array.isArray(fields)) {\n      return false;\n    }\n    return fields.every(field => {\n      field = this.xref.fetchIfRef(field);\n      if (!(field instanceof Dict)) {\n        return false;\n      }\n      if (field.has(\"Kids\")) {\n        if (++recursionDepth > RECURSION_LIMIT) {\n          warn(\"#hasOnlyDocumentSignatures: maximum recursion depth reached\");\n          return false;\n        }\n        return this.#hasOnlyDocumentSignatures(\n          field.get(\"Kids\"),\n          recursionDepth\n        );\n      }\n      const isSignature = isName(\n        getInheritableProperty({ dict: field, key: \"FT\" }),\n        \"Sig\"\n      );\n      const rectangle = field.get(\"Rect\");\n      const isInvisible =\n        Array.isArray(rectangle) && rectangle.every(value => value === 0);\n      return isSignature && isInvisible;\n    });\n  }\n\n  get _xfaStreams() {\n    const { acroForm } = this.catalog;\n    if (!acroForm) {\n      return null;\n    }\n\n    const xfa = acroForm.get(\"XFA\");\n    const entries = new Map(\n      [\n        \"xdp:xdp\",\n        \"template\",\n        \"datasets\",\n        \"config\",\n        \"connectionSet\",\n        \"localeSet\",\n        \"stylesheet\",\n        \"/xdp:xdp\",\n      ].map(e => [e, null])\n    );\n    if (xfa instanceof BaseStream && !xfa.isEmpty) {\n      entries.set(\"xdp:xdp\", xfa);\n      return entries;\n    }\n\n    if (!Array.isArray(xfa) || xfa.length === 0) {\n      return null;\n    }\n\n    for (let i = 0, ii = xfa.length; i < ii; i += 2) {\n      let name;\n      if (i === 0) {\n        name = \"xdp:xdp\";\n      } else if (i === ii - 2) {\n        name = \"/xdp:xdp\";\n      } else {\n        name = xfa[i];\n      }\n\n      if (!entries.has(name)) {\n        continue;\n      }\n      const data = this.xref.fetchIfRef(xfa[i + 1]);\n      if (!(data instanceof BaseStream) || data.isEmpty) {\n        continue;\n      }\n      entries.set(name, data);\n    }\n    return entries;\n  }\n\n  get xfaDatasets() {\n    const streams = this._xfaStreams;\n    if (!streams) {\n      return shadow(this, \"xfaDatasets\", null);\n    }\n    for (const key of [\"datasets\", \"xdp:xdp\"]) {\n      const stream = streams.get(key);\n      if (!stream) {\n        continue;\n      }\n      try {\n        const str = stringToUTF8String(stream.getString());\n        const data = { [key]: str };\n        return shadow(this, \"xfaDatasets\", new DatasetReader(data));\n      } catch {\n        warn(\"XFA - Invalid utf-8 string.\");\n        break;\n      }\n    }\n    return shadow(this, \"xfaDatasets\", null);\n  }\n\n  get xfaData() {\n    const streams = this._xfaStreams;\n    if (!streams) {\n      return null;\n    }\n    const data = new Map();\n    for (const [key, stream] of streams) {\n      if (!stream) {\n        continue;\n      }\n      try {\n        data.set(key, stringToUTF8String(stream.getString()));\n      } catch {\n        warn(\"XFA - Invalid utf-8 string.\");\n        return null;\n      }\n    }\n    return data;\n  }\n\n  get xfaFactory() {\n    let data;\n    if (\n      this.pdfManager.enableXfa &&\n      this.catalog.needsRendering &&\n      this.formInfo.hasXfa &&\n      !this.formInfo.hasAcroForm\n    ) {\n      data = this.xfaData;\n    }\n    return shadow(this, \"xfaFactory\", data ? new XFAFactory(data) : null);\n  }\n\n  get isPureXfa() {\n    return this.xfaFactory ? this.xfaFactory.isValid() : false;\n  }\n\n  get htmlForXfa() {\n    return this.xfaFactory ? this.xfaFactory.getPages() : null;\n  }\n\n  async #loadXfaImages() {\n    const xfaImages = await this.pdfManager.ensureCatalog(\"xfaImages\");\n    if (!xfaImages) {\n      return;\n    }\n    this.xfaFactory.setImages(xfaImages);\n  }\n\n  async #loadXfaFonts(handler, task) {\n    const acroForm = await this.pdfManager.ensureCatalog(\"acroForm\");\n    if (!acroForm) {\n      return;\n    }\n    const resources = await acroForm.getAsync(\"DR\");\n    if (!(resources instanceof Dict)) {\n      return;\n    }\n    await ObjectLoader.load(resources, [\"Font\"], this.xref);\n\n    const fontRes = resources.get(\"Font\");\n    if (!(fontRes instanceof Dict)) {\n      return;\n    }\n\n    const options = Object.assign(\n      Object.create(null),\n      this.pdfManager.evaluatorOptions,\n      { useSystemFonts: false }\n    );\n    const { builtInCMapCache, fontCache, standardFontDataCache } = this.catalog;\n\n    const partialEvaluator = new PartialEvaluator({\n      xref: this.xref,\n      handler,\n      pageIndex: -1,\n      idFactory: this._globalIdFactory,\n      fontCache,\n      builtInCMapCache,\n      standardFontDataCache,\n      options,\n    });\n    const operatorList = new OperatorList();\n    const pdfFonts = [];\n    const initialState = {\n      get font() {\n        return pdfFonts.at(-1);\n      },\n      set font(font) {\n        pdfFonts.push(font);\n      },\n      clone() {\n        return this;\n      },\n    };\n\n    const parseFont = (fontName, fallbackFontDict, cssFontInfo) =>\n      partialEvaluator\n        .handleSetFont(\n          resources,\n          [Name.get(fontName), 1],\n          /* fontRef = */ null,\n          operatorList,\n          task,\n          initialState,\n          fallbackFontDict,\n          cssFontInfo\n        )\n        .catch(reason => {\n          warn(`loadXfaFonts: \"${reason}\".`);\n          return null;\n        });\n\n    const promises = [];\n    for (const [fontName, font] of fontRes) {\n      const descriptor = font.get(\"FontDescriptor\");\n      if (!(descriptor instanceof Dict)) {\n        continue;\n      }\n      let fontFamily = descriptor.get(\"FontFamily\");\n      // For example, \"Wingdings 3\" is not a valid font name in the css specs.\n      fontFamily = fontFamily.replaceAll(/ +(\\d)/g, \"$1\");\n      const fontWeight = descriptor.get(\"FontWeight\");\n\n      // Angle is expressed in degrees counterclockwise in PDF\n      // when it's clockwise in CSS\n      // (see https://drafts.csswg.org/css-fonts-4/#valdef-font-style-oblique-angle)\n      const italicAngle = -descriptor.get(\"ItalicAngle\");\n      const cssFontInfo = { fontFamily, fontWeight, italicAngle };\n\n      if (!validateCSSFont(cssFontInfo)) {\n        continue;\n      }\n      promises.push(\n        parseFont(fontName, /* fallbackFontDict = */ null, cssFontInfo)\n      );\n    }\n\n    await Promise.all(promises);\n    const missingFonts = this.xfaFactory.setFonts(pdfFonts);\n\n    if (!missingFonts) {\n      return;\n    }\n\n    options.ignoreErrors = true;\n    promises.length = 0;\n    pdfFonts.length = 0;\n\n    const reallyMissingFonts = new Set();\n    for (const missing of missingFonts) {\n      if (!getXfaFontName(`${missing}-Regular`)) {\n        // No substitution available: we'll fallback on Myriad.\n        reallyMissingFonts.add(missing);\n      }\n    }\n\n    if (reallyMissingFonts.size) {\n      missingFonts.push(\"PdfJS-Fallback\");\n    }\n\n    for (const missing of missingFonts) {\n      if (reallyMissingFonts.has(missing)) {\n        continue;\n      }\n      for (const fontInfo of [\n        { name: \"Regular\", fontWeight: 400, italicAngle: 0 },\n        { name: \"Bold\", fontWeight: 700, italicAngle: 0 },\n        { name: \"Italic\", fontWeight: 400, italicAngle: 12 },\n        { name: \"BoldItalic\", fontWeight: 700, italicAngle: 12 },\n      ]) {\n        const name = `${missing}-${fontInfo.name}`;\n\n        promises.push(\n          parseFont(name, getXfaFontDict(name), {\n            fontFamily: missing,\n            fontWeight: fontInfo.fontWeight,\n            italicAngle: fontInfo.italicAngle,\n          })\n        );\n      }\n    }\n\n    await Promise.all(promises);\n    this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts);\n  }\n\n  loadXfaResources(handler, task) {\n    return Promise.all([\n      this.#loadXfaFonts(handler, task).catch(() => {\n        // Ignore errors, to allow the document to load.\n      }),\n      this.#loadXfaImages(),\n    ]);\n  }\n\n  serializeXfaData(annotationStorage) {\n    return this.xfaFactory\n      ? this.xfaFactory.serializeData(annotationStorage)\n      : null;\n  }\n\n  /**\n   * The specification states in section 7.5.2 that the version from\n   * the catalog, if present, should overwrite the version from the header.\n   */\n  get version() {\n    return this.catalog.version || this.#version;\n  }\n\n  get formInfo() {\n    const formInfo = {\n      hasFields: false,\n      hasAcroForm: false,\n      hasXfa: false,\n      hasSignatures: false,\n    };\n    const { acroForm } = this.catalog;\n    if (!acroForm) {\n      return shadow(this, \"formInfo\", formInfo);\n    }\n\n    try {\n      const fields = acroForm.get(\"Fields\");\n      const hasFields = Array.isArray(fields) && fields.length > 0;\n      formInfo.hasFields = hasFields; // Used by the `fieldObjects` getter.\n\n      // The document contains XFA data if the `XFA` entry is a non-empty\n      // array or stream.\n      const xfa = acroForm.get(\"XFA\");\n      formInfo.hasXfa =\n        (Array.isArray(xfa) && xfa.length > 0) ||\n        (xfa instanceof BaseStream && !xfa.isEmpty);\n\n      // The document contains AcroForm data if the `Fields` entry is a\n      // non-empty array and it doesn't consist of only document signatures.\n      // This second check is required for files that don't actually contain\n      // AcroForm data (only XFA data), but that use the `Fields` entry to\n      // store (invisible) document signatures. This can be detected using\n      // the first bit of the `SigFlags` integer (see Table 219 in the\n      // specification).\n      const sigFlags = acroForm.get(\"SigFlags\");\n      const hasSignatures = !!(sigFlags & 0x1);\n      const hasOnlyDocumentSignatures =\n        hasSignatures && this.#hasOnlyDocumentSignatures(fields);\n      formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures;\n      formInfo.hasSignatures = hasSignatures;\n    } catch (ex) {\n      if (ex instanceof MissingDataException) {\n        throw ex;\n      }\n      warn(`Cannot fetch form information: \"${ex}\".`);\n    }\n    return shadow(this, \"formInfo\", formInfo);\n  }\n\n  get documentInfo() {\n    const { catalog, formInfo, xref } = this;\n\n    const docInfo = {\n      PDFFormatVersion: this.version,\n      Language: catalog.lang,\n      EncryptFilterName: xref.encrypt?.filterName ?? null,\n      IsLinearized: !!this.linearization,\n      IsAcroFormPresent: formInfo.hasAcroForm,\n      IsXFAPresent: formInfo.hasXfa,\n      IsCollectionPresent: !!catalog.collection,\n      IsSignaturesPresent: formInfo.hasSignatures,\n    };\n\n    let infoDict;\n    try {\n      infoDict = xref.trailer.get(\"Info\");\n    } catch (err) {\n      if (err instanceof MissingDataException) {\n        throw err;\n      }\n      info(\"The document information dictionary is invalid.\");\n    }\n    if (!(infoDict instanceof Dict)) {\n      return shadow(this, \"documentInfo\", docInfo);\n    }\n\n    for (const [key, value] of infoDict) {\n      switch (key) {\n        case \"Title\":\n        case \"Author\":\n        case \"Subject\":\n        case \"Keywords\":\n        case \"Creator\":\n        case \"Producer\":\n        case \"CreationDate\":\n        case \"ModDate\":\n          if (typeof value === \"string\") {\n            docInfo[key] = stringToPDFString(value);\n            continue;\n          }\n          break;\n        case \"Trapped\":\n          if (value instanceof Name) {\n            docInfo[key] = value;\n            continue;\n          }\n          break;\n        default:\n          // For custom values, only accept white-listed types to prevent\n          // errors that would occur when trying to send non-serializable\n          // objects to the main-thread (for example `Dict` or `Stream`).\n          let customValue;\n          switch (typeof value) {\n            case \"string\":\n              customValue = stringToPDFString(value);\n              break;\n            case \"number\":\n            case \"boolean\":\n              customValue = value;\n              break;\n            default:\n              if (value instanceof Name) {\n                customValue = value;\n              }\n              break;\n          }\n\n          if (customValue === undefined) {\n            warn(`Bad value, for custom key \"${key}\", in Info: ${value}.`);\n            continue;\n          }\n          docInfo.Custom ??= Object.create(null);\n          docInfo.Custom[key] = customValue;\n          continue;\n      }\n      warn(`Bad value, for key \"${key}\", in Info: ${value}.`);\n    }\n    return shadow(this, \"documentInfo\", docInfo);\n  }\n\n  get fingerprints() {\n    const FINGERPRINT_FIRST_BYTES = 1024;\n    const EMPTY_FINGERPRINT = \"\\x00\".repeat(16);\n\n    function validate(data) {\n      return (\n        typeof data === \"string\" &&\n        data.length === 16 &&\n        data !== EMPTY_FINGERPRINT\n      );\n    }\n\n    const id = this.xref.trailer.get(\"ID\");\n    let hashOriginal, hashModified;\n    if (Array.isArray(id) && validate(id[0])) {\n      hashOriginal = stringToBytes(id[0]);\n\n      if (id[1] !== id[0] && validate(id[1])) {\n        hashModified = stringToBytes(id[1]);\n      }\n    } else {\n      hashOriginal = calculateMD5(\n        this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES),\n        0,\n        FINGERPRINT_FIRST_BYTES\n      );\n    }\n\n    return shadow(this, \"fingerprints\", [\n      hashOriginal.toHex(),\n      hashModified?.toHex() ?? null,\n    ]);\n  }\n\n  async #getLinearizationPage(pageIndex) {\n    const { catalog, linearization, xref } = this;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        linearization?.pageFirst === pageIndex,\n        \"_getLinearizationPage - invalid pageIndex argument.\"\n      );\n    }\n\n    const ref = Ref.get(linearization.objectNumberFirst, 0);\n    try {\n      const obj = await xref.fetchAsync(ref);\n      // Ensure that the object that was found is actually a Page dictionary.\n      if (obj instanceof Dict) {\n        let type = obj.getRaw(\"Type\");\n        if (type instanceof Ref) {\n          type = await xref.fetchAsync(type);\n        }\n        if (\n          isName(type, \"Page\") ||\n          (!obj.has(\"Type\") && !obj.has(\"Kids\") && obj.has(\"Contents\"))\n        ) {\n          if (!catalog.pageKidsCountCache.has(ref)) {\n            catalog.pageKidsCountCache.put(ref, 1); // Cache the Page reference.\n          }\n          // Help improve performance of the `Catalog.getPageIndex` method.\n          if (!catalog.pageIndexCache.has(ref)) {\n            catalog.pageIndexCache.put(ref, 0);\n          }\n\n          return [obj, ref];\n        }\n      }\n      throw new FormatError(\n        \"The Linearization dictionary doesn't point to a valid Page dictionary.\"\n      );\n    } catch (reason) {\n      warn(`_getLinearizationPage: \"${reason.message}\".`);\n      return catalog.getPageDict(pageIndex);\n    }\n  }\n\n  getPage(pageIndex) {\n    const cachedPromise = this.#pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const { catalog, linearization, xfaFactory } = this;\n\n    let promise;\n    if (xfaFactory) {\n      promise = Promise.resolve([Dict.empty, null]);\n    } else if (linearization?.pageFirst === pageIndex) {\n      promise = this.#getLinearizationPage(pageIndex);\n    } else {\n      promise = catalog.getPageDict(pageIndex);\n    }\n    promise = promise.then(\n      ([pageDict, ref]) =>\n        new Page({\n          pdfManager: this.pdfManager,\n          xref: this.xref,\n          pageIndex,\n          pageDict,\n          ref,\n          globalIdFactory: this._globalIdFactory,\n          fontCache: catalog.fontCache,\n          builtInCMapCache: catalog.builtInCMapCache,\n          standardFontDataCache: catalog.standardFontDataCache,\n          globalColorSpaceCache: catalog.globalColorSpaceCache,\n          globalImageCache: catalog.globalImageCache,\n          systemFontCache: catalog.systemFontCache,\n          nonBlendModesSet: catalog.nonBlendModesSet,\n          xfaFactory,\n        })\n    );\n\n    this.#pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n\n  async checkFirstPage(recoveryMode = false) {\n    if (recoveryMode) {\n      return;\n    }\n    try {\n      await this.getPage(0);\n    } catch (reason) {\n      if (reason instanceof XRefEntryException) {\n        // Clear out the various caches to ensure that we haven't stored any\n        // inconsistent and/or incorrect state, since that could easily break\n        // subsequent `this.getPage` calls.\n        this.#pagePromises.delete(0);\n        await this.cleanup();\n\n        throw new XRefParseException();\n      }\n    }\n  }\n\n  async checkLastPage(recoveryMode = false) {\n    const { catalog, pdfManager } = this;\n\n    catalog.setActualNumPages(); // Ensure that it's always reset.\n    let numPages;\n\n    try {\n      await Promise.all([\n        pdfManager.ensureDoc(\"xfaFactory\"),\n        pdfManager.ensureDoc(\"linearization\"),\n        pdfManager.ensureCatalog(\"numPages\"),\n      ]);\n\n      if (this.xfaFactory) {\n        return; // The Page count is always calculated for XFA-documents.\n      } else if (this.linearization) {\n        numPages = this.linearization.numPages;\n      } else {\n        numPages = catalog.numPages;\n      }\n\n      if (!Number.isInteger(numPages)) {\n        throw new FormatError(\"Page count is not an integer.\");\n      } else if (numPages <= 1) {\n        return;\n      }\n      await this.getPage(numPages - 1);\n    } catch (reason) {\n      // Clear out the various caches to ensure that we haven't stored any\n      // inconsistent and/or incorrect state, since that could easily break\n      // subsequent `this.getPage` calls.\n      this.#pagePromises.delete(numPages - 1);\n      await this.cleanup();\n\n      if (reason instanceof XRefEntryException && !recoveryMode) {\n        throw new XRefParseException();\n      }\n      warn(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`);\n\n      let pagesTree;\n      try {\n        pagesTree = await catalog.getAllPageDicts(recoveryMode);\n      } catch (reasonAll) {\n        if (reasonAll instanceof XRefEntryException && !recoveryMode) {\n          throw new XRefParseException();\n        }\n        catalog.setActualNumPages(1);\n        return;\n      }\n\n      for (const [pageIndex, [pageDict, ref]] of pagesTree) {\n        let promise;\n        if (pageDict instanceof Error) {\n          promise = Promise.reject(pageDict);\n\n          // Prevent \"uncaught exception: Object\"-messages in the console.\n          promise.catch(() => {});\n        } else {\n          promise = Promise.resolve(\n            new Page({\n              pdfManager,\n              xref: this.xref,\n              pageIndex,\n              pageDict,\n              ref,\n              globalIdFactory: this._globalIdFactory,\n              fontCache: catalog.fontCache,\n              builtInCMapCache: catalog.builtInCMapCache,\n              standardFontDataCache: catalog.standardFontDataCache,\n              globalColorSpaceCache: this.globalColorSpaceCache,\n              globalImageCache: catalog.globalImageCache,\n              systemFontCache: catalog.systemFontCache,\n              nonBlendModesSet: catalog.nonBlendModesSet,\n              xfaFactory: null,\n            })\n          );\n        }\n\n        this.#pagePromises.set(pageIndex, promise);\n      }\n      catalog.setActualNumPages(pagesTree.size);\n    }\n  }\n\n  async fontFallback(id, handler) {\n    const { catalog, pdfManager } = this;\n\n    for (const translatedFont of await Promise.all(catalog.fontCache)) {\n      if (translatedFont.loadedName === id) {\n        translatedFont.fallback(handler, pdfManager.evaluatorOptions);\n        return;\n      }\n    }\n  }\n\n  async cleanup(manuallyTriggered = false) {\n    return this.catalog\n      ? this.catalog.cleanup(manuallyTriggered)\n      : clearGlobalCaches();\n  }\n\n  async #collectFieldObjects(\n    name,\n    parentRef,\n    fieldRef,\n    promises,\n    annotationGlobals,\n    visitedRefs,\n    orphanFields\n  ) {\n    const { xref } = this;\n\n    if (!(fieldRef instanceof Ref) || visitedRefs.has(fieldRef)) {\n      return;\n    }\n    visitedRefs.put(fieldRef);\n    const field = await xref.fetchAsync(fieldRef);\n    if (!(field instanceof Dict)) {\n      return;\n    }\n    let subtype = await field.getAsync(\"Subtype\");\n    subtype = subtype instanceof Name ? subtype.name : null;\n    // Skip unrelated annotation types (see issue 19281).\n    switch (subtype) {\n      case \"Link\":\n        return;\n    }\n    if (field.has(\"T\")) {\n      const partName = stringToPDFString(await field.getAsync(\"T\"));\n      name = name === \"\" ? partName : `${name}.${partName}`;\n    } else {\n      let obj = field;\n      // The `Parent` chain can be cyclic, hence the local `RefSet`.\n      const walkedRefs = new RefSet();\n      while (true) {\n        obj = obj.getRaw(\"Parent\") || parentRef;\n        if (obj instanceof Ref) {\n          if (visitedRefs.has(obj) || walkedRefs.has(obj)) {\n            break;\n          }\n          walkedRefs.put(obj);\n          obj = await xref.fetchAsync(obj);\n        }\n        if (!(obj instanceof Dict)) {\n          break;\n        }\n        if (obj.has(\"T\")) {\n          const partName = stringToPDFString(await obj.getAsync(\"T\"));\n          name = name === \"\" ? partName : `${name}.${partName}`;\n          break;\n        }\n      }\n    }\n\n    if (\n      parentRef &&\n      !field.has(\"Parent\") &&\n      isName(field.get(\"Subtype\"), \"Widget\")\n    ) {\n      // We've a parent from the Fields array, but the field hasn't.\n      orphanFields.put(fieldRef, parentRef);\n    }\n\n    promises.getOrInsertComputed(name, makeArr).push(\n      AnnotationFactory.create(\n        xref,\n        fieldRef,\n        annotationGlobals,\n        /* idFactory = */ null,\n        /* collectFields */ true,\n        orphanFields,\n        /* collectByType */ null,\n        /* pageRef */ null\n      )\n        .then(annotation => annotation?.getFieldObject())\n        .catch(function (reason) {\n          warn(`#collectFieldObjects: \"${reason}\".`);\n          return null;\n        })\n    );\n\n    if (!field.has(\"Kids\")) {\n      return;\n    }\n    const kids = await field.getAsync(\"Kids\");\n    if (Array.isArray(kids)) {\n      for (const kid of kids) {\n        await this.#collectFieldObjects(\n          name,\n          fieldRef,\n          kid,\n          promises,\n          annotationGlobals,\n          visitedRefs,\n          orphanFields\n        );\n      }\n    }\n  }\n\n  get fieldObjects() {\n    const promise = this.pdfManager\n      .ensureDoc(\"formInfo\")\n      .then(async formInfo => {\n        if (!formInfo.hasFields) {\n          return null;\n        }\n        const annotationGlobals = await this.annotationGlobals;\n        if (!annotationGlobals) {\n          return null;\n        }\n        const { acroForm } = annotationGlobals;\n\n        const visitedRefs = new RefSet();\n        const allFields = Object.create(null);\n        const fieldPromises = new Map();\n        const orphanFields = new RefSetCache();\n        for (const fieldRef of acroForm.get(\"Fields\")) {\n          await this.#collectFieldObjects(\n            \"\",\n            null,\n            fieldRef,\n            fieldPromises,\n            annotationGlobals,\n            visitedRefs,\n            orphanFields\n          );\n        }\n\n        const allPromises = [];\n        for (const [name, promises] of fieldPromises) {\n          allPromises.push(\n            Promise.all(promises).then(fields => {\n              fields = fields.filter(field => !!field);\n              if (fields.length > 0) {\n                allFields[name] = fields;\n              }\n            })\n          );\n        }\n        await Promise.all(allPromises);\n\n        return {\n          allFields: Object.keys(allFields).length ? allFields : null,\n          orphanFields,\n        };\n      });\n\n    return shadow(this, \"fieldObjects\", promise);\n  }\n\n  async #collectSignatureFields(fields, out, visitedRefs) {\n    if (!Array.isArray(fields)) {\n      return;\n    }\n    for (const fieldRef of fields) {\n      if (fieldRef instanceof Ref) {\n        if (visitedRefs.has(fieldRef)) {\n          continue;\n        }\n        visitedRefs.put(fieldRef);\n      }\n      const field = await this.xref.fetchIfRefAsync(fieldRef);\n      if (!(field instanceof Dict)) {\n        continue;\n      }\n      if (isName(await field.getAsync(\"FT\"), \"Sig\")) {\n        const sigDict = await field.getAsync(\"V\");\n        if (sigDict instanceof Dict) {\n          const parsed = await this.#parseSignatureDict(\n            field,\n            sigDict,\n            fieldRef\n          );\n          if (parsed) {\n            out.push(parsed);\n          }\n        }\n      }\n      if (field.has(\"Kids\")) {\n        // A terminal field can have Widget annotations as children, so its\n        // own signature must be collected before walking the field tree.\n        await this.#collectSignatureFields(\n          await field.getAsync(\"Kids\"),\n          out,\n          visitedRefs\n        );\n      }\n    }\n  }\n\n  async #getByteRange(begin, end) {\n    try {\n      return this.stream.getByteRange(begin, end);\n    } catch (ex) {\n      if (!(ex instanceof MissingDataException)) {\n        throw ex;\n      }\n      await this.pdfManager.requestRange(begin, end);\n      return this.#getByteRange(begin, end);\n    }\n  }\n\n  async #coversWholeDocument(signedEnd, modificationsAfterSignature) {\n    if (modificationsAfterSignature > 0) {\n      return false;\n    }\n\n    const fileLength = this.stream.end;\n    for (\n      let begin = signedEnd;\n      begin < fileLength;\n      begin += SIGNATURE_TAIL_CHUNK_SIZE\n    ) {\n      const end = Math.min(begin + SIGNATURE_TAIL_CHUNK_SIZE, fileLength);\n      const tail = await this.#getByteRange(begin, end);\n\n      for (const byte of tail) {\n        if (\n          byte !== 0x00 && // null\n          byte !== 0x09 && // horizontal tab\n          byte !== 0x0a && // line feed\n          byte !== 0x0c && // form feed\n          byte !== 0x0d && // carriage return\n          byte !== 0x20 // space\n        ) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  async #parseSignatureDict(field, sigDict, fieldRef) {\n    const byteRange = await sigDict.getAsync(\"ByteRange\");\n    if (\n      !Array.isArray(byteRange) ||\n      byteRange.length !== 4 ||\n      byteRange.some(n => !Number.isInteger(n) || n < 0)\n    ) {\n      return null;\n    }\n    // Slice the two ByteRange byte spans out of the underlying PDF stream.\n    // ByteRange = [a, b, c, d] means signed bytes are [a..a+b] and [c..c+d];\n    // the gap covers the /Contents hex blob itself.\n    const [a, b, c, d] = byteRange;\n    // `/ByteRange` offsets are absolute, so compare against `stream.end`\n    // (raw buffer end), not `stream.length` (post-`moveStart` payload).\n    const fileLength = this.stream.end || 0;\n    // Reject signatures whose /ByteRange is structurally implausible: it\n    // must start at the file head, define a non-empty first span, leave\n    // room for the /Contents blob between the two spans, and fit within\n    // the file. Without this a crafted PDF can claim to cover the whole\n    // document while only signing a small prologue.\n    if (\n      a !== 0 ||\n      b <= 0 ||\n      a + b > c ||\n      c + d > fileLength ||\n      fileLength === 0\n    ) {\n      return null;\n    }\n\n    const contents = await sigDict.getAsync(\"Contents\");\n    if (typeof contents !== \"string\" || contents.length === 0) {\n      return null;\n    }\n\n    const [\n      filterName,\n      subFilterName,\n      t,\n      name,\n      reason,\n      location,\n      contactInfo,\n      m,\n    ] = await Promise.all([\n      sigDict.getAsync(\"Filter\"),\n      sigDict.getAsync(\"SubFilter\"),\n      field.getAsync(\"T\"),\n      sigDict.getAsync(\"Name\"),\n      sigDict.getAsync(\"Reason\"),\n      sigDict.getAsync(\"Location\"),\n      sigDict.getAsync(\"ContactInfo\"),\n      sigDict.getAsync(\"M\"),\n    ]);\n\n    const filter = filterName instanceof Name ? filterName.name : null,\n      subFilter = subFilterName instanceof Name ? subFilterName.name : null;\n\n    let signatureType = null;\n    if (subFilter === \"adbe.pkcs7.detached\") {\n      signatureType = 0;\n    } else if (subFilter === \"adbe.pkcs7.sha1\") {\n      signatureType = 1;\n    }\n    const refKey = fieldRef instanceof Ref ? fieldRef.toString() : \"inline\";\n\n    return {\n      id: `${refKey}:${a}-${b}-${c}-${d}`,\n      fieldName: typeof t === \"string\" ? stringToPDFString(t) : \"\",\n      signerName: typeof name === \"string\" ? stringToPDFString(name) : null,\n      reason: typeof reason === \"string\" ? stringToPDFString(reason) : null,\n      location:\n        typeof location === \"string\" ? stringToPDFString(location) : null,\n      contactInfo:\n        typeof contactInfo === \"string\" ? stringToPDFString(contactInfo) : null,\n      signingTime: typeof m === \"string\" ? m : null,\n      filter,\n      subFilter,\n      signatureType,\n      byteRange,\n      pkcs7: stringToBytes(contents),\n      revisionIndex: 0,\n      parentId: null,\n    };\n  }\n\n  get signatures() {\n    const promise = this.pdfManager\n      .ensureDoc(\"formInfo\")\n      .then(async formInfo => {\n        if (!formInfo.hasSignatures || !formInfo.hasFields) {\n          return null;\n        }\n        const annotationGlobals = await this.annotationGlobals;\n        if (!annotationGlobals) {\n          return null;\n        }\n        const fields = annotationGlobals.acroForm.get(\"Fields\");\n\n        const collected = [];\n        await this.#collectSignatureFields(fields, collected, new RefSet());\n\n        await Promise.all(\n          collected.map(async signature => {\n            const signedEnd = signature.byteRange[2] + signature.byteRange[3];\n            signature.modificationsAfterSignature =\n              this.xref.countUpdatesAfter(signedEnd);\n            signature.coversWholeDocument = await this.#coversWholeDocument(\n              signedEnd,\n              signature.modificationsAfterSignature\n            );\n          })\n        );\n\n        // Group sub-signatures by ByteRange containment: outer revision is\n        // the largest covering signature (largest c + d). Sort descending,\n        // then point each later signature at the smallest enclosing parent\n        // that came before it.\n        collected.sort(\n          (a, b) =>\n            b.byteRange[2] + b.byteRange[3] - (a.byteRange[2] + a.byteRange[3])\n        );\n        for (let i = 0, ii = collected.length; i < ii; i++) {\n          const sig = collected[i];\n          sig.revisionIndex = i;\n          for (let j = i - 1; j >= 0; j--) {\n            const candidate = collected[j];\n            if (\n              candidate.byteRange[2] + candidate.byteRange[3] >\n              sig.byteRange[2] + sig.byteRange[3]\n            ) {\n              sig.parentId = candidate.id;\n              break;\n            }\n          }\n        }\n        // Keep the PKCS#7 blob and byte-range information worker-side so the\n        // metadata array stays small. The viewer fetches the signed bytes on\n        // demand via `getSignatureData(id)`, one signature at a time, only\n        // when verification is about to run.\n        const signatureData = new Map();\n        const metadata = collected.map(sig => {\n          const { pkcs7, ...rest } = sig;\n          signatureData.set(sig.id, { byteRange: sig.byteRange, pkcs7 });\n          return rest;\n        });\n        this.#signatureData = signatureData;\n        return metadata.length ? metadata : null;\n      });\n\n    return shadow(this, \"signatures\", promise);\n  }\n\n  async getSignatureData(id) {\n    // Ensure parsing is finished and `#signatureData` is populated.\n    await this.signatures;\n    const signature = this.#signatureData?.get(id);\n    if (!signature) {\n      return null;\n    }\n    const { byteRange, pkcs7 } = signature;\n    const [a, b, c, d] = byteRange;\n    const data = await Promise.all([\n      this.#getByteRange(a, a + b),\n      this.#getByteRange(c, c + d),\n    ]);\n    return { data, pkcs7 };\n  }\n\n  get hasJSActions() {\n    const promise = this.pdfManager.ensureDoc(\"_parseHasJSActions\");\n    return shadow(this, \"hasJSActions\", promise);\n  }\n\n  /**\n   * @private\n   */\n  async _parseHasJSActions() {\n    const [catalogJsActions, fieldObjects] = await Promise.all([\n      this.pdfManager.ensureCatalog(\"jsActions\"),\n      this.pdfManager.ensureDoc(\"fieldObjects\"),\n    ]);\n\n    if (catalogJsActions) {\n      return true;\n    }\n    if (fieldObjects?.allFields) {\n      return Object.values(fieldObjects.allFields).some(fieldObject =>\n        fieldObject.some(object => object.actions !== null)\n      );\n    }\n    return false;\n  }\n\n  get calculationOrderIds() {\n    const calculationOrder = this.catalog.acroForm?.get(\"CO\");\n    if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {\n      return shadow(this, \"calculationOrderIds\", null);\n    }\n\n    const ids = [];\n    for (const id of calculationOrder) {\n      if (id instanceof Ref) {\n        ids.push(id.toString());\n      }\n    }\n    return shadow(this, \"calculationOrderIds\", ids.length ? ids : null);\n  }\n\n  get annotationGlobals() {\n    return shadow(\n      this,\n      \"annotationGlobals\",\n      AnnotationFactory.createGlobals(this.pdfManager)\n    );\n  }\n\n  async toJSObject(value, firstCall = true) {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      !PDFJSDev.test(\"TESTING || INTERNAL_VIEWER\")\n    ) {\n      throw new Error(\"Not implemented: toJSObject\");\n    }\n    const { InternalViewerUtils } =\n      typeof PDFJSDev === \"undefined\"\n        ? await import(\"./internal_viewer_utils.js\")\n        : await __eager_import__(\"./internal_viewer_utils.js\");\n\n    if (value === null && firstCall) {\n      return this.toJSObject(this.xref.trailer, false);\n    }\n    if (value instanceof Dict) {\n      const obj = Object.create(null);\n      const isPage = isName(value.get(\"Type\"), \"Page\");\n      for (const [key, val] of value.getRawEntries()) {\n        obj[key] =\n          isPage && key === \"Contents\"\n            ? InternalViewerUtils.getContentTokens(val, this.xref)\n            : await this.toJSObject(val, false);\n      }\n      return obj;\n    }\n    if (Array.isArray(value)) {\n      return Promise.all(value.map(v => this.toJSObject(v, false)));\n    }\n    if (value instanceof Ref) {\n      if (firstCall) {\n        return this.toJSObject(this.xref.fetch(value), false);\n      }\n      const result = Object.create(null);\n      result.num = value.num;\n      result.gen = value.gen;\n      return result;\n    }\n    if (value instanceof BaseStream) {\n      const { dict } = value;\n      const obj = Object.create(null);\n      obj.dict = await this.toJSObject(dict, false);\n\n      if (isName(dict.get(\"Subtype\"), \"Image\")) {\n        const isImageMask = dict.get(\"ImageMask\") === true;\n        if (isImageMask) {\n          dict.set(\"ImageMask\", false);\n          dict.set(\"IM\", false);\n          value.numComps = value.bitsPerComponent = 1;\n        }\n        try {\n          const imageObj = await PDFImage.buildImage({\n            xref: this.xref,\n            res: Dict.empty,\n            image: value,\n            pdfFunctionFactory: new PDFFunctionFactory({ xref: this.xref }),\n            globalColorSpaceCache: this.catalog.globalColorSpaceCache,\n            localColorSpaceCache: new LocalColorSpaceCache(),\n          });\n          const imgData = await imageObj.createImageData(\n            /* forceRGBA = */ true,\n            /* isOffscreenCanvasSupported = */ false\n          );\n          obj.imageData = {\n            width: imgData.width,\n            height: imgData.height,\n            kind: imgData.kind,\n            data: imgData.data,\n          };\n          return obj;\n        } catch {\n          // Fall through to regular byte stream if image decoding fails.\n        }\n        if (isImageMask) {\n          dict.set(\"ImageMask\", true);\n          delete value.numComps;\n          delete value.bitsPerComponent;\n        }\n      }\n\n      if (isName(dict.get(\"Subtype\"), \"Form\")) {\n        obj.bytes = value.getString();\n        value.reset();\n        const { instructions, cmdNames } =\n          InternalViewerUtils.groupIntoInstructions(\n            InternalViewerUtils.tokenizeStream(value, this.xref)\n          );\n        obj.contentStream = true;\n        obj.instructions = instructions;\n        obj.cmdNames = cmdNames;\n        return obj;\n      }\n\n      if (dict.get(\"FunctionType\") === FunctionType.POSTSCRIPT_CALCULATOR) {\n        const source = value.getString();\n        value.reset();\n        const domain = dict.get(\"Domain\") ?? [];\n        const range = dict.get(\"Range\") ?? [];\n        obj.psFunction = true;\n        obj.source = source;\n        obj.psLines = InternalViewerUtils.tokenizePSSource(source);\n        obj.jsCode = InternalViewerUtils.postScriptToJSCode(\n          source,\n          domain,\n          range\n        );\n        return obj;\n      }\n\n      obj.bytes = value.getString();\n      return obj;\n    }\n    return value;\n  }\n}\n\nexport { LETTER_SIZE_MEDIABOX, Page, PDFDocument };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CmykICCBasedCS, IccColorSpace } from \"./icc_colorspace.js\";\nimport {\n  createValidAbsoluteUrl,\n  FeatureTest,\n  unreachable,\n  warn,\n} from \"../shared/util.js\";\nimport { ChunkedStreamManager } from \"./chunked_stream.js\";\nimport { ImageResizer } from \"./image_resizer.js\";\nimport { JpegStream } from \"./jpeg_stream.js\";\nimport { MissingDataException } from \"./core_utils.js\";\nimport { OperatorList } from \"./operator_list.js\";\nimport { Pattern } from \"./pattern.js\";\nimport { PDFDocument } from \"./document.js\";\nimport { PDFFunctionFactory } from \"./function.js\";\nimport { Stream } from \"./stream.js\";\nimport { WasmImage } from \"./wasm_image.js\";\n\n/**\n * @typedef { LocalPdfManager | NetworkPdfManager } PdfManager\n */\n\nfunction parseDocBaseUrl(url) {\n  if (url) {\n    const absoluteUrl = createValidAbsoluteUrl(url);\n    if (absoluteUrl) {\n      return absoluteUrl.href;\n    }\n    warn(`Invalid absolute docBaseUrl: \"${url}\".`);\n  }\n  return null;\n}\n\nclass BasePdfManager {\n  constructor({\n    // source,\n    // disableAutoFetch,\n    docBaseUrl,\n    docId,\n    enableXfa,\n    evaluatorOptions,\n    handler,\n    // length,\n    password,\n    // rangeChunkSize,\n  }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BasePdfManager\n    ) {\n      unreachable(\"Cannot initialize BasePdfManager.\");\n    }\n    this._docBaseUrl = parseDocBaseUrl(docBaseUrl);\n    this._docId = docId;\n    this._password = password;\n    this.enableXfa = enableXfa;\n\n    // Check `OffscreenCanvas` and `ImageDecoder` support once,\n    // rather than repeatedly throughout the worker-thread code.\n    evaluatorOptions.isOffscreenCanvasSupported &&=\n      FeatureTest.isOffscreenCanvasSupported;\n    evaluatorOptions.isImageDecoderSupported &&=\n      FeatureTest.isImageDecoderSupported;\n\n    this.evaluatorOptions = Object.freeze(evaluatorOptions);\n\n    // Initialize image-options once per document.\n    ImageResizer.setOptions(evaluatorOptions);\n    JpegStream.setOptions(evaluatorOptions);\n    OperatorList.setOptions(evaluatorOptions);\n\n    const options = { ...evaluatorOptions, handler };\n    IccColorSpace.setOptions(options);\n    CmykICCBasedCS.setOptions(options);\n    PDFFunctionFactory.setOptions(options);\n    Pattern.setOptions(options);\n    WasmImage.setOptions(options);\n  }\n\n  get docId() {\n    return this._docId;\n  }\n\n  get password() {\n    return this._password;\n  }\n\n  get docBaseUrl() {\n    return this._docBaseUrl;\n  }\n\n  ensureDoc(prop, args) {\n    return this.ensure(this.pdfDocument, prop, args);\n  }\n\n  ensureXRef(prop, args) {\n    return this.ensure(this.pdfDocument.xref, prop, args);\n  }\n\n  ensureCatalog(prop, args) {\n    return this.ensure(this.pdfDocument.catalog, prop, args);\n  }\n\n  async initDocument(recoveryMode) {\n    await this.ensureDoc(\"checkHeader\");\n    await this.ensureDoc(\"parseStartXRef\");\n    await this.ensureDoc(\"parse\", [recoveryMode]);\n\n    // Check that at least the first page can be successfully loaded,\n    // since otherwise the XRef table is definitely not valid.\n    await this.ensureDoc(\"checkFirstPage\", [recoveryMode]);\n    // Check that the last page can be successfully loaded, to ensure that\n    // `numPages` is correct, and fallback to walking the entire /Pages-tree.\n    await this.ensureDoc(\"checkLastPage\", [recoveryMode]);\n  }\n\n  getPage(pageIndex) {\n    return this.pdfDocument.getPage(pageIndex);\n  }\n\n  fontFallback(id, handler) {\n    return this.pdfDocument.fontFallback(id, handler);\n  }\n\n  cleanup(manuallyTriggered = false) {\n    return this.pdfDocument.cleanup(manuallyTriggered);\n  }\n\n  async ensure(obj, prop, args) {\n    unreachable(\"Abstract method `ensure` called\");\n  }\n\n  requestRange(begin, end) {\n    unreachable(\"Abstract method `requestRange` called\");\n  }\n\n  requestLoadedStream(noFetch = false) {\n    unreachable(\"Abstract method `requestLoadedStream` called\");\n  }\n\n  sendProgressiveData(chunk) {\n    unreachable(\"Abstract method `sendProgressiveData` called\");\n  }\n\n  /**\n   * Set password.\n   *\n   * @param {string} password\n   *   New password.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  updatePassword(password) {\n    this._password = password;\n    this.pdfDocument.xref.encrypt?.setPassword(password);\n  }\n\n  terminate(reason) {\n    unreachable(\"Abstract method `terminate` called\");\n  }\n}\n\nclass LocalPdfManager extends BasePdfManager {\n  constructor(args) {\n    super(args);\n\n    const stream = new Stream(args.source);\n    this.pdfDocument = new PDFDocument(this, stream);\n    this._loadedStreamPromise = Promise.resolve(stream);\n  }\n\n  async ensure(obj, prop, args) {\n    const value = obj[prop];\n    if (typeof value === \"function\") {\n      return value.apply(obj, args);\n    }\n    return value;\n  }\n\n  requestRange(begin, end) {\n    return Promise.resolve();\n  }\n\n  requestLoadedStream(noFetch = false) {\n    return this._loadedStreamPromise;\n  }\n\n  terminate(reason) {}\n}\n\nclass NetworkPdfManager extends BasePdfManager {\n  constructor(args) {\n    super(args);\n\n    this.streamManager = new ChunkedStreamManager(args.source, {\n      msgHandler: args.handler,\n      length: args.length,\n      disableAutoFetch: args.disableAutoFetch,\n      rangeChunkSize: args.rangeChunkSize,\n    });\n    this.pdfDocument = new PDFDocument(this, this.streamManager.getStream());\n  }\n\n  async ensure(obj, prop, args) {\n    try {\n      const value = obj[prop];\n      if (typeof value === \"function\") {\n        return await value.apply(obj, args);\n      }\n      return value;\n    } catch (ex) {\n      if (!(ex instanceof MissingDataException)) {\n        throw ex;\n      }\n      await this.requestRange(ex.begin, ex.end);\n      return this.ensure(obj, prop, args);\n    }\n  }\n\n  requestRange(begin, end) {\n    return this.streamManager.requestRange(begin, end);\n  }\n\n  requestLoadedStream(noFetch = false) {\n    return this.streamManager.requestAllChunks(noFetch);\n  }\n\n  sendProgressiveData(chunk) {\n    this.streamManager.onReceiveData({ chunk });\n  }\n\n  terminate(reason) {\n    this.streamManager.abort(reason);\n  }\n}\n\nexport { LocalPdfManager, NetworkPdfManager };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AbortException,\n  assert,\n  InvalidPDFException,\n  PasswordException,\n  ResponseException,\n  UnknownErrorException,\n  unreachable,\n} from \"./util.js\";\n\nconst CallbackKind = {\n  DATA: 1,\n  ERROR: 2,\n};\n\nconst StreamKind = {\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8,\n};\n\nfunction onFn() {}\n\nfunction wrapReason(ex) {\n  if (\n    ex instanceof AbortException ||\n    ex instanceof InvalidPDFException ||\n    ex instanceof PasswordException ||\n    ex instanceof ResponseException ||\n    ex instanceof UnknownErrorException\n  ) {\n    // Avoid re-creating the exception when its type is already correct.\n    return ex;\n  }\n\n  if (!(ex instanceof Error || (typeof ex === \"object\" && ex !== null))) {\n    unreachable(\n      'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n    );\n  }\n  switch (ex.name) {\n    case \"AbortException\":\n      return new AbortException(ex.message);\n    case \"InvalidPDFException\":\n      return new InvalidPDFException(ex.message);\n    case \"PasswordException\":\n      return new PasswordException(ex.message, ex.code);\n    case \"ResponseException\":\n      return new ResponseException(ex.message, ex.status, ex.missing);\n    case \"UnknownErrorException\":\n      return new UnknownErrorException(ex.message, ex.details);\n  }\n  return new UnknownErrorException(ex.message, ex.toString());\n}\n\nclass MessageHandler {\n  #messageAC = new AbortController();\n\n  constructor(sourceName, targetName, comObj) {\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n\n    comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n      signal: this.#messageAC.signal,\n    });\n  }\n\n  #onMessage({ data }) {\n    if (data.targetName !== this.sourceName) {\n      return;\n    }\n    if (data.stream) {\n      this.#processStreamMessage(data);\n      return;\n    }\n    if (data.callback) {\n      const callbackId = data.callbackId;\n      const capability = this.callbackCapabilities[callbackId];\n      if (!capability) {\n        throw new Error(`Cannot resolve callback ${callbackId}`);\n      }\n      delete this.callbackCapabilities[callbackId];\n\n      if (data.callback === CallbackKind.DATA) {\n        capability.resolve(data.data);\n      } else if (data.callback === CallbackKind.ERROR) {\n        capability.reject(wrapReason(data.reason));\n      } else {\n        throw new Error(\"Unexpected callback case\");\n      }\n      return;\n    }\n    const action = this.actionHandler[data.action];\n    if (!action) {\n      throw new Error(`Unknown action from worker: ${data.action}`);\n    }\n    if (data.callbackId) {\n      const sourceName = this.sourceName,\n        targetName = data.sourceName,\n        comObj = this.comObj;\n\n      Promise.try(action, data.data).then(\n        function (result) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            callback: CallbackKind.DATA,\n            callbackId: data.callbackId,\n            data: result,\n          });\n        },\n        function (reason) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            callback: CallbackKind.ERROR,\n            callbackId: data.callbackId,\n            reason: wrapReason(reason),\n          });\n        }\n      );\n      return;\n    }\n    if (data.streamId) {\n      this.#createStreamSink(data);\n      return;\n    }\n    action(data.data);\n  }\n\n  on(actionName, handler) {\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      assert(\n        typeof handler === \"function\",\n        'MessageHandler.on: Expected \"handler\" to be a function.'\n      );\n    }\n    const ah = this.actionHandler;\n    if (ah[actionName]) {\n      throw new Error(`There is already an actionName called \"${actionName}\"`);\n    }\n    ah[actionName] = handler;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   */\n  send(actionName, data, transfers) {\n    this.comObj.postMessage(\n      {\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        data,\n      },\n      transfers\n    );\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expects that the other side will callback with the response.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {Promise} Promise to be resolved with response data.\n   */\n  sendWithPromise(actionName, data, transfers) {\n    const callbackId = this.callbackId++;\n    const capability = Promise.withResolvers();\n    this.callbackCapabilities[callbackId] = capability;\n    try {\n      this.comObj.postMessage(\n        {\n          sourceName: this.sourceName,\n          targetName: this.targetName,\n          action: actionName,\n          callbackId,\n          data,\n        },\n        transfers\n      );\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\n  }\n\n  /**\n   * Sends a message to the comObj to invoke the action with the supplied data.\n   * Expect that the other side will callback to signal 'start_complete'.\n   * @param {string} actionName - Action to call.\n   * @param {JSON} data - JSON data to send.\n   * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n   *                 internal queue.\n   * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n   * @returns {ReadableStream} ReadableStream to read data in chunks.\n   */\n  sendWithStream(actionName, data, queueingStrategy, transfers) {\n    const streamId = this.streamId++,\n      sourceName = this.sourceName,\n      targetName = this.targetName,\n      comObj = this.comObj;\n\n    return new ReadableStream(\n      {\n        start: controller => {\n          const startCapability = Promise.withResolvers();\n          this.streamControllers[streamId] = {\n            controller,\n            startCall: startCapability,\n            pullCall: null,\n            cancelCall: null,\n            isClosed: false,\n          };\n          comObj.postMessage(\n            {\n              sourceName,\n              targetName,\n              action: actionName,\n              streamId,\n              data,\n              desiredSize: controller.desiredSize,\n            },\n            transfers\n          );\n          // Return Promise for Async process, to signal success/failure.\n          return startCapability.promise;\n        },\n\n        pull: controller => {\n          const pullCapability = Promise.withResolvers();\n          this.streamControllers[streamId].pullCall = pullCapability;\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL,\n            streamId,\n            desiredSize: controller.desiredSize,\n          });\n          // Returning Promise will not call \"pull\"\n          // again until current pull is resolved.\n          return pullCapability.promise;\n        },\n\n        cancel: reason => {\n          assert(reason instanceof Error, \"cancel must have a valid reason\");\n          const cancelCapability = Promise.withResolvers();\n          this.streamControllers[streamId].cancelCall = cancelCapability;\n          this.streamControllers[streamId].isClosed = true;\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL,\n            streamId,\n            reason: wrapReason(reason),\n          });\n          // Return Promise to signal success or failure.\n          return cancelCapability.promise;\n        },\n      },\n      queueingStrategy\n    );\n  }\n\n  #createStreamSink(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const self = this,\n      action = this.actionHandler[data.action];\n\n    const streamSink = {\n      enqueue(chunk, size = 1, transfers) {\n        if (this.isCancelled) {\n          return;\n        }\n        const lastDesiredSize = this.desiredSize;\n        this.desiredSize -= size;\n        // Enqueue decreases the desiredSize property of sink,\n        // so when it changes from positive to negative,\n        // set ready as unresolved promise.\n        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage(\n          {\n            sourceName,\n            targetName,\n            stream: StreamKind.ENQUEUE,\n            streamId,\n            chunk,\n          },\n          transfers\n        );\n      },\n\n      close() {\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.CLOSE,\n          streamId,\n        });\n        delete self.streamSinks[streamId];\n      },\n\n      error(reason) {\n        assert(reason instanceof Error, \"error must have a valid reason\");\n        if (this.isCancelled) {\n          return;\n        }\n        this.isCancelled = true;\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ERROR,\n          streamId,\n          reason: wrapReason(reason),\n        });\n      },\n\n      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null,\n    };\n\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n\n    Promise.try(action, data.data, streamSink).then(\n      function () {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId,\n          success: true,\n        });\n      },\n      function (reason) {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId,\n          reason: wrapReason(reason),\n        });\n      }\n    );\n  }\n\n  #processStreamMessage(data) {\n    const streamId = data.streamId,\n      sourceName = this.sourceName,\n      targetName = data.sourceName,\n      comObj = this.comObj;\n    const streamController = this.streamControllers[streamId],\n      streamSink = this.streamSinks[streamId];\n\n    switch (data.stream) {\n      case StreamKind.START_COMPLETE:\n        if (data.success) {\n          streamController.startCall.resolve();\n        } else {\n          streamController.startCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL_COMPLETE:\n        if (data.success) {\n          streamController.pullCall.resolve();\n        } else {\n          streamController.pullCall.reject(wrapReason(data.reason));\n        }\n        break;\n      case StreamKind.PULL:\n        // Ignore any pull after close is called.\n        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true,\n          });\n          break;\n        }\n        // Pull increases the desiredSize property of sink, so when it changes\n        // from negative to positive, set ready property as resolved promise.\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        // Reset desiredSize property of sink on every pull.\n        streamSink.desiredSize = data.desiredSize;\n\n        Promise.try(streamSink.onPull || onFn).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId,\n              success: true,\n            });\n          },\n          function (reason) {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId,\n              reason: wrapReason(reason),\n            });\n          }\n        );\n        break;\n      case StreamKind.ENQUEUE:\n        assert(streamController, \"enqueue should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.controller.enqueue(data.chunk);\n        break;\n      case StreamKind.CLOSE:\n        assert(streamController, \"close should have stream controller\");\n        if (streamController.isClosed) {\n          break;\n        }\n        streamController.isClosed = true;\n        streamController.controller.close();\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.ERROR:\n        assert(streamController, \"error should have stream controller\");\n        streamController.controller.error(wrapReason(data.reason));\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL_COMPLETE:\n        if (data.success) {\n          streamController.cancelCall.resolve();\n        } else {\n          streamController.cancelCall.reject(wrapReason(data.reason));\n        }\n        this.#deleteStreamController(streamController, streamId);\n        break;\n      case StreamKind.CANCEL:\n        if (!streamSink) {\n          break;\n        }\n        const dataReason = wrapReason(data.reason);\n\n        Promise.try(streamSink.onCancel || onFn, dataReason).then(\n          function () {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId,\n              success: true,\n            });\n          },\n          function (reason) {\n            comObj.postMessage({\n              sourceName,\n              targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId,\n              reason: wrapReason(reason),\n            });\n          }\n        );\n        streamSink.sinkCapability.reject(dataReason);\n        streamSink.isCancelled = true;\n        delete this.streamSinks[streamId];\n        break;\n      default:\n        throw new Error(\"Unexpected stream case\");\n    }\n  }\n\n  async #deleteStreamController(streamController, streamId) {\n    // Delete the `streamController` only when the start, pull, and cancel\n    // capabilities have settled, to prevent `TypeError`s.\n    await Promise.allSettled([\n      streamController.startCall?.promise,\n      streamController.pullCall?.promise,\n      streamController.cancelCall?.promise,\n    ]);\n    delete this.streamControllers[streamId];\n  }\n\n  destroy() {\n    this.#messageAC?.abort();\n    this.#messageAC = null;\n  }\n}\n\nexport { MessageHandler, wrapReason };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bytesToString, info, warn } from \"../shared/util.js\";\nimport { Dict, isName, Name, Ref } from \"./primitives.js\";\nimport {\n  escapePDFName,\n  escapeString,\n  getSizeInBytes,\n  parseXFAPath,\n} from \"./core_utils.js\";\nimport { SimpleDOMNode, SimpleXMLParser } from \"./xml_parser.js\";\nimport { Stream, StringStream } from \"./stream.js\";\nimport { BaseStream } from \"./base_stream.js\";\nimport { calculateMD5 } from \"./calculate_md5.js\";\n\nasync function writeObject(\n  ref,\n  obj,\n  buffer,\n  { encrypt = null, encryptRef = null }\n) {\n  // Avoid to encrypt the encrypt dictionary.\n  const transform =\n    encrypt && encryptRef !== ref\n      ? encrypt.createCipherTransform(ref.num, ref.gen)\n      : null;\n  buffer.push(`${ref.num} ${ref.gen} obj\\n`);\n  await writeValue(obj, buffer, transform);\n  buffer.push(\"\\nendobj\\n\");\n}\n\nasync function writeDict(dict, buffer, transform) {\n  buffer.push(\"<<\");\n  for (const [key, rawObj] of dict.getRawEntries()) {\n    buffer.push(` /${escapePDFName(key)} `);\n    await writeValue(rawObj, buffer, transform);\n  }\n  buffer.push(\">>\");\n}\n\nasync function writeStream(stream, buffer, transform) {\n  stream = stream.getOriginalStream();\n  stream.reset();\n  let bytes = stream.getBytes();\n  const { dict } = stream;\n\n  const [filter, params] = await Promise.all([\n    dict.getAsync(\"Filter\"),\n    dict.getAsync(\"DecodeParms\"),\n  ]);\n\n  const filterZero = Array.isArray(filter)\n    ? await dict.xref.fetchIfRefAsync(filter[0])\n    : filter;\n  const isFilterZeroFlateDecode = isName(filterZero, \"FlateDecode\");\n\n  // These filters already compress the data, so we shouldn't try to compress it\n  // again.\n  const isFilterZeroImageDecode =\n    isName(filterZero, \"DCTDecode\") ||\n    isName(filterZero, \"JPXDecode\") ||\n    isName(filterZero, \"JBIG2Decode\") ||\n    isName(filterZero, \"CCITTFaxDecode\") ||\n    isName(filterZero, \"LZWDecode\");\n  const isFilterZeroCompressedObject =\n    isFilterZeroFlateDecode ||\n    isFilterZeroImageDecode ||\n    isName(filterZero, \"BrotliDecode\");\n\n  // If the string is too small there is no real benefit in compressing it.\n  // The number 256 is arbitrary, but it should be reasonable.\n  const MIN_LENGTH_FOR_COMPRESSING = 256;\n\n  if (\n    !isFilterZeroCompressedObject &&\n    bytes.length >= MIN_LENGTH_FOR_COMPRESSING\n  ) {\n    try {\n      const cs = new CompressionStream(\"deflate\");\n      const writer = cs.writable.getWriter();\n      await writer.ready;\n      writer\n        .write(bytes)\n        .then(async () => {\n          await writer.ready;\n          await writer.close();\n        })\n        .catch(() => {});\n\n      // Response::text doesn't return the correct data.\n      bytes = await new Response(cs.readable).bytes();\n\n      let newFilter, newParams;\n      if (!filter) {\n        newFilter = Name.get(\"FlateDecode\");\n      } else if (!isFilterZeroFlateDecode) {\n        newFilter = Array.isArray(filter)\n          ? [Name.get(\"FlateDecode\"), ...filter]\n          : [Name.get(\"FlateDecode\"), filter];\n        if (params) {\n          newParams = Array.isArray(params)\n            ? [null, ...params]\n            : [null, params];\n        }\n      }\n      if (newFilter) {\n        dict.set(\"Filter\", newFilter);\n      }\n      if (newParams) {\n        dict.set(\"DecodeParms\", newParams);\n      }\n    } catch (ex) {\n      info(`writeStream - cannot compress data: \"${ex}\".`);\n    }\n  }\n\n  let string = bytesToString(bytes);\n  if (transform) {\n    string = transform.encryptString(string);\n  }\n\n  dict.set(\"Length\", string.length);\n  await writeDict(dict, buffer, transform);\n  buffer.push(\" stream\\n\", string, \"\\nendstream\");\n}\n\nasync function writeArray(array, buffer, transform) {\n  buffer.push(\"[\");\n  for (let i = 0, ii = array.length; i < ii; i++) {\n    await writeValue(array[i], buffer, transform);\n    if (i < ii - 1) {\n      buffer.push(\" \");\n    }\n  }\n  buffer.push(\"]\");\n}\n\nasync function writeValue(value, buffer, transform) {\n  if (value instanceof Name) {\n    buffer.push(`/${escapePDFName(value.name)}`);\n  } else if (value instanceof Ref) {\n    buffer.push(`${value.num} ${value.gen} R`);\n  } else if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n    await writeArray(value, buffer, transform);\n  } else if (typeof value === \"string\") {\n    if (transform) {\n      value = transform.encryptString(value);\n    }\n    buffer.push(`(${escapeString(value)})`);\n  } else if (typeof value === \"number\") {\n    // Don't try to round numbers in general, it could lead to have degenerate\n    // matrices (e.g. [0.000008 0 0 0.000008 0 0]).\n    // The numbers must be \"rounded\" only when pdf.js is producing them and the\n    // current transformation matrix is well known.\n    // toFixed(10) avoids scientific notation and rounds; the replace removes\n    // trailing zeros (and a trailing dot for integers).\n    buffer.push(value.toFixed(10).replace(/\\.?0+$/, \"\"));\n  } else if (typeof value === \"boolean\") {\n    buffer.push(value.toString());\n  } else if (value instanceof Dict) {\n    await writeDict(value, buffer, transform);\n  } else if (value instanceof BaseStream) {\n    await writeStream(value, buffer, transform);\n  } else if (value === null) {\n    buffer.push(\"null\");\n  } else {\n    warn(`Unhandled value in writer: ${typeof value}, please file a bug.`);\n  }\n}\n\nfunction writeInt(number, size, offset, buffer) {\n  for (let i = size + offset - 1; i > offset - 1; i--) {\n    buffer[i] = number & 0xff;\n    number >>= 8;\n  }\n  return offset + size;\n}\n\nfunction writeString(string, offset, buffer) {\n  const ii = string.length;\n  for (let i = 0; i < ii; i++) {\n    buffer[offset + i] = string.charCodeAt(i) & 0xff;\n  }\n  return offset + ii;\n}\n\nfunction computeMD5(filesize, xrefInfo) {\n  const time = Math.floor(Date.now() / 1000);\n  const filename = xrefInfo.filename || \"\";\n  const md5Buffer = [\n    time.toString(),\n    filename,\n    filesize.toString(),\n    ...xrefInfo.infoMap.values(),\n  ];\n  const md5BufferLen = Math.sumPrecise(md5Buffer.map(str => str.length));\n\n  const array = new Uint8Array(md5BufferLen);\n  let offset = 0;\n  for (const str of md5Buffer) {\n    offset = writeString(str, offset, array);\n  }\n  return bytesToString(calculateMD5(array, 0, array.length));\n}\n\nfunction writeXFADataForAcroform(str, changes) {\n  const xml = new SimpleXMLParser({ hasAttributes: true }).parseFromString(str);\n\n  for (const { xfa } of changes) {\n    if (!xfa) {\n      continue;\n    }\n    const { path, value } = xfa;\n    if (!path || value === null) {\n      continue;\n    }\n    const nodePath = parseXFAPath(path);\n    let node = xml.documentElement.searchNode(nodePath, 0);\n    if (!node && nodePath.length > 1) {\n      // If we're lucky the last element in the path will identify the node.\n      node = xml.documentElement.searchNode([nodePath.at(-1)], 0);\n    }\n    if (node) {\n      node.childNodes = Array.isArray(value)\n        ? value.map(val => new SimpleDOMNode(\"value\", val))\n        : [new SimpleDOMNode(\"#text\", value)];\n    } else {\n      warn(`Node not found for path: ${path}`);\n    }\n  }\n  const buffer = [];\n  xml.documentElement.dump(buffer);\n  return buffer.join(\"\");\n}\n\nasync function updateAcroform({\n  xref,\n  acroForm,\n  acroFormRef,\n  hasXfa,\n  hasXfaDatasetsEntry,\n  xfaDatasetsRef,\n  needAppearances,\n  changes,\n}) {\n  if (hasXfa && !hasXfaDatasetsEntry && !xfaDatasetsRef) {\n    warn(\"XFA - Cannot save it\");\n  }\n\n  if (!needAppearances && (!hasXfa || !xfaDatasetsRef || hasXfaDatasetsEntry)) {\n    return;\n  }\n\n  const dict = acroForm.clone();\n\n  if (hasXfa && !hasXfaDatasetsEntry) {\n    // We've a XFA array which doesn't contain a datasets entry.\n    // So we'll update the AcroForm dictionary to have an XFA containing\n    // the datasets.\n    const newXfa = acroForm.get(\"XFA\").slice();\n    newXfa.splice(2, 0, \"datasets\");\n    newXfa.splice(3, 0, xfaDatasetsRef);\n\n    dict.set(\"XFA\", newXfa);\n  }\n\n  if (needAppearances) {\n    dict.set(\"NeedAppearances\", true);\n  }\n\n  changes.put(acroFormRef, {\n    data: dict,\n  });\n}\n\nfunction updateXFA({ xfaData, xfaDatasetsRef, changes, xref }) {\n  if (xfaData === null) {\n    const datasets = xref.fetchIfRef(xfaDatasetsRef);\n    xfaData = writeXFADataForAcroform(datasets.getString(), changes);\n  }\n  const xfaDataStream = new StringStream(xfaData, new Dict(xref));\n  xfaDataStream.dict.setIfName(\"Type\", \"EmbeddedFile\");\n\n  changes.put(xfaDatasetsRef, {\n    data: xfaDataStream,\n  });\n}\n\nasync function getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer) {\n  buffer.push(\"xref\\n\");\n  const indexes = getIndexes(newRefs);\n  let indexesPosition = 0;\n  for (const { ref, data } of newRefs) {\n    if (ref.num === indexes[indexesPosition]) {\n      buffer.push(\n        `${indexes[indexesPosition]} ${indexes[indexesPosition + 1]}\\n`\n      );\n      indexesPosition += 2;\n    }\n    // The EOL is \\r\\n to make sure that every entry is exactly 20 bytes long.\n    // (see 7.5.4 - Cross-Reference Table).\n    if (data !== null) {\n      buffer.push(\n        `${baseOffset.toString().padStart(10, \"0\")} ${Math.min(ref.gen, 0xffff).toString().padStart(5, \"0\")} n\\r\\n`\n      );\n      baseOffset += data.length;\n    } else {\n      buffer.push(\n        `0000000000 ${Math.min(ref.gen + 1, 0xffff)\n          .toString()\n          .padStart(5, \"0\")} f\\r\\n`\n      );\n    }\n  }\n  computeIDs(baseOffset, xrefInfo, newXref);\n  buffer.push(\"trailer\\n\");\n  await writeDict(newXref, buffer, null);\n  buffer.push(\"\\nstartxref\\n\", baseOffset.toString(), \"\\n%%EOF\\n\");\n}\n\nfunction getIndexes(newRefs) {\n  const indexes = [];\n  for (const { ref } of newRefs) {\n    if (ref.num === indexes.at(-2) + indexes.at(-1)) {\n      indexes[indexes.length - 1] += 1;\n    } else {\n      indexes.push(ref.num, 1);\n    }\n  }\n  return indexes;\n}\n\nasync function getXRefStreamTable(\n  xrefInfo,\n  baseOffset,\n  newRefs,\n  newXref,\n  buffer\n) {\n  const xrefTableData = [];\n  let maxOffset = 0;\n  let maxGen = 0;\n  for (const { ref, data, objStreamRef, index } of newRefs) {\n    let gen;\n    maxOffset = Math.max(maxOffset, baseOffset);\n    // The first number in each entry is the type (see 7.5.8.3):\n    //  0: free object\n    //  1: in-use object\n    //  2: compressed object\n    if (objStreamRef) {\n      gen = index;\n      xrefTableData.push([2, objStreamRef.num, gen]);\n    } else if (data !== null) {\n      gen = Math.min(ref.gen, 0xffff);\n      xrefTableData.push([1, baseOffset, gen]);\n      baseOffset += data.length;\n    } else {\n      gen = Math.min(ref.gen + 1, 0xffff);\n      xrefTableData.push([0, 0, gen]);\n    }\n    maxGen = Math.max(maxGen, gen);\n  }\n  newXref.set(\"Index\", getIndexes(newRefs));\n  const offsetSize = getSizeInBytes(maxOffset);\n  const maxGenSize = getSizeInBytes(maxGen);\n  const sizes = [1, offsetSize, maxGenSize];\n  newXref.set(\"W\", sizes);\n  computeIDs(baseOffset, xrefInfo, newXref);\n\n  const structSize = Math.sumPrecise(sizes);\n  const data = new Uint8Array(structSize * xrefTableData.length);\n  const stream = new Stream(data);\n  stream.dict = newXref;\n\n  let offset = 0;\n  for (const [type, objOffset, gen] of xrefTableData) {\n    offset = writeInt(type, sizes[0], offset, data);\n    offset = writeInt(objOffset, sizes[1], offset, data);\n    offset = writeInt(gen, sizes[2], offset, data);\n  }\n\n  await writeObject(xrefInfo.newRef, stream, buffer, {});\n  buffer.push(\"startxref\\n\", baseOffset.toString(), \"\\n%%EOF\\n\");\n}\n\nfunction computeIDs(baseOffset, xrefInfo, newXref) {\n  if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) {\n    const md5 = computeMD5(baseOffset, xrefInfo);\n    newXref.set(\"ID\", [xrefInfo.fileIds[0] || md5, md5]);\n  }\n}\n\nfunction getTrailerDict(xrefInfo, changes, useXrefStream) {\n  const newXref = new Dict(null);\n  newXref.setIfDefined(\"Prev\", xrefInfo?.startXRef);\n  const refForXrefTable = xrefInfo.newRef;\n  if (useXrefStream) {\n    changes.put(refForXrefTable, { data: \"\" });\n    newXref.set(\"Size\", refForXrefTable.num + 1);\n    newXref.setIfName(\"Type\", \"XRef\");\n  } else {\n    newXref.set(\"Size\", refForXrefTable.num);\n  }\n  newXref.setIfDefined(\"Root\", xrefInfo?.rootRef);\n  newXref.setIfDefined(\"Info\", xrefInfo?.infoRef);\n  newXref.setIfDefined(\"Encrypt\", xrefInfo?.encryptRef);\n\n  return newXref;\n}\n\nasync function writeChanges(changes, xref, buffer = []) {\n  const newRefs = [];\n  for (const [ref, { data, objStreamRef, index }] of changes.items()) {\n    if (objStreamRef) {\n      newRefs.push({ ref, data, objStreamRef, index });\n      continue;\n    }\n    if (data === null || typeof data === \"string\") {\n      newRefs.push({ ref, data });\n      continue;\n    }\n    await writeObject(ref, data, buffer, xref);\n    newRefs.push({ ref, data: buffer.join(\"\") });\n    buffer.length = 0;\n  }\n  return newRefs.sort((a, b) => /* compare the refs */ a.ref.num - b.ref.num);\n}\n\nasync function incrementalUpdate({\n  originalData,\n  xrefInfo,\n  changes,\n  xref = null,\n  hasXfa = false,\n  xfaDatasetsRef = null,\n  hasXfaDatasetsEntry = false,\n  needAppearances,\n  acroFormRef = null,\n  acroForm = null,\n  xfaData = null,\n  useXrefStream = false,\n}) {\n  await updateAcroform({\n    xref,\n    acroForm,\n    acroFormRef,\n    hasXfa,\n    hasXfaDatasetsEntry,\n    xfaDatasetsRef,\n    needAppearances,\n    changes,\n  });\n\n  if (hasXfa) {\n    updateXFA({\n      xfaData,\n      xfaDatasetsRef,\n      changes,\n      xref,\n    });\n  }\n\n  const newXref = getTrailerDict(xrefInfo, changes, useXrefStream);\n  const buffer = [];\n  const newRefs = await writeChanges(changes, xref, buffer);\n  let baseOffset = originalData.length;\n  const lastByte = originalData.at(-1);\n  if (lastByte !== /* \\n */ 0x0a && lastByte !== /* \\r */ 0x0d) {\n    // Avoid to concatenate %%EOF with an object definition\n    buffer.push(\"\\n\");\n    baseOffset += 1;\n  }\n\n  for (const { data } of newRefs) {\n    if (data !== null) {\n      buffer.push(data);\n    }\n  }\n\n  await (useXrefStream\n    ? getXRefStreamTable(xrefInfo, baseOffset, newRefs, newXref, buffer)\n    : getXRefTable(xrefInfo, baseOffset, newRefs, newXref, buffer));\n\n  const totalLength =\n    originalData.length + Math.sumPrecise(buffer.map(str => str.length));\n  const array = new Uint8Array(totalLength);\n\n  // Original data\n  array.set(originalData);\n  let offset = originalData.length;\n\n  // New data\n  for (const str of buffer) {\n    offset = writeString(str, offset, array);\n  }\n\n  return array;\n}\n\nexport { incrementalUpdate, writeChanges, writeDict, writeObject, writeValue };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../document.js\").PDFDocument} PDFDocument */\n/** @typedef {import(\"../document.js\").Page} Page */\n/** @typedef {import(\"../xref.js\").XRef} XRef */\n/** @typedef {import(\"../worker.js\").WorkerTask} WorkerTask */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../shared/message_handler.js\").MessageHandler} MessageHandler */\n\nimport {\n  deepCompare,\n  getInheritableProperty,\n  getModificationDate,\n  getNewAnnotationsMap,\n  numberToString,\n} from \"../core_utils.js\";\nimport {\n  Dict,\n  isDict,\n  isName,\n  Name,\n  Ref,\n  RefSet,\n  RefSetCache,\n} from \"../primitives.js\";\nimport { incrementalUpdate, writeValue } from \"../writer.js\";\nimport { isArrayEqual, makeArr, stringToBytes } from \"../../shared/util.js\";\nimport { NameTree, NumberTree } from \"../name_number_tree.js\";\nimport { stringToAsciiOrUTF16BE, stringToPDFString } from \"../string_utils.js\";\nimport { AnnotationFactory } from \"../annotation.js\";\nimport { BaseStream } from \"../base_stream.js\";\nimport { createImage } from \"./pdf_images.js\";\nimport { LETTER_SIZE_MEDIABOX } from \"../document.js\";\nimport { MurmurHash3_64 } from \"../../shared/murmurhash3.js\";\nimport { StringStream } from \"../stream.js\";\n\nconst MAX_LEAVES_PER_PAGES_NODE = 16;\nconst MAX_IN_NAME_TREE_NODE = 64;\n\nclass PageData {\n  constructor(page, documentData) {\n    this.page = page;\n    this.documentData = documentData;\n    this.annotations = null;\n    // Named destinations which points to this page.\n    this.pointingNamedDestinations = null;\n\n    documentData.pagesMap.put(page.ref, this);\n  }\n}\n\nclass DocumentData {\n  constructor(document) {\n    this.document = document;\n    this.destinations = null;\n    this.pageLabels = null;\n    this.pagesMap = new RefSetCache();\n    this.oldRefMapping = new RefSetCache();\n    this.dedupNamedDestinations = new Map();\n    this.usedNamedDestinations = new Set();\n    this.postponedRefCopies = new RefSetCache();\n    this.resourceStreamPromises = new Map();\n    this.usedStructParents = new Set();\n    this.oldStructParentMapping = new Map();\n    this.structTreeRoot = null;\n    this.parentTree = null;\n    this.idTree = null;\n    this.roleMap = null;\n    this.classMap = null;\n    this.namespaces = null;\n    this.structTreeAF = null;\n    this.structTreePronunciationLexicon = [];\n    this.acroForm = null;\n    this.acroFormDefaultAppearance = \"\";\n    this.acroFormDefaultResources = null;\n    this.acroFormQ = 0;\n    this.hasSignatureAnnotations = false;\n    this.fieldToParent = new RefSetCache();\n    this.outline = null;\n    this.embeddedFiles = null;\n  }\n}\n\nclass XRefWrapper {\n  constructor(entries, getNewRef) {\n    this.entries = entries;\n    this._getNewRef = getNewRef;\n  }\n\n  getNewTemporaryRef() {\n    return this._getNewRef();\n  }\n\n  countUpdatesAfter(offset) {\n    return null;\n  }\n\n  fetchIfRef(obj) {\n    return obj instanceof Ref ? this.fetch(obj) : obj;\n  }\n\n  fetch(ref) {\n    if (!(ref instanceof Ref)) {\n      throw new Error(\"ref object is not a reference\");\n    }\n    return this.entries[ref.num];\n  }\n\n  async fetchIfRefAsync(obj) {\n    return obj instanceof Ref ? this.fetchAsync(obj) : obj;\n  }\n\n  async fetchAsync(ref) {\n    return this.fetch(ref);\n  }\n}\n\nclass PDFEditor {\n  // Whether the edited PDF is built from a single source file, used one or more\n  // times. This is used to determine if we can preserve information that can't\n  // be meaningfully merged across distinct files, such as page labels, the Info\n  // dictionary, and passwords. For example, there's no obvious way to dedup\n  // page labels when merging multiple PDF files.\n  isSingleFile = false;\n\n  #newAnnotationsParams = null;\n\n  #primaryDocument = null;\n\n  // Deduplicates resource streams (fonts/images) shared across the merged\n  // documents. Maps a cheap content key to a bucket of { ref, dictStr, stream }\n  // candidates; the key only groups possible matches, an exact byte comparison\n  // decides, so a key collision can never alias two distinct resources.\n  #resourceStreamCache = new Map();\n\n  currentDocument = null;\n\n  oldPages = [];\n\n  newPages = [];\n\n  xref = [null];\n\n  xrefWrapper = new XRefWrapper(this.xref, () => this.newRef);\n\n  newRefCount = 1;\n\n  namesDict = null;\n\n  version = \"1.7\";\n\n  pageLabels = null;\n\n  namedDestinations = new Map();\n\n  parentTree = new Map();\n\n  structTreeKids = [];\n\n  idTree = new Map();\n\n  classMap = new Dict();\n\n  roleMap = new Dict();\n\n  namespaces = new Map();\n\n  structTreeAF = [];\n\n  structTreePronunciationLexicon = [];\n\n  fields = [];\n\n  acroFormDefaultAppearance = \"\";\n\n  acroFormDefaultResources = null;\n\n  acroFormNeedAppearances = false;\n\n  acroFormSigFlags = 0;\n\n  acroFormCalculationOrder = null;\n\n  acroFormQ = 0;\n\n  outlineItems = null;\n\n  embeddedFiles = new Map();\n\n  constructor({ useObjectStreams = true, title = \"\", author = \"\" } = {}) {\n    [this.rootRef, this.rootDict] = this.newDict;\n    [this.infoRef, this.infoDict] = this.newDict;\n    [this.pagesRef, this.pagesDict] = this.newDict;\n    this.useObjectStreams = useObjectStreams;\n    this.objStreamRefs = useObjectStreams ? new Set() : null;\n    this.title = title;\n    this.author = author;\n  }\n\n  /**\n   * Get a new reference for an object in the PDF.\n   * @returns {Ref}\n   */\n  get newRef() {\n    return Ref.get(this.newRefCount++, 0);\n  }\n\n  /**\n   * Create a new dictionary and its reference.\n   * @returns {[Ref, Dict]}\n   */\n  get newDict() {\n    const ref = this.newRef;\n    const dict = (this.xref[ref.num] = new Dict());\n    return [ref, dict];\n  }\n\n  /**\n   * Clone an object in the PDF.\n   * @param {*} obj\n   * @param {XRef} xref\n   * @returns {Promise<Ref>}\n   */\n  async #cloneObject(obj, xref) {\n    const ref = this.newRef;\n    this.xref[ref.num] = await this.#collectDependencies(obj, true, xref);\n    return ref;\n  }\n\n  cloneDict(dict) {\n    const newDict = dict.clone();\n    newDict.xref = this.xrefWrapper;\n    return newDict;\n  }\n\n  /**\n   * Collect the dependencies of an object and create new references for each\n   * dependency.\n   * @param {*} obj\n   * @param {boolean} mustClone\n   * @param {XRef} xref\n   * @param {RefSet} resourceStreamPath\n   * @returns {Promise<*>}\n   */\n  async #collectDependencies(\n    obj,\n    mustClone,\n    xref,\n    resourceStreamPath = new RefSet()\n  ) {\n    if (obj instanceof Ref) {\n      const {\n        currentDocument: { oldRefMapping },\n      } = this;\n      const existingRef = oldRefMapping.get(obj);\n      if (existingRef) {\n        return existingRef;\n      }\n      const oldRef = obj;\n      obj = await xref.fetchAsync(oldRef);\n      if (typeof obj === \"number\") {\n        // Simple value; no need to create a new reference.\n        return obj;\n      }\n\n      // Deduplicate fonts/images against earlier copies (common when merging\n      // exports of the same template). Reusing a copy costs no reference, so\n      // allocation is deferred to #collectResourceStream until it's known new.\n      if (obj instanceof BaseStream && this.#isResourceStream(obj.dict)) {\n        return this.#collectResourceStream(\n          oldRef,\n          obj,\n          xref,\n          resourceStreamPath\n        );\n      }\n\n      const newRef = this.newRef;\n      oldRefMapping.put(oldRef, newRef);\n\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n        if (isDict(obj, \"Page\") && !this.currentDocument.pagesMap.has(oldRef)) {\n          throw new Error(\n            \"Add a deleted page to the document is not supported.\"\n          );\n        }\n      }\n\n      this.xref[newRef.num] = await this.#collectDependencies(\n        obj,\n        true,\n        xref,\n        resourceStreamPath\n      );\n      return newRef;\n    }\n    const promises = [];\n    const {\n      currentDocument: { postponedRefCopies },\n    } = this;\n    if (Array.isArray(obj)) {\n      if (mustClone) {\n        obj = obj.slice();\n      }\n      for (let i = 0, ii = obj.length; i < ii; i++) {\n        const postponedActions =\n          obj[i] instanceof Ref && postponedRefCopies.get(obj[i]);\n        if (postponedActions) {\n          // The object is a reference that needs to be copied later.\n          postponedActions.push(ref => (obj[i] = ref));\n          continue;\n        }\n        promises.push(\n          this.#collectDependencies(\n            obj[i],\n            true,\n            xref,\n            resourceStreamPath\n          ).then(newObj => (obj[i] = newObj))\n        );\n      }\n      await Promise.all(promises);\n      return obj;\n    }\n    let dict;\n    if (obj instanceof BaseStream) {\n      ({ dict } = obj = obj.getOriginalStream().clone());\n      dict.xref = this.xrefWrapper;\n    } else if (obj instanceof Dict) {\n      if (mustClone) {\n        obj = obj.clone();\n        obj.xref = this.xrefWrapper;\n      }\n      dict = obj;\n    }\n    if (dict) {\n      for (const [key, rawObj] of dict.getRawEntries()) {\n        const postponedActions =\n          rawObj instanceof Ref && postponedRefCopies.get(rawObj);\n        if (postponedActions) {\n          // The object is a reference that needs to be copied later.\n          postponedActions.push(ref => dict.set(key, ref));\n          continue;\n        }\n        promises.push(\n          this.#collectDependencies(\n            rawObj,\n            true,\n            xref,\n            resourceStreamPath\n          ).then(newObj => dict.set(key, newObj))\n        );\n      }\n      await Promise.all(promises);\n    }\n\n    return obj;\n  }\n\n  /**\n   * Whether a stream is worth deduplicating: an image or an embedded font\n   * program (large and often shared). Per-page content streams etc. are\n   * essentially never shared, so hashing them would be wasted work.\n   * @param {Dict} dict\n   * @returns {boolean}\n   */\n  #isResourceStream(dict) {\n    const subtype = dict.get(\"Subtype\");\n    return (\n      isName(subtype, \"Image\") ||\n      // FontFile/FontFile2 carry Length1; FontFile3 has one of these Subtypes.\n      dict.has(\"Length1\") ||\n      isName(subtype, \"Type1C\") ||\n      isName(subtype, \"CIDFontType0C\") ||\n      isName(subtype, \"OpenType\")\n    );\n  }\n\n  /**\n   * Read the raw, still-encoded bytes of a stream.\n   * @param {BaseStream} stream\n   * @returns {Uint8Array}\n   */\n  #rawStreamBytes(stream) {\n    const original = stream.getOriginalStream();\n    original.reset();\n    return original.getBytes();\n  }\n\n  /**\n   * Serialize a dictionary to a canonical string. Two clones of the same source\n   * dict serialize identically, so this works as a bucket key and as an exact\n   * comparison.\n   * @param {Dict} dict\n   * @returns {Promise<string>}\n   */\n  async #serializeDict(dict) {\n    const buffer = [];\n    await writeValue(dict, buffer, /* transform = */ null);\n    return buffer.join(\"\");\n  }\n\n  /**\n   * Cheap bucket key for a resource stream: the serialized dict, the byte\n   * length, and a few sampled chunks (so large payloads aren't fully hashed).\n   * Collisions only group candidates that are then compared byte-for-byte, so\n   * they cost time but never cause a wrong merge.\n   * @param {string} dictStr\n   * @param {Uint8Array} bytes\n   * @returns {string}\n   */\n  #resourceStreamKey(dictStr, bytes) {\n    const SAMPLE_SIZE = 256;\n    const SAMPLE_COUNT = 4;\n    const { length } = bytes;\n    const hash = new MurmurHash3_64();\n    hash.update(dictStr);\n    hash.update(`#${length}`);\n    if (length <= SAMPLE_SIZE * SAMPLE_COUNT) {\n      hash.update(bytes);\n    } else {\n      const step = Math.floor((length - SAMPLE_SIZE) / (SAMPLE_COUNT - 1));\n      for (let i = 0; i < SAMPLE_COUNT; i++) {\n        const start = Math.min(i * step, length - SAMPLE_SIZE);\n        hash.update(bytes.subarray(start, start + SAMPLE_SIZE));\n      }\n    }\n    return hash.hexdigest();\n  }\n\n  /**\n   * Clone a resource stream and return its output reference, reusing an earlier\n   * copy when possible. The reference is allocated lazily (in\n   * #dedupResourceStream), so a reused resource leaves no unused reference.\n   * @param {Ref} oldRef\n   * @param {BaseStream} stream\n   * @param {XRef} xref\n   * @param {RefSet} resourceStreamPath\n   * @returns {Promise<Ref>}\n   */\n  async #collectResourceStream(oldRef, stream, xref, resourceStreamPath) {\n    const {\n      currentDocument: { oldRefMapping, resourceStreamPromises },\n    } = this;\n\n    // Re-entry means a (malformed) cycle back to this stream: allocate its\n    // reference now to break the loop, like the generic path's eager alloc.\n    if (resourceStreamPath.has(oldRef)) {\n      return oldRefMapping.getOrPutComputed(oldRef, () => this.newRef);\n    }\n\n    const key = oldRef.toString();\n    const pending = resourceStreamPromises.get(key);\n    if (pending) {\n      return pending;\n    }\n\n    // The path only grows here, so the shared parent path can be passed\n    // read-only everywhere else; snapshot it, add this stream, and recurse.\n    const childPath = new RefSet(resourceStreamPath);\n    childPath.put(oldRef);\n\n    const promise = Promise.resolve().then(async () => {\n      const collected = await this.#collectDependencies(\n        stream,\n        true,\n        xref,\n        childPath\n      );\n\n      // A cycle already allocated a reference, so store the clone there.\n      const cycleRef = oldRefMapping.get(oldRef);\n      if (cycleRef) {\n        this.xref[cycleRef.num] = collected;\n        return cycleRef;\n      }\n\n      const ref = await this.#dedupResourceStream(collected);\n      oldRefMapping.put(oldRef, ref);\n      return ref;\n    });\n    resourceStreamPromises.set(key, promise);\n    try {\n      return await promise;\n    } finally {\n      if (resourceStreamPromises.get(key) === promise) {\n        resourceStreamPromises.delete(key);\n      }\n    }\n  }\n\n  /**\n   * Return the reference for a cloned resource stream, reusing a byte-identical\n   * earlier copy or else allocating and registering a new one.\n   * @param {BaseStream} stream\n   * @returns {Promise<Ref>}\n   */\n  async #dedupResourceStream(stream) {\n    const dictStr = await this.#serializeDict(stream.dict);\n    const bytes = this.#rawStreamBytes(stream);\n    const key = this.#resourceStreamKey(dictStr, bytes);\n\n    const bucket = this.#resourceStreamCache.getOrInsertComputed(key, makeArr);\n    // Same key only means \"maybe equal\": confirm with an exact comparison.\n    for (const entry of bucket) {\n      if (\n        entry.dictStr === dictStr &&\n        isArrayEqual(this.#rawStreamBytes(entry.stream), bytes)\n      ) {\n        return entry.ref;\n      }\n    }\n    const ref = this.newRef;\n    this.xref[ref.num] = stream;\n    bucket.push({ ref, dictStr, stream });\n    return ref;\n  }\n\n  async #resolveStructKids(rawKids, xref) {\n    if (rawKids instanceof Ref) {\n      const fetched = await xref.fetchAsync(rawKids);\n      return Array.isArray(fetched) ? fetched : [rawKids];\n    }\n    return Array.isArray(rawKids) ? rawKids : [rawKids];\n  }\n\n  async #cloneStructTreeNode(\n    parentStructRef,\n    node,\n    xref,\n    removedStructElements,\n    dedupIDs,\n    dedupClasses,\n    dedupRoles,\n    visited = new RefSet()\n  ) {\n    const {\n      currentDocument: { pagesMap, oldRefMapping },\n    } = this;\n    const pg = node.getRaw(\"Pg\");\n    if (pg instanceof Ref && !pagesMap.has(pg)) {\n      return null;\n    }\n    const k = node.getRaw(\"K\");\n    if (k instanceof Ref && visited.has(k)) {\n      return null;\n    }\n    const kids = await this.#resolveStructKids(k, xref);\n    const newKids = [];\n    const structElemIndices = [];\n    for (let kid of kids) {\n      const kidRef = kid instanceof Ref ? kid : null;\n      if (kidRef) {\n        if (visited.has(kidRef)) {\n          continue;\n        }\n        visited.put(kidRef);\n        kid = await xref.fetchAsync(kidRef);\n      }\n      if (typeof kid === \"number\") {\n        newKids.push(kid);\n        continue;\n      }\n      if (!(kid instanceof Dict)) {\n        continue;\n      }\n      const pgRef = kid.getRaw(\"Pg\");\n      if (pgRef instanceof Ref && !pagesMap.has(pgRef)) {\n        continue;\n      }\n      const type = kid.get(\"Type\");\n      if (!type || isName(type, \"StructElem\")) {\n        let setAsSpan = false;\n        if (kidRef && removedStructElements.has(kidRef)) {\n          if (!isName(kid.get(\"S\"), \"Link\")) {\n            continue;\n          }\n          // A link annotation has been removed but we still need to keep the\n          // node in order to preserve the structure tree. Mark it as a Span\n          // so that it doesn't affect the semantics.\n          setAsSpan = true;\n        }\n        const newKidRef = await this.#cloneStructTreeNode(\n          kidRef,\n          kid,\n          xref,\n          removedStructElements,\n          dedupIDs,\n          dedupClasses,\n          dedupRoles,\n          visited\n        );\n        if (newKidRef) {\n          structElemIndices.push(newKids.length);\n          newKids.push(newKidRef);\n          if (kidRef) {\n            oldRefMapping.put(kidRef, newKidRef);\n          }\n          if (setAsSpan) {\n            this.xref[newKidRef.num].setIfName(\"S\", \"Span\");\n          }\n        }\n        continue;\n      }\n      if (isName(type, \"OBJR\")) {\n        if (!kidRef) {\n          continue;\n        }\n        // Only keep the reference when its target was actually copied. A link\n        // annotation targeting a removed page is dropped, so skip its OBJR.\n        const oldObjRef = kid.getRaw(\"Obj\");\n        if (oldObjRef instanceof Ref && !oldRefMapping.get(oldObjRef)) {\n          continue;\n        }\n        const newKidRef =\n          oldRefMapping.get(kidRef) ||\n          (await this.#collectDependencies(kidRef, true, xref));\n        const newKid = this.xref[newKidRef.num];\n        // Fix the missing StructParent entry in the referenced object.\n        const objRef = newKid.getRaw(\"Obj\");\n        if (objRef instanceof Ref) {\n          const obj = this.xref[objRef.num];\n          if (\n            obj instanceof Dict &&\n            !obj.has(\"StructParent\") &&\n            parentStructRef\n          ) {\n            const structParent = this.parentTree.size;\n            this.parentTree.set(structParent, [oldRefMapping, parentStructRef]);\n            obj.set(\"StructParent\", structParent);\n          }\n        }\n        newKids.push(newKidRef);\n        continue;\n      }\n      if (isName(type, \"MCR\")) {\n        const newKid = await this.#collectDependencies(\n          kidRef || kid,\n          true,\n          xref\n        );\n        newKids.push(newKid);\n        continue;\n      }\n      if (kidRef) {\n        const newKidRef = await this.#collectDependencies(kidRef, true, xref);\n        newKids.push(newKidRef);\n      }\n    }\n    if (kids.length !== 0 && newKids.length === 0) {\n      return null;\n    }\n\n    const newNodeRef = this.newRef;\n    const newNode = (this.xref[newNodeRef.num] = this.cloneDict(node));\n    // Don't collect for ID or C since they will be fixed later.\n    newNode.delete(\"ID\");\n    newNode.delete(\"C\");\n    newNode.delete(\"K\");\n    newNode.delete(\"P\");\n    newNode.delete(\"S\");\n    await this.#collectDependencies(newNode, false, xref);\n\n    // Fix the class names.\n    const classNames = node.get(\"C\");\n    if (classNames instanceof Name) {\n      const newClassName = dedupClasses.get(classNames.name);\n      newNode.set(\"C\", newClassName ? Name.get(newClassName) : classNames);\n    } else if (Array.isArray(classNames)) {\n      const newClassNames = [];\n      for (const className of classNames) {\n        if (className instanceof Name) {\n          const newClassName = dedupClasses.get(className.name);\n          newClassNames.push(newClassName ? Name.get(newClassName) : className);\n        }\n      }\n      newNode.set(\"C\", newClassNames);\n    }\n\n    // Fix the role name.\n    const roleName = node.get(\"S\");\n    if (roleName instanceof Name) {\n      const newRoleName = dedupRoles.get(roleName.name);\n      newNode.set(\"S\", newRoleName ? Name.get(newRoleName) : roleName);\n    }\n\n    // Fix the ID.\n    const id = node.get(\"ID\");\n    if (typeof id === \"string\") {\n      const stringId = stringToPDFString(id, /* keepEscapeSequence = */ false);\n      const newId = dedupIDs.get(stringId);\n      newNode.set(\"ID\", newId ? stringToAsciiOrUTF16BE(newId) : id);\n    }\n\n    // Table headers may contain IDs that need to be deduplicated.\n    let attributes = newNode.get(\"A\");\n    if (attributes) {\n      if (!Array.isArray(attributes)) {\n        attributes = [attributes];\n      }\n      for (let attr of attributes) {\n        attr = this.xrefWrapper.fetchIfRef(attr);\n        if (!(attr instanceof Dict)) {\n          // An attribute array may interleave dictionaries and revision\n          // numbers (ISO 32000-2, 14.7.6.3).\n          continue;\n        }\n        if (isName(attr.get(\"O\"), \"Table\") && attr.has(\"Headers\")) {\n          const headers = this.xrefWrapper.fetchIfRef(attr.getRaw(\"Headers\"));\n          if (Array.isArray(headers)) {\n            for (let i = 0, ii = headers.length; i < ii; i++) {\n              const header = this.xrefWrapper.fetchIfRef(headers[i]);\n              if (typeof header !== \"string\") {\n                continue;\n              }\n              const newId = dedupIDs.get(\n                stringToPDFString(header, /* keepEscapeSequence = */ false)\n              );\n              if (newId) {\n                headers[i] = newId;\n              }\n            }\n          }\n        }\n      }\n    }\n\n    for (const index of structElemIndices) {\n      const structElemRef = newKids[index];\n      const structElem = this.xref[structElemRef.num];\n      structElem.set(\"P\", newNodeRef);\n    }\n\n    if (newKids.length === 1) {\n      newNode.set(\"K\", newKids[0]);\n    } else if (newKids.length > 1) {\n      newNode.set(\"K\", newKids);\n    }\n\n    return newNodeRef;\n  }\n\n  /**\n   * @typedef {Object} PageInfo\n   * @property {PDFDocument} [document]\n   * @property {ImageBitmap} [image]\n   *  image to insert as a synthetic page.\n   * @property {Array<Array<number>|number>} [includePages]\n   *  included ranges (inclusive) or indices.\n   * @property {Array<Array<number>|number>} [excludePages]\n   *  excluded ranges (inclusive) or indices.\n   * @property {Array<number>} [pageIndices]\n   *  position of the pages in the final document.\n   * @property {number} [insertAfter]\n   *  0-based index in the base sequential sequence after which to insert the\n   *  pages. When every contributing pageInfo has pageIndices, this is\n   *  interpreted against that explicit layout. Cannot be combined with\n   *  pageIndices on the same entry.\n   */\n\n  /**\n   * Return the document-local page indices that pass the include/exclude\n   * filters for the given pageInfo, in document order.\n   * @param {PageInfo} pageInfo\n   * @returns {Array<number>}\n   */\n  #getFilteredPageIndices({ document, includePages, excludePages }) {\n    if (!document) {\n      return [];\n    }\n    const compile = list => {\n      if (!list?.length) {\n        return null;\n      }\n      const indices = new Set();\n      const ranges = [];\n      for (const item of list) {\n        if (Array.isArray(item)) {\n          ranges.push(item);\n        } else {\n          indices.add(item);\n        }\n      }\n      return { indices, ranges };\n    };\n    const matches = (index, { indices, ranges }) =>\n      indices.has(index) ||\n      ranges.some(([start, end]) => index >= start && index <= end);\n    const inc = compile(includePages);\n    const exc = compile(excludePages);\n    const result = [];\n    for (let i = 0, ii = document.numPages; i < ii; i++) {\n      if (exc && matches(i, exc)) {\n        continue;\n      }\n      if (!inc || matches(i, inc)) {\n        result.push(i);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Resolve insertAfter pageInfos by converting them (and sequential pageInfos)\n   * to explicit pageIndices, shifting indices to accommodate each insertion.\n   * @param {Array<PageInfo>} pageInfos\n   * @returns {Array<PageInfo>}\n   */\n  #resolveInsertAfterIndices(pageInfos) {\n    const counts = new Array(pageInfos.length);\n    const sequence = [];\n    const insertAfterList = [];\n    for (let i = 0; i < pageInfos.length; i++) {\n      const info = pageInfos[i];\n      let count;\n      if (info.image) {\n        count = counts[i] = 1;\n      } else if (!info.document) {\n        counts[i] = 0;\n        continue;\n      } else {\n        count = counts[i] = this.#getFilteredPageIndices(info).length;\n      }\n      if (info.pageIndices) {\n        continue;\n      }\n      if (info.insertAfter === undefined) {\n        for (let j = 0; j < count; j++) {\n          sequence.push(i);\n        }\n      } else {\n        insertAfterList.push({ i, insertAfter: info.insertAfter, count });\n      }\n    }\n    if (insertAfterList.length === 0) {\n      return pageInfos;\n    }\n\n    const hasContent = info => !!(info.document || info.image);\n\n    // Partial pageIndices rely on auto-fill in extractPages, which races with\n    // the slots insertAfter assigns here.\n    for (let i = 0; i < pageInfos.length; i++) {\n      const info = pageInfos[i];\n      if (\n        hasContent(info) &&\n        info.pageIndices &&\n        info.pageIndices.length < counts[i]\n      ) {\n        throw new Error(\n          \"extractPages: partial pageIndices cannot be combined with insertAfter entries.\"\n        );\n      }\n    }\n\n    insertAfterList.sort((a, b) => a.insertAfter - b.insertAfter || a.i - b.i);\n\n    // If there is no base sequential sequence, resolve insertAfter against the\n    // explicit layout. Shift pageIndices values but keep their array order:\n    // extractPages maps each filtered source page to the corresponding\n    // pageIndices entry.\n    if (\n      sequence.length === 0 &&\n      pageInfos.some(info => hasContent(info) && info.pageIndices)\n    ) {\n      const updatedPageInfos = pageInfos.slice();\n      let maxExistingPos = -1;\n      for (const info of pageInfos) {\n        if (!hasContent(info) || !info.pageIndices) {\n          continue;\n        }\n        for (const idx of info.pageIndices) {\n          if (idx > maxExistingPos) {\n            maxExistingPos = idx;\n          }\n        }\n      }\n      let offset = 0;\n      for (const { i, insertAfter, count } of insertAfterList) {\n        const threshold = Math.min(\n          Math.max(insertAfter, -1) + offset,\n          maxExistingPos\n        );\n        for (let j = 0; j < updatedPageInfos.length; j++) {\n          const existingInfo = updatedPageInfos[j];\n          if (\n            !hasContent(existingInfo) ||\n            !existingInfo.pageIndices ||\n            existingInfo.pageIndices.every(idx => idx <= threshold)\n          ) {\n            continue;\n          }\n          updatedPageInfos[j] = {\n            ...existingInfo,\n            pageIndices: existingInfo.pageIndices.map(idx =>\n              idx > threshold ? idx + count : idx\n            ),\n          };\n        }\n        const pageIndices = [];\n        for (let k = 0; k < count; k++) {\n          pageIndices.push(threshold + 1 + k);\n        }\n        const result = { ...updatedPageInfos[i], pageIndices };\n        delete result.insertAfter;\n        updatedPageInfos[i] = result;\n        offset += count;\n        maxExistingPos += count;\n      }\n      return updatedPageInfos;\n    }\n\n    let offset = 0;\n    for (const { i, insertAfter, count } of insertAfterList) {\n      const insertPos = Math.max(insertAfter, -1) + 1 + offset;\n      sequence.splice(insertPos, 0, ...new Array(count).fill(i));\n      offset += count;\n    }\n\n    const pageIndicesArr = new Array(pageInfos.length);\n    for (let pos = 0; pos < sequence.length; pos++) {\n      const infoIdx = sequence[pos];\n      (pageIndicesArr[infoIdx] ||= []).push(pos);\n    }\n\n    return pageInfos.map((info, i) => {\n      if (!hasContent(info) || info.pageIndices) {\n        return info;\n      }\n      const result = { ...info, pageIndices: pageIndicesArr[i] || [] };\n      delete result.insertAfter;\n      return result;\n    });\n  }\n\n  /**\n   * Extract pages from the given documents.\n   * @param {Array<PageInfo>} pageInfos\n   * @param {Object} annotationStorage - The annotation storage containing the\n   *  annotations to be merged into the new document.\n   * @param {PDFDocument} primaryDocument - The document the annotation storage\n   *  belongs to.\n   * @param {MessageHandler} handler - The message handler to use for processing\n   *  the annotations.\n   * @param {WorkerTask} task - The worker task to use for reporting progress\n   *  and cancellation.\n   * @return {Promise<void>}\n   */\n  async extractPages(\n    pageInfos,\n    annotationStorage,\n    primaryDocument,\n    handler,\n    task\n  ) {\n    this.#primaryDocument = primaryDocument;\n    pageInfos = this.#resolveInsertAfterIndices(pageInfos);\n    const promises = [];\n    let newIndex = 0;\n    const reservePageSlot = newPageIndex => {\n      if (!Number.isInteger(newPageIndex) || newPageIndex < 0) {\n        throw new Error(\"extractPages: invalid page index.\");\n      }\n      if (this.oldPages[newPageIndex] !== undefined) {\n        throw new Error(\"extractPages: overlapping pageIndices.\");\n      }\n      // Reserve the slot immediately because page/image collection can be\n      // async.\n      this.oldPages[newPageIndex] = null;\n    };\n    // Image entries don't carry document identity, so ignore them when\n    // deciding whether we're operating on a single source PDF.\n    const docPageInfos = pageInfos.filter(info => !!info.document);\n    this.isSingleFile =\n      docPageInfos.length === 1 ||\n      (docPageInfos.length > 0 &&\n        docPageInfos.every(info => info.document === docPageInfos[0].document));\n    const allDocumentData = [];\n\n    if (annotationStorage) {\n      this.#newAnnotationsParams = {\n        handler,\n        task,\n        newAnnotationsByPage: getNewAnnotationsMap(annotationStorage),\n        imagesPromises: AnnotationFactory.generateImages(\n          annotationStorage.values(),\n          this.xrefWrapper,\n          true\n        ),\n      };\n    }\n\n    const imageEntries = [];\n    for (const pageInfo of pageInfos) {\n      const { document, image, includePages, excludePages, pageIndices } =\n        pageInfo;\n      if (image) {\n        if (pageIndices) {\n          newIndex = -1;\n          if (pageIndices.length > 1) {\n            throw new Error(\"extractPages: too many pageIndices.\");\n          }\n        }\n        // Image entries are inserted as synthetic pages. Reserve a slot now;\n        // the actual page dict is built after real pages are collected so\n        // that we know the modal MediaBox dimensions to use.\n        let newPageIndex;\n        if (pageIndices?.length) {\n          newPageIndex = pageIndices[0];\n        } else if (newIndex !== -1) {\n          newPageIndex = newIndex++;\n        } else {\n          for (\n            newPageIndex = 0;\n            this.oldPages[newPageIndex] !== undefined;\n            newPageIndex++\n          ) {\n            /* empty */\n          }\n        }\n        reservePageSlot(newPageIndex);\n        imageEntries.push({ image, slot: newPageIndex });\n        continue;\n      }\n      if (!document) {\n        continue;\n      }\n      if (pageIndices) {\n        newIndex = -1;\n      }\n      const filteredPageIndices = this.#getFilteredPageIndices({\n        document,\n        includePages,\n        excludePages,\n      });\n      if (pageIndices && pageIndices.length > filteredPageIndices.length) {\n        throw new Error(\"extractPages: too many pageIndices.\");\n      }\n      const documentData = new DocumentData(document);\n      allDocumentData.push(documentData);\n      promises.push(this.#collectDocumentData(documentData));\n      let pageIndex = 0;\n      for (const i of filteredPageIndices) {\n        let newPageIndex;\n        if (pageIndices) {\n          newPageIndex = pageIndices[pageIndex++];\n        }\n        if (newPageIndex === undefined) {\n          if (newIndex !== -1) {\n            newPageIndex = newIndex++;\n          } else {\n            // Find the first available index in the newPages array.\n            // This is needed when the pageIndices option is used since the\n            // pages can be added in any order.\n            for (\n              newPageIndex = 0;\n              this.oldPages[newPageIndex] !== undefined;\n              newPageIndex++\n            ) {\n              /* empty */\n            }\n          }\n        }\n        reservePageSlot(newPageIndex);\n        promises.push(\n          document.getPage(i).then(page => {\n            this.oldPages[newPageIndex] = new PageData(page, documentData);\n          })\n        );\n      }\n    }\n    await Promise.all(promises);\n    for (let i = 0, ii = this.oldPages.length; i < ii; i++) {\n      if (this.oldPages[i] === undefined) {\n        throw new Error(\"extractPages: sparse pageIndices.\");\n      }\n    }\n    promises.length = 0;\n\n    this.#collectValidDestinations(allDocumentData);\n    this.#collectOutlineDestinations(allDocumentData);\n    this.#collectPageLabels();\n\n    for (const page of this.oldPages) {\n      if (page) {\n        promises.push(this.#postCollectPageData(page));\n      }\n    }\n    await Promise.all(promises);\n\n    this.#findDuplicateNamedDestinations();\n    this.#setPostponedRefCopies(allDocumentData);\n\n    const imageSlots = new Map();\n    for (const entry of imageEntries) {\n      imageSlots.set(entry.slot, entry);\n    }\n    const modalPageSize = imageSlots.size > 0 ? this.#modalPageSize() : null;\n\n    for (let i = 0, ii = this.oldPages.length; i < ii; i++) {\n      const imageEntry = imageSlots.get(i);\n      if (imageEntry) {\n        this.newPages[i] = await this.#makeImagePage(\n          imageEntry.image,\n          modalPageSize\n        );\n      } else {\n        this.newPages[i] = await this.#makePageCopy(i, null);\n      }\n    }\n\n    this.#fixPostponedRefCopies(allDocumentData);\n    await this.#mergeStructTrees(allDocumentData);\n    await this.#mergeAcroForms(allDocumentData);\n    this.#buildOutline(allDocumentData);\n    await this.#collectEmbeddedFiles(allDocumentData);\n\n    return this.writePDF();\n  }\n\n  /**\n   * Collect the document data.\n   * @param {DocumentData} documentData\n   * @return {Promise<void>}\n   */\n  async #collectDocumentData(documentData) {\n    const {\n      document: { pdfManager, xref },\n    } = documentData;\n    await Promise.all([\n      pdfManager\n        .ensureCatalog(\"destinations\")\n        .then(destinations => (documentData.destinations = destinations)),\n      pdfManager\n        .ensureCatalog(\"rawPageLabels\")\n        .then(pageLabels => (documentData.pageLabels = pageLabels)),\n      pdfManager\n        .ensureCatalog(\"structTreeRoot\")\n        .then(structTreeRoot => (documentData.structTreeRoot = structTreeRoot)),\n      pdfManager\n        .ensureCatalog(\"acroForm\")\n        .then(acroForm => (documentData.acroForm = acroForm)),\n      pdfManager\n        .ensureCatalog(\"documentOutlineForEditor\")\n        .then(outline => (documentData.outline = outline)),\n      pdfManager\n        .ensureCatalog(\"rawEmbeddedFiles\")\n        .then(ef => (documentData.embeddedFiles = ef)),\n    ]);\n    const structTreeRoot = documentData.structTreeRoot;\n    if (structTreeRoot) {\n      const rootDict = structTreeRoot.dict;\n      const parentTree = rootDict.get(\"ParentTree\");\n      if (parentTree) {\n        const numberTree = new NumberTree(parentTree, xref);\n        documentData.parentTree = numberTree.getAll(/* isRaw = */ true);\n      }\n      const idTree = rootDict.get(\"IDTree\");\n      if (idTree) {\n        const nameTree = new NameTree(idTree, xref);\n        documentData.idTree = nameTree.getAll(/* isRaw = */ true);\n      }\n      documentData.roleMap = rootDict.get(\"RoleMap\") || null;\n      documentData.classMap = rootDict.get(\"ClassMap\") || null;\n      let namespaces = rootDict.get(\"Namespaces\") || null;\n      if (namespaces && !Array.isArray(namespaces)) {\n        namespaces = [namespaces];\n      }\n      documentData.namespaces = namespaces;\n      documentData.structTreeAF = rootDict.get(\"AF\") || null;\n      documentData.structTreePronunciationLexicon =\n        rootDict.get(\"PronunciationLexicon\") || null;\n    }\n  }\n\n  /**\n   * Post process the collected page data.\n   * @param {PageData} pageData\n   * @returns {Promise<void>}\n   */\n  async #postCollectPageData(pageData) {\n    const {\n      page: { xref, annotations },\n      documentData: {\n        pagesMap,\n        destinations,\n        usedNamedDestinations,\n        fieldToParent,\n      },\n    } = pageData;\n\n    if (!annotations) {\n      return;\n    }\n\n    const promises = [];\n    let newAnnotations = [];\n    let newIndex = 0;\n    let { hasSignatureAnnotations } = pageData.documentData;\n\n    // Filter out annotations that are linking to deleted pages.\n    for (const annotationRef of annotations) {\n      const newAnnotationIndex = newIndex++;\n      promises.push(\n        xref.fetchIfRefAsync(annotationRef).then(async annotationDict => {\n          if (!isName(annotationDict.get(\"Subtype\"), \"Link\")) {\n            if (isName(annotationDict.get(\"Subtype\"), \"Widget\")) {\n              hasSignatureAnnotations ||= isName(\n                getInheritableProperty({ dict: annotationDict, key: \"FT\" }),\n                \"Sig\"\n              );\n              const parentRef = annotationDict.getRaw(\"Parent\") || null;\n              // We remove the parent to avoid visiting it when cloning the\n              // annotation.\n              // It'll be fixed later in #mergeAcroForms when merging the\n              // AcroForms.\n              annotationDict.delete(\"Parent\");\n              fieldToParent.put(annotationRef, parentRef);\n            }\n\n            newAnnotations[newAnnotationIndex] = annotationRef;\n            return;\n          }\n          const action = annotationDict.get(\"A\");\n          if (action instanceof Dict && !isName(action.get(\"S\"), \"GoTo\")) {\n            // Only GoTo actions point to pages in the current document. Other\n            // actions, such as GoToR, must not be filtered using the current\n            // document's page map.\n            newAnnotations[newAnnotationIndex] = annotationRef;\n            return;\n          }\n          const dest =\n            action instanceof Dict\n              ? action.get(\"D\")\n              : annotationDict.get(\"Dest\");\n          if (\n            !dest /* not a destination */ ||\n            (Array.isArray(dest) &&\n              (!(dest[0] instanceof Ref) || pagesMap.has(dest[0])))\n          ) {\n            // Keep the annotation as is: it isn't linking to a deleted page.\n            newAnnotations[newAnnotationIndex] = annotationRef;\n          } else if (dest instanceof Name || typeof dest === \"string\") {\n            const destString = stringToPDFString(\n              dest instanceof Name ? dest.name : dest,\n              /* keepEscapeSequence = */ true\n            );\n            if (destinations.has(destString)) {\n              // Keep the annotation as is: the named destination is valid.\n              // Valid named destinations have been collected previously (see\n              // #collectValidDestinations).\n              newAnnotations[newAnnotationIndex] = annotationRef;\n              usedNamedDestinations.add(destString);\n            }\n          }\n        })\n      );\n    }\n\n    await Promise.all(promises);\n    newAnnotations = newAnnotations.filter(annot => !!annot);\n    pageData.annotations = newAnnotations.length > 0 ? newAnnotations : null;\n    pageData.documentData.hasSignatureAnnotations ||= hasSignatureAnnotations;\n  }\n\n  /**\n   * Some references cannot be copied right away since they correspond to some\n   * pages that haven't been processed yet. Postpone the copy of those\n   * references.\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  #setPostponedRefCopies(allDocumentData) {\n    for (const { postponedRefCopies, pagesMap } of allDocumentData) {\n      for (const oldPageRef of pagesMap.keys()) {\n        postponedRefCopies.put(oldPageRef, []);\n      }\n    }\n  }\n\n  /**\n   * Fix all postponed reference copies.\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  #fixPostponedRefCopies(allDocumentData) {\n    for (const { postponedRefCopies, oldRefMapping } of allDocumentData) {\n      for (const [oldRef, actions] of postponedRefCopies.items()) {\n        const newRef = oldRefMapping.get(oldRef);\n        for (const action of actions) {\n          action(newRef);\n        }\n      }\n      postponedRefCopies.clear();\n    }\n  }\n\n  #visitObject(obj, callback, visited = new RefSet()) {\n    if (obj instanceof Ref) {\n      if (!visited.has(obj)) {\n        visited.put(obj);\n        this.#visitObject(this.xref[obj.num], callback, visited);\n      }\n      return;\n    }\n    if (Array.isArray(obj)) {\n      for (const item of obj) {\n        this.#visitObject(item, callback, visited);\n      }\n      return;\n    }\n    let dict;\n    if (obj instanceof BaseStream) {\n      ({ dict } = obj);\n    } else if (obj instanceof Dict) {\n      dict = obj;\n    }\n    if (dict) {\n      callback(dict);\n      for (const value of dict.getRawValues()) {\n        this.#visitObject(value, callback, visited);\n      }\n    }\n  }\n\n  async #mergeStructTrees(allDocumentData) {\n    let newStructParentId = 0;\n    const { parentTree: newParentTree } = this;\n    for (let i = 0, ii = this.newPages.length; i < ii; i++) {\n      if (!this.oldPages[i]) {\n        continue;\n      }\n      const {\n        documentData: {\n          parentTree,\n          oldRefMapping,\n          oldStructParentMapping,\n          usedStructParents,\n          document: { xref },\n        },\n      } = this.oldPages[i];\n      if (!parentTree) {\n        continue;\n      }\n      const pageRef = this.newPages[i];\n      const pageDict = this.xref[pageRef.num];\n      const visited = new RefSet();\n      visited.put(pageRef);\n\n      // Visit the new page in order to collect used StructParent entries.\n      this.#visitObject(\n        pageDict,\n        dict => {\n          const structParent =\n            dict.get(\"StructParent\") ?? dict.get(\"StructParents\");\n          if (typeof structParent !== \"number\") {\n            return;\n          }\n          usedStructParents.add(structParent);\n          let parent = parentTree.get(structParent);\n          const parentRef = parent instanceof Ref ? parent : null;\n          if (parentRef) {\n            const array = xref.fetch(parentRef);\n            if (Array.isArray(array)) {\n              parent = array;\n            }\n          }\n          if (Array.isArray(parent) && parent.every(ref => ref === null)) {\n            parent = null;\n          }\n          if (!parent) {\n            if (dict.has(\"StructParent\")) {\n              dict.delete(\"StructParent\");\n            } else {\n              dict.delete(\"StructParents\");\n            }\n            return;\n          }\n          let newStructParent = oldStructParentMapping.get(structParent);\n          if (newStructParent === undefined) {\n            newStructParent = newStructParentId++;\n            oldStructParentMapping.set(structParent, newStructParent);\n            newParentTree.set(newStructParent, [oldRefMapping, parent]);\n          }\n          if (dict.has(\"StructParent\")) {\n            dict.set(\"StructParent\", newStructParent);\n          } else {\n            dict.set(\"StructParents\", newStructParent);\n          }\n        },\n        visited\n      );\n    }\n\n    const {\n      structTreeKids,\n      idTree: newIdTree,\n      classMap: newClassMap,\n      roleMap: newRoleMap,\n      namespaces: newNamespaces,\n      structTreeAF: newStructTreeAF,\n      structTreePronunciationLexicon: newStructTreePronunciationLexicon,\n    } = this;\n    // Clone the struct tree nodes for each document.\n    for (const documentData of allDocumentData) {\n      const {\n        document: { xref },\n        oldRefMapping,\n        parentTree,\n        usedStructParents,\n        structTreeRoot,\n        idTree,\n        classMap,\n        roleMap,\n        namespaces,\n        structTreeAF,\n        structTreePronunciationLexicon,\n      } = documentData;\n\n      if (!structTreeRoot) {\n        continue;\n      }\n\n      this.currentDocument = documentData;\n      // Get all the removed StructElem\n      const removedStructElements = new RefSet();\n      for (const [key, value] of parentTree || []) {\n        if (!usedStructParents.has(key) && value instanceof Ref) {\n          removedStructElements.put(value);\n        }\n      }\n\n      // Deduplicate IDs in the ID tree.\n      // We keep the old node references since they will be cloned later when\n      // cloning the struct tree.\n      const dedupIDs = new Map();\n      for (const [id, nodeRef] of idTree || []) {\n        let _id = id;\n        if (newIdTree.has(id)) {\n          for (let i = 1; ; i++) {\n            const newId = `${id}_${i}`;\n            if (!newIdTree.has(newId)) {\n              dedupIDs.set(id, newId);\n              _id = newId;\n              break;\n            }\n          }\n        }\n        newIdTree.set(_id, nodeRef);\n      }\n\n      const dedupClasses = new Map();\n      if (classMap?.size > 0) {\n        // Deduplicate ClassMap entries.\n        for (let [className, classDict] of classMap) {\n          classDict = await this.#collectDependencies(classDict, true, xref);\n          if (newClassMap.has(className)) {\n            for (let i = 1; ; i++) {\n              const newClassName = `${className}_${i}`;\n              if (!newClassMap.has(newClassName)) {\n                dedupClasses.set(className, newClassName);\n                className = newClassName;\n                break;\n              }\n            }\n          }\n          newClassMap.set(className, classDict);\n        }\n      }\n\n      const dedupRoles = new Map();\n      if (roleMap?.size > 0) {\n        // Deduplicate RoleMap entries.\n        for (const [roleName, mappedName] of roleMap) {\n          const newMappedName = newRoleMap.get(roleName);\n          if (!newMappedName) {\n            newRoleMap.set(roleName, mappedName);\n            continue;\n          }\n          if (newMappedName === mappedName) {\n            continue;\n          }\n          for (let i = 1; ; i++) {\n            const newRoleName = `${roleName}_${i}`;\n            if (!newRoleMap.has(newRoleName)) {\n              dedupRoles.set(roleName, newRoleName);\n              newRoleMap.set(newRoleName, mappedName);\n              break;\n            }\n          }\n        }\n      }\n\n      if (namespaces?.length > 0) {\n        for (const namespaceRef of namespaces) {\n          const namespace = await xref.fetchIfRefAsync(namespaceRef);\n          let ns = namespace.get(\"NS\");\n          if (!ns || newNamespaces.has(ns)) {\n            continue;\n          }\n          ns = stringToPDFString(ns, /* keepEscapeSequence = */ false);\n          const newNamespace = await this.#collectDependencies(\n            namespace,\n            true,\n            xref\n          );\n          newNamespaces.set(ns, newNamespace);\n        }\n      }\n\n      if (structTreeAF) {\n        for (const afRef of structTreeAF) {\n          newStructTreeAF.push(\n            await this.#collectDependencies(afRef, true, xref)\n          );\n        }\n      }\n\n      if (structTreePronunciationLexicon) {\n        for (const lexiconRef of structTreePronunciationLexicon) {\n          newStructTreePronunciationLexicon.push(\n            await this.#collectDependencies(lexiconRef, true, xref)\n          );\n        }\n      }\n\n      // Get the kids.\n      const rawKids = structTreeRoot.dict.getRaw(\"K\");\n      if (!rawKids) {\n        continue;\n      }\n      const kids = await this.#resolveStructKids(rawKids, xref);\n      for (let kid of kids) {\n        const kidRef = kid instanceof Ref ? kid : null;\n        kid = await xref.fetchIfRefAsync(kid);\n        if (!(kid instanceof Dict)) {\n          continue;\n        }\n        let setAsSpan = false;\n        if (kidRef && removedStructElements.has(kidRef)) {\n          if (!isName(kid.get(\"S\"), \"Link\")) {\n            continue;\n          }\n          setAsSpan = true;\n        }\n        const newKidRef = await this.#cloneStructTreeNode(\n          kidRef,\n          kid,\n          xref,\n          removedStructElements,\n          dedupIDs,\n          dedupClasses,\n          dedupRoles\n        );\n        if (newKidRef) {\n          structTreeKids.push(newKidRef);\n          if (kidRef) {\n            oldRefMapping.put(kidRef, newKidRef);\n          }\n          if (setAsSpan) {\n            this.xref[newKidRef.num].setIfName(\"S\", \"Span\");\n          }\n        }\n      }\n\n      // Fix the ID tree.\n      for (const [id, nodeRef] of idTree || []) {\n        const newNodeRef = nodeRef instanceof Ref && oldRefMapping.get(nodeRef);\n        const newId = dedupIDs.get(id) || id;\n        if (newNodeRef) {\n          newIdTree.set(newId, newNodeRef);\n        } else {\n          newIdTree.delete(newId);\n        }\n      }\n    }\n\n    for (const [key, [oldRefMapping, parent]] of newParentTree) {\n      if (!parent) {\n        newParentTree.delete(key);\n        continue;\n      }\n      // Some nodes haven't been visited while cloning the struct trees so their\n      // ref don't belong to the oldRefMapping. Remove those nodes.\n      if (!Array.isArray(parent)) {\n        const newParent = oldRefMapping.get(parent);\n        if (newParent === undefined) {\n          newParentTree.delete(key);\n        } else {\n          newParentTree.set(key, newParent);\n        }\n        continue;\n      }\n      const newParents = parent.map(\n        ref => (ref instanceof Ref && oldRefMapping.get(ref)) || null\n      );\n      if (newParents.length === 0 || newParents.every(ref => ref === null)) {\n        newParentTree.delete(key);\n        continue;\n      }\n      newParentTree.set(key, newParents);\n    }\n\n    this.currentDocument = null;\n  }\n\n  /**\n   * Collect named destinations that are still valid (i.e. pointing to kept\n   * pages).\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  #collectValidDestinations(allDocumentData) {\n    // TODO: Handle OpenAction as well.\n    for (const documentData of allDocumentData) {\n      if (!documentData.destinations) {\n        continue;\n      }\n      const { destinations, pagesMap } = documentData;\n      const newDestinations = (documentData.destinations = new Map());\n      for (const [key, dest] of destinations) {\n        const pageRef = dest[0];\n        const pageData = pageRef instanceof Ref && pagesMap.get(pageRef);\n        if (!pageData) {\n          continue;\n        }\n        (pageData.pointingNamedDestinations ||= new Set()).add(key);\n        newDestinations.set(key, dest);\n      }\n    }\n  }\n\n  /**\n   * Find and rename duplicate named destinations.\n   */\n  #findDuplicateNamedDestinations() {\n    const { namedDestinations } = this;\n    const getUniqueDestinationName = name => {\n      if (!namedDestinations.has(name)) {\n        return name;\n      }\n      for (let i = 1; ; i++) {\n        const dedupedName = `${name}_${i}`;\n        if (!namedDestinations.has(dedupedName)) {\n          return dedupedName;\n        }\n      }\n    };\n    for (let i = 0, ii = this.oldPages.length; i < ii; i++) {\n      const page = this.oldPages[i];\n      if (!page) {\n        continue;\n      }\n      const {\n        documentData: {\n          destinations,\n          dedupNamedDestinations,\n          usedNamedDestinations,\n        },\n      } = page;\n      let { pointingNamedDestinations } = page;\n\n      if (!pointingNamedDestinations) {\n        // No named destinations pointing to this page.\n        continue;\n      }\n      // Keep only the named destinations that are still used.\n      page.pointingNamedDestinations = pointingNamedDestinations =\n        pointingNamedDestinations.intersection(usedNamedDestinations);\n\n      for (const pointingDest of pointingNamedDestinations) {\n        if (!usedNamedDestinations.has(pointingDest)) {\n          // If the named destination isn't used, we can keep it as is.\n          continue;\n        }\n        const dest = destinations.get(pointingDest).slice();\n        if (!namedDestinations.has(pointingDest)) {\n          // If the named destination hasn't been used yet, we can keep it\n          // as is.\n          namedDestinations.set(pointingDest, dest);\n          continue;\n        }\n        // Create a new unique named destination.\n        const newName = getUniqueDestinationName(`${pointingDest}_p${i + 1}`);\n        dedupNamedDestinations.set(pointingDest, newName);\n        namedDestinations.set(newName, dest);\n      }\n    }\n  }\n\n  /**\n   * Fix named destinations in the annotations.\n   * @param {Array<Ref>} annotations\n   * @param {Map<string,string>} dedupNamedDestinations\n   */\n  #fixNamedDestinations(annotations, dedupNamedDestinations) {\n    if (dedupNamedDestinations.size === 0) {\n      return;\n    }\n    const fixDestination = (dict, key, dest) => {\n      if (typeof dest === \"string\") {\n        dict.set(\n          key,\n          dedupNamedDestinations.get(\n            stringToPDFString(dest, /* keepEscapeSequence = */ true)\n          ) || dest\n        );\n      }\n    };\n\n    for (const annotRef of annotations) {\n      const annotDict = this.xref[annotRef.num];\n      if (!isName(annotDict.get(\"Subtype\"), \"Link\")) {\n        continue;\n      }\n      const action = annotDict.get(\"A\");\n      if (action instanceof Dict && action.has(\"D\")) {\n        const dest = action.get(\"D\");\n        fixDestination(action, \"D\", dest);\n        continue;\n      }\n      const dest = annotDict.get(\"Dest\");\n      fixDestination(annotDict, \"Dest\", dest);\n    }\n  }\n\n  /**\n   * Collect named destinations referenced in the outlines so they are kept\n   * when filtering duplicate named destinations.\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  #collectOutlineDestinations(allDocumentData) {\n    const collect = (items, destinations, usedNamedDestinations) => {\n      for (const item of items) {\n        if (typeof item.dest === \"string\" && destinations?.has(item.dest)) {\n          usedNamedDestinations.add(item.dest);\n        }\n        if (item.items.length > 0) {\n          collect(item.items, destinations, usedNamedDestinations);\n        }\n      }\n    };\n    for (const documentData of allDocumentData) {\n      const { outline, destinations, usedNamedDestinations } = documentData;\n      if (outline?.length) {\n        collect(outline, destinations, usedNamedDestinations);\n      }\n    }\n  }\n\n  /**\n   * Check whether an outline item has a valid destination in the output doc.\n   * @param {Object} item\n   * @param {DocumentData} documentData\n   * @returns {boolean}\n   */\n  #isValidOutlineDest(item, documentData) {\n    const { dest, action, url, unsafeUrl, attachment, setOCGState } = item;\n    // External links (including relative URLs that can't be made absolute),\n    // named actions, attachments and OCG state changes are always kept.\n    if (action || url || unsafeUrl || attachment || setOCGState) {\n      return true;\n    }\n    if (!dest) {\n      return false;\n    }\n    if (typeof dest === \"string\") {\n      const name = documentData.dedupNamedDestinations.get(dest) || dest;\n      return this.namedDestinations.has(name);\n    }\n    if (Array.isArray(dest) && dest[0] instanceof Ref) {\n      return !!documentData.oldRefMapping.get(dest[0]);\n    }\n    return false;\n  }\n\n  /**\n   * Recursively filter outline items, removing those with no valid destination\n   * and no remaining children.\n   * @param {Array} items\n   * @param {DocumentData} documentData\n   * @returns {Array}\n   */\n  #filterOutlineItems(items, documentData) {\n    const result = [];\n    for (const item of items) {\n      const filteredChildren = this.#filterOutlineItems(\n        item.items,\n        documentData\n      );\n      const hasValidOwnDest = this.#isValidOutlineDest(item, documentData);\n      if (hasValidOwnDest || filteredChildren.length > 0) {\n        result.push({\n          ...item,\n          // When the item's own destination is invalid (but it has surviving\n          // children), clear the destination and rawDict so the output item is\n          // a plain container rather than a broken link. Clearing rawDict\n          // prevents #setOutlineItemDest from cloning a GoTo action that\n          // references a deleted page via its D array.\n          dest: hasValidOwnDest ? item.dest : null,\n          rawDict: hasValidOwnDest ? item.rawDict : null,\n          items: filteredChildren,\n          _documentData: documentData,\n        });\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Filter outline trees and collect the result into this.outlineItems.\n   * Must be called after page copies are made (oldRefMapping is populated).\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  #buildOutline(allDocumentData) {\n    const outlineItems = [];\n    for (const documentData of allDocumentData) {\n      const { outline } = documentData;\n      if (!outline?.length) {\n        continue;\n      }\n      outlineItems.push(...this.#filterOutlineItems(outline, documentData));\n    }\n    this.outlineItems = outlineItems.length > 0 ? outlineItems : null;\n  }\n\n  /**\n   * Write the destination or action of an outline item into the given dict.\n   * @param {Dict} itemDict\n   * @param {Object} item\n   * @returns {Promise<void>}\n   */\n  async #setOutlineItemDest(itemDict, item) {\n    const { dest, rawDict } = item;\n    const documentData = item._documentData;\n    if (dest) {\n      if (typeof dest === \"string\") {\n        const name = documentData.dedupNamedDestinations.get(dest) || dest;\n        itemDict.set(\"Dest\", stringToAsciiOrUTF16BE(name));\n      } else if (Array.isArray(dest)) {\n        const newDest = dest.slice();\n        if (newDest[0] instanceof Ref) {\n          newDest[0] = documentData.oldRefMapping.get(newDest[0]) || newDest[0];\n        }\n        itemDict.set(\"Dest\", newDest);\n      }\n      return;\n    }\n    // For all other action types (URI, GoToR, Named, SetOCGState, ...) clone\n    // the raw action dict from the original document.\n    const actionDict = rawDict?.get(\"A\");\n    if (actionDict instanceof Dict) {\n      this.currentDocument = documentData;\n      const actionRef = await this.#cloneObject(\n        actionDict,\n        documentData.document.xref\n      );\n      this.currentDocument = null;\n      itemDict.set(\"A\", actionRef);\n    }\n  }\n\n  /**\n   * Build and write the document outline (bookmarks) into the output PDF.\n   * @returns {Promise<void>}\n   */\n  async #makeOutline() {\n    const { outlineItems } = this;\n    if (!outlineItems?.length) {\n      return;\n    }\n\n    const [outlineRootRef, outlineRootDict] = this.newDict;\n    outlineRootDict.setIfName(\"Type\", \"Outlines\");\n\n    // First pass: allocate a new Ref for every item in the tree.\n    const assignRefs = items => {\n      for (const item of items) {\n        [item._ref] = this.newDict;\n        if (item.items.length > 0) {\n          assignRefs(item.items);\n        }\n      }\n    };\n    assignRefs(outlineItems);\n\n    // Second pass: fill each Dict and return the total visible item count.\n    const fillItems = async (items, parentRef) => {\n      let totalCount = 0;\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i];\n        const dict = this.xref[item._ref.num];\n\n        dict.set(\"Title\", stringToAsciiOrUTF16BE(item.title));\n        dict.set(\"Parent\", parentRef);\n        if (i > 0) {\n          dict.set(\"Prev\", items[i - 1]._ref);\n        }\n        if (i < items.length - 1) {\n          dict.set(\"Next\", items[i + 1]._ref);\n        }\n\n        if (item.items.length > 0) {\n          dict.set(\"First\", item.items[0]._ref);\n          dict.set(\"Last\", item.items.at(-1)._ref);\n          const childCount = await fillItems(item.items, item._ref);\n          if (item.count !== undefined) {\n            // Preserve the original expanded/collapsed state while updating\n            // the number of visible descendants after filtering.\n            dict.set(\"Count\", item.count < 0 ? -childCount : childCount);\n          }\n          // A closed item (count < 0) hides its descendants, so it only\n          // contributes 1 to the parent's visible-item tally.\n          totalCount +=\n            item.count !== undefined && item.count < 0 ? 1 : childCount + 1;\n        } else {\n          totalCount += 1;\n        }\n\n        await this.#setOutlineItemDest(dict, item);\n\n        const flags = (item.bold ? 2 : 0) | (item.italic ? 1 : 0);\n        if (flags !== 0) {\n          dict.set(\"F\", flags);\n        }\n        if (\n          item.color &&\n          (item.color[0] !== 0 || item.color[1] !== 0 || item.color[2] !== 0)\n        ) {\n          dict.set(\"C\", [\n            item.color[0] / 255,\n            item.color[1] / 255,\n            item.color[2] / 255,\n          ]);\n        }\n      }\n      return totalCount;\n    };\n\n    const totalCount = await fillItems(outlineItems, outlineRootRef);\n    outlineRootDict.set(\"First\", outlineItems[0]._ref);\n    outlineRootDict.set(\"Last\", outlineItems.at(-1)._ref);\n    outlineRootDict.set(\"Count\", totalCount);\n\n    this.rootDict.set(\"Outlines\", outlineRootRef);\n  }\n\n  async #mergeAcroForms(allDocumentData) {\n    this.#setAcroFormDefaultBasicValues(allDocumentData);\n    this.#setAcroFormDefaultAppearance(allDocumentData);\n    this.#setAcroFormQ(allDocumentData);\n    await this.#setAcroFormDefaultResources(allDocumentData);\n    const newFields = this.fields;\n    for (const documentData of allDocumentData) {\n      let fields = documentData.acroForm?.get(\"Fields\") || null;\n      if (!fields && documentData.fieldToParent.size > 0) {\n        fields = this.#fixFields(\n          documentData.fieldToParent,\n          documentData.document.xref\n        );\n      }\n      if (Array.isArray(fields) && fields.length > 0) {\n        this.currentDocument = documentData;\n        await this.#cloneFields(newFields, fields);\n        this.currentDocument = null;\n      }\n    }\n    this.#setAcroFormCalculationOrder(allDocumentData);\n  }\n\n  #setAcroFormQ(allDocumentData) {\n    let firstQ = 0;\n    let firstDocData = null;\n    for (const documentData of allDocumentData) {\n      const q = documentData.acroForm?.get(\"Q\");\n      if (typeof q !== \"number\" || q === 0) {\n        continue;\n      }\n      if (firstDocData?.acroFormQ > 0) {\n        documentData.acroFormQ = q;\n        continue;\n      }\n      if (firstQ === 0) {\n        firstQ = q;\n        firstDocData = documentData;\n        continue;\n      }\n      if (q === firstQ) {\n        continue;\n      }\n      firstDocData.acroFormQ ||= firstQ;\n      documentData.acroFormQ = q;\n      firstQ = 0;\n    }\n\n    if (firstQ > 0) {\n      this.acroFormQ = firstQ;\n    }\n  }\n\n  #setAcroFormDefaultBasicValues(allDocumentData) {\n    let sigFlags = 0;\n    let needAppearances = false;\n    for (const documentData of allDocumentData) {\n      if (!documentData.acroForm) {\n        continue;\n      }\n      const sf = documentData.acroForm.get(\"SigFlags\");\n      if (typeof sf === \"number\" && documentData.hasSignatureAnnotations) {\n        sigFlags |= sf;\n      }\n      if (documentData.acroForm.get(\"NeedAppearances\") === true) {\n        needAppearances = true;\n      }\n    }\n    this.acroFormSigFlags = sigFlags;\n    this.acroFormNeedAppearances = needAppearances;\n  }\n\n  #setAcroFormCalculationOrder(allDocumentData) {\n    const calculationOrder = [];\n    for (const documentData of allDocumentData) {\n      const co = documentData.acroForm?.get(\"CO\") || null;\n      if (!Array.isArray(co)) {\n        continue;\n      }\n      const { oldRefMapping } = documentData;\n      for (const coRef of co) {\n        const newCoRef = coRef instanceof Ref && oldRefMapping.get(coRef);\n        if (newCoRef) {\n          calculationOrder.push(newCoRef);\n        }\n      }\n    }\n    this.acroFormCalculationOrder =\n      calculationOrder.length > 0 ? calculationOrder : null;\n  }\n\n  #setAcroFormDefaultAppearance(allDocumentData) {\n    // If all the DAs are the same we just use it in the AcroForm. Otherwise, we\n    // set the DA for each documentData and use for any annotations that don't\n    // have their own DA.\n    let firstDA = null;\n    let firstDocData = null;\n    for (const documentData of allDocumentData) {\n      const da = documentData.acroForm?.get(\"DA\") || null;\n      if (!da || typeof da !== \"string\") {\n        continue;\n      }\n      if (firstDocData?.acroFormDefaultAppearance) {\n        documentData.acroFormDefaultAppearance = da;\n        continue;\n      }\n      if (!firstDA) {\n        firstDA = da;\n        firstDocData = documentData;\n        continue;\n      }\n      if (da === firstDA) {\n        continue;\n      }\n      firstDocData.acroFormDefaultAppearance ||= firstDA;\n      documentData.acroFormDefaultAppearance = da;\n      firstDA = null;\n    }\n\n    if (firstDA) {\n      this.acroFormDefaultAppearance = firstDA;\n    }\n  }\n\n  async #setAcroFormDefaultResources(allDocumentData) {\n    let firstDR = null;\n    let firstDRRef = null;\n    let firstDocData = null;\n    for (const documentData of allDocumentData) {\n      const dr = documentData.acroForm?.get(\"DR\") || null;\n      if (!dr || !(dr instanceof Dict)) {\n        continue;\n      }\n      if (firstDocData?.acroFormDefaultResources) {\n        documentData.acroFormDefaultResources = dr;\n        continue;\n      }\n      if (!firstDR) {\n        firstDR = dr;\n        firstDRRef = documentData.acroForm.getRaw(\"DR\");\n        firstDocData = documentData;\n        continue;\n      }\n      if (deepCompare(firstDR, dr)) {\n        continue;\n      }\n      firstDocData.acroFormDefaultResources ||= firstDR;\n      documentData.acroFormDefaultResources = dr;\n      firstDR = null;\n      firstDRRef = null;\n    }\n\n    if (firstDR) {\n      this.currentDocument = firstDocData;\n      this.acroFormDefaultResources = await this.#collectDependencies(\n        firstDRRef,\n        true,\n        firstDocData.document.xref\n      );\n      this.currentDocument = null;\n    }\n  }\n\n  /**\n   * If the document has some fields but no Fields entry in the AcroForm, we\n   * need to fix that by creating a Fields entry with the oldest parent field\n   * for each field.\n   * @param {RefSetCache} fieldToParent\n   * @param {XRef} xref\n   * @returns {Array<Ref>}\n   */\n  #fixFields(fieldToParent, xref) {\n    const newFields = [];\n    const processed = new RefSet();\n    for (const [fieldRef, parentRef] of fieldToParent.items()) {\n      if (!parentRef) {\n        newFields.push(fieldRef);\n        continue;\n      }\n      let parent = parentRef;\n      let lastNonNullParent = parentRef;\n      while (true) {\n        parent = xref.fetchIfRef(parent)?.getRaw(\"Parent\") || null;\n        if (!parent) {\n          break;\n        }\n        lastNonNullParent = parent;\n      }\n      if (\n        lastNonNullParent instanceof Ref &&\n        !processed.has(lastNonNullParent)\n      ) {\n        newFields.push(lastNonNullParent);\n        processed.put(lastNonNullParent);\n      }\n    }\n    return newFields;\n  }\n\n  async #cloneFields(newFields, fields) {\n    const processed = new RefSet();\n    const stack = [\n      {\n        kids: fields,\n        newKids: newFields,\n        pos: 0,\n        oldParentRef: null,\n        parentRef: null,\n        parent: null,\n      },\n    ];\n    const {\n      document: { xref },\n      oldRefMapping,\n      fieldToParent,\n      acroFormDefaultAppearance,\n      acroFormDefaultResources,\n      acroFormQ,\n    } = this.currentDocument;\n    const daToFix = [];\n    const drToFix = [];\n\n    while (stack.length > 0) {\n      const data = stack.at(-1);\n      const { kids, newKids, parent, pos } = data;\n      if (pos === kids.length) {\n        stack.pop();\n        if (newKids.length === 0 || !parent) {\n          continue;\n        }\n\n        const parentDict = (this.xref[data.parentRef.num] =\n          this.cloneDict(parent));\n        parentDict.delete(\"Parent\");\n        parentDict.delete(\"Kids\");\n        await this.#collectDependencies(parentDict, false, xref);\n        parentDict.set(\"Kids\", newKids);\n\n        if (stack.length > 0) {\n          const lastData = stack.at(-1);\n          if (!lastData.parentRef && lastData.oldParentRef) {\n            const parentRef = (lastData.parentRef = this.newRef);\n            parentDict.set(\"Parent\", parentRef);\n            oldRefMapping.put(lastData.oldParentRef, parentRef);\n          }\n          lastData.newKids.push(data.parentRef);\n        }\n        continue;\n      }\n      const oldKidRef = kids[data.pos++];\n      if (!(oldKidRef instanceof Ref) || processed.has(oldKidRef)) {\n        continue;\n      }\n      processed.put(oldKidRef);\n      const kid = xref.fetchIfRef(oldKidRef);\n      if (kid.has(\"Kids\")) {\n        const kidsArray = kid.get(\"Kids\");\n        if (!Array.isArray(kidsArray)) {\n          continue;\n        }\n        stack.push({\n          kids: kidsArray,\n          newKids: [],\n          pos: 0,\n          oldParentRef: oldKidRef,\n          parentRef: null,\n          parent: kid,\n        });\n\n        continue;\n      }\n\n      if (!fieldToParent.has(oldKidRef)) {\n        continue;\n      }\n      const newRef = oldRefMapping.get(oldKidRef);\n      if (!newRef) {\n        continue;\n      }\n      newKids.push(newRef);\n      if (!data.parentRef && data.oldParentRef) {\n        data.parentRef = this.newRef;\n        oldRefMapping.put(data.oldParentRef, data.parentRef);\n      }\n      const newKid = this.xref[newRef.num];\n      if (data.parentRef) {\n        newKid.set(\"Parent\", data.parentRef);\n      }\n      if (acroFormDefaultAppearance && !newKid.has(\"DA\")) {\n        // Fix the DA later since we need to have all the fields tree.\n        daToFix.push(newKid);\n      }\n      if (\n        acroFormDefaultResources &&\n        !newKid.has(\"Kids\") &&\n        newKid.get(\"AP\") instanceof Dict\n      ) {\n        // Fix the DR later since we need to have all the fields tree.\n        drToFix.push(newKid);\n      }\n      if (acroFormQ && !newKid.has(\"Q\")) {\n        newKid.set(\"Q\", acroFormQ);\n      }\n    }\n\n    for (const field of daToFix) {\n      const fieldType = getInheritableProperty({ dict: field, key: \"FT\" });\n      if (!isName(fieldType, \"Tx\")) {\n        continue;\n      }\n      const da = getInheritableProperty({ dict: field, key: \"DA\" });\n      if (!da) {\n        // No DA in a parent field, we can set the default one.\n        field.set(\"DA\", acroFormDefaultAppearance);\n      }\n    }\n    const resourcesValuesCache = new Map();\n    const fixAppearanceResources = async stream => {\n      let resources = stream.dict.getRaw(\"Resources\");\n      resources &&= this.xrefWrapper.fetchIfRef(resources);\n      if (!(resources instanceof Dict)) {\n        const newResourcesRef = await resourcesValuesCache.getOrInsertComputed(\n          acroFormDefaultResources,\n          () => this.#cloneObject(acroFormDefaultResources, xref)\n        );\n        stream.dict.set(\"Resources\", newResourcesRef);\n        return;\n      }\n      for (const [\n        resKey,\n        resValue,\n      ] of acroFormDefaultResources.getRawEntries()) {\n        if (resources.has(resKey)) {\n          continue;\n        }\n        let newResValue = resValue;\n        if (resValue instanceof Ref) {\n          newResValue = await this.#collectDependencies(resValue, true, xref);\n        } else if (\n          resValue instanceof Dict ||\n          resValue instanceof BaseStream ||\n          Array.isArray(resValue)\n        ) {\n          newResValue = await resourcesValuesCache.getOrInsertComputed(\n            resValue,\n            () => this.#cloneObject(resValue, xref)\n          );\n        }\n        resources.set(resKey, newResValue);\n      }\n    };\n\n    for (const field of drToFix) {\n      const ap = field.get(\"AP\");\n      for (const [, value] of ap) {\n        if (value instanceof BaseStream) {\n          await fixAppearanceResources(value);\n        } else if (value instanceof Dict) {\n          for (const [, stream] of value) {\n            if (stream instanceof BaseStream) {\n              await fixAppearanceResources(stream);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  async #collectPageLabels() {\n    // We can only preserve page labels when editing a single PDF file.\n    // This is consistent with behavior in Adobe Acrobat.\n    if (!this.isSingleFile) {\n      return;\n    }\n    const firstRealPage = this.oldPages.find(p => !!p);\n    if (!firstRealPage) {\n      return;\n    }\n    const {\n      documentData: { document, pageLabels },\n    } = firstRealPage;\n    if (!pageLabels) {\n      return;\n    }\n    const numPages = document.numPages;\n    const labelsByPageIndex = new Map();\n    const oldPageIndices = new Set(\n      this.oldPages.filter(p => !!p).map(({ page: { pageIndex } }) => pageIndex)\n    );\n    let currentLabel = null;\n    let stFirstIndex = -1;\n    for (let i = 0; i < numPages; i++) {\n      const newLabel = pageLabels.get(i);\n      if (newLabel) {\n        currentLabel = newLabel;\n        stFirstIndex = currentLabel.has(\"St\") ? i : -1;\n      }\n      if (!oldPageIndices.has(i)) {\n        continue;\n      }\n      if (stFirstIndex !== -1) {\n        const st = currentLabel.get(\"St\");\n        currentLabel = this.cloneDict(currentLabel);\n        currentLabel.set(\"St\", st + (i - stFirstIndex));\n        stFirstIndex = -1;\n      }\n      labelsByPageIndex.set(i, currentLabel);\n    }\n\n    const defaultLabel = index => {\n      const label = new Dict();\n      label.setIfName(\"S\", \"D\");\n      label.set(\"St\", index + 1);\n      return label;\n    };\n    currentLabel = null;\n    const newPageLabels = (this.pageLabels = []);\n    for (let i = 0, ii = this.oldPages.length; i < ii; i++) {\n      const pageData = this.oldPages[i];\n      const label = pageData\n        ? labelsByPageIndex.get(pageData.page.pageIndex) || defaultLabel(i)\n        : defaultLabel(i);\n      if (label === currentLabel) {\n        continue;\n      }\n      currentLabel = label;\n      newPageLabels.push([i, currentLabel]);\n    }\n  }\n\n  /**\n   * Create a copy of a page.\n   * @param {number} pageIndex\n   * @returns {Promise<Ref>} the page reference in the new PDF document.\n   */\n  async #makePageCopy(pageIndex) {\n    const { page, documentData, annotations, pointingNamedDestinations } =\n      this.oldPages[pageIndex];\n    this.currentDocument = documentData;\n    const { dedupNamedDestinations, oldRefMapping } = documentData;\n    const { xref, rotate, mediaBox, resources, ref: oldPageRef } = page;\n    const pageRef = this.newRef;\n    const pageDict = (this.xref[pageRef.num] = this.cloneDict(page.pageDict));\n    oldRefMapping.put(oldPageRef, pageRef);\n\n    if (pointingNamedDestinations) {\n      for (const pointingDest of pointingNamedDestinations) {\n        const name = dedupNamedDestinations.get(pointingDest) || pointingDest;\n        const dest = this.namedDestinations.get(name);\n        dest[0] = pageRef;\n      }\n    }\n\n    // No need to keep these entries as we'll set them again later.\n    for (const key of [\n      \"Rotate\",\n      \"MediaBox\",\n      \"CropBox\",\n      \"BleedBox\",\n      \"TrimBox\",\n      \"ArtBox\",\n      \"Resources\",\n      \"Annots\",\n      \"Parent\",\n      \"UserUnit\",\n    ]) {\n      pageDict.delete(key);\n    }\n\n    const lastRef = this.newRefCount;\n    await this.#collectDependencies(pageDict, false, xref);\n\n    pageDict.set(\"Rotate\", rotate);\n    pageDict.set(\"MediaBox\", mediaBox);\n    for (const boxName of [\"CropBox\", \"BleedBox\", \"TrimBox\", \"ArtBox\"]) {\n      const box = page.getBoundingBox(boxName);\n      if (box?.some((value, index) => value !== mediaBox[index])) {\n        // These boxes are optional and their default value is the MediaBox.\n        pageDict.set(boxName, box);\n      }\n    }\n    const userUnit = page.userUnit;\n    if (userUnit !== 1) {\n      pageDict.set(\"UserUnit\", userUnit);\n    }\n    pageDict.setIfDict(\n      \"Resources\",\n      await this.#collectDependencies(resources, true, xref)\n    );\n\n    let newAnnots = null;\n\n    if (annotations) {\n      const newAnnotations = await this.#collectDependencies(\n        annotations,\n        true,\n        xref\n      );\n      this.#fixNamedDestinations(newAnnotations, dedupNamedDestinations);\n      if (Array.isArray(newAnnotations) && newAnnotations.length > 0) {\n        newAnnots = newAnnotations;\n      }\n    }\n\n    const newAnnotations =\n      documentData.document === this.#primaryDocument\n        ? this.#newAnnotationsParams?.newAnnotationsByPage?.get(page.pageIndex)\n        : null;\n    if (newAnnotations) {\n      const { handler, task, imagesPromises } = this.#newAnnotationsParams;\n      const changes = new RefSetCache();\n      const newData = await AnnotationFactory.saveNewAnnotations(\n        page.createAnnotationEvaluator(handler),\n        this.xrefWrapper,\n        task,\n        newAnnotations,\n        imagesPromises,\n        changes\n      );\n      for (const [ref, { data }] of changes.items()) {\n        this.xref[ref.num] = data;\n      }\n      newAnnots ||= [];\n      for (const { ref } of newData.annotations) {\n        newAnnots.push(ref);\n      }\n    }\n\n    pageDict.setIfArray(\"Annots\", newAnnots);\n\n    if (this.useObjectStreams) {\n      const newLastRef = this.newRefCount;\n      const pageObjectRefs = [];\n      for (let i = lastRef; i < newLastRef; i++) {\n        const obj = this.xref[i];\n        if (obj instanceof BaseStream) {\n          continue;\n        }\n        pageObjectRefs.push(Ref.get(i, 0));\n      }\n      for (let i = 0; i < pageObjectRefs.length; i += 0xffff) {\n        const objStreamRef = this.newRef;\n        this.objStreamRefs.add(objStreamRef.num);\n        this.xref[objStreamRef.num] = pageObjectRefs.slice(i, i + 0xffff);\n      }\n    }\n\n    this.currentDocument = null;\n\n    return pageRef;\n  }\n\n  #modalPageSize() {\n    const counts = new Map();\n    for (const pageData of this.oldPages) {\n      if (!pageData) {\n        continue;\n      }\n      const { page } = pageData;\n      const [x0, y0, x1, y1] = page.view;\n      let width = x1 - x0;\n      let height = y1 - y0;\n      if (width <= 0 || height <= 0) {\n        continue;\n      }\n      // The synthesized page won't carry a /Rotate entry, so swap dimensions\n      // for 90/270 to match what the user sees in the source page.\n      if (page.rotate % 180 !== 0) {\n        [width, height] = [height, width];\n      }\n      const key = `${width}x${height}`;\n      const entry = counts.get(key);\n      if (entry) {\n        entry.count++;\n      } else {\n        counts.set(key, { width, height, count: 1 });\n      }\n    }\n    if (counts.size === 0) {\n      const [, , width, height] = LETTER_SIZE_MEDIABOX;\n      return { width, height };\n    }\n    let best = null;\n    for (const entry of counts.values()) {\n      if (\n        !best ||\n        entry.count > best.count ||\n        (entry.count === best.count &&\n          entry.width * entry.height > best.width * best.height)\n      ) {\n        best = entry;\n      }\n    }\n    return { width: best.width, height: best.height };\n  }\n\n  /**\n   * Create a brand-new page that displays a single image, sized to the modal\n   * page dimensions with a margin equal to 10% of the page width on every\n   * side. The image is encoded as JPEG or lossless Flate depending on its\n   * contents; when the source has transparency, an SMask carrying the alpha\n   * channel is attached so the mask is preserved on render.\n   * @param {ImageBitmap} bitmap\n   * @param {{width: number, height: number}} pageSize\n   * @returns {Promise<Ref>}\n   */\n  async #makeImagePage(bitmap, pageSize) {\n    const { width: pageW, height: pageH } = pageSize;\n    const DEFAULT_MARGIN_RATIO = 0.1;\n    const margin = pageW * DEFAULT_MARGIN_RATIO;\n    const availW = Math.max(1, pageW - 2 * margin);\n    const availH = Math.max(1, pageH - 2 * margin);\n\n    const lastRef = this.newRefCount;\n\n    const {\n      imageStream,\n      smaskStream,\n      width: imgW,\n      height: imgH,\n    } = await createImage(bitmap, this.xrefWrapper, { closeBitmap: true });\n\n    const scale = Math.min(availW / imgW, availH / imgH);\n    const drawW = imgW * scale;\n    const drawH = imgH * scale;\n    const tx = (pageW - drawW) / 2;\n    const ty = (pageH - drawH) / 2;\n\n    if (smaskStream) {\n      const smaskRef = this.newRef;\n      this.xref[smaskRef.num] = smaskStream;\n      imageStream.dict.set(\"SMask\", smaskRef);\n    }\n    const imageRef = this.newRef;\n    this.xref[imageRef.num] = imageStream;\n\n    const xobjectDict = new Dict(this.xrefWrapper);\n    xobjectDict.set(\"Im0\", imageRef);\n    const resourcesDict = new Dict(this.xrefWrapper);\n    resourcesDict.set(\"XObject\", xobjectDict);\n    resourcesDict.set(\"ProcSet\", [Name.get(\"PDF\"), Name.get(\"ImageC\")]);\n\n    const content =\n      `q ${numberToString(drawW)} 0 0 ${numberToString(drawH)} ` +\n      `${numberToString(tx)} ${numberToString(ty)} cm /Im0 Do Q`;\n    const contentsStream = new StringStream(\n      content,\n      new Dict(this.xrefWrapper)\n    );\n    const contentsRef = this.newRef;\n    this.xref[contentsRef.num] = contentsStream;\n\n    const pageRef = this.newRef;\n    const pageDict = (this.xref[pageRef.num] = new Dict(this.xrefWrapper));\n    pageDict.setIfName(\"Type\", \"Page\");\n    pageDict.set(\"MediaBox\", [0, 0, pageW, pageH]);\n    pageDict.set(\"Resources\", resourcesDict);\n    pageDict.set(\"Contents\", contentsRef);\n\n    if (this.useObjectStreams) {\n      const newLastRef = this.newRefCount;\n      const pageObjectRefs = [];\n      for (let i = lastRef; i < newLastRef; i++) {\n        const obj = this.xref[i];\n        if (obj instanceof BaseStream) {\n          continue;\n        }\n        pageObjectRefs.push(Ref.get(i, 0));\n      }\n      for (let i = 0; i < pageObjectRefs.length; i += 0xffff) {\n        const objStreamRef = this.newRef;\n        this.objStreamRefs.add(objStreamRef.num);\n        this.xref[objStreamRef.num] = pageObjectRefs.slice(i, i + 0xffff);\n      }\n    }\n\n    return pageRef;\n  }\n\n  /**\n   * Create the page tree structure.\n   */\n  #makePageTree() {\n    const { newPages: pages, rootDict, pagesRef, pagesDict } = this;\n    rootDict.set(\"Pages\", pagesRef);\n    pagesDict.setIfName(\"Type\", \"Pages\");\n    pagesDict.set(\"Count\", pages.length);\n\n    const maxLeaves =\n      MAX_LEAVES_PER_PAGES_NODE <= 1 ? pages.length : MAX_LEAVES_PER_PAGES_NODE;\n    const stack = [{ dict: pagesDict, kids: pages, parentRef: pagesRef }];\n\n    while (stack.length > 0) {\n      const { dict, kids, parentRef } = stack.pop();\n      if (kids.length <= maxLeaves) {\n        dict.set(\"Kids\", kids);\n        for (const ref of kids) {\n          this.xref[ref.num].set(\"Parent\", parentRef);\n        }\n        continue;\n      }\n      const chunkSize = Math.max(maxLeaves, Math.ceil(kids.length / maxLeaves));\n      const kidsChunks = [];\n      for (let i = 0; i < kids.length; i += chunkSize) {\n        kidsChunks.push(kids.slice(i, i + chunkSize));\n      }\n      const kidsRefs = [];\n      dict.set(\"Kids\", kidsRefs);\n      for (const chunk of kidsChunks) {\n        const [kidRef, kidDict] = this.newDict;\n        kidsRefs.push(kidRef);\n        kidDict.setIfName(\"Type\", \"Pages\");\n        kidDict.set(\"Parent\", parentRef);\n        kidDict.set(\"Count\", chunk.length);\n        stack.push({ dict: kidDict, kids: chunk, parentRef: kidRef });\n      }\n    }\n  }\n\n  /**\n   * Create a name or number tree from the given map.\n   * @param {Array<[string|number, any]>} map\n   * @returns {Ref}\n   */\n  #makeNameNumTree(map, areNames) {\n    const allEntries = map.sort(\n      areNames\n        ? ([keyA], [keyB]) => {\n            if (keyA < keyB) {\n              return -1;\n            }\n            if (keyA > keyB) {\n              return 1;\n            }\n            return 0;\n          }\n        : ([keyA], [keyB]) => keyA - keyB\n    );\n    const maxLeaves =\n      MAX_IN_NAME_TREE_NODE <= 1 ? allEntries.length : MAX_IN_NAME_TREE_NODE;\n    const [treeRef, treeDict] = this.newDict;\n    const stack = [{ dict: treeDict, entries: allEntries, isRoot: true }];\n    const valueType = areNames ? \"Names\" : \"Nums\";\n\n    while (stack.length > 0) {\n      const { dict, entries, isRoot } = stack.pop();\n      if (entries.length <= maxLeaves) {\n        if (!isRoot) {\n          dict.set(\"Limits\", [entries[0][0], entries.at(-1)[0]]);\n        }\n        dict.set(valueType, entries.flat());\n        continue;\n      }\n      const entriesChunks = [];\n      const chunkSize = Math.max(\n        maxLeaves,\n        Math.ceil(entries.length / maxLeaves)\n      );\n      for (let i = 0; i < entries.length; i += chunkSize) {\n        entriesChunks.push(entries.slice(i, i + chunkSize));\n      }\n      const entriesRefs = [];\n      dict.set(\"Kids\", entriesRefs);\n      for (const chunk of entriesChunks) {\n        const [entriesRef, entriesDict] = this.newDict;\n        entriesRefs.push(entriesRef);\n        entriesDict.set(\"Limits\", [chunk[0][0], chunk.at(-1)[0]]);\n        stack.push({ dict: entriesDict, entries: chunk });\n      }\n    }\n    return treeRef;\n  }\n\n  /**\n   * Create the page labels tree if it exists.\n   */\n  #makePageLabelsTree() {\n    const { pageLabels } = this;\n    if (!pageLabels?.length) {\n      return;\n    }\n    const { rootDict } = this;\n    const pageLabelsRef = this.#makeNameNumTree(\n      this.pageLabels,\n      /* areNames = */ false\n    );\n    rootDict.set(\"PageLabels\", pageLabelsRef);\n  }\n\n  /**\n   * Collect and clone EmbeddedFiles from all source documents.\n   * @param {Array<DocumentData>} allDocumentData\n   */\n  async #collectEmbeddedFiles(allDocumentData) {\n    const { embeddedFiles } = this;\n    for (const documentData of allDocumentData) {\n      const {\n        embeddedFiles: docEmbeddedFiles,\n        document: { xref },\n      } = documentData;\n      if (!docEmbeddedFiles?.size) {\n        continue;\n      }\n      this.currentDocument = documentData;\n      for (const [key, valueRef] of docEmbeddedFiles) {\n        let name = key;\n        if (embeddedFiles.has(name)) {\n          const displayName = stringToPDFString(\n            key,\n            /* keepEscapeSequence = */ true\n          );\n          for (let i = 1; ; i++) {\n            const deduped = stringToAsciiOrUTF16BE(`${displayName}_${i}`);\n            if (!embeddedFiles.has(deduped)) {\n              name = deduped;\n              break;\n            }\n          }\n        }\n        embeddedFiles.set(\n          name,\n          await this.#collectDependencies(valueRef, true, xref)\n        );\n      }\n      this.currentDocument = null;\n    }\n  }\n\n  #makeEmbeddedFilesTree() {\n    const { embeddedFiles } = this;\n    if (embeddedFiles.size === 0) {\n      return;\n    }\n    if (!this.namesDict) {\n      [this.namesRef, this.namesDict] = this.newDict;\n      this.rootDict.set(\"Names\", this.namesRef);\n    }\n    this.namesDict.set(\n      \"EmbeddedFiles\",\n      this.#makeNameNumTree(\n        Array.from(embeddedFiles.entries()),\n        /* areNames = */ true\n      )\n    );\n  }\n\n  #makeDestinationsTree() {\n    const { namedDestinations } = this;\n    if (namedDestinations.size === 0) {\n      return;\n    }\n    if (!this.namesDict) {\n      [this.namesRef, this.namesDict] = this.newDict;\n      this.rootDict.set(\"Names\", this.namesRef);\n    }\n    this.namesDict.set(\n      \"Dests\",\n      this.#makeNameNumTree(\n        Array.from(namedDestinations, ([name, dest]) => [\n          stringToAsciiOrUTF16BE(name),\n          dest,\n        ]),\n        /* areNames = */ true\n      )\n    );\n  }\n\n  #makeStructTree() {\n    const { structTreeKids } = this;\n    if (!structTreeKids?.length) {\n      return;\n    }\n    const { rootDict } = this;\n    const structTreeRef = this.newRef;\n    const structTree = (this.xref[structTreeRef.num] = new Dict());\n    structTree.setIfName(\"Type\", \"StructTreeRoot\");\n    structTree.setIfArray(\"K\", structTreeKids);\n    for (const kidRef of structTreeKids) {\n      const kid = this.xref[kidRef.num];\n      const type = kid.get(\"Type\");\n      if (!type || isName(type, \"StructElem\")) {\n        kid.set(\"P\", structTreeRef);\n      }\n    }\n    if (this.parentTree.size > 0) {\n      const parentTreeRef = this.#makeNameNumTree(\n        Array.from(this.parentTree.entries()),\n        /* areNames = */ false\n      );\n      const parentTree = this.xref[parentTreeRef.num];\n      parentTree.setIfName(\"Type\", \"ParentTree\");\n      structTree.set(\"ParentTree\", parentTreeRef);\n      structTree.set(\"ParentTreeNextKey\", this.parentTree.size);\n    }\n    if (this.idTree.size > 0) {\n      const idTreeRef = this.#makeNameNumTree(\n        Array.from(this.idTree.entries()),\n        /* areNames = */ true\n      );\n      const idTree = this.xref[idTreeRef.num];\n      idTree.setIfName(\"Type\", \"IDTree\");\n      structTree.set(\"IDTree\", idTreeRef);\n    }\n    if (this.classMap.size > 0) {\n      const classMapRef = this.newRef;\n      this.xref[classMapRef.num] = this.classMap;\n      structTree.set(\"ClassMap\", classMapRef);\n    }\n    if (this.roleMap.size > 0) {\n      const roleMapRef = this.newRef;\n      this.xref[roleMapRef.num] = this.roleMap;\n      structTree.set(\"RoleMap\", roleMapRef);\n    }\n    if (this.namespaces.size > 0) {\n      const namespacesRef = this.newRef;\n      this.xref[namespacesRef.num] = Array.from(this.namespaces.values());\n      structTree.set(\"Namespaces\", namespacesRef);\n    }\n    if (this.structTreeAF.length > 0) {\n      const structTreeAFRef = this.newRef;\n      this.xref[structTreeAFRef.num] = this.structTreeAF;\n      structTree.set(\"AF\", structTreeAFRef);\n    }\n    if (this.structTreePronunciationLexicon.length > 0) {\n      const structTreePronunciationLexiconRef = this.newRef;\n      this.xref[structTreePronunciationLexiconRef.num] =\n        this.structTreePronunciationLexicon;\n      structTree.set(\"PronunciationLexicon\", structTreePronunciationLexiconRef);\n    }\n    rootDict.set(\"StructTreeRoot\", structTreeRef);\n  }\n\n  #makeAcroForm() {\n    if (this.fields.length === 0) {\n      return;\n    }\n    const { rootDict } = this;\n    const acroFormRef = this.newRef;\n    const acroForm = (this.xref[acroFormRef.num] = new Dict());\n    rootDict.set(\"AcroForm\", acroFormRef);\n    acroForm.set(\"Fields\", this.fields);\n    if (this.acroFormNeedAppearances) {\n      acroForm.set(\"NeedAppearances\", true);\n    }\n    if (this.acroFormSigFlags > 0) {\n      acroForm.set(\"SigFlags\", this.acroFormSigFlags);\n    }\n    acroForm.setIfArray(\"CO\", this.acroFormCalculationOrder);\n    acroForm.setIfDefined(\"DR\", this.acroFormDefaultResources);\n    if (this.acroFormDefaultAppearance) {\n      acroForm.set(\"DA\", this.acroFormDefaultAppearance);\n    }\n    if (this.acroFormQ > 0) {\n      acroForm.set(\"Q\", this.acroFormQ);\n    }\n    // We don't merge XFA stuff because it'd require to parse, extract and merge\n    // all the data, which is a lot of work for a deprecated feature (i.e. XFA).\n  }\n\n  /**\n   * Create the root dictionary.\n   * @returns {Promise<void>}\n   */\n  async #makeRoot() {\n    const { rootDict } = this;\n    rootDict.setIfName(\"Type\", \"Catalog\");\n    rootDict.setIfName(\"Version\", this.version);\n    this.#makeAcroForm();\n    this.#makePageTree();\n    this.#makePageLabelsTree();\n    this.#makeEmbeddedFilesTree();\n    this.#makeDestinationsTree();\n    this.#makeStructTree();\n    await this.#makeOutline();\n  }\n\n  /**\n   * Create the info dictionary.\n   * @returns {Map} infoMap\n   */\n  #makeInfo() {\n    const infoMap = new Map();\n    if (this.isSingleFile) {\n      const firstRealPage = this.oldPages.find(p => !!p);\n      const {\n        xref: { trailer },\n      } = firstRealPage.documentData.document;\n      const oldInfoDict = trailer.get(\"Info\");\n      for (const [key, value] of oldInfoDict || []) {\n        if (typeof value === \"string\") {\n          infoMap.set(key, stringToPDFString(value));\n        }\n      }\n    }\n    infoMap.delete(\"ModDate\");\n    infoMap.set(\"CreationDate\", getModificationDate());\n    infoMap.set(\"Creator\", \"PDF.js\");\n    infoMap.set(\"Producer\", \"Firefox\");\n\n    if (this.author) {\n      infoMap.set(\"Author\", this.author);\n    }\n    if (this.title) {\n      infoMap.set(\"Title\", this.title);\n    }\n    for (const [key, value] of infoMap) {\n      this.infoDict.set(key, stringToAsciiOrUTF16BE(value));\n    }\n    return infoMap;\n  }\n\n  /**\n   * Create the encryption dictionary if required.\n   * @returns {Promise<[Dict|null, CipherTransformFactory|null, Array|null]>}\n   */\n  async #makeEncrypt() {\n    if (!this.isSingleFile) {\n      return [null, null, null];\n    }\n    const firstRealPage = this.oldPages.find(p => !!p);\n    const { documentData } = firstRealPage;\n    const {\n      document: {\n        xref: { trailer, encrypt },\n      },\n    } = documentData;\n    if (!trailer.has(\"Encrypt\")) {\n      return [null, null, null];\n    }\n    const encryptDict = trailer.get(\"Encrypt\");\n    if (!(encryptDict instanceof Dict)) {\n      return [null, null, null];\n    }\n    this.currentDocument = documentData;\n    const result = [\n      await this.#cloneObject(encryptDict, trailer.xref),\n      encrypt,\n      trailer.get(\"ID\"),\n    ];\n    this.currentDocument = null;\n    return result;\n  }\n\n  /**\n   * Create the changes required to write the new PDF document.\n   * @returns {Promise<[RefSetCache, Ref]>}\n   */\n  async #createChanges() {\n    const changes = new RefSetCache();\n    changes.put(Ref.get(0, 0xffff), { data: null });\n    for (let i = 1, ii = this.xref.length; i < ii; i++) {\n      if (this.objStreamRefs?.has(i)) {\n        await this.#createObjectStream(Ref.get(i, 0), this.xref[i], changes);\n      } else {\n        changes.put(Ref.get(i, 0), { data: this.xref[i] });\n      }\n    }\n\n    return [changes, this.newRef];\n  }\n\n  /**\n   * Create an object stream containing the given objects.\n   * @param {Ref} objStreamRef\n   * @param {Array<Ref>} objRefs\n   * @param {RefSetCache} changes\n   */\n  async #createObjectStream(objStreamRef, objRefs, changes) {\n    const streamBuffer = [\"\"];\n    const objOffsets = [];\n    let offset = 0;\n    const buffer = [];\n    for (let i = 0, ii = objRefs.length; i < ii; i++) {\n      const objRef = objRefs[i];\n      changes.put(objRef, { data: null, objStreamRef, index: i });\n      objOffsets.push(`${objRef.num} ${offset}`);\n      const data = this.xref[objRef.num];\n      await writeValue(data, buffer, /* transform = */ null);\n      const obj = buffer.join(\"\");\n      buffer.length = 0;\n      streamBuffer.push(obj);\n      offset += obj.length + 1;\n    }\n    streamBuffer[0] = objOffsets.join(\"\\n\");\n    const dict = new Dict();\n    dict.setIfName(\"Type\", \"ObjStm\");\n    dict.set(\"N\", objRefs.length);\n    dict.set(\"First\", streamBuffer[0].length + 1);\n    const objStream = new StringStream(streamBuffer.join(\"\\n\"), dict);\n\n    changes.put(objStreamRef, { data: objStream });\n  }\n\n  /**\n   * Write the new PDF document to a Uint8Array.\n   * @returns {Promise<Uint8Array>}\n   */\n  async writePDF() {\n    await this.#makeRoot();\n    const infoMap = this.#makeInfo();\n    const [encryptRef, encrypt, fileIds] = await this.#makeEncrypt();\n    const [changes, xrefTableRef] = await this.#createChanges();\n\n    // Create the PDF header in order to help sniffers.\n    // PDF version must be in the range 1.0 to 1.7 inclusive.\n    // We add a binary comment line to ensure that the file is treated\n    // as a binary file by applications that open it.\n    const header = stringToBytes(`%PDF-${this.version}\\n%\\xfa\\xde\\xfa\\xce`);\n\n    return incrementalUpdate({\n      originalData: header,\n      changes,\n      xrefInfo: {\n        startXRef: null,\n        rootRef: this.rootRef,\n        infoRef: this.infoRef,\n        encryptRef,\n        newRef: xrefTableRef,\n        fileIds: fileIds || [null, null],\n        infoMap,\n      },\n      useXrefStream: this.useObjectStreams,\n      xref: {\n        encrypt,\n        encryptRef,\n      },\n    });\n  }\n}\n\nexport { PDFEditor };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, unreachable } from \"./util.js\";\n\n/**\n * Interface that represents PDF data transport. If possible, it allows\n * progressively load entire or fragment of the PDF binary data.\n */\nclass BasePDFStream {\n  #PDFStreamReader = null;\n\n  #PDFStreamRangeReader = null;\n\n  _fullReader = null;\n\n  _rangeReaders = new Set();\n\n  _source = null;\n\n  constructor(source, PDFStreamReader, PDFStreamRangeReader) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BasePDFStream\n    ) {\n      unreachable(\"Cannot initialize BasePDFStream.\");\n    }\n    this._source = source;\n\n    this.#PDFStreamReader = PDFStreamReader;\n    this.#PDFStreamRangeReader = PDFStreamRangeReader;\n  }\n\n  get _progressiveDataLength() {\n    return this._fullReader?._loaded ?? 0;\n  }\n\n  /**\n   * Gets a reader for the entire PDF data.\n   * @returns {BasePDFStreamReader}\n   */\n  getFullReader() {\n    assert(\n      !this._fullReader,\n      \"BasePDFStream.getFullReader can only be called once.\"\n    );\n    return (this._fullReader = new this.#PDFStreamReader(this));\n  }\n\n  /**\n   * Gets a reader for the range of the PDF data.\n   *\n   * NOTE: Currently this method is only expected to be invoked *after*\n   * the `BasePDFStreamReader.prototype.headersReady` promise has resolved.\n   *\n   * @param {number} begin - the start offset of the data.\n   * @param {number} end - the end offset of the data.\n   * @returns {BasePDFStreamRangeReader}\n   */\n  getRangeReader(begin, end) {\n    if (end <= this._progressiveDataLength) {\n      return null;\n    }\n    const reader = new this.#PDFStreamRangeReader(this, begin, end);\n    this._rangeReaders.add(reader);\n    return reader;\n  }\n\n  /**\n   * Cancels all opened reader and closes all their opened requests.\n   * @param {Object} reason - the reason for cancelling\n   */\n  cancelAllRequests(reason) {\n    this._fullReader?.cancel(reason);\n\n    // Always create a copy of the rangeReaders.\n    for (const reader of new Set(this._rangeReaders)) {\n      reader.cancel(reason);\n    }\n  }\n}\n\n/**\n * Interface for a PDF binary data reader.\n */\nclass BasePDFStreamReader {\n  /**\n   * Sets or gets the progress callback. The callback can be useful when the\n   * isStreamingSupported property of the object is defined as false.\n   * The callback is called with one parameter: an object with the loaded and\n   * total properties.\n   */\n  onProgress = null;\n\n  _contentLength = 0;\n\n  _filename = null;\n\n  _headersCapability = Promise.withResolvers();\n\n  _isRangeSupported = false;\n\n  _isStreamingSupported = false;\n\n  _loaded = 0;\n\n  _stream = null;\n\n  constructor(stream) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BasePDFStreamReader\n    ) {\n      unreachable(\"Cannot initialize BasePDFStreamReader.\");\n    }\n    this._stream = stream;\n  }\n\n  _callOnProgress() {\n    this.onProgress?.({ loaded: this._loaded, total: this._contentLength });\n  }\n\n  /**\n   * Gets a promise that is resolved when the headers and other metadata of\n   * the PDF data stream are available.\n   * @type {Promise}\n   */\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n\n  /**\n   * Gets the Content-Disposition filename. It is defined after the headersReady\n   * promise is resolved.\n   * @type {string|null} The filename, or `null` if the Content-Disposition\n   *                     header is missing/invalid.\n   */\n  get filename() {\n    return this._filename;\n  }\n\n  /**\n   * Gets PDF binary data length. It is defined after the headersReady promise\n   * is resolved.\n   * @type {number} The data length (or 0 if unknown).\n   */\n  get contentLength() {\n    return this._contentLength;\n  }\n\n  /**\n   * Gets ability of the stream to handle range requests. It is defined after\n   * the headersReady promise is resolved. Rejected when the reader is cancelled\n   * or an error occurs.\n   * @type {boolean}\n   */\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n\n  /**\n   * Gets ability of the stream to progressively load binary data. It is defined\n   * after the headersReady promise is resolved.\n   * @type {boolean}\n   */\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n\n  /**\n   * Requests a chunk of the binary data. The method returns the promise, which\n   * is resolved into object with properties \"value\" and \"done\". If the done\n   * is set to true, then the stream has reached its end, otherwise the value\n   * contains binary data. Cancelled requests will be resolved with the done is\n   * set to true.\n   * @returns {Promise}\n   */\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n\n  /**\n   * Cancels all pending read requests and closes the stream.\n   * @param {Object} reason\n   */\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\n\n/**\n * Interface for a PDF binary data fragment reader.\n */\nclass BasePDFStreamRangeReader {\n  _stream = null;\n\n  constructor(stream, begin, end) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BasePDFStreamRangeReader\n    ) {\n      unreachable(\"Cannot initialize BasePDFStreamRangeReader.\");\n    }\n    this._stream = stream;\n  }\n\n  /**\n   * Requests a chunk of the binary data. The method returns the promise, which\n   * is resolved into object with properties \"value\" and \"done\". If the done\n   * is set to true, then the stream has reached its end, otherwise the value\n   * contains binary data. Cancelled requests will be resolved with the done is\n   * set to true.\n   * @returns {Promise}\n   */\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n\n  /**\n   * Cancels all pending read requests and closes the stream.\n   * @param {Object} reason\n   */\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\n\nexport { BasePDFStream, BasePDFStreamRangeReader, BasePDFStreamReader };\n","/* Copyright 2019 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  BasePDFStream,\n  BasePDFStreamRangeReader,\n  BasePDFStreamReader,\n} from \"../shared/base_pdf_stream.js\";\n\nclass PDFWorkerStream extends BasePDFStream {\n  constructor(source) {\n    super(source, PDFWorkerStreamReader, PDFWorkerStreamRangeReader);\n  }\n}\n\nclass PDFWorkerStreamReader extends BasePDFStreamReader {\n  _reader = null;\n\n  constructor(stream) {\n    super(stream);\n    const { msgHandler } = stream._source;\n\n    const readableStream = msgHandler.sendWithStream(\"GetReader\");\n    this._reader = readableStream.getReader();\n\n    msgHandler.sendWithPromise(\"ReaderHeadersReady\").then(data => {\n      this._contentLength = data.contentLength;\n      this._isStreamingSupported = data.isStreamingSupported;\n      this._isRangeSupported = data.isRangeSupported;\n\n      this._headersCapability.resolve();\n    }, this._headersCapability.reject);\n  }\n\n  async read() {\n    const { value, done } = await this._reader.read();\n    if (done) {\n      return { value: undefined, done: true };\n    }\n    // `value` is wrapped into Uint8Array, we need to\n    // unwrap it to ArrayBuffer for further processing.\n    return { value: value.buffer, done: false };\n  }\n\n  cancel(reason) {\n    this._reader.cancel(reason);\n  }\n}\n\nclass PDFWorkerStreamRangeReader extends BasePDFStreamRangeReader {\n  _reader = null;\n\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    const { msgHandler } = stream._source;\n\n    const readableStream = msgHandler.sendWithStream(\"GetRangeReader\", {\n      begin,\n      end,\n    });\n    this._reader = readableStream.getReader();\n  }\n\n  async read() {\n    const { value, done } = await this._reader.read();\n    if (done) {\n      return { value: undefined, done: true };\n    }\n    return { value: value.buffer, done: false };\n  }\n\n  cancel(reason) {\n    this._reader.cancel(reason);\n  }\n}\n\nexport { PDFWorkerStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AbortException,\n  assert,\n  getVerbosityLevel,\n  info,\n  isNodeJS,\n  PasswordException,\n  setVerbosityLevel,\n  VerbosityLevel,\n  warn,\n} from \"../shared/util.js\";\nimport {\n  arrayBuffersToBytes,\n  getNewAnnotationsMap,\n  XRefParseException,\n} from \"./core_utils.js\";\nimport { Dict, isDict, Ref, RefSetCache } from \"./primitives.js\";\nimport { LocalPdfManager, NetworkPdfManager } from \"./pdf_manager.js\";\nimport { MessageHandler, wrapReason } from \"../shared/message_handler.js\";\nimport { AnnotationFactory } from \"./annotation.js\";\nimport { clearGlobalCaches } from \"./cleanup_helper.js\";\nimport { incrementalUpdate } from \"./writer.js\";\nimport { PDFEditor } from \"./editor/pdf_editor.js\";\nimport { PDFWorkerStream } from \"./worker_stream.js\";\nimport { stringToPDFString } from \"./string_utils.js\";\nimport { StructTreeRoot } from \"./struct_tree.js\";\n\nclass WorkerTask {\n  constructor(name) {\n    this.name = name;\n    this.terminated = false;\n    this._capability = Promise.withResolvers();\n  }\n\n  get finished() {\n    return this._capability.promise;\n  }\n\n  finish() {\n    this._capability.resolve();\n  }\n\n  terminate() {\n    this.terminated = true;\n  }\n\n  ensureNotTerminated() {\n    if (this.terminated) {\n      throw new Error(\"Worker task was terminated\");\n    }\n  }\n}\n\nclass WorkerMessageHandler {\n  static {\n    // Worker thread (and not Node.js)?\n    if (\n      typeof window === \"undefined\" &&\n      !isNodeJS &&\n      typeof self !== \"undefined\" &&\n      /* isMessagePort = */\n      typeof self.postMessage === \"function\" &&\n      \"onmessage\" in self\n    ) {\n      this.initializeFromPort(self);\n    }\n  }\n\n  static setup(handler, port) {\n    let testMessageProcessed = false;\n    handler.on(\"test\", data => {\n      if (testMessageProcessed) {\n        return; // we already processed 'test' message once\n      }\n      testMessageProcessed = true;\n\n      // Ensure that `TypedArray`s can be sent to the worker.\n      handler.send(\"test\", data instanceof Uint8Array);\n    });\n\n    handler.on(\"configure\", data => {\n      setVerbosityLevel(data.verbosity);\n    });\n\n    handler.on(\"GetDocRequest\", data => this.createDocumentHandler(data, port));\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      handler.on(\"GetWorkerCoverage\", function () {\n        return globalThis.__coverage__ ?? {};\n      });\n    }\n  }\n\n  static createDocumentHandler(docParams, port) {\n    // This context is actually holds references on pdfManager and handler,\n    // until the latter is destroyed.\n    let pdfManager;\n    let terminated = false;\n    let cancelXHRs = null;\n    const WorkerTasks = new Set();\n    const verbosity = getVerbosityLevel();\n\n    const { docId, apiVersion } = docParams;\n    const workerVersion =\n      typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n        ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n        : null;\n    if (apiVersion !== workerVersion) {\n      throw new Error(\n        `The API version \"${apiVersion}\" does not match ` +\n          `the Worker version \"${workerVersion}\".`\n      );\n    }\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      // Fail early, and predictably, rather than having (some) fonts fail to\n      // load/render with slightly cryptic error messages in environments where\n      // the `{Object, Array}.prototype` has been *incorrectly* extended.\n      //\n      // PLEASE NOTE: We do *not* want to slow down font parsing by adding\n      //              `Object.hasOwn` checks all over the code-base.\n      const buildMsg = (type, prop) =>\n        `The \\`${type}.prototype\\` contains unexpected enumerable property ` +\n        `\"${prop}\", thus breaking e.g. \\`for...in\\` iteration of ${type}s.`;\n\n      for (const prop in {}) {\n        throw new Error(buildMsg(\"Object\", prop));\n      }\n      for (const prop in []) {\n        throw new Error(buildMsg(\"Array\", prop));\n      }\n    }\n    const workerHandlerName = docId + \"_worker\";\n    let handler = new MessageHandler(workerHandlerName, docId, port);\n\n    function ensureNotTerminated() {\n      if (terminated) {\n        throw new Error(\"Worker was terminated\");\n      }\n    }\n\n    function startWorkerTask(task) {\n      WorkerTasks.add(task);\n    }\n\n    function finishWorkerTask(task) {\n      task.finish();\n      WorkerTasks.delete(task);\n    }\n\n    async function loadDocument(recoveryMode) {\n      await pdfManager.initDocument(recoveryMode);\n\n      const isPureXfa = await pdfManager.ensureDoc(\"isPureXfa\");\n      if (isPureXfa) {\n        const task = new WorkerTask(\"loadXfaResources\");\n        startWorkerTask(task);\n\n        await pdfManager.ensureDoc(\"loadXfaResources\", [handler, task]);\n        finishWorkerTask(task);\n      }\n\n      const [numPages, fingerprints] = await Promise.all([\n        pdfManager.ensureDoc(\"numPages\"),\n        pdfManager.ensureDoc(\"fingerprints\"),\n      ]);\n\n      // Get htmlForXfa after numPages to avoid to create HTML twice.\n      const htmlForXfa = isPureXfa\n        ? await pdfManager.ensureDoc(\"htmlForXfa\")\n        : null;\n\n      return { numPages, fingerprints, htmlForXfa };\n    }\n\n    async function getPdfManager({\n      data,\n      password,\n      disableAutoFetch,\n      rangeChunkSize,\n      docBaseUrl,\n      enableXfa,\n      evaluatorOptions,\n    }) {\n      const pdfManagerArgs = {\n        source: null,\n        disableAutoFetch,\n        docBaseUrl,\n        docId,\n        enableXfa,\n        evaluatorOptions,\n        handler,\n        length: 0,\n        password,\n        rangeChunkSize,\n      };\n\n      if (data) {\n        pdfManagerArgs.source = data;\n\n        return new LocalPdfManager(pdfManagerArgs);\n      }\n      const pdfStream = new PDFWorkerStream({ msgHandler: handler }),\n        fullReader = pdfStream.getFullReader();\n\n      const { promise, resolve, reject } = Promise.withResolvers();\n      let newPdfManager,\n        cachedChunks = [];\n      cancelXHRs = reason => pdfStream.cancelAllRequests(reason);\n\n      fullReader.headersReady\n        .then(() => {\n          if (!fullReader.isRangeSupported) {\n            return;\n          }\n          pdfManagerArgs.source = pdfStream;\n          pdfManagerArgs.length = fullReader.contentLength;\n          // We don't need auto-fetch when streaming is enabled.\n          pdfManagerArgs.disableAutoFetch ||= fullReader.isStreamingSupported;\n\n          newPdfManager = new NetworkPdfManager(pdfManagerArgs);\n          // There may be a chance that `newPdfManager` is not initialized for\n          // the first few iterations of the `readData` code. Be sure to send\n          // all cached chunks, if any, to chunked_stream via pdf_manager.\n          for (const chunk of cachedChunks) {\n            newPdfManager.sendProgressiveData(chunk);\n          }\n          cachedChunks = null;\n\n          resolve(newPdfManager);\n          cancelXHRs = null;\n        })\n        .catch(reason => {\n          reject(reason);\n          cancelXHRs = null;\n        });\n\n      async function readData() {\n        let loaded = 0;\n\n        while (true) {\n          const { value, done } = await fullReader.read();\n          ensureNotTerminated();\n\n          if (done) {\n            break;\n          }\n          if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n            assert(\n              value instanceof ArrayBuffer,\n              \"readData (getPdfManager) - expected an ArrayBuffer.\"\n            );\n          }\n          loaded += value.byteLength;\n\n          if (!fullReader.isStreamingSupported) {\n            handler.send(\"DocProgress\", {\n              loaded,\n              total: fullReader.contentLength,\n            });\n          }\n\n          if (newPdfManager) {\n            newPdfManager.sendProgressiveData(value);\n          } else {\n            cachedChunks.push(value);\n          }\n        }\n\n        if (!newPdfManager) {\n          pdfManagerArgs.source = arrayBuffersToBytes(cachedChunks);\n          cachedChunks = null;\n\n          newPdfManager = new LocalPdfManager(pdfManagerArgs);\n          resolve(newPdfManager);\n        }\n        cancelXHRs = null;\n      }\n      readData().catch(reason => {\n        reject(reason);\n        cancelXHRs = null;\n      });\n\n      return promise;\n    }\n\n    async function getPassword(ex) {\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n        assert(\n          ex instanceof PasswordException,\n          \"getPassword - must be a `PasswordException`.\"\n        );\n      }\n      const task = new WorkerTask(`PasswordException: response ${ex.code}`);\n      startWorkerTask(task);\n\n      try {\n        const res = await handler.sendWithPromise(\"PasswordRequest\", ex);\n        return res.password;\n      } finally {\n        // Ensure that any `catch` handler runs *before* removing the task.\n        Promise.resolve().then(() => {\n          finishWorkerTask(task);\n        });\n      }\n    }\n\n    function setupDoc(data) {\n      function onSuccess(doc) {\n        ensureNotTerminated();\n        handler.send(\"GetDoc\", { pdfInfo: doc });\n      }\n\n      function onFailure(ex) {\n        if (terminated) {\n          return;\n        }\n\n        if (ex instanceof PasswordException) {\n          getPassword(ex)\n            .then(password => {\n              pdfManager.updatePassword(password);\n              pdfManagerReady();\n            })\n            .catch(() => {\n              handler.send(\"DocException\", ex);\n            });\n        } else {\n          // Ensure that we always fallback to `UnknownErrorException`.\n          handler.send(\"DocException\", wrapReason(ex));\n        }\n      }\n\n      function pdfManagerReady() {\n        ensureNotTerminated();\n\n        loadDocument(false).then(onSuccess, function (reason) {\n          ensureNotTerminated();\n\n          // Try again with recoveryMode == true\n          if (!(reason instanceof XRefParseException)) {\n            onFailure(reason);\n            return;\n          }\n          pdfManager.requestLoadedStream().then(function () {\n            ensureNotTerminated();\n\n            loadDocument(true).then(onSuccess, onFailure);\n          }, onFailure);\n        });\n      }\n\n      ensureNotTerminated();\n\n      getPdfManager(data)\n        .then(function (newPdfManager) {\n          if (terminated) {\n            // We were in a process of setting up the manager, but it got\n            // terminated in the middle.\n            newPdfManager.terminate(\n              new AbortException(\"Worker was terminated.\")\n            );\n            throw new Error(\"Worker was terminated\");\n          }\n          pdfManager = newPdfManager;\n\n          pdfManager.requestLoadedStream(/* noFetch = */ true).then(\n            stream => {\n              handler.send(\"DataLoaded\", { length: stream.bytes.byteLength });\n            },\n            () => {\n              // Avoid errors if document loading was terminated.\n            }\n          );\n        })\n        .then(pdfManagerReady, onFailure);\n    }\n\n    handler.on(\"GetPage\", async function ({ pageIndex }) {\n      const page = await pdfManager.getPage(pageIndex);\n\n      const [rotate, ref, userUnit, view] = await Promise.all([\n        pdfManager.ensure(page, \"rotate\"),\n        pdfManager.ensure(page, \"ref\"),\n        pdfManager.ensure(page, \"userUnit\"),\n        pdfManager.ensure(page, \"view\"),\n      ]);\n      return {\n        rotate,\n        ref,\n        refStr: ref?.toString() ?? null,\n        userUnit,\n        view,\n      };\n    });\n\n    handler.on(\"GetPageIndex\", function ({ num, gen }) {\n      return pdfManager.ensureCatalog(\"getPageIndex\", [Ref.get(num, gen)]);\n    });\n\n    handler.on(\"GetDestinations\", function () {\n      return pdfManager.ensureCatalog(\"destinations\");\n    });\n\n    handler.on(\"GetDestination\", function ({ id }) {\n      return pdfManager.ensureCatalog(\"getDestination\", [id]);\n    });\n\n    handler.on(\"GetPageLabels\", function () {\n      return pdfManager.ensureCatalog(\"pageLabels\");\n    });\n\n    handler.on(\"GetPageLayout\", function () {\n      return pdfManager.ensureCatalog(\"pageLayout\");\n    });\n\n    handler.on(\"GetPageMode\", function () {\n      return pdfManager.ensureCatalog(\"pageMode\");\n    });\n\n    handler.on(\"GetViewerPreferences\", function () {\n      return pdfManager.ensureCatalog(\"viewerPreferences\");\n    });\n\n    handler.on(\"GetOpenAction\", function () {\n      return pdfManager.ensureCatalog(\"openAction\");\n    });\n\n    handler.on(\"GetAttachments\", function () {\n      return pdfManager.ensureCatalog(\"attachments\");\n    });\n\n    handler.on(\"GetAttachmentContent\", async function (id) {\n      let passwordEx;\n\n      // Loop to prompt again after an incorrect password.\n      while (true) {\n        const password = passwordEx ? await getPassword(passwordEx) : null;\n\n        try {\n          if (password) {\n            pdfManager.updatePassword(password);\n          }\n          return await pdfManager.ensureCatalog(\"attachmentContent\", [id]);\n        } catch (ex) {\n          if (ex instanceof PasswordException) {\n            passwordEx = ex;\n            continue;\n          }\n          throw ex;\n        }\n      }\n    });\n\n    handler.on(\"GetDocJSActions\", function () {\n      return pdfManager.ensureCatalog(\"jsActions\");\n    });\n\n    handler.on(\"GetPageJSActions\", async function ({ pageIndex }) {\n      const page = await pdfManager.getPage(pageIndex);\n      return pdfManager.ensure(page, \"jsActions\");\n    });\n\n    handler.on(\n      \"GetAnnotationsByType\",\n      async function ({ types, pageIndexesToSkip }) {\n        const [numPages, annotationGlobals] = await Promise.all([\n          pdfManager.ensureDoc(\"numPages\"),\n          pdfManager.ensureDoc(\"annotationGlobals\"),\n        ]);\n\n        if (!annotationGlobals) {\n          return null;\n        }\n        const pagePromises = [];\n        const annotationPromises = [];\n        let task = null;\n        try {\n          for (let i = 0, ii = numPages; i < ii; i++) {\n            if (pageIndexesToSkip?.has(i)) {\n              continue;\n            }\n            if (!task) {\n              task = new WorkerTask(\"GetAnnotationsByType\");\n              startWorkerTask(task);\n            }\n            pagePromises.push(\n              pdfManager\n                .getPage(i)\n                .then(page =>\n                  page.collectAnnotationsByType(\n                    handler,\n                    task,\n                    types,\n                    annotationPromises,\n                    annotationGlobals\n                  )\n                )\n            );\n          }\n          await Promise.all(pagePromises);\n          const annotations = await Promise.all(annotationPromises);\n          return annotations.filter(a => !!a);\n        } finally {\n          if (task) {\n            finishWorkerTask(task);\n          }\n        }\n      }\n    );\n\n    handler.on(\"GetOutline\", function () {\n      return pdfManager.ensureCatalog(\"documentOutline\");\n    });\n\n    handler.on(\"GetOptionalContentConfig\", function () {\n      return pdfManager.ensureCatalog(\"optionalContentConfig\");\n    });\n\n    handler.on(\"GetPermissions\", function () {\n      return pdfManager.ensureCatalog(\"permissions\");\n    });\n\n    handler.on(\"GetMetadata\", function () {\n      return Promise.all([\n        pdfManager.ensureDoc(\"documentInfo\"),\n        pdfManager.ensureCatalog(\"metadata\"),\n        pdfManager.ensureCatalog(\"hasStructTree\"),\n      ]);\n    });\n\n    handler.on(\"GetMarkInfo\", function () {\n      return pdfManager.ensureCatalog(\"markInfo\");\n    });\n\n    handler.on(\"GetData\", async function () {\n      const stream = await pdfManager.requestLoadedStream();\n      return stream.bytes;\n    });\n\n    handler.on(\"GetAnnotations\", async function ({ pageIndex, intent }) {\n      const page = await pdfManager.getPage(pageIndex);\n\n      const task = new WorkerTask(`GetAnnotations: page ${pageIndex}`);\n      startWorkerTask(task);\n\n      try {\n        return await page.getAnnotationsData(handler, task, intent);\n      } finally {\n        finishWorkerTask(task);\n      }\n    });\n\n    handler.on(\"GetFieldObjects\", async function () {\n      const fieldObjects = await pdfManager.ensureDoc(\"fieldObjects\");\n      return fieldObjects?.allFields || null;\n    });\n\n    handler.on(\"GetSignatures\", function () {\n      return pdfManager.ensureDoc(\"signatures\");\n    });\n\n    handler.on(\"GetSignatureData\", function (id) {\n      return pdfManager.ensureDoc(\"getSignatureData\", [id]);\n    });\n\n    handler.on(\"HasJSActions\", function () {\n      return pdfManager.ensureDoc(\"hasJSActions\");\n    });\n\n    handler.on(\"GetCalculationOrderIds\", function () {\n      return pdfManager.ensureDoc(\"calculationOrderIds\");\n    });\n\n    handler.on(\n      \"ExtractPages\",\n      async function ({ pageInfos, annotationStorage }) {\n        if (!pageInfos) {\n          warn(\"extractPages: nothing to extract.\");\n          return null;\n        }\n        if (!Array.isArray(pageInfos)) {\n          pageInfos = [pageInfos];\n        }\n        let newDocumentId = 0;\n        for (const pageInfo of pageInfos) {\n          if (pageInfo.image) {\n            continue;\n          }\n          if (pageInfo.document === null) {\n            pageInfo.document = pdfManager.pdfDocument;\n          } else if (ArrayBuffer.isView(pageInfo.document)) {\n            const manager = new LocalPdfManager({\n              source: pageInfo.document,\n              docId: `${docId}_extractPages_${newDocumentId++}`,\n              handler,\n              password: pageInfo.password ?? null,\n              evaluatorOptions: Object.assign({}, pdfManager.evaluatorOptions),\n            });\n            let recoveryMode = false;\n            let isValid = true;\n            while (true) {\n              try {\n                await manager.requestLoadedStream();\n                await manager.initDocument(recoveryMode);\n                break;\n              } catch (e) {\n                if (e instanceof XRefParseException) {\n                  if (recoveryMode === false) {\n                    recoveryMode = true;\n                    continue;\n                  } else {\n                    isValid = false;\n                    warn(\"extractPages: XRefParseException.\");\n                  }\n                } else if (e instanceof PasswordException) {\n                  try {\n                    const password = await getPassword(e);\n                    manager.updatePassword(password);\n                  } catch {\n                    isValid = false;\n                    warn(\"extractPages: invalid password.\");\n                  }\n                } else {\n                  isValid = false;\n                  warn(\"extractPages: invalid document.\");\n                }\n                if (!isValid) {\n                  break;\n                }\n              }\n            }\n            if (!isValid) {\n              pageInfo.document = null;\n            }\n            const isPureXfa = await manager.ensureDoc(\"isPureXfa\");\n            if (isPureXfa) {\n              pageInfo.document = null;\n              warn(\"extractPages does not support pure XFA documents.\");\n            } else {\n              pageInfo.document = manager.pdfDocument;\n            }\n          } else {\n            warn(\"extractPages: invalid document.\");\n          }\n        }\n        let task;\n        try {\n          const pdfEditor = new PDFEditor();\n          task = new WorkerTask(`ExtractPages: ${pageInfos.length} page(s)`);\n          startWorkerTask(task);\n\n          return await pdfEditor.extractPages(\n            pageInfos,\n            annotationStorage,\n            pdfManager.pdfDocument,\n            handler,\n            task\n          );\n        } catch (reason) {\n          warn(`extractPages: \"${reason}\".`);\n          return null;\n        } finally {\n          if (task) {\n            finishWorkerTask(task);\n          }\n        }\n      }\n    );\n\n    handler.on(\n      \"SaveDocument\",\n      async function ({ isPureXfa, numPages, annotationStorage, filename }) {\n        const globalPromises = [\n          pdfManager.requestLoadedStream(),\n          pdfManager.ensureCatalog(\"acroForm\"),\n          pdfManager.ensureCatalog(\"acroFormRef\"),\n          pdfManager.ensureDoc(\"startXRef\"),\n          pdfManager.ensureDoc(\"xref\"),\n          pdfManager.ensureCatalog(\"structTreeRoot\"),\n        ];\n        const changes = new RefSetCache();\n        const promises = [];\n\n        const newAnnotationsByPage = !isPureXfa\n          ? getNewAnnotationsMap(annotationStorage)\n          : null;\n        const [\n          stream,\n          acroForm,\n          acroFormRef,\n          startXRef,\n          xref,\n          _structTreeRoot,\n        ] = await Promise.all(globalPromises);\n        const catalogRef = xref.trailer.getRaw(\"Root\") || null;\n        let structTreeRoot;\n\n        if (newAnnotationsByPage) {\n          if (!_structTreeRoot) {\n            if (\n              await StructTreeRoot.canCreateStructureTree({\n                catalogRef,\n                pdfManager,\n                newAnnotationsByPage,\n              })\n            ) {\n              structTreeRoot = null;\n            }\n          } else if (\n            await _structTreeRoot.canUpdateStructTree({\n              pdfManager,\n              newAnnotationsByPage,\n            })\n          ) {\n            structTreeRoot = _structTreeRoot;\n          }\n\n          const imagePromises = AnnotationFactory.generateImages(\n            annotationStorage.values(),\n            xref,\n            pdfManager.evaluatorOptions.isOffscreenCanvasSupported\n          );\n          const newAnnotationPromises =\n            structTreeRoot === undefined ? promises : [];\n          for (const [pageIndex, annotations] of newAnnotationsByPage) {\n            newAnnotationPromises.push(\n              pdfManager.getPage(pageIndex).then(page => {\n                const task = new WorkerTask(`Save (editor): page ${pageIndex}`);\n                startWorkerTask(task);\n\n                return page\n                  .saveNewAnnotations(\n                    handler,\n                    task,\n                    annotations,\n                    imagePromises,\n                    changes\n                  )\n                  .finally(() => {\n                    finishWorkerTask(task);\n                  });\n              })\n            );\n          }\n          if (structTreeRoot === null) {\n            // No structTreeRoot exists, so we need to create one.\n            promises.push(\n              Promise.all(newAnnotationPromises).then(async () => {\n                await StructTreeRoot.createStructureTree({\n                  newAnnotationsByPage,\n                  xref,\n                  catalogRef,\n                  pdfManager,\n                  changes,\n                });\n              })\n            );\n          } else if (structTreeRoot) {\n            promises.push(\n              Promise.all(newAnnotationPromises).then(async () => {\n                await structTreeRoot.updateStructureTree({\n                  newAnnotationsByPage,\n                  pdfManager,\n                  changes,\n                });\n              })\n            );\n          }\n        }\n\n        if (isPureXfa) {\n          promises.push(\n            pdfManager.ensureDoc(\"serializeXfaData\", [annotationStorage])\n          );\n        } else {\n          for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {\n            promises.push(\n              pdfManager.getPage(pageIndex).then(function (page) {\n                const task = new WorkerTask(`Save: page ${pageIndex}`);\n                startWorkerTask(task);\n\n                return page\n                  .save(handler, task, annotationStorage, changes)\n                  .finally(() => {\n                    finishWorkerTask(task);\n                  });\n              })\n            );\n          }\n        }\n        const refs = await Promise.all(promises);\n\n        let xfaData = null;\n        if (isPureXfa) {\n          xfaData = refs[0];\n          if (!xfaData) {\n            return stream.bytes;\n          }\n        } else if (changes.size === 0) {\n          // No new refs so just return the initial bytes\n          return stream.bytes;\n        }\n\n        const needAppearances =\n          acroFormRef &&\n          acroForm instanceof Dict &&\n          changes.values().some(ref => ref.needAppearances);\n\n        const xfa = (acroForm instanceof Dict && acroForm.get(\"XFA\")) || null;\n        let xfaDatasetsRef = null;\n        let hasXfaDatasetsEntry = false;\n        if (Array.isArray(xfa)) {\n          for (let i = 0, ii = xfa.length; i < ii; i += 2) {\n            if (xfa[i] === \"datasets\") {\n              xfaDatasetsRef = xfa[i + 1];\n              hasXfaDatasetsEntry = true;\n            }\n          }\n          if (xfaDatasetsRef === null) {\n            xfaDatasetsRef = xref.getNewTemporaryRef();\n          }\n        } else if (xfa) {\n          // TODO: Support XFA streams.\n          warn(\"Unsupported XFA type.\");\n        }\n\n        let newXrefInfo = Object.create(null);\n        if (xref.trailer) {\n          // Get string info from Info in order to compute fileId.\n          const infoMap = new Map();\n          const xrefInfo = xref.trailer.get(\"Info\") || null;\n          if (xrefInfo instanceof Dict) {\n            for (const [key, value] of xrefInfo) {\n              if (typeof value === \"string\") {\n                infoMap.set(key, stringToPDFString(value));\n              }\n            }\n          }\n\n          newXrefInfo = {\n            rootRef: catalogRef,\n            encryptRef: xref.trailer.getRaw(\"Encrypt\") || null,\n            newRef: xref.getNewTemporaryRef(),\n            infoRef: xref.trailer.getRaw(\"Info\") || null,\n            infoMap,\n            fileIds: xref.trailer.get(\"ID\") || null,\n            startXRef,\n            filename,\n          };\n        }\n\n        return incrementalUpdate({\n          originalData: stream.bytes,\n          xrefInfo: newXrefInfo,\n          changes,\n          xref,\n          hasXfa: !!xfa,\n          xfaDatasetsRef,\n          hasXfaDatasetsEntry,\n          needAppearances,\n          acroFormRef,\n          acroForm,\n          xfaData,\n          // Use the same kind of XRef as the previous one.\n          useXrefStream: isDict(xref.topDict, \"XRef\"),\n        }).finally(() => {\n          xref.resetNewTemporaryRef();\n        });\n      }\n    );\n\n    handler.on(\n      \"GetOperatorList\",\n      function (\n        { pageId, pageIndex, intent, cacheKey, annotationStorage, modifiedIds },\n        sink\n      ) {\n        pdfManager.getPage(pageId).then(function (page) {\n          const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);\n          startWorkerTask(task);\n\n          // NOTE: Keep this condition in sync with the `info` helper function.\n          const start = verbosity >= VerbosityLevel.INFOS ? Date.now() : 0;\n\n          // Pre compile the pdf page and fetch the fonts/images.\n          page\n            .getOperatorList({\n              handler,\n              sink,\n              task,\n              intent,\n              cacheKey,\n              annotationStorage,\n              modifiedIds,\n              pageIndex,\n            })\n            .then(\n              opListInfo => {\n                if (start) {\n                  info(\n                    `${task.name}; time=${Date.now() - start}ms, len=${opListInfo.length}`\n                  );\n                }\n                sink.close();\n              },\n              reason => {\n                if (task.terminated) {\n                  return; // ignoring errors from the terminated thread\n                }\n                sink.error(reason);\n              }\n            )\n            .finally(() => {\n              finishWorkerTask(task);\n            });\n        });\n      }\n    );\n\n    handler.on(\n      \"GetTextContent\",\n      function (\n        { pageId, pageIndex, includeMarkedContent, disableNormalization },\n        sink\n      ) {\n        pdfManager.getPage(pageId).then(function (page) {\n          const task = new WorkerTask(\"GetTextContent: page \" + pageIndex);\n          startWorkerTask(task);\n\n          // NOTE: Keep this condition in sync with the `info` helper function.\n          const start = verbosity >= VerbosityLevel.INFOS ? Date.now() : 0;\n\n          page\n            .extractTextContent({\n              handler,\n              task,\n              sink,\n              includeMarkedContent,\n              disableNormalization,\n            })\n            .then(\n              () => {\n                if (start) {\n                  info(`${task.name}; time=${Date.now() - start}ms`);\n                }\n                sink.close();\n              },\n              reason => {\n                if (task.terminated) {\n                  return; // ignoring errors from the terminated thread\n                }\n                sink.error(reason);\n              }\n            )\n            .finally(() => {\n              finishWorkerTask(task);\n            });\n        });\n      }\n    );\n\n    handler.on(\"GetStructTree\", async function ({ pageIndex }) {\n      const page = await pdfManager.getPage(pageIndex);\n      return pdfManager.ensure(page, \"getStructTree\");\n    });\n\n    handler.on(\"FontFallback\", function ({ id }) {\n      return pdfManager.fontFallback(id, handler);\n    });\n\n    if (\n      typeof PDFJSDev === \"undefined\" ||\n      PDFJSDev.test(\"TESTING || INTERNAL_VIEWER\")\n    ) {\n      handler.on(\"GetRawData\", async function ({ ref, page }) {\n        let value = null;\n        if (page >= 1) {\n          value = (\n            await pdfManager.ensureCatalog(\"getPageDict\", [page - 1])\n          )[1];\n        } else if (ref) {\n          value =\n            typeof ref === \"string\"\n              ? Ref.fromString(ref)\n              : Ref.get(ref.num, ref.gen);\n        }\n        return pdfManager.ensureDoc(\"toJSObject\", [value]);\n      });\n    }\n\n    handler.on(\"Cleanup\", function () {\n      return pdfManager.cleanup(/* manuallyTriggered = */ true);\n    });\n\n    handler.on(\"Terminate\", async function () {\n      terminated = true;\n\n      const waitOn = [];\n      if (pdfManager) {\n        pdfManager.terminate(new AbortException(\"Worker was terminated.\"));\n\n        const cleanupPromise = pdfManager.cleanup();\n        waitOn.push(cleanupPromise);\n\n        pdfManager = null;\n      } else {\n        clearGlobalCaches();\n      }\n      cancelXHRs?.(new AbortException(\"Worker was terminated.\"));\n\n      for (const task of WorkerTasks) {\n        waitOn.push(task.finished);\n        task.terminate();\n      }\n\n      await Promise.all(waitOn);\n      // Notice that even if we destroying handler, resolved response promise\n      // must be sent back.\n      handler.destroy();\n      handler = null;\n    });\n\n    handler.on(\"Ready\", function () {\n      setupDoc(docParams);\n      docParams = null; // we don't need docParams anymore -- saving memory.\n    });\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n      handler.on(\"GetXFADatasets\", function () {\n        return pdfManager.ensureDoc(\"xfaDatasets\");\n      });\n      handler.on(\"GetStartXRefPos\", function () {\n        return pdfManager.ensureDoc(\"startXRef\");\n      });\n      handler.on(\"GetAnnotArray\", async function ({ pageIndex }) {\n        const page = await pdfManager.getPage(pageIndex);\n        return page.annotations.map(a => a.toString());\n      });\n      handler.on(\"GetWorkerCoverage\", function () {\n        return globalThis.__coverage__ ?? {};\n      });\n    }\n\n    return workerHandlerName;\n  }\n\n  static initializeFromPort(port) {\n    const handler = new MessageHandler(\"worker\", \"main\", port);\n    this.setup(handler, port);\n    handler.send(\"ready\", null);\n  }\n}\n\nexport { WorkerMessageHandler, WorkerTask };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WorkerMessageHandler } from \"./core/worker.js\";\n\nglobalThis.pdfjsWorker = {\n  WorkerMessageHandler,\n};\n\nexport { WorkerMessageHandler };\n"],"names":[],"sourceRoot":""}