{"version":3,"mappings":"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","names":[],"ignoreList":[0,1,2,3],"sources":["../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","../../node_modules/.pnpm/pdfjs-dist@6.2.108/node_modules/pdfjs-dist/build/pdf.mjs"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\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 * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/**\n * pdfjsVersion = 6.2.108\n * pdfjsBuild = 0365cbde0\n */\n\n;// ./src/shared/util.js\nconst isNodeJS = typeof process === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\nconst BBOX_INIT = [Infinity, Infinity, -Infinity, -Infinity];\nconst F32_BBOX_INIT = new Float32Array(BBOX_INIT);\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = (/* unused pure expression or super */ null && (LINE_DESCENT_FACTOR / LINE_FACTOR));\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\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};\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3\n};\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\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};\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};\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};\nconst MeshFigureType = (/* unused pure expression or super */ null && ({\n  TRIANGLES: 1,\n  LATTICE: 2,\n  PATCH: 3\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};\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\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};\nconst AnnotationReplyType = (/* unused pure expression or super */ null && ({\n  GROUP: \"Group\",\n  REPLY: \"R\"\n}));\nconst AnnotationRenditionOperation = (/* unused pure expression or super */ null && ({\n  PLAY_OR_RESUME: 0,\n  STOP: 1,\n  PAUSE: 2,\n  RESUME: 3,\n  PLAY: 4\n}));\nconst AnnotationFlag = (/* unused pure expression or super */ null && ({\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}));\nconst AnnotationFieldFlag = (/* unused pure expression or super */ null && ({\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}));\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nconst AnnotationActionEventType = (/* unused pure expression or super */ null && ({\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}));\nconst DocumentActionEventType = (/* unused pure expression or super */ null && ({\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\"\n}));\nconst PageActionEventType = (/* unused pure expression or super */ null && ({\n  O: \"PageOpen\",\n  C: \"PageClose\"\n}));\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nconst OPS = {\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  beginAnnotation: 80,\n  endAnnotation: 81,\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};\nconst DrawOPS = {\n  moveTo: 0,\n  lineTo: 1,\n  curveTo: 2,\n  quadraticCurveTo: 3,\n  closePath: 4\n};\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nlet verbosity = VerbosityLevel.WARNINGS;\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\nfunction getVerbosityLevel() {\n  return verbosity;\n}\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.info(`Info: ${msg}`);\n  }\n}\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.warn(`Warning: ${msg}`);\n  }\n}\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\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}\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  if (options && typeof url === \"string\") {\n    if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n      const dots = url.match(/\\./g);\n      if (dots?.length >= 2) {\n        url = `http://${url}`;\n      }\n    }\n    if (options.tryConvertEncoding) {\n      try {\n        url = stringToUTF8String(url);\n      } catch {}\n    }\n  }\n  const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\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  if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n    return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n  }\n  return \"\";\n}\nfunction stripPath(str) {\n  return str.substring(str.lastIndexOf(\"/\") + 1);\n}\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\nconst BaseException = function BaseExceptionClosure() {\n  function BaseException(message, name) {\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n  return BaseException;\n}();\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\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}\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\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}\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}\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    return shadow(this, \"isLittleEndian\", view32[0] === 1);\n  }\n  static get isOffscreenCanvasSupported() {\n    return shadow(this, \"isOffscreenCanvasSupported\", typeof OffscreenCanvas !== \"undefined\");\n  }\n  static get isImageDecoderSupported() {\n    return shadow(this, \"isImageDecoderSupported\", typeof ImageDecoder !== \"undefined\");\n  }\n  static get isFloat16ArraySupported() {\n    return shadow(this, \"isFloat16ArraySupported\", typeof Float16Array !== \"undefined\");\n  }\n  static get isSanitizerSupported() {\n    return shadow(this, \"isSanitizerSupported\", typeof Sanitizer !== \"undefined\");\n  }\n  static get platform() {\n    const {\n      platform,\n      userAgent\n    } = navigator;\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: userAgent.includes(\"Firefox\")\n    });\n  }\n  static get isCanvasFilterSupported() {\n    let ctx;\n    if (this.isOffscreenCanvasSupported) {\n      ctx = new OffscreenCanvas(1, 1).getContext(\"2d\");\n    } else if (typeof document !== \"undefined\") {\n      ctx = document.createElement(\"canvas\").getContext(\"2d\");\n    }\n    return shadow(this, \"isCanvasFilterSupported\", ctx?.filter !== undefined);\n  }\n  static get isAlphaColorInputSupported() {\n    if (typeof document === \"undefined\") {\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    return shadow(this, \"isAlphaColorInputSupported\", input.value !== \"#ff0000\");\n  }\n  static get isBackdropFilterSupported() {\n    return shadow(this, \"isBackdropFilterSupported\", typeof CSS !== \"undefined\" && CSS.supports(\"backdrop-filter\", \"blur(1px)\"));\n  }\n}\nclass Util {\n  static get hexNums() {\n    return shadow(this, \"hexNums\", Array.from(Array(256).keys(), n => n.toString(16).padStart(2, \"0\")));\n  }\n  static makeHexColor(r, g, b) {\n    return `#${this.hexNums[r]}${this.hexNums[g]}${this.hexNums[b]}`;\n  }\n  static transform(m1, m2) {\n    return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\n  }\n  static multiplyByDOMMatrix(m, md) {\n    return [m[0] * md.a + m[2] * md.b, m[1] * md.a + m[3] * md.b, m[0] * md.c + m[2] * md.d, m[1] * md.c + m[3] * md.d, m[0] * md.e + m[2] * md.f + m[4], m[1] * md.e + m[3] * md.f + m[5]];\n  }\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  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  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  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    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    if (m1 !== 0 || m2 !== 0) {\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    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  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n  }\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    const a = m0 ** 2 + m1 ** 2;\n    const b = m0 * m2 + m1 * m3;\n    const c = m2 ** 2 + m3 ** 2;\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  static normalizeRect(rect) {\n    const r = rect.slice(0);\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  static intersect(rect1, rect2) {\n    const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));\n    const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));\n    const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));\n    if (yLow > yHigh) {\n      return null;\n    }\n    return [xLow, yLow, xHigh, yHigh];\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  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  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  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(x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);\n      }\n      return;\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(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);\n    this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);\n  }\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    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);\n    this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);\n  }\n}\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\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}\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    NormalizeRegex = /([\\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) => p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2));\n}\nfunction getUuid() {\n  if (typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  crypto.getRandomValues(buf);\n  return bytesToString(buf);\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}\nconst makeArr = () => [];\nconst makeMap = () => new Map();\nconst makeObj = () => Object.create(null);\nconst makeSet = () => new Set();\nif (typeof Iterator.prototype.join !== \"function\") {\n  Iterator.prototype.join = function (separator) {\n    return [...this].join(separator);\n  };\n}\n\n;// ./src/shared/math_clamp.js\nfunction MathClamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\n\n;// ./src/display/page_viewport.js\n\nclass PageViewport {\n  constructor({\n    viewBox,\n    userUnit,\n    scale,\n    rotation,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  }) {\n    this.viewBox = viewBox;\n    this.userUnit = userUnit;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n    scale *= userUnit;\n    const centerX = (viewBox[2] + viewBox[0]) / 2;\n    const centerY = (viewBox[3] + viewBox[1]) / 2;\n    let rotateA, rotateB, rotateC, rotateD;\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n    }\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = (viewBox[3] - viewBox[1]) * scale;\n      height = (viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = (viewBox[2] - viewBox[0]) * scale;\n      height = (viewBox[3] - viewBox[1]) * scale;\n    }\n    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\n    this.width = width;\n    this.height = height;\n  }\n  get rawDims() {\n    const dims = this.viewBox;\n    return shadow(this, \"rawDims\", {\n      pageWidth: dims[2] - dims[0],\n      pageHeight: dims[3] - dims[1],\n      pageX: dims[0],\n      pageY: dims[1]\n    });\n  }\n  clone({\n    scale = this.scale,\n    rotation = this.rotation,\n    offsetX = this.offsetX,\n    offsetY = this.offsetY,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.viewBox.slice(),\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  convertToViewportPoint(x, y) {\n    const p = [x, y];\n    Util.applyTransform(p, this.transform);\n    return p;\n  }\n  convertToPdfPoint(x, y) {\n    const p = [x, y];\n    Util.applyInverseTransform(p, this.transform);\n    return p;\n  }\n}\n\n;// ./src/display/xfa_text.js\nclass XfaText {\n  static textContent(xfa) {\n    const items = [];\n    const output = {\n      items,\n      styles: Object.create(null)\n    };\n    function walk(node) {\n      if (!node) {\n        return;\n      }\n      let str = null;\n      const name = node.name;\n      if (name === \"#text\") {\n        str = node.value;\n      } else if (!XfaText.shouldBuildText(name)) {\n        return;\n      } else if (node?.attributes?.textContent) {\n        str = node.attributes.textContent;\n      } else if (node.value) {\n        str = node.value;\n      }\n      if (str !== null) {\n        items.push({\n          str\n        });\n      }\n      if (!node.children) {\n        return;\n      }\n      for (const child of node.children) {\n        walk(child);\n      }\n    }\n    walk(xfa);\n    return output;\n  }\n  static shouldBuildText(name) {\n    return !(name === \"textarea\" || name === \"input\" || name === \"option\" || name === \"select\");\n  }\n}\n\n;// ./src/display/xfa_layer.js\n\n\n\nconst disallowedRichTextStyleRegExp = /url\\(|image-set\\(/i;\nconst disallowedEventHandlerAttrRegExp = /^on/i;\nclass XfaLayer {\n  static get _allowedHtmlElements() {\n    return shadow(this, \"_allowedHtmlElements\", new Set([\"a\", \"b\", \"br\", \"button\", \"div\", \"i\", \"img\", \"input\", \"label\", \"li\", \"ol\", \"option\", \"p\", \"select\", \"span\", \"sub\", \"sup\", \"textarea\", \"ul\"]));\n  }\n  static get _allowedSvgElements() {\n    return shadow(this, \"_allowedSvgElements\", new Set([\"ellipse\", \"line\", \"path\", \"rect\", \"svg\"]));\n  }\n  static get _allowedRichTextElements() {\n    return shadow(this, \"_allowedRichTextElements\", new Set([\"a\", \"b\", \"br\", \"div\", \"i\", \"li\", \"ol\", \"p\", \"span\", \"sub\", \"sup\", \"ul\"]));\n  }\n  static get _allowedRichTextAttributes() {\n    return shadow(this, \"_allowedRichTextAttributes\", new Set([\"class\", \"dir\", \"style\"]));\n  }\n  static get _allowedRichTextStyles() {\n    return shadow(this, \"_allowedRichTextStyles\", new Set([\"color\", \"font\", \"fontFamily\", \"fontSize\", \"fontStretch\", \"fontStyle\", \"fontWeight\", \"kerningMode\", \"letterSpacing\", \"lineHeight\", \"margin\", \"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\", \"orphans\", \"paddingLeft\", \"paddingRight\", \"breakAfter\", \"breakBefore\", \"breakInside\", \"tabInterval\", \"tabStop\", \"textAlign\", \"textDecoration\", \"textIndent\", \"transform\", \"verticalAlign\", \"widows\"]));\n  }\n  static setupStorage(html, id, element, storage, intent) {\n    const storedData = storage.getValue(id, {\n      value: null\n    });\n    switch (element.name) {\n      case \"textarea\":\n        if (storedData.value !== null) {\n          html.textContent = storedData.value;\n        }\n        if (intent === \"print\") {\n          break;\n        }\n        html.addEventListener(\"input\", event => {\n          storage.setValue(id, {\n            value: event.target.value\n          });\n        });\n        break;\n      case \"input\":\n        if (element.attributes.type === \"radio\" || element.attributes.type === \"checkbox\") {\n          if (storedData.value === element.attributes.xfaOn) {\n            html.setAttribute(\"checked\", true);\n          } else if (storedData.value === element.attributes.xfaOff) {\n            html.removeAttribute(\"checked\");\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"change\", event => {\n            storage.setValue(id, {\n              value: event.target.checked ? event.target.getAttribute(\"xfaOn\") : event.target.getAttribute(\"xfaOff\")\n            });\n          });\n        } else {\n          if (storedData.value !== null) {\n            html.setAttribute(\"value\", storedData.value);\n          }\n          if (intent === \"print\") {\n            break;\n          }\n          html.addEventListener(\"input\", event => {\n            storage.setValue(id, {\n              value: event.target.value\n            });\n          });\n        }\n        break;\n      case \"select\":\n        if (storedData.value !== null) {\n          html.setAttribute(\"value\", storedData.value);\n          for (const option of element.children) {\n            if (option.attributes.value === storedData.value) {\n              option.attributes.selected = true;\n            } else if (Object.hasOwn(option.attributes, \"selected\")) {\n              delete option.attributes.selected;\n            }\n          }\n        }\n        html.addEventListener(\"input\", event => {\n          const options = event.target.options;\n          const value = options.selectedIndex === -1 ? \"\" : options[options.selectedIndex].value;\n          storage.setValue(id, {\n            value\n          });\n        });\n        break;\n    }\n  }\n  static setAttributes({\n    html,\n    element,\n    storage = null,\n    intent,\n    linkService\n  }) {\n    const {\n      attributes\n    } = element;\n    const isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n    if (attributes.type === \"radio\") {\n      attributes.name = `${attributes.name}-${intent}`;\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n      if (value === null || value === undefined) {\n        continue;\n      }\n      if (disallowedEventHandlerAttrRegExp.test(key)) {\n        continue;\n      }\n      if (intent === \"richText\" && !this._allowedRichTextAttributes.has(key)) {\n        continue;\n      }\n      switch (key) {\n        case \"class\":\n          if (value.length) {\n            html.setAttribute(key, value.join(\" \"));\n          }\n          break;\n        case \"dataId\":\n          break;\n        case \"id\":\n          html.setAttribute(\"data-element-id\", value);\n          break;\n        case \"style\":\n          if (intent === \"richText\") {\n            const allowedStyles = this._allowedRichTextStyles;\n            for (const [styleName, styleValue] of Object.entries(value)) {\n              if (allowedStyles.has(styleName) && !disallowedRichTextStyleRegExp.test(styleValue)) {\n                html.style[styleName] = styleValue;\n              }\n            }\n          } else {\n            Object.assign(html.style, value);\n          }\n          break;\n        case \"textContent\":\n          html.textContent = value;\n          break;\n        default:\n          if (!isHTMLAnchorElement || key !== \"href\" && key !== \"newWindow\") {\n            html.setAttribute(key, value);\n          }\n      }\n    }\n    if (isHTMLAnchorElement) {\n      linkService?.addLinkAttributes(html, attributes.href, attributes.newWindow);\n    }\n    if (storage && attributes.dataId) {\n      this.setupStorage(html, attributes.dataId, element, storage);\n    }\n  }\n  static #createElement(name, xmlns, intent) {\n    if (intent === \"richText\") {\n      return !xmlns && this._allowedRichTextElements.has(name) ? document.createElement(name) : null;\n    }\n    if (xmlns) {\n      return xmlns === SVG_NS && this._allowedSvgElements.has(name) ? document.createElementNS(SVG_NS, name) : null;\n    }\n    return this._allowedHtmlElements.has(name) ? document.createElement(name) : null;\n  }\n  static render(parameters) {\n    const storage = parameters.annotationStorage;\n    const linkService = parameters.linkService;\n    const root = parameters.xfaHtml;\n    const intent = parameters.intent || \"display\";\n    const rootHtml = this.#createElement(root.name, root.attributes?.xmlns, intent) ?? document.createElement(\"div\");\n    if (root.attributes) {\n      this.setAttributes({\n        html: rootHtml,\n        element: root,\n        intent,\n        linkService\n      });\n    }\n    const isNotForRichText = intent !== \"richText\";\n    const rootDiv = parameters.div;\n    rootDiv.append(rootHtml);\n    if (parameters.viewport) {\n      const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n      rootDiv.style.transform = transform;\n    }\n    if (isNotForRichText) {\n      rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n    }\n    const textDivs = [];\n    if (root.children.length === 0) {\n      if (root.value) {\n        const node = document.createTextNode(root.value);\n        rootHtml.append(node);\n        if (isNotForRichText && XfaText.shouldBuildText(root.name)) {\n          textDivs.push(node);\n        }\n      }\n      return {\n        textDivs\n      };\n    }\n    const stack = [[root, -1, rootHtml]];\n    while (stack.length > 0) {\n      const [parent, i, html] = stack.at(-1);\n      if (i + 1 === parent.children.length) {\n        stack.pop();\n        continue;\n      }\n      const child = parent.children[++stack.at(-1)[1]];\n      if (child === null) {\n        continue;\n      }\n      const {\n        name\n      } = child;\n      if (name === \"#text\") {\n        const node = document.createTextNode(child.value);\n        textDivs.push(node);\n        html.append(node);\n        continue;\n      }\n      const childHtml = this.#createElement(name, child.attributes?.xmlns, intent);\n      if (!childHtml) {\n        continue;\n      }\n      html.append(childHtml);\n      if (child.attributes) {\n        this.setAttributes({\n          html: childHtml,\n          element: child,\n          storage,\n          intent,\n          linkService\n        });\n      }\n      if (child.children?.length > 0) {\n        stack.push([child, -1, childHtml]);\n      } else if (child.value) {\n        const node = document.createTextNode(child.value);\n        if (isNotForRichText && XfaText.shouldBuildText(name)) {\n          textDivs.push(node);\n        }\n        childHtml.append(node);\n      }\n    }\n    for (const el of rootDiv.querySelectorAll(\".xfaNonInteractive input, .xfaNonInteractive textarea\")) {\n      el.setAttribute(\"readOnly\", true);\n    }\n    return {\n      textDivs\n    };\n  }\n  static update(parameters) {\n    const transform = `matrix(${parameters.viewport.transform.join(\",\")})`;\n    parameters.div.style.transform = transform;\n    parameters.div.hidden = false;\n  }\n  static getPageViewport(xfaPage, {\n    scale = 1,\n    rotation = 0\n  }) {\n    const {\n      width,\n      height\n    } = xfaPage.attributes.style;\n    return new PageViewport({\n      viewBox: [0, 0, parseInt(width, 10), parseInt(height, 10)],\n      userUnit: 1,\n      scale,\n      rotation\n    });\n  }\n}\n\n;// ./src/display/display_utils.js\n\n\n\n\nclass PixelsPerInch {\n  static CSS = 96.0;\n  static PDF = 72.0;\n  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\nasync function fetchData(url, type = \"text\") {\n  if (isValidFetchUrl(url, document.baseURI)) {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    switch (type) {\n      case \"blob\":\n        return response.blob();\n      case \"bytes\":\n        return response.bytes();\n      case \"json\":\n        return response.json();\n    }\n    return response.text();\n  }\n  return new Promise((resolve, reject) => {\n    const request = new XMLHttpRequest();\n    request.open(\"GET\", url, true);\n    request.responseType = type === \"bytes\" ? \"arraybuffer\" : type;\n    request.onreadystatechange = () => {\n      if (request.readyState !== XMLHttpRequest.DONE) {\n        return;\n      }\n      if (request.status === 200 || request.status === 0) {\n        switch (type) {\n          case \"bytes\":\n            resolve(new Uint8Array(request.response));\n            return;\n          case \"blob\":\n          case \"json\":\n            resolve(request.response);\n            return;\n        }\n        resolve(request.responseText);\n        return;\n      }\n      reject(new Error(request.statusText));\n    };\n    request.send(null);\n  });\n}\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\nfunction isDataScheme(url) {\n  const ii = url.length;\n  let i = 0;\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\nfunction getFilenameFromUrl(url) {\n  [url] = url.split(/[#?]/, 1);\n  return stripPath(url);\n}\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n  if (isDataScheme(url)) {\n    warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n  const getURL = urlString => {\n    try {\n      return new URL(urlString);\n    } catch {}\n    try {\n      return new URL(decodeURIComponent(urlString));\n    } catch {}\n    try {\n      return new URL(urlString, \"https://foo.bar\");\n    } catch {}\n    try {\n      return new URL(decodeURIComponent(urlString), \"https://foo.bar\");\n    } catch {}\n    return null;\n  };\n  const newURL = getURL(url);\n  if (!newURL) {\n    return defaultFilename;\n  }\n  const decode = name => {\n    try {\n      let decoded = decodeURIComponent(name);\n      if (decoded.includes(\"/\")) {\n        decoded = stripPath(decoded);\n        if (decoded.length === 4 && pdfRegex.test(decoded)) {\n          return name;\n        }\n      }\n      return decoded;\n    } catch {\n      return name;\n    }\n  };\n  const pdfRegex = /\\.pdf$/i;\n  const filename = stripPath(newURL.pathname);\n  if (pdfRegex.test(filename)) {\n    return decode(filename);\n  }\n  if (newURL.searchParams.size > 0) {\n    const getLast = iterator => [...iterator].findLast(v => pdfRegex.test(v));\n    const name = getLast(newURL.searchParams.values()) ?? getLast(newURL.searchParams.keys());\n    if (name) {\n      return decode(name);\n    }\n  }\n  if (newURL.hash) {\n    const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n    const hashFilename = reFilename.exec(newURL.hash);\n    if (hashFilename) {\n      return decode(hashFilename[0]);\n    }\n  }\n  return defaultFilename;\n}\nclass StatTimer {\n  #started = new Map();\n  times = [];\n  time(name) {\n    if (this.#started.has(name)) {\n      warn(`Timer is already running for ${name}`);\n    }\n    this.#started.set(name, Date.now());\n  }\n  timeEnd(name) {\n    if (!this.#started.has(name)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.#started.get(name),\n      end: Date.now()\n    });\n    this.#started.delete(name);\n  }\n  toString() {\n    const longest = Math.max(...this.times.map(t => t.name.length));\n    return this.times.map(t => `${t.name.padEnd(longest)} ${t.end - t.start}ms\\n`).join(\"\");\n  }\n}\nfunction isValidFetchUrl(url, baseUrl) {\n  const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return /https?:/.test(res?.protocol ?? \"\");\n}\nfunction noContextMenu(e) {\n  e.preventDefault();\n}\nfunction stopEvent(e) {\n  e.preventDefault();\n  e.stopPropagation();\n}\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\nclass PDFDateString {\n  static #regex;\n  static toDateObject(input) {\n    if (input instanceof Date) {\n      return input;\n    }\n    if (!input || typeof input !== \"string\") {\n      return null;\n    }\n    this.#regex ||= new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+\\\\-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\n    const matches = this.#regex.exec(input);\n    if (!matches) {\n      return null;\n    }\n    const year = parseInt(matches[1], 10);\n    let month = parseInt(matches[2], 10);\n    month = month >= 1 && month <= 12 ? month - 1 : 0;\n    let day = parseInt(matches[3], 10);\n    day = day >= 1 && day <= 31 ? day : 1;\n    let hour = parseInt(matches[4], 10);\n    hour = hour >= 0 && hour <= 23 ? hour : 0;\n    let minute = parseInt(matches[5], 10);\n    minute = minute >= 0 && minute <= 59 ? minute : 0;\n    let second = parseInt(matches[6], 10);\n    second = second >= 0 && second <= 59 ? second : 0;\n    const universalTimeRelation = matches[7] || \"Z\";\n    let offsetHour = parseInt(matches[8], 10);\n    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n    let offsetMinute = parseInt(matches[9], 10) || 0;\n    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n    if (universalTimeRelation === \"-\") {\n      hour += offsetHour;\n      minute += offsetMinute;\n    } else if (universalTimeRelation === \"+\") {\n      hour -= offsetHour;\n      minute -= offsetMinute;\n    }\n    return new Date(Date.UTC(year, month, day, hour, minute, second));\n  }\n}\nfunction getRGBA(color) {\n  if (color.startsWith(\"#\")) {\n    const hex = color.slice(1);\n    return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16), hex.length >= 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1];\n  }\n  if (color.startsWith(\"rgb(\")) {\n    const [r, g, b] = color.slice(4, -1).split(\",\").map(x => parseInt(x, 10));\n    return [r, g, b, 1];\n  }\n  if (color.startsWith(\"rgba(\")) {\n    const parts = color.slice(5, -1).split(\",\");\n    return [parseInt(parts[0], 10), parseInt(parts[1], 10), parseInt(parts[2], 10), parseFloat(parts[3])];\n  }\n  const m = color.match(/^color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)(?:\\s*\\/\\s*([\\d.]+|none))?\\)$/);\n  if (m) {\n    return [Math.round(parseFloat(m[1]) * 255), Math.round(parseFloat(m[2]) * 255), Math.round(parseFloat(m[3]) * 255), m[4] !== undefined && m[4] !== \"none\" ? parseFloat(m[4]) : 1];\n  }\n  return null;\n}\nfunction getRGB(color) {\n  const rgba = getRGBA(color);\n  if (!rgba) {\n    warn(`Not a valid color format: \"${color}\"`);\n    return [0, 0, 0];\n  }\n  return rgba.slice(0, 3);\n}\nfunction getColorValues(colors) {\n  const span = document.createElement(\"span\");\n  span.style.visibility = \"hidden\";\n  span.style.colorScheme = \"only light\";\n  document.body.append(span);\n  for (const name of colors.keys()) {\n    span.style.color = name;\n    const computedColor = window.getComputedStyle(span).color;\n    colors.set(name, getRGB(computedColor));\n  }\n  span.remove();\n}\nfunction getCurrentTransform(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform();\n  return [a, b, c, d, e, f];\n}\nfunction getCurrentTransformInverse(ctx) {\n  const {\n    a,\n    b,\n    c,\n    d,\n    e,\n    f\n  } = ctx.getTransform().invertSelf();\n  return [a, b, c, d, e, f];\n}\nfunction setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) {\n  if (viewport instanceof PageViewport) {\n    const {\n      pageWidth,\n      pageHeight\n    } = viewport.rawDims;\n    const {\n      style\n    } = div;\n    const widthStr = `round(down, var(--total-scale-factor) * ${pageWidth}px, var(--scale-round-x))`,\n      heightStr = `round(down, var(--total-scale-factor) * ${pageHeight}px, var(--scale-round-y))`;\n    if (!mustFlip || viewport.rotation % 180 === 0) {\n      style.width = widthStr;\n      style.height = heightStr;\n    } else {\n      style.width = heightStr;\n      style.height = widthStr;\n    }\n  }\n  if (mustRotate) {\n    div.setAttribute(\"data-main-rotation\", viewport.rotation);\n  }\n}\nclass OutputScale {\n  constructor() {\n    const {\n      pixelRatio\n    } = OutputScale;\n    this.sx = pixelRatio;\n    this.sy = pixelRatio;\n  }\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n  get symmetric() {\n    return this.sx === this.sy;\n  }\n  limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {\n    let maxAreaScale = Infinity,\n      maxWidthScale = Infinity,\n      maxHeightScale = Infinity;\n    maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);\n    if (maxPixels > 0) {\n      maxAreaScale = Math.sqrt(maxPixels / (width * height));\n    }\n    if (maxDim !== -1) {\n      maxWidthScale = maxDim / width;\n      maxHeightScale = maxDim / height;\n    }\n    const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n    if (this.sx > maxScale || this.sy > maxScale) {\n      this.sx = maxScale;\n      this.sy = maxScale;\n      return true;\n    }\n    return false;\n  }\n  static get pixelRatio() {\n    return globalThis.devicePixelRatio || 1;\n  }\n  static capPixels(maxPixels, capAreaFactor) {\n    if (capAreaFactor >= 0) {\n      const winPixels = Math.ceil(window.screen.availWidth * window.screen.availHeight * this.pixelRatio ** 2 * (1 + capAreaFactor / 100));\n      return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;\n    }\n    return maxPixels;\n  }\n}\nconst SupportedImageMimeTypes = [\"image/apng\", \"image/avif\", \"image/bmp\", \"image/gif\", \"image/jpeg\", \"image/png\", \"image/svg+xml\", \"image/webp\", \"image/x-icon\"];\nclass ColorScheme {\n  static get isDarkMode() {\n    return shadow(this, \"isDarkMode\", !!window?.matchMedia?.(\"(prefers-color-scheme: dark)\").matches);\n  }\n}\nclass CSSConstants {\n  static get commentForegroundColor() {\n    const element = document.createElement(\"span\");\n    element.classList.add(\"comment\", \"sidebar\");\n    const {\n      style\n    } = element;\n    style.width = style.height = \"0\";\n    style.display = \"none\";\n    style.color = \"var(--comment-fg-color)\";\n    document.body.append(element);\n    const {\n      color\n    } = window.getComputedStyle(element);\n    element.remove();\n    return shadow(this, \"commentForegroundColor\", getRGB(color));\n  }\n}\nfunction applyOpacity(color, opacity) {\n  opacity = MathClamp(opacity ?? 1, 0, 1);\n  const white = 255 * (1 - opacity);\n  return color.map(c => Math.round(c * opacity + white));\n}\nfunction RGBToHSL(rgb, output) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  if (max === min) {\n    output[0] = output[1] = 0;\n  } else {\n    const d = max - min;\n    output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min);\n    switch (max) {\n      case r:\n        output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60;\n        break;\n      case g:\n        output[0] = ((b - r) / d + 2) * 60;\n        break;\n      case b:\n        output[0] = ((r - g) / d + 4) * 60;\n        break;\n    }\n  }\n  output[2] = l;\n}\nfunction HSLToRGB(hsl, output) {\n  const h = hsl[0];\n  const s = hsl[1];\n  const l = hsl[2];\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n  const m = l - c / 2;\n  switch (Math.floor(h / 60)) {\n    case 0:\n      output[0] = c + m;\n      output[1] = x + m;\n      output[2] = m;\n      break;\n    case 1:\n      output[0] = x + m;\n      output[1] = c + m;\n      output[2] = m;\n      break;\n    case 2:\n      output[0] = m;\n      output[1] = c + m;\n      output[2] = x + m;\n      break;\n    case 3:\n      output[0] = m;\n      output[1] = x + m;\n      output[2] = c + m;\n      break;\n    case 4:\n      output[0] = x + m;\n      output[1] = m;\n      output[2] = c + m;\n      break;\n    case 5:\n    case 6:\n      output[0] = c + m;\n      output[1] = m;\n      output[2] = x + m;\n      break;\n  }\n}\nfunction computeLuminance(x) {\n  return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n}\nfunction contrastRatio(hsl1, hsl2, output) {\n  HSLToRGB(hsl1, output);\n  output.map(computeLuminance);\n  const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  HSLToRGB(hsl2, output);\n  output.map(computeLuminance);\n  const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  return lum1 > lum2 ? (lum1 + 0.05) / (lum2 + 0.05) : (lum2 + 0.05) / (lum1 + 0.05);\n}\nconst contrastCache = new Map();\nfunction findContrastColor(baseColor, fixedColor) {\n  const key = baseColor[0] + baseColor[1] * 0x100 + baseColor[2] * 0x10000 + fixedColor[0] * 0x1000000 + fixedColor[1] * 0x100000000 + fixedColor[2] * 0x10000000000;\n  let cachedValue = contrastCache.get(key);\n  if (cachedValue) {\n    return cachedValue;\n  }\n  const array = new Float32Array(9);\n  const output = array.subarray(0, 3);\n  const baseHSL = array.subarray(3, 6);\n  RGBToHSL(baseColor, baseHSL);\n  const fixedHSL = array.subarray(6, 9);\n  RGBToHSL(fixedColor, fixedHSL);\n  const isFixedColorDark = fixedHSL[2] < 0.5;\n  const minContrast = isFixedColorDark ? 12 : 4.5;\n  baseHSL[2] = isFixedColorDark ? Math.sqrt(baseHSL[2]) : 1 - Math.sqrt(1 - baseHSL[2]);\n  if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n    let start, end;\n    if (isFixedColorDark) {\n      start = baseHSL[2];\n      end = 1;\n    } else {\n      start = 0;\n      end = baseHSL[2];\n    }\n    const PRECISION = 0.005;\n    while (end - start > PRECISION) {\n      const mid = baseHSL[2] = (start + end) / 2;\n      if (isFixedColorDark === contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n        start = mid;\n      } else {\n        end = mid;\n      }\n    }\n    baseHSL[2] = isFixedColorDark ? end : start;\n  }\n  HSLToRGB(baseHSL, output);\n  cachedValue = Util.makeHexColor(Math.round(output[0] * 255), Math.round(output[1] * 255), Math.round(output[2] * 255));\n  contrastCache.set(key, cachedValue);\n  return cachedValue;\n}\nfunction renderRichText({\n  html,\n  dir,\n  className\n}, container) {\n  const fragment = document.createDocumentFragment();\n  if (typeof html === \"string\") {\n    const p = document.createElement(\"p\");\n    p.dir = dir || \"auto\";\n    const lines = html.split(/\\r\\n?|\\n/);\n    for (let i = 0, ii = lines.length; i < ii; ++i) {\n      const line = lines[i];\n      p.append(document.createTextNode(line));\n      if (i < ii - 1) {\n        p.append(document.createElement(\"br\"));\n      }\n    }\n    fragment.append(p);\n  } else {\n    XfaLayer.render({\n      xfaHtml: html,\n      div: fragment,\n      intent: \"richText\"\n    });\n  }\n  fragment.firstElementChild.classList.add(\"richText\", className);\n  container.append(fragment);\n}\nfunction makePathFromDrawOPS(data) {\n  const path = new Path2D();\n  if (!data) {\n    return path;\n  }\n  for (let i = 0, ii = data.length; i < ii;) {\n    switch (data[i++]) {\n      case DrawOPS.moveTo:\n        path.moveTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.lineTo:\n        path.lineTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.curveTo:\n        path.bezierCurveTo(data[i++], data[i++], data[i++], data[i++], data[i++], data[i++]);\n        break;\n      case DrawOPS.quadraticCurveTo:\n        path.quadraticCurveTo(data[i++], data[i++], data[i++], data[i++]);\n        break;\n      case DrawOPS.closePath:\n        path.closePath();\n        break;\n      default:\n        warn(`Unrecognized drawing path operator: ${data[i - 1]}`);\n        break;\n    }\n  }\n  return path;\n}\n\n;// ./src/display/editor/toolbar.js\n\nclass EditorToolbar {\n  #toolbar = null;\n  #colorPicker = null;\n  #editor;\n  #buttons = null;\n  #altText = null;\n  #comment = null;\n  #commentButtonDivider = null;\n  #signatureDescriptionButton = null;\n  static #l10nRemove = null;\n  constructor(editor) {\n    this.#editor = editor;\n    EditorToolbar.#l10nRemove ||= Object.freeze({\n      freetext: \"pdfjs-editor-remove-freetext-button\",\n      highlight: \"pdfjs-editor-remove-highlight-button\",\n      ink: \"pdfjs-editor-remove-ink-button\",\n      stamp: \"pdfjs-editor-remove-stamp-button\",\n      signature: \"pdfjs-editor-remove-signature-button\"\n    });\n  }\n  render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.classList.add(\"editToolbar\", \"hidden\");\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    const signal = this.#editor._uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown, {\n        signal\n      });\n    }\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    const position = this.#editor.toolbarPosition;\n    if (position) {\n      const {\n        style\n      } = editToolbar;\n      const x = this.#editor._uiManager.direction === \"ltr\" ? 1 - position[0] : position[0];\n      style.insetInlineEnd = `${100 * x}%`;\n      style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`;\n    }\n    return editToolbar;\n  }\n  get div() {\n    return this.#toolbar;\n  }\n  static #pointerDown(e) {\n    e.stopPropagation();\n  }\n  #focusIn(e) {\n    this.#editor._focusEventsAllowed = false;\n    stopEvent(e);\n  }\n  #focusOut(e) {\n    this.#editor._focusEventsAllowed = true;\n    stopEvent(e);\n  }\n  #addListenersToElement(element) {\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return false;\n    }\n    element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n      capture: true,\n      signal\n    });\n    element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n      capture: true,\n      signal\n    });\n    element.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    return true;\n  }\n  hide() {\n    this.#toolbar.classList.add(\"hidden\");\n    this.#colorPicker?.hideDropdown();\n  }\n  show() {\n    this.#toolbar.classList.remove(\"hidden\");\n    this.#altText?.shown();\n    this.#comment?.shown();\n  }\n  addDeleteButton() {\n    const {\n      editorType,\n      _uiManager\n    } = this.#editor;\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", \"deleteButton\");\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", EditorToolbar.#l10nRemove[editorType]);\n    if (this.#addListenersToElement(button)) {\n      button.addEventListener(\"click\", e => {\n        _uiManager.delete();\n      }, {\n        signal: _uiManager._signal\n      });\n    }\n    this.#buttons.append(button);\n  }\n  get #divider() {\n    const divider = document.createElement(\"div\");\n    divider.className = \"divider\";\n    return divider;\n  }\n  async addAltText(altText) {\n    const button = await altText.render();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n    this.#altText = altText;\n  }\n  addComment(comment, beforeElement = null) {\n    if (this.#comment) {\n      return;\n    }\n    const button = comment.renderForToolbar();\n    if (!button) {\n      return;\n    }\n    this.#addListenersToElement(button);\n    const divider = this.#commentButtonDivider = this.#divider;\n    if (!beforeElement) {\n      this.#buttons.append(button, divider);\n    } else {\n      this.#buttons.insertBefore(button, beforeElement);\n      this.#buttons.insertBefore(divider, beforeElement);\n    }\n    this.#comment = comment;\n    comment.toolbar = this;\n  }\n  addColorPicker(colorPicker) {\n    if (this.#colorPicker) {\n      return;\n    }\n    this.#colorPicker = colorPicker;\n    const button = colorPicker.renderButton();\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n  async addEditSignatureButton(signatureManager) {\n    const button = this.#signatureDescriptionButton = await signatureManager.renderEditButton(this.#editor);\n    this.#addListenersToElement(button);\n    this.#buttons.append(button, this.#divider);\n  }\n  removeButton(name) {\n    switch (name) {\n      case \"comment\":\n        this.#comment?.removeToolbarCommentButton();\n        this.#comment = null;\n        this.#commentButtonDivider?.remove();\n        this.#commentButtonDivider = null;\n        break;\n    }\n  }\n  async addButton(name, tool) {\n    switch (name) {\n      case \"colorPicker\":\n        if (tool) {\n          this.addColorPicker(tool);\n        }\n        break;\n      case \"altText\":\n        if (tool) {\n          await this.addAltText(tool);\n        }\n        break;\n      case \"editSignature\":\n        if (tool) {\n          await this.addEditSignatureButton(tool);\n        }\n        break;\n      case \"delete\":\n        this.addDeleteButton();\n        break;\n      case \"comment\":\n        if (tool) {\n          this.addComment(tool);\n        }\n        break;\n    }\n  }\n  async addButtonBefore(name, tool, beforeSelector) {\n    if (!tool && name === \"comment\") {\n      return;\n    }\n    const beforeElement = this.#buttons.querySelector(beforeSelector);\n    if (!beforeElement) {\n      return;\n    }\n    if (name === \"comment\") {\n      this.addComment(tool, beforeElement);\n    }\n  }\n  updateEditSignatureButton(description) {\n    if (this.#signatureDescriptionButton) {\n      this.#signatureDescriptionButton.title = description;\n    }\n  }\n  remove() {\n    this.#toolbar.remove();\n    this.#colorPicker?.destroy();\n    this.#colorPicker = null;\n  }\n}\nclass FloatingToolbar {\n  #buttons = null;\n  #toolbar = null;\n  #uiManager;\n  constructor(uiManager) {\n    this.#uiManager = uiManager;\n  }\n  #render() {\n    const editToolbar = this.#toolbar = document.createElement(\"div\");\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n    }\n    const buttons = this.#buttons = document.createElement(\"div\");\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n    if (this.#uiManager.hasCommentManager()) {\n      this.#makeButton(\"commentButton\", `pdfjs-comment-floating-button`, \"pdfjs-comment-floating-button-label\", () => {\n        this.#uiManager.commentSelection(\"floating_button\");\n      });\n    }\n    this.#makeButton(\"highlightButton\", `pdfjs-highlight-floating-button1`, \"pdfjs-highlight-floating-button-label\", () => {\n      this.#uiManager.highlightSelection(\"floating_button\");\n    });\n    return editToolbar;\n  }\n  #getLastPoint(boxes, isLTR) {\n    let lastY = 0;\n    let lastX = 0;\n    for (const box of boxes) {\n      const y = box.y + box.height;\n      if (y < lastY) {\n        continue;\n      }\n      const x = box.x + (isLTR ? box.width : 0);\n      if (y > lastY) {\n        lastX = x;\n        lastY = y;\n        continue;\n      }\n      if (isLTR) {\n        if (x > lastX) {\n          lastX = x;\n        }\n      } else if (x < lastX) {\n        lastX = x;\n      }\n    }\n    return [isLTR ? 1 - lastX : lastX, lastY];\n  }\n  show(parent, boxes, isLTR) {\n    const [x, y] = this.#getLastPoint(boxes, isLTR);\n    const {\n      style\n    } = this.#toolbar ||= this.#render();\n    parent.append(this.#toolbar);\n    style.insetInlineEnd = `${100 * x}%`;\n    style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n  }\n  hide() {\n    this.#toolbar.remove();\n  }\n  #makeButton(buttonClass, l10nId, labelL10nId, clickHandler) {\n    const button = document.createElement(\"button\");\n    button.classList.add(\"basic\", buttonClass);\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", l10nId);\n    const span = document.createElement(\"span\");\n    button.append(span);\n    span.className = \"visuallyHidden\";\n    span.setAttribute(\"data-l10n-id\", labelL10nId);\n    const signal = this.#uiManager._signal;\n    if (signal instanceof AbortSignal && !signal.aborted) {\n      button.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      button.addEventListener(\"click\", clickHandler, {\n        signal\n      });\n    }\n    this.#buttons.append(button);\n  }\n}\n\n;// ./src/shared/internal_evt.js\nconst INTERNAL_EVT = \"f63eb798-ea37-4556-98de-f8303ee5a694\";\nconst internalOpt = Object.freeze({\n  internal: INTERNAL_EVT\n});\n\n;// ./src/display/editor/tools.js\n\n\n\n\nfunction bindEvents(obj, element, names) {\n  for (const name of names) {\n    element.addEventListener(name, obj[name].bind(obj));\n  }\n}\nclass CurrentPointers {\n  static #pointerId = NaN;\n  static #pointerIds = null;\n  static #moveTimestamp = NaN;\n  static #pointerType = null;\n  static initializeAndAddPointerId(pointerId) {\n    (CurrentPointers.#pointerIds ||= new Set()).add(pointerId);\n  }\n  static setPointer(pointerType, pointerId) {\n    CurrentPointers.#pointerId ||= pointerId;\n    CurrentPointers.#pointerType ??= pointerType;\n  }\n  static setTimeStamp(timeStamp) {\n    CurrentPointers.#moveTimestamp = timeStamp;\n  }\n  static isSamePointerId(pointerId) {\n    return CurrentPointers.#pointerId === pointerId;\n  }\n  static isSamePointerIdOrRemove(pointerId) {\n    if (CurrentPointers.#pointerId === pointerId) {\n      return true;\n    }\n    CurrentPointers.#pointerIds?.delete(pointerId);\n    return false;\n  }\n  static isSamePointerType(pointerType) {\n    return CurrentPointers.#pointerType === pointerType;\n  }\n  static isInitializedAndDifferentPointerType(pointerType) {\n    return CurrentPointers.#pointerType !== null && !CurrentPointers.isSamePointerType(pointerType);\n  }\n  static isSameTimeStamp(timeStamp) {\n    return CurrentPointers.#moveTimestamp === timeStamp;\n  }\n  static isUsingMultiplePointers() {\n    return CurrentPointers.#pointerIds?.size >= 1;\n  }\n  static clearPointerType() {\n    CurrentPointers.#pointerType = null;\n  }\n  static clearPointerIds() {\n    CurrentPointers.#pointerId = NaN;\n    CurrentPointers.#pointerIds = null;\n  }\n  static clearTimeStamp() {\n    CurrentPointers.#moveTimestamp = NaN;\n  }\n}\nclass IdManager {\n  #id = 0;\n  get id() {\n    return `${AnnotationEditorPrefix}${this.#id++}`;\n  }\n}\nclass ImageManager {\n  #baseId = getUuid();\n  #id = 0;\n  #cache = null;\n  static get _isSVGFittingCanvas() {\n    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox=\"0 0 1 1\" width=\"1\" height=\"1\" xmlns=\"${SVG_NS}\"><rect width=\"1\" height=\"1\" style=\"fill:red;\"/></svg>`;\n    const canvas = new OffscreenCanvas(1, 3);\n    const ctx = canvas.getContext(\"2d\", {\n      willReadFrequently: true\n    });\n    const image = new Image();\n    image.src = svg;\n    const promise = image.decode().then(() => {\n      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n    });\n    return shadow(this, \"_isSVGFittingCanvas\", promise);\n  }\n  async #get(key, rawData) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(key);\n    if (data === null) {\n      return null;\n    }\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    try {\n      data ||= {\n        bitmap: null,\n        id: `image_${this.#baseId}_${this.#id++}`,\n        refCounter: 0,\n        isSvg: false\n      };\n      let image;\n      if (typeof rawData === \"string\") {\n        data.url = rawData;\n        image = await fetchData(rawData, \"blob\");\n      } else if (rawData instanceof File) {\n        image = data.file = rawData;\n      } else if (rawData instanceof Blob) {\n        image = rawData;\n      }\n      if (image.type === \"image/svg+xml\") {\n        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n        const fileReader = new FileReader();\n        const imageElement = new Image();\n        const imagePromise = new Promise((resolve, reject) => {\n          imageElement.onload = () => {\n            data.bitmap = imageElement;\n            data.isSvg = true;\n            resolve();\n          };\n          fileReader.onload = async () => {\n            const url = data.svgUrl = fileReader.result;\n            imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;\n          };\n          imageElement.onerror = fileReader.onerror = reject;\n        });\n        fileReader.readAsDataURL(image);\n        await imagePromise;\n      } else {\n        data.bitmap = await createImageBitmap(image);\n      }\n      data.refCounter = 1;\n    } catch (e) {\n      warn(e);\n      data = null;\n    }\n    this.#cache.set(key, data);\n    if (data) {\n      this.#cache.set(data.id, data);\n    }\n    return data;\n  }\n  async getFromFile(file) {\n    const {\n      lastModified,\n      name,\n      size,\n      type\n    } = file;\n    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n  }\n  async getFromUrl(url) {\n    return this.#get(url, url);\n  }\n  async getFromBlob(id, blobPromise) {\n    const blob = await blobPromise;\n    return this.#get(id, blob);\n  }\n  async getFromId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return null;\n    }\n    if (data.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    if (data.file) {\n      return this.getFromFile(data.file);\n    }\n    if (data.blobPromise) {\n      const {\n        blobPromise\n      } = data;\n      delete data.blobPromise;\n      return this.getFromBlob(data.id, blobPromise);\n    }\n    return this.getFromUrl(data.url);\n  }\n  getFromCanvas(id, canvas) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(id);\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n    const ctx = offscreen.getContext(\"2d\");\n    ctx.drawImage(canvas, 0, 0);\n    data = {\n      bitmap: offscreen.transferToImageBitmap(),\n      id: `image_${this.#baseId}_${this.#id++}`,\n      refCounter: 1,\n      isSvg: false\n    };\n    this.#cache.set(id, data);\n    this.#cache.set(data.id, data);\n    return data;\n  }\n  getSvgUrl(id) {\n    const data = this.#cache.get(id);\n    if (!data?.isSvg) {\n      return null;\n    }\n    return data.svgUrl;\n  }\n  deleteId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return;\n    }\n    data.refCounter -= 1;\n    if (data.refCounter !== 0) {\n      return;\n    }\n    const {\n      bitmap\n    } = data;\n    if (!data.url && !data.file) {\n      const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n      const ctx = canvas.getContext(\"bitmaprenderer\");\n      ctx.transferFromImageBitmap(bitmap);\n      data.blobPromise = canvas.convertToBlob();\n    }\n    bitmap.close?.();\n    data.bitmap = null;\n  }\n  isValidId(id) {\n    return id.startsWith(`image_${this.#baseId}_`);\n  }\n}\nclass CommandManager {\n  #commands = [];\n  #locked = false;\n  #maxSize;\n  #position = -1;\n  constructor(maxSize = 128) {\n    this.#maxSize = maxSize;\n  }\n  add({\n    cmd,\n    undo,\n    post,\n    mustExec,\n    type = NaN,\n    overwriteIfSameType = false,\n    keepUndo = false\n  }) {\n    if (mustExec) {\n      cmd();\n    }\n    if (this.#locked) {\n      return;\n    }\n    const save = {\n      cmd,\n      undo,\n      post,\n      type\n    };\n    if (this.#position === -1) {\n      if (this.#commands.length > 0) {\n        this.#commands.length = 0;\n      }\n      this.#position = 0;\n      this.#commands.push(save);\n      return;\n    }\n    if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n      if (keepUndo) {\n        save.undo = this.#commands[this.#position].undo;\n      }\n      this.#commands[this.#position] = save;\n      return;\n    }\n    const next = this.#position + 1;\n    if (next === this.#maxSize) {\n      this.#commands.splice(0, 1);\n    } else {\n      this.#position = next;\n      if (next < this.#commands.length) {\n        this.#commands.splice(next);\n      }\n    }\n    this.#commands.push(save);\n  }\n  undo() {\n    if (this.#position === -1) {\n      return;\n    }\n    this.#locked = true;\n    const {\n      undo,\n      post\n    } = this.#commands[this.#position];\n    undo();\n    post?.();\n    this.#locked = false;\n    this.#position -= 1;\n  }\n  redo() {\n    if (this.#position < this.#commands.length - 1) {\n      this.#position += 1;\n      this.#locked = true;\n      const {\n        cmd,\n        post\n      } = this.#commands[this.#position];\n      cmd();\n      post?.();\n      this.#locked = false;\n    }\n  }\n  hasSomethingToUndo() {\n    return this.#position !== -1;\n  }\n  hasSomethingToRedo() {\n    return this.#position < this.#commands.length - 1;\n  }\n  cleanType(type) {\n    if (this.#position === -1) {\n      return;\n    }\n    for (let i = this.#position; i >= 0; i--) {\n      if (this.#commands[i].type !== type) {\n        this.#commands.splice(i + 1, this.#position - i);\n        this.#position = i;\n        return;\n      }\n    }\n    this.#commands.length = 0;\n    this.#position = -1;\n  }\n  destroy() {\n    this.#commands = null;\n  }\n}\nclass KeyboardManager {\n  static ALT = 0x1;\n  static CTRL = 0x2;\n  static META = 0x4;\n  static SHIFT = 0x8;\n  constructor(callbacks) {\n    this.callbacks = new Map();\n    const {\n      isMac\n    } = FeatureTest.platform;\n    for (const [keys, callback, options = {}] of callbacks) {\n      const hasMacOverride = keys.some(k => k.startsWith(\"mac+\"));\n      for (const key of keys) {\n        let shortcut = key;\n        if (hasMacOverride) {\n          const isMacKey = key.startsWith(\"mac+\");\n          if (isMac !== isMacKey) {\n            continue;\n          }\n          if (isMacKey) {\n            shortcut = key.slice(4);\n          }\n        }\n        const [keyName, modifiers] = KeyboardManager.#parseShortcut(shortcut);\n        if (keyName === null) {\n          continue;\n        }\n        this.callbacks.getOrInsertComputed(keyName, makeArr).push({\n          callback,\n          options,\n          modifiers\n        });\n      }\n    }\n  }\n  static #parseShortcut(value) {\n    let keyPart = null;\n    let modifiers = 0;\n    for (let part of value.split(\"+\")) {\n      part = part.trim();\n      if (!part) {\n        continue;\n      }\n      const upper = part.toUpperCase();\n      const modifier = KeyboardManager[upper];\n      if (modifier) {\n        modifiers |= modifier;\n        continue;\n      }\n      if (keyPart !== null) {\n        warn(`KeyboardManager: multiple keys in shortcut \"${value}\"`);\n        break;\n      }\n      keyPart = upper === \"SPACE\" ? \" \" : part;\n    }\n    if (keyPart === null) {\n      warn(`KeyboardManager: no key found in shortcut \"${value}\"`);\n    }\n    return [keyPart, modifiers];\n  }\n  static #codeToKey(code) {\n    const match = /^(?:Key([A-Z])|(?:Digit|Numpad)(\\d))$/.exec(code);\n    if (!match) {\n      return null;\n    }\n    return match[1]?.toLowerCase() ?? match[2];\n  }\n  exec(self, event) {\n    let shortcuts = this.callbacks.get(event.key);\n    if (!shortcuts) {\n      if (/^[a-z]$/i.test(event.key)) {\n        return;\n      }\n      const fallback = KeyboardManager.#codeToKey(event.code);\n      if (fallback === null || fallback === event.key) {\n        return;\n      }\n      shortcuts = this.callbacks.get(fallback);\n      if (!shortcuts) {\n        return;\n      }\n    }\n    const eventModifiers = (event.altKey ? KeyboardManager.ALT : 0) | (event.ctrlKey ? KeyboardManager.CTRL : 0) | (event.metaKey ? KeyboardManager.META : 0) | (event.shiftKey ? KeyboardManager.SHIFT : 0);\n    const info = shortcuts.find(shortcut => shortcut.modifiers === eventModifiers);\n    if (!info) {\n      return;\n    }\n    const {\n      callback,\n      options: {\n        bubbles = false,\n        args = [],\n        checker = null\n      }\n    } = info;\n    if (checker && !checker(self, event)) {\n      return;\n    }\n    callback.bind(self, ...args, event)();\n    if (!bubbles) {\n      stopEvent(event);\n    }\n  }\n}\nclass ColorManager {\n  static _colorsMapping = new Map([[\"CanvasText\", [0, 0, 0]], [\"Canvas\", [255, 255, 255]]]);\n  get _colors() {\n    const colors = new Map([[\"CanvasText\", null], [\"Canvas\", null]]);\n    getColorValues(colors);\n    return shadow(this, \"_colors\", colors);\n  }\n  convert(color) {\n    const rgb = getRGB(color);\n    if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n      return rgb;\n    }\n    for (const [name, RGB] of this._colors) {\n      if (RGB.every((x, i) => x === rgb[i])) {\n        return ColorManager._colorsMapping.get(name);\n      }\n    }\n    return rgb;\n  }\n  getHexCode(name) {\n    const rgb = this._colors.get(name);\n    if (!rgb) {\n      return name;\n    }\n    return Util.makeHexColor(...rgb);\n  }\n}\nclass AnnotationEditorUIManager {\n  #abortController = new AbortController();\n  #activeEditor = null;\n  #allEditableAnnotations = null;\n  #allEditors = new Map();\n  #allLayers = new Map();\n  #savedAllLayers = null;\n  #altTextManager = null;\n  #annotationStorage = null;\n  #changedExistingAnnotations = null;\n  #commandManager = new CommandManager();\n  #commentManager = null;\n  #copyPasteAC = null;\n  #currentDrawingSession = null;\n  #currentPageIndex = 0;\n  #deletedAnnotationsElementIds = new Set();\n  #draggingEditors = null;\n  #editorTypes = null;\n  #editorsToRescale = new Set();\n  _editorUndoBar = null;\n  #enableHighlightFloatingButton = false;\n  #enableUpdatedAddImage = false;\n  #enableNewAltTextWhenAddingImage = false;\n  #filterFactory = null;\n  #focusMainContainerTimeoutId = null;\n  #focusManagerAC = null;\n  #highlightColors = null;\n  #highlightWhenShiftUp = false;\n  #floatingToolbar = null;\n  #idManager = new IdManager();\n  #isEnabled = false;\n  #isPointerDown = false;\n  #isWaiting = false;\n  #keyboardManagerAC = null;\n  #lastActiveElement = null;\n  #mainHighlightColorPicker = null;\n  #missingCanvases = null;\n  #mlManager = null;\n  #mode = AnnotationEditorType.NONE;\n  #selectedEditors = new Set();\n  #selectedTextNode = null;\n  #signatureManager = null;\n  #pageColors = null;\n  #showAllStates = null;\n  #pdfDocument = null;\n  #previousStates = {\n    isEditing: false,\n    isEmpty: true,\n    hasSomethingToUndo: false,\n    hasSomethingToRedo: false,\n    hasSelectedEditor: false,\n    hasSelectedText: false\n  };\n  #translation = [0, 0];\n  #translationTimeoutId = null;\n  #container = null;\n  #viewer = null;\n  #viewerAlert = null;\n  #updateModeCapability = null;\n  static TRANSLATE_SMALL = 1;\n  static TRANSLATE_BIG = 10;\n  static get _keyboardManager() {\n    const proto = AnnotationEditorUIManager.prototype;\n    const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== \"BUTTON\" && self.hasSomethingToControl();\n    const textInputChecker = (_self, {\n      target: el\n    }) => {\n      if (el instanceof HTMLInputElement) {\n        const {\n          type\n        } = el;\n        return type !== \"text\" && type !== \"number\";\n      }\n      return true;\n    };\n    const small = this.TRANSLATE_SMALL;\n    const big = this.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+a\", \"mac+meta+a\"], proto.selectAll, {\n      checker: textInputChecker\n    }], [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, {\n      checker: textInputChecker\n    }], [[\"ctrl+y\", \"ctrl+shift+z\", \"mac+meta+shift+z\", \"ctrl+shift+Z\", \"mac+meta+shift+Z\"], proto.redo, {\n      checker: textInputChecker\n    }], [[\"Backspace\", \"alt+Backspace\", \"ctrl+Backspace\", \"shift+Backspace\", \"mac+Backspace\", \"mac+alt+Backspace\", \"mac+ctrl+Backspace\", \"Delete\", \"ctrl+Delete\", \"shift+Delete\", \"mac+Delete\"], proto.delete, {\n      checker: textInputChecker\n    }], [[\"Enter\"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled\n    }], [[\"Space\"], proto.addNewEditorFromKeyboard, {\n      checker: (self, {\n        target: el\n      }) => !(el instanceof HTMLButtonElement) && self.#container.contains(document.activeElement)\n    }], [[\"Escape\"], proto.unselectAll], [[\"ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto.translateSelectedEditors, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\"], proto.translateSelectedEditors, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto.translateSelectedEditors, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto.translateSelectedEditors, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto.translateSelectedEditors, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  constructor(container, viewer, viewerAlert, altTextManager, commentManager, signatureManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager, editorUndoBar, supportsPinchToZoom) {\n    const signal = this._signal = this.#abortController.signal;\n    this.#container = container;\n    this.#viewer = viewer;\n    this.#viewerAlert = viewerAlert;\n    this.#altTextManager = altTextManager;\n    this.#commentManager = commentManager;\n    this.#signatureManager = signatureManager;\n    this.#pdfDocument = pdfDocument;\n    this._eventBus = eventBus;\n    const evtOpts = {\n      signal,\n      ...internalOpt\n    };\n    eventBus.on(\"editingaction\", this.onEditingAction.bind(this), evtOpts);\n    eventBus.on(\"pagechanging\", this.onPageChanging.bind(this), evtOpts);\n    eventBus.on(\"scalechanging\", this.onScaleChanging.bind(this), evtOpts);\n    eventBus.on(\"rotationchanging\", this.onRotationChanging.bind(this), evtOpts);\n    eventBus.on(\"setpreference\", this.onSetPreference.bind(this), evtOpts);\n    eventBus.on(\"switchannotationeditorparams\", evt => this.updateParams(evt.type, evt.value), evtOpts);\n    window.addEventListener(\"pointerdown\", () => {\n      this.#isPointerDown = true;\n    }, {\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"pointerup\", () => {\n      this.#isPointerDown = false;\n    }, {\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"beforeunload\", this.endCurrentEditing.bind(this), {\n      capture: true,\n      signal\n    });\n    this.#addSelectionListener();\n    this.#addDragAndDropListeners();\n    this.#addKeyboardManager();\n    this.#annotationStorage = pdfDocument.annotationStorage;\n    this.#filterFactory = pdfDocument.filterFactory;\n    this.#pageColors = pageColors;\n    this.#highlightColors = highlightColors || null;\n    this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n    this.#enableUpdatedAddImage = enableUpdatedAddImage;\n    this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage;\n    this.#mlManager = mlManager || null;\n    this.viewParameters = {\n      realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: 0\n    };\n    this.isShiftKeyDown = false;\n    this._editorUndoBar = editorUndoBar || null;\n    this._supportsPinchToZoom = supportsPinchToZoom !== false;\n    commentManager?.setSidebarUiManager(this);\n  }\n  destroy() {\n    this.#updateModeCapability?.resolve();\n    this.#updateModeCapability = null;\n    this.#abortController?.abort();\n    this.#abortController = null;\n    this._signal = null;\n    for (const layer of this.#allLayers.values()) {\n      layer.destroy();\n    }\n    this.#allLayers.clear();\n    this.#allEditors.clear();\n    this.#editorsToRescale.clear();\n    this.#missingCanvases?.clear();\n    this.#activeEditor = null;\n    this.#selectedEditors.clear();\n    this.#commandManager.destroy();\n    this.#altTextManager?.destroy();\n    this.#commentManager?.destroy();\n    this.#signatureManager?.destroy();\n    this.#floatingToolbar?.hide();\n    this.#floatingToolbar = null;\n    this.#mainHighlightColorPicker?.destroy();\n    this.#mainHighlightColorPicker = null;\n    this.#allEditableAnnotations = null;\n    if (this.#focusMainContainerTimeoutId) {\n      clearTimeout(this.#focusMainContainerTimeoutId);\n      this.#focusMainContainerTimeoutId = null;\n    }\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n      this.#translationTimeoutId = null;\n    }\n    this._editorUndoBar?.destroy();\n    this.#pdfDocument = null;\n  }\n  combinedSignal(ac) {\n    return AbortSignal.any([this._signal, ac.signal]);\n  }\n  get mlManager() {\n    return this.#mlManager;\n  }\n  get useNewAltTextFlow() {\n    return this.#enableUpdatedAddImage;\n  }\n  get useNewAltTextWhenAddingImage() {\n    return this.#enableNewAltTextWhenAddingImage;\n  }\n  get hcmFilter() {\n    return shadow(this, \"hcmFilter\", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : \"none\");\n  }\n  get direction() {\n    return shadow(this, \"direction\", getComputedStyle(this.#container).direction);\n  }\n  get _highlightColors() {\n    return shadow(this, \"_highlightColors\", this.#highlightColors ? new Map(this.#highlightColors.split(\",\").map(pair => {\n      pair = pair.split(\"=\").map(x => x.trim());\n      pair[1] = pair[1].toUpperCase();\n      return pair;\n    })) : null);\n  }\n  get highlightColors() {\n    const {\n      _highlightColors\n    } = this;\n    if (!_highlightColors) {\n      return shadow(this, \"highlightColors\", null);\n    }\n    const map = new Map();\n    const hasHCM = !!this.#pageColors;\n    for (const [name, color] of _highlightColors) {\n      const isNameForHCM = name.endsWith(\"_HCM\");\n      if (hasHCM && isNameForHCM) {\n        map.set(name.replace(\"_HCM\", \"\"), color);\n        continue;\n      }\n      if (!hasHCM && !isNameForHCM) {\n        map.set(name, color);\n      }\n    }\n    return shadow(this, \"highlightColors\", map);\n  }\n  get highlightColorNames() {\n    return shadow(this, \"highlightColorNames\", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null);\n  }\n  getNonHCMColor(color) {\n    if (!this._highlightColors) {\n      return color;\n    }\n    const colorName = this.highlightColorNames.get(color);\n    return this._highlightColors.get(colorName) || color;\n  }\n  getNonHCMColorName(color) {\n    return this.highlightColorNames.get(color) || color;\n  }\n  setCurrentDrawingSession(layer) {\n    if (layer) {\n      this.unselectAll();\n      this.disableUserSelect(true);\n    } else {\n      this.disableUserSelect(false);\n    }\n    this.#currentDrawingSession = layer;\n  }\n  setMainHighlightColorPicker(colorPicker) {\n    this.#mainHighlightColorPicker = colorPicker;\n  }\n  editAltText(editor, firstTime = false) {\n    this.#altTextManager?.editAltText(this, editor, firstTime);\n  }\n  hasCommentManager() {\n    return !!this.#commentManager;\n  }\n  editComment(editor, posX, posY, options) {\n    this.#commentManager?.showDialog(this, editor, posX, posY, options);\n  }\n  selectComment(pageIndex, uid) {\n    const layer = this.#allLayers.get(pageIndex);\n    const editor = layer?.getEditorByUID(uid);\n    editor?.toggleComment(true, true);\n  }\n  updateComment(editor) {\n    this.#commentManager?.updateComment(editor.getData());\n  }\n  updatePopupColor(editor) {\n    this.#commentManager?.updatePopupColor(editor);\n  }\n  removeComment(editor) {\n    this.#commentManager?.removeComments([editor.uid]);\n  }\n  deleteComment(editor, savedData) {\n    const undo = () => {\n      editor.comment = savedData;\n    };\n    const cmd = () => {\n      this._editorUndoBar?.show(undo, \"comment\");\n      this.toggleComment(null);\n      editor.comment = null;\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  toggleComment(editor, isSelected, visibility = undefined) {\n    this.#commentManager?.toggleCommentPopup(editor, isSelected, visibility);\n  }\n  makeCommentColor(color, opacity) {\n    return color && this.#commentManager?.makeCommentColor(color, opacity) || null;\n  }\n  getCommentDialogElement() {\n    return this.#commentManager?.dialogElement || null;\n  }\n  async waitForEditorsRendered(pageNumber) {\n    if (this.#allLayers.has(pageNumber - 1)) {\n      return;\n    }\n    const {\n      resolve,\n      promise\n    } = Promise.withResolvers();\n    const onEditorsRendered = evt => {\n      if (evt.pageNumber === pageNumber) {\n        this._eventBus.off(\"editorsrendered\", onEditorsRendered);\n        resolve();\n      }\n    };\n    this._eventBus.on(\"editorsrendered\", onEditorsRendered, internalOpt);\n    await promise;\n  }\n  getSignature(editor) {\n    this.#signatureManager?.getSignature({\n      uiManager: this,\n      editor\n    });\n  }\n  get signatureManager() {\n    return this.#signatureManager;\n  }\n  switchToMode(mode, callback) {\n    this._eventBus.on(\"annotationeditormodechanged\", callback, {\n      once: true,\n      signal: this._signal,\n      ...internalOpt\n    });\n    this._eventBus.dispatch(\"showannotationeditorui\", {\n      source: this,\n      mode\n    });\n  }\n  setPreference(name, value) {\n    this._eventBus.dispatch(\"setpreference\", {\n      source: this,\n      name,\n      value\n    });\n  }\n  onSetPreference({\n    name,\n    value\n  }) {\n    switch (name) {\n      case \"enableNewAltTextWhenAddingImage\":\n        this.#enableNewAltTextWhenAddingImage = value;\n        break;\n    }\n  }\n  onPageChanging({\n    pageNumber\n  }) {\n    this.#currentPageIndex = pageNumber - 1;\n  }\n  deletePage(id) {\n    for (const editor of this.getEditors(id)) {\n      editor.remove();\n    }\n    this.#allLayers.delete(id);\n    if (this.#currentPageIndex === id) {\n      this.#currentPageIndex = 0;\n    }\n  }\n  focusMainContainer() {\n    this.#container.focus();\n  }\n  findParent(x, y) {\n    for (const layer of this.#allLayers.values()) {\n      const {\n        x: layerX,\n        y: layerY,\n        width,\n        height\n      } = layer.div.getBoundingClientRect();\n      if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) {\n        return layer;\n      }\n    }\n    return null;\n  }\n  disableUserSelect(value = false) {\n    this.#viewer.classList.toggle(\"noUserSelect\", value);\n  }\n  addShouldRescale(editor) {\n    this.#editorsToRescale.add(editor);\n  }\n  removeShouldRescale(editor) {\n    this.#editorsToRescale.delete(editor);\n  }\n  onScaleChanging({\n    scale\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    for (const editor of this.#editorsToRescale) {\n      editor.onScaleChanging();\n    }\n    this.#currentDrawingSession?.onScaleChanging();\n  }\n  onRotationChanging({\n    pagesRotation\n  }) {\n    this.commitOrRemove();\n    this.viewParameters.rotation = pagesRotation;\n  }\n  #getAnchorElementForSelection({\n    anchorNode\n  }) {\n    return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode;\n  }\n  #getLayerForTextLayer(textLayer) {\n    const {\n      currentLayer\n    } = this;\n    if (currentLayer.hasTextLayer(textLayer)) {\n      return currentLayer;\n    }\n    for (const layer of this.#allLayers.values()) {\n      if (layer.hasTextLayer(textLayer)) {\n        return layer;\n      }\n    }\n    return null;\n  }\n  highlightSelection(methodOfCreation = \"\", comment = false) {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const {\n      anchorNode,\n      anchorOffset,\n      focusNode,\n      focusOffset\n    } = selection;\n    const text = selection.toString();\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    selection.empty();\n    const layer = this.#getLayerForTextLayer(textLayer);\n    const isNoneMode = this.#mode === AnnotationEditorType.NONE;\n    const callback = () => {\n      const editor = layer?.createAndAddNewEditor({\n        x: 0,\n        y: 0\n      }, false, {\n        methodOfCreation,\n        boxes,\n        anchorNode,\n        anchorOffset,\n        focusNode,\n        focusOffset,\n        text\n      });\n      if (isNoneMode) {\n        this.showAllEditors(\"highlight\", true, true);\n      }\n      if (comment) {\n        editor?.editComment();\n      }\n    };\n    if (isNoneMode) {\n      this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);\n      return;\n    }\n    callback();\n  }\n  commentSelection(methodOfCreation = \"\") {\n    this.highlightSelection(methodOfCreation, true);\n  }\n  endCurrentEditing() {\n    this.commitOrRemove();\n    this.currentLayer?.endDrawingSession(false);\n  }\n  #displayFloatingToolbar() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    this.#floatingToolbar ||= new FloatingToolbar(this);\n    this.#floatingToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n  }\n  getAndRemoveDataFromAnnotationStorage(annotationId) {\n    if (!this.#annotationStorage) {\n      return null;\n    }\n    const key = `${AnnotationEditorPrefix}${annotationId}`;\n    const storedValue = this.#annotationStorage.getRawValue(key);\n    if (storedValue) {\n      this.#annotationStorage.remove(key);\n    }\n    return storedValue;\n  }\n  addToAnnotationStorage(editor) {\n    if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) {\n      this.#annotationStorage.setValue(editor.id, editor);\n    }\n  }\n  a11yAlert(messageId, args = null) {\n    const viewerAlert = this.#viewerAlert;\n    if (!viewerAlert) {\n      return;\n    }\n    viewerAlert.setAttribute(\"data-l10n-id\", messageId);\n    if (args) {\n      viewerAlert.setAttribute(\"data-l10n-args\", JSON.stringify(args));\n    } else {\n      viewerAlert.removeAttribute(\"data-l10n-args\");\n    }\n  }\n  #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    const {\n      anchorNode\n    } = selection;\n    if (anchorNode === this.#selectedTextNode) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    if (!textLayer) {\n      if (this.#selectedTextNode) {\n        this.#floatingToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false\n        });\n      }\n      return;\n    }\n    this.#floatingToolbar?.hide();\n    this.#selectedTextNode = anchorNode;\n    this.#dispatchUpdateStates({\n      hasSelectedText: true\n    });\n    if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.showAllEditors(\"highlight\", true, true);\n    }\n    this.#highlightWhenShiftUp = this.isShiftKeyDown;\n    if (!this.isShiftKeyDown) {\n      const activeLayer = this.#mode === AnnotationEditorType.HIGHLIGHT ? this.#getLayerForTextLayer(textLayer) : null;\n      activeLayer?.toggleDrawing();\n      if (this.#isPointerDown) {\n        const ac = new AbortController();\n        const signal = this.combinedSignal(ac);\n        const pointerup = e => {\n          if (e.type === \"pointerup\" && e.button !== 0) {\n            return;\n          }\n          ac.abort();\n          activeLayer?.toggleDrawing(true);\n          if (e.type === \"pointerup\") {\n            this.#onSelectEnd(\"main_toolbar\");\n          }\n        };\n        window.addEventListener(\"pointerup\", pointerup, {\n          signal\n        });\n        window.addEventListener(\"blur\", pointerup, {\n          signal\n        });\n      } else {\n        activeLayer?.toggleDrawing(true);\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n  #onSelectEnd(methodOfCreation = \"\") {\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.highlightSelection(methodOfCreation);\n    } else if (this.#enableHighlightFloatingButton) {\n      this.#displayFloatingToolbar();\n    }\n  }\n  #addSelectionListener() {\n    document.addEventListener(\"selectionchange\", this.#selectionChange.bind(this), {\n      signal: this._signal\n    });\n  }\n  #addFocusManager() {\n    if (this.#focusManagerAC) {\n      return;\n    }\n    this.#focusManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#focusManagerAC);\n    window.addEventListener(\"focus\", this.focus.bind(this), {\n      signal\n    });\n    window.addEventListener(\"blur\", this.blur.bind(this), {\n      signal\n    });\n  }\n  #removeFocusManager() {\n    this.#focusManagerAC?.abort();\n    this.#focusManagerAC = null;\n  }\n  blur() {\n    this.isShiftKeyDown = false;\n    if (this.#highlightWhenShiftUp) {\n      this.#highlightWhenShiftUp = false;\n      this.#onSelectEnd(\"main_toolbar\");\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    for (const editor of this.#selectedEditors) {\n      if (editor.div.contains(activeElement)) {\n        this.#lastActiveElement = [editor, activeElement];\n        editor._focusEventsAllowed = false;\n        break;\n      }\n    }\n  }\n  focus() {\n    if (!this.#lastActiveElement) {\n      return;\n    }\n    const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n    this.#lastActiveElement = null;\n    lastActiveElement.addEventListener(\"focusin\", () => {\n      lastEditor._focusEventsAllowed = true;\n    }, {\n      once: true,\n      signal: this._signal\n    });\n    lastActiveElement.focus();\n  }\n  #addKeyboardManager() {\n    if (this.#keyboardManagerAC) {\n      return;\n    }\n    this.#keyboardManagerAC = new AbortController();\n    const signal = this.combinedSignal(this.#keyboardManagerAC);\n    window.addEventListener(\"keydown\", this.keydown.bind(this), {\n      signal\n    });\n    window.addEventListener(\"keyup\", this.keyup.bind(this), {\n      signal\n    });\n  }\n  #removeKeyboardManager() {\n    this.#keyboardManagerAC?.abort();\n    this.#keyboardManagerAC = null;\n  }\n  #addCopyPasteListeners() {\n    if (this.#copyPasteAC) {\n      return;\n    }\n    this.#copyPasteAC = new AbortController();\n    const signal = this.combinedSignal(this.#copyPasteAC);\n    document.addEventListener(\"copy\", this.copy.bind(this), {\n      signal\n    });\n    document.addEventListener(\"cut\", this.cut.bind(this), {\n      signal\n    });\n    document.addEventListener(\"paste\", this.paste.bind(this), {\n      signal\n    });\n  }\n  #removeCopyPasteListeners() {\n    this.#copyPasteAC?.abort();\n    this.#copyPasteAC = null;\n  }\n  #addDragAndDropListeners() {\n    const signal = this._signal;\n    document.addEventListener(\"dragover\", this.dragOver.bind(this), {\n      signal\n    });\n    document.addEventListener(\"drop\", this.drop.bind(this), {\n      signal\n    });\n  }\n  addEditListeners() {\n    this.#addKeyboardManager();\n    this.setEditingState(true);\n  }\n  removeEditListeners() {\n    this.#removeKeyboardManager();\n    this.setEditingState(false);\n  }\n  dragOver(event) {\n    for (const {\n      type\n    } of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(type)) {\n          event.dataTransfer.dropEffect = \"copy\";\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n  drop(event) {\n    for (const item of event.dataTransfer.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          event.preventDefault();\n          return;\n        }\n      }\n    }\n  }\n  copy(event) {\n    event.preventDefault();\n    this.#activeEditor?.commitOrRemove();\n    if (!this.hasSelection) {\n      return;\n    }\n    const editors = [];\n    for (const editor of this.#selectedEditors) {\n      const serialized = editor.serialize(true);\n      if (serialized) {\n        editors.push(serialized);\n      }\n    }\n    if (editors.length === 0) {\n      return;\n    }\n    event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n  }\n  cut(event) {\n    this.copy(event);\n    this.delete();\n  }\n  async paste(event) {\n    event.preventDefault();\n    const {\n      clipboardData\n    } = event;\n    for (const item of clipboardData.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          return;\n        }\n      }\n    }\n    let data = clipboardData.getData(\"application/pdfjs\");\n    if (!data) {\n      return;\n    }\n    try {\n      data = JSON.parse(data);\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n      return;\n    }\n    if (!Array.isArray(data)) {\n      return;\n    }\n    this.unselectAll();\n    const layer = this.currentLayer;\n    try {\n      const newEditors = [];\n      for (const editor of data) {\n        const deserializedEditor = await layer.deserialize(editor);\n        if (!deserializedEditor) {\n          return;\n        }\n        newEditors.push(deserializedEditor);\n      }\n      const cmd = () => {\n        for (const editor of newEditors) {\n          this.#addEditorToLayer(editor);\n        }\n        this.#selectEditors(newEditors);\n      };\n      const undo = () => {\n        for (const editor of newEditors) {\n          editor.remove();\n        }\n      };\n      this.addCommands({\n        cmd,\n        undo,\n        mustExec: true\n      });\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n    }\n  }\n  keydown(event) {\n    if (!this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = true;\n    }\n    if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) {\n      AnnotationEditorUIManager._keyboardManager.exec(this, event);\n    }\n  }\n  keyup(event) {\n    if (this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = false;\n      if (this.#highlightWhenShiftUp) {\n        this.#highlightWhenShiftUp = false;\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n  onEditingAction({\n    name\n  }) {\n    switch (name) {\n      case \"undo\":\n      case \"redo\":\n      case \"delete\":\n      case \"selectAll\":\n        this[name]();\n        break;\n      case \"highlightSelection\":\n        this.highlightSelection(\"context_menu\");\n        break;\n      case \"commentSelection\":\n        this.commentSelection(\"context_menu\");\n        break;\n    }\n  }\n  updatePageIndex(oldPageIndex, newPageIndex) {\n    for (const editor of this.getEditors(oldPageIndex)) {\n      editor.pageIndex = newPageIndex;\n    }\n    const layer = this.#savedAllLayers.get(oldPageIndex);\n    if (layer) {\n      layer.pageIndex = newPageIndex;\n      this.#allLayers.set(newPageIndex, layer);\n      if (this.#isEnabled) {\n        layer.enable();\n      } else {\n        layer.disable();\n      }\n    }\n  }\n  startUpdatePages() {\n    this.#savedAllLayers = new Map(this.#allLayers);\n    this.#allLayers.clear();\n  }\n  endUpdatePages() {\n    this.#savedAllLayers = null;\n  }\n  clonePage(pageIndex, newPageIndex) {\n    for (const editor of this.getEditors(pageIndex)) {\n      const serialized = editor.serialize(editor.mode !== AnnotationEditorType.HIGHLIGHT);\n      if (!serialized) {\n        continue;\n      }\n      serialized.pageIndex = newPageIndex;\n      serialized.id = this.getId();\n      serialized.isClone = true;\n      delete serialized.popupRef;\n      this.#annotationStorage.setValue(serialized.id, serialized);\n    }\n  }\n  findClonesForPage(layer) {\n    const promises = [];\n    const {\n      pageIndex\n    } = layer;\n    for (const [id, editor] of this.#annotationStorage) {\n      if (editor.pageIndex === pageIndex && editor.isClone) {\n        this.#annotationStorage.remove(id);\n        promises.push(layer.deserialize(editor).then(deserializedEditor => {\n          if (deserializedEditor) {\n            deserializedEditor.isClone = true;\n            layer.addOrRebuild(deserializedEditor);\n          }\n        }));\n      }\n    }\n    return Promise.all(promises);\n  }\n  #dispatchUpdateStates(details) {\n    const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value);\n    if (hasChanged) {\n      this._eventBus.dispatch(\"editingstateschanged\", {\n        source: this,\n        details: Object.assign(this.#previousStates, details)\n      });\n      if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) {\n        this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]);\n      }\n    }\n  }\n  #dispatchUpdateUI(details) {\n    this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n      source: this,\n      details\n    });\n  }\n  setEditingState(isEditing) {\n    if (isEditing) {\n      this.#addFocusManager();\n      this.#addCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: this.#mode !== AnnotationEditorType.NONE,\n        isEmpty: this.#isEmpty(),\n        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n        hasSelectedEditor: false\n      });\n    } else {\n      this.#removeFocusManager();\n      this.#removeCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: false\n      });\n      this.disableUserSelect(false);\n    }\n  }\n  registerEditorTypes(types) {\n    if (this.#editorTypes) {\n      return;\n    }\n    this.#editorTypes = types;\n    for (const editorType of this.#editorTypes) {\n      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n    }\n  }\n  getId() {\n    return this.#idManager.id;\n  }\n  get currentLayer() {\n    return this.#allLayers.get(this.#currentPageIndex);\n  }\n  getLayer(pageIndex) {\n    return this.#allLayers.get(pageIndex);\n  }\n  get currentPageIndex() {\n    return this.#currentPageIndex;\n  }\n  addLayer(layer) {\n    this.#allLayers.set(layer.pageIndex, layer);\n    if (this.#isEnabled) {\n      layer.enable();\n    } else {\n      layer.disable();\n    }\n  }\n  removeLayer(layer) {\n    this.#allLayers.delete(layer.pageIndex);\n  }\n  async updateMode(mode, editId = null, isFromUser = false, isFromKeyboard = false, mustEnterInEditMode = false, editComment = false) {\n    if (this.#mode === mode) {\n      return;\n    }\n    if (this.#updateModeCapability) {\n      await this.#updateModeCapability.promise;\n      if (!this.#updateModeCapability) {\n        return;\n      }\n    }\n    this.#updateModeCapability = Promise.withResolvers();\n    this.#currentDrawingSession?.commitOrRemove();\n    if (this.#mode === AnnotationEditorType.POPUP) {\n      this.#commentManager?.hideSidebar();\n    }\n    this.#commentManager?.destroyPopup();\n    this.#mode = mode;\n    if (mode === AnnotationEditorType.NONE) {\n      this.setEditingState(false);\n      this.#disableAll();\n      for (const editor of this.#allEditors.values()) {\n        editor.hideStandaloneCommentButton();\n      }\n      this._editorUndoBar?.hide();\n      this.toggleComment(null);\n      this.#updateModeCapability.resolve();\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      editor.addStandaloneCommentButton();\n    }\n    if (mode === AnnotationEditorType.SIGNATURE) {\n      await this.#signatureManager?.loadSignatures();\n    }\n    if (isFromUser) {\n      CurrentPointers.clearPointerType();\n    }\n    this.setEditingState(true);\n    await this.#enableAll();\n    this.unselectAll();\n    for (const layer of this.#allLayers.values()) {\n      layer.updateMode(mode);\n    }\n    if (mode === AnnotationEditorType.POPUP) {\n      this.#allEditableAnnotations ||= await this.#pdfDocument.getAnnotationsByType(new Set(this.#editorTypes.map(editorClass => editorClass._editorType)));\n      const elementIds = new Set();\n      const allComments = [];\n      for (const editor of this.#allEditors.values()) {\n        const {\n          annotationElementId,\n          hasComment,\n          deleted\n        } = editor;\n        if (annotationElementId) {\n          elementIds.add(annotationElementId);\n        }\n        if (hasComment && !deleted) {\n          allComments.push(editor.getData());\n        }\n      }\n      for (const annotation of this.#allEditableAnnotations) {\n        const {\n          id,\n          popupRef,\n          contentsObj\n        } = annotation;\n        if (popupRef && contentsObj?.str && !elementIds.has(id) && !this.#deletedAnnotationsElementIds.has(id)) {\n          allComments.push(annotation);\n        }\n      }\n      this.#commentManager?.showSidebar(allComments);\n    }\n    if (!editId) {\n      if (isFromKeyboard) {\n        this.addNewEditorFromKeyboard();\n      }\n      this.#updateModeCapability.resolve();\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      if (editor.uid === editId) {\n        this.setSelected(editor);\n        if (editComment) {\n          editor.editComment();\n        } else if (mustEnterInEditMode) {\n          editor.enterInEditMode();\n        } else {\n          editor.focus();\n        }\n      } else {\n        editor.unselect();\n      }\n    }\n    this.#updateModeCapability.resolve();\n  }\n  addNewEditorFromKeyboard() {\n    if (this.currentLayer.canCreateNewEmptyEditor()) {\n      this.currentLayer.addNewEditor();\n    }\n  }\n  updateToolbar(options) {\n    if (options.mode === this.#mode) {\n      return;\n    }\n    this._eventBus.dispatch(\"switchannotationeditormode\", {\n      source: this,\n      ...options\n    });\n  }\n  updateParams(type, value) {\n    if (!this.#editorTypes) {\n      return;\n    }\n    switch (type) {\n      case AnnotationEditorParamsType.CREATE:\n        this.currentLayer.addNewEditor(value);\n        return;\n      case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n        this._eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"editing\",\n            data: {\n              type: \"highlight\",\n              action: \"toggle_visibility\"\n            }\n          }\n        });\n        (this.#showAllStates ||= new Map()).set(type, value);\n        this.showAllEditors(\"highlight\", value);\n        break;\n    }\n    if (this.hasSelection) {\n      for (const editor of this.#selectedEditors) {\n        editor.updateParams(type, value);\n      }\n    } else {\n      for (const editorType of this.#editorTypes) {\n        editorType.updateDefaultParams(type, value);\n      }\n    }\n  }\n  showAllEditors(type, visible, updateButton = false) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.editorType === type) {\n        editor.show(visible);\n      }\n    }\n    const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true;\n    if (state !== visible) {\n      this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]);\n    }\n  }\n  enableWaiting(mustWait = false) {\n    if (this.#isWaiting === mustWait) {\n      return;\n    }\n    this.#isWaiting = mustWait;\n    for (const layer of this.#allLayers.values()) {\n      if (mustWait) {\n        layer.disableClick();\n      } else {\n        layer.enableClick();\n      }\n      layer.div.classList.toggle(\"waiting\", mustWait);\n    }\n  }\n  async #enableAll() {\n    if (!this.#isEnabled) {\n      this.#isEnabled = true;\n      const promises = [];\n      for (const layer of this.#allLayers.values()) {\n        promises.push(layer.enable());\n      }\n      await Promise.all(promises);\n      for (const editor of this.#allEditors.values()) {\n        editor.enable();\n      }\n    }\n  }\n  #disableAll() {\n    this.unselectAll();\n    if (this.#isEnabled) {\n      this.#isEnabled = false;\n      for (const layer of this.#allLayers.values()) {\n        layer.disable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.disable();\n      }\n    }\n  }\n  *getEditors(pageIndex) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.pageIndex === pageIndex) {\n        yield editor;\n      }\n    }\n  }\n  getEditor(id) {\n    return this.#allEditors.get(id);\n  }\n  addEditor(editor) {\n    this.#allEditors.set(editor.id, editor);\n  }\n  removeEditor(editor) {\n    if (editor.div.contains(document.activeElement)) {\n      if (this.#focusMainContainerTimeoutId) {\n        clearTimeout(this.#focusMainContainerTimeoutId);\n      }\n      this.#focusMainContainerTimeoutId = setTimeout(() => {\n        this.focusMainContainer();\n        this.#focusMainContainerTimeoutId = null;\n      }, 0);\n    }\n    this.#allEditors.delete(editor.id);\n    if (editor.annotationElementId) {\n      this.#missingCanvases?.delete(editor.annotationElementId);\n    }\n    this.unselect(editor);\n    if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) {\n      this.#annotationStorage?.remove(editor.id);\n    }\n  }\n  addDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n    this.addChangedExistingAnnotation(editor);\n    editor.deleted = true;\n  }\n  isDeletedAnnotationElement(annotationElementId) {\n    return this.#deletedAnnotationsElementIds.has(annotationElementId);\n  }\n  removeDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n    this.removeChangedExistingAnnotation(editor);\n    editor.deleted = false;\n  }\n  #addEditorToLayer(editor) {\n    const layer = this.#allLayers.get(editor.pageIndex);\n    if (layer) {\n      layer.addOrRebuild(editor);\n    } else {\n      this.addEditor(editor);\n      this.addToAnnotationStorage(editor);\n    }\n  }\n  setActiveEditor(editor) {\n    if (this.#activeEditor === editor) {\n      return;\n    }\n    this.#activeEditor = editor;\n    if (editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  get #lastSelectedEditor() {\n    let ed = null;\n    for (ed of this.#selectedEditors) {}\n    return ed;\n  }\n  updateUI(editor) {\n    if (this.#lastSelectedEditor === editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n  updateUIForDefaultProperties(editorType) {\n    this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n  }\n  toggleSelected(editor) {\n    if (this.#selectedEditors.has(editor)) {\n      this.#selectedEditors.delete(editor);\n      editor.unselect();\n      this.#dispatchUpdateStates({\n        hasSelectedEditor: this.hasSelection\n      });\n      return;\n    }\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  setSelected(editor) {\n    this.updateToolbar({\n      mode: editor.mode,\n      editId: editor.uid\n    });\n    this.#currentDrawingSession?.commitOrRemove();\n    for (const ed of this.#selectedEditors) {\n      if (ed !== editor) {\n        ed.unselect();\n      }\n    }\n    this.#commentManager?.destroyPopup();\n    this.#selectedEditors.clear();\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true\n    });\n  }\n  get firstSelectedEditor() {\n    return this.#selectedEditors.values().next().value;\n  }\n  unselect(editor) {\n    editor.unselect();\n    this.#selectedEditors.delete(editor);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  get hasSelection() {\n    return this.#selectedEditors.size !== 0;\n  }\n  get isEnterHandled() {\n    return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled;\n  }\n  undo() {\n    this.#commandManager.undo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n      hasSomethingToRedo: true,\n      isEmpty: this.#isEmpty()\n    });\n    this._editorUndoBar?.hide();\n  }\n  redo() {\n    this.#commandManager.redo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n      isEmpty: this.#isEmpty()\n    });\n  }\n  addCommands(params) {\n    this.#commandManager.add(params);\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: false,\n      isEmpty: this.#isEmpty()\n    });\n  }\n  cleanUndoStack(type) {\n    this.#commandManager.cleanType(type);\n  }\n  #isEmpty() {\n    if (this.#allEditors.size === 0) {\n      return true;\n    }\n    if (this.#allEditors.size === 1) {\n      for (const editor of this.#allEditors.values()) {\n        return editor.isEmpty();\n      }\n    }\n    return false;\n  }\n  delete() {\n    this.commitOrRemove();\n    const drawingEditor = this.currentLayer?.endDrawingSession(true);\n    if (!this.hasSelection && !drawingEditor) {\n      return;\n    }\n    const editors = drawingEditor ? [drawingEditor] : [...this.#selectedEditors];\n    const cmd = () => {\n      this._editorUndoBar?.show(undo, editors.length === 1 ? editors[0].editorType : editors.length);\n      for (const editor of editors) {\n        editor.remove();\n      }\n    };\n    const undo = () => {\n      for (const editor of editors) {\n        this.#addEditorToLayer(editor);\n      }\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: true\n    });\n  }\n  commitOrRemove() {\n    this.#activeEditor?.commitOrRemove();\n  }\n  hasSomethingToControl() {\n    return this.#activeEditor || this.hasSelection;\n  }\n  #selectEditors(editors) {\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    for (const editor of editors) {\n      if (editor.isEmpty()) {\n        continue;\n      }\n      this.#selectedEditors.add(editor);\n      editor.select();\n    }\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection\n    });\n  }\n  selectAll() {\n    for (const editor of this.#selectedEditors) {\n      editor.commit();\n    }\n    this.#selectEditors(this.#allEditors.values());\n  }\n  unselectAll() {\n    if (this.#activeEditor) {\n      this.#activeEditor.commitOrRemove();\n      if (this.#mode !== AnnotationEditorType.NONE) {\n        return;\n      }\n    }\n    if (this.#currentDrawingSession?.commitOrRemove()) {\n      return;\n    }\n    this.#commentManager?.destroyPopup();\n    if (!this.hasSelection) {\n      return;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: false\n    });\n  }\n  translateSelectedEditors(x, y, noCommit = false) {\n    if (!noCommit) {\n      this.commitOrRemove();\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    this.#translation[0] += x;\n    this.#translation[1] += y;\n    const [totalX, totalY] = this.#translation;\n    const editors = [...this.#selectedEditors];\n    const TIME_TO_WAIT = 1000;\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n    }\n    this.#translationTimeoutId = setTimeout(() => {\n      this.#translationTimeoutId = null;\n      this.#translation[0] = this.#translation[1] = 0;\n      this.addCommands({\n        cmd: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(totalX, totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        undo: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(-totalX, -totalY);\n              editor.translationDone();\n            }\n          }\n        },\n        mustExec: false\n      });\n    }, TIME_TO_WAIT);\n    for (const editor of editors) {\n      editor.translateInPage(x, y);\n      editor.translationDone();\n    }\n  }\n  setUpDragSession() {\n    if (!this.hasSelection) {\n      return;\n    }\n    this.disableUserSelect(true);\n    this.#draggingEditors = new Map();\n    for (const editor of this.#selectedEditors) {\n      this.#draggingEditors.set(editor, {\n        savedX: editor.x,\n        savedY: editor.y,\n        savedPageIndex: editor.pageIndex,\n        newX: 0,\n        newY: 0,\n        newPageIndex: -1\n      });\n    }\n  }\n  endDragSession() {\n    if (!this.#draggingEditors) {\n      return false;\n    }\n    this.disableUserSelect(false);\n    const map = this.#draggingEditors;\n    this.#draggingEditors = null;\n    let mustBeAddedInUndoStack = false;\n    for (const [{\n      x,\n      y,\n      pageIndex\n    }, value] of map) {\n      value.newX = x;\n      value.newY = y;\n      value.newPageIndex = pageIndex;\n      mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;\n    }\n    if (!mustBeAddedInUndoStack) {\n      return false;\n    }\n    const move = (editor, x, y, pageIndex) => {\n      if (this.#allEditors.has(editor.id)) {\n        const parent = this.#allLayers.get(pageIndex);\n        if (parent) {\n          editor._setParentAndPosition(parent, x, y);\n        } else {\n          editor.pageIndex = pageIndex;\n          editor.x = x;\n          editor.y = y;\n        }\n      }\n    };\n    this.addCommands({\n      cmd: () => {\n        for (const [editor, {\n          newX,\n          newY,\n          newPageIndex\n        }] of map) {\n          move(editor, newX, newY, newPageIndex);\n        }\n      },\n      undo: () => {\n        for (const [editor, {\n          savedX,\n          savedY,\n          savedPageIndex\n        }] of map) {\n          move(editor, savedX, savedY, savedPageIndex);\n        }\n      },\n      mustExec: true\n    });\n    return true;\n  }\n  dragSelectedEditors(tx, ty) {\n    if (!this.#draggingEditors) {\n      return;\n    }\n    for (const editor of this.#draggingEditors.keys()) {\n      editor.drag(tx, ty);\n    }\n  }\n  rebuild(editor) {\n    if (editor.parent === null) {\n      const parent = this.getLayer(editor.pageIndex);\n      if (parent) {\n        parent.changeParent(editor);\n        parent.addOrRebuild(editor);\n      } else {\n        this.addEditor(editor);\n        this.addToAnnotationStorage(editor);\n        editor.rebuild();\n      }\n    } else {\n      editor.parent.addOrRebuild(editor);\n    }\n  }\n  get isEditorHandlingKeyboard() {\n    return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();\n  }\n  isActive(editor) {\n    return this.#activeEditor === editor;\n  }\n  getActive() {\n    return this.#activeEditor;\n  }\n  getMode() {\n    return this.#mode;\n  }\n  isEditingMode() {\n    return this.#mode !== AnnotationEditorType.NONE;\n  }\n  get imageManager() {\n    return shadow(this, \"imageManager\", new ImageManager());\n  }\n  getSelectionBoxes(textLayer) {\n    if (!textLayer) {\n      return null;\n    }\n    const selection = document.getSelection();\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) {\n        return null;\n      }\n    }\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    let rotator;\n    switch (textLayer.getAttribute(\"data-main-rotation\")) {\n      case \"90\":\n        rotator = (x, y, w, h) => ({\n          x: (y - layerY) / parentHeight,\n          y: 1 - (x + w - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      case \"180\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (x + w - layerX) / parentWidth,\n          y: 1 - (y + h - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n      case \"270\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (y + h - layerY) / parentHeight,\n          y: (x - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth\n        });\n        break;\n      default:\n        rotator = (x, y, w, h) => ({\n          x: (x - layerX) / parentWidth,\n          y: (y - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight\n        });\n        break;\n    }\n    const boxes = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      for (const {\n        x,\n        y,\n        width,\n        height\n      } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        boxes.push(rotator(x, y, width, height));\n      }\n    }\n    return boxes.length === 0 ? null : boxes;\n  }\n  addChangedExistingAnnotation({\n    annotationElementId,\n    id\n  }) {\n    (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id);\n  }\n  removeChangedExistingAnnotation({\n    annotationElementId\n  }) {\n    this.#changedExistingAnnotations?.delete(annotationElementId);\n  }\n  renderAnnotationElement(annotation) {\n    const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n    if (!editorId) {\n      return;\n    }\n    const editor = this.#annotationStorage.getRawValue(editorId);\n    if (!editor) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n      return;\n    }\n    editor.renderAnnotationElement(annotation);\n  }\n  setMissingCanvas(annotationId, annotationElementId, canvas) {\n    const editor = this.#missingCanvases?.get(annotationId);\n    if (!editor) {\n      return;\n    }\n    editor.setCanvas(annotationElementId, canvas);\n    this.#missingCanvases.delete(annotationId);\n  }\n  addMissingCanvas(annotationId, editor) {\n    (this.#missingCanvases ||= new Map()).set(annotationId, editor);\n  }\n}\n\n;// ./src/display/editor/alt_text.js\n\nclass AltText {\n  #altText = null;\n  #altTextDecorative = false;\n  #altTextButton = null;\n  #altTextButtonLabel = null;\n  #altTextTooltip = null;\n  #altTextTooltipTimeout = null;\n  #altTextWasFromKeyBoard = false;\n  #badge = null;\n  #editor = null;\n  #guessedText = null;\n  #textWithDisclaimer = null;\n  #useNewAltTextFlow = false;\n  static #l10nNewButton = null;\n  static _l10n = null;\n  constructor(editor) {\n    this.#editor = editor;\n    this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow;\n    AltText.#l10nNewButton ||= Object.freeze({\n      added: \"pdfjs-editor-new-alt-text-added-button\",\n      \"added-label\": \"pdfjs-editor-new-alt-text-added-button-label\",\n      missing: \"pdfjs-editor-new-alt-text-missing-button\",\n      \"missing-label\": \"pdfjs-editor-new-alt-text-missing-button-label\",\n      review: \"pdfjs-editor-new-alt-text-to-review-button\",\n      \"review-label\": \"pdfjs-editor-new-alt-text-to-review-button-label\"\n    });\n  }\n  static initialize(l10n) {\n    AltText._l10n ??= l10n;\n  }\n  async render() {\n    const altText = this.#altTextButton = document.createElement(\"button\");\n    altText.className = \"altText\";\n    altText.tabIndex = \"0\";\n    const label = this.#altTextButtonLabel = document.createElement(\"span\");\n    altText.append(label);\n    if (this.#useNewAltTextFlow) {\n      altText.classList.add(\"new\");\n      altText.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton.missing);\n      label.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[\"missing-label\"]);\n    } else {\n      altText.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button\");\n      label.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button-label\");\n    }\n    const signal = this.#editor._uiManager._signal;\n    altText.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    altText.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal\n    });\n    const onClick = event => {\n      event.preventDefault();\n      this.#editor._uiManager.editAltText(this.#editor);\n      if (this.#useNewAltTextFlow) {\n        this.#editor._reportTelemetry({\n          action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n          data: {\n            label: this.#label\n          }\n        });\n      }\n    };\n    altText.addEventListener(\"click\", onClick, {\n      capture: true,\n      signal\n    });\n    altText.addEventListener(\"keydown\", event => {\n      if (event.target === altText && event.key === \"Enter\") {\n        this.#altTextWasFromKeyBoard = true;\n        onClick(event);\n      }\n    }, {\n      signal\n    });\n    await this.#setState();\n    return altText;\n  }\n  get #label() {\n    return this.#altText && \"added\" || this.#altText === null && this.guessedText && \"review\" || \"missing\";\n  }\n  finish() {\n    if (!this.#altTextButton) {\n      return;\n    }\n    this.#altTextButton.focus({\n      focusVisible: this.#altTextWasFromKeyBoard\n    });\n    this.#altTextWasFromKeyBoard = false;\n  }\n  isEmpty() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText === null;\n    }\n    return !this.#altText && !this.#altTextDecorative;\n  }\n  hasData() {\n    if (this.#useNewAltTextFlow) {\n      return this.#altText !== null || !!this.#guessedText;\n    }\n    return this.isEmpty();\n  }\n  get guessedText() {\n    return this.#guessedText;\n  }\n  async setGuessedText(guessedText) {\n    if (this.#altText !== null) {\n      return;\n    }\n    this.#guessedText = guessedText;\n    this.#textWithDisclaimer = await AltText._l10n.get(\"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\", {\n      generatedAltText: guessedText\n    });\n    this.#setState();\n  }\n  toggleAltTextBadge(visibility = false) {\n    if (!this.#useNewAltTextFlow || this.#altText) {\n      this.#badge?.remove();\n      this.#badge = null;\n      return;\n    }\n    if (!this.#badge) {\n      const badge = this.#badge = document.createElement(\"div\");\n      badge.className = \"noAltTextBadge\";\n      this.#editor.div.append(badge);\n    }\n    this.#badge.classList.toggle(\"hidden\", !visibility);\n  }\n  serialize(isForCopying) {\n    let altText = this.#altText;\n    if (!isForCopying && this.#guessedText === altText) {\n      altText = this.#textWithDisclaimer;\n    }\n    return {\n      altText,\n      decorative: this.#altTextDecorative,\n      guessedText: this.#guessedText,\n      textWithDisclaimer: this.#textWithDisclaimer\n    };\n  }\n  get data() {\n    return {\n      altText: this.#altText,\n      decorative: this.#altTextDecorative\n    };\n  }\n  set data({\n    altText,\n    decorative,\n    guessedText,\n    textWithDisclaimer,\n    cancel = false\n  }) {\n    if (guessedText) {\n      this.#guessedText = guessedText;\n      this.#textWithDisclaimer = textWithDisclaimer;\n    }\n    if (this.#altText === altText && this.#altTextDecorative === decorative) {\n      return;\n    }\n    if (!cancel) {\n      this.#altText = altText;\n      this.#altTextDecorative = decorative;\n    }\n    this.#setState();\n  }\n  toggle(enabled = false) {\n    if (!this.#altTextButton) {\n      return;\n    }\n    if (!enabled && this.#altTextTooltipTimeout) {\n      clearTimeout(this.#altTextTooltipTimeout);\n      this.#altTextTooltipTimeout = null;\n    }\n    this.#altTextButton.disabled = !enabled;\n  }\n  shown() {\n    this.#editor._reportTelemetry({\n      action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n      data: {\n        label: this.#label\n      }\n    });\n  }\n  destroy() {\n    this.#altTextButton?.remove();\n    this.#altTextButton = null;\n    this.#altTextButtonLabel = null;\n    this.#altTextTooltip = null;\n    this.#badge?.remove();\n    this.#badge = null;\n  }\n  async #setState() {\n    const button = this.#altTextButton;\n    if (!button) {\n      return;\n    }\n    if (this.#useNewAltTextFlow) {\n      button.classList.toggle(\"done\", !!this.#altText);\n      button.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[this.#label]);\n      this.#altTextButtonLabel?.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[`${this.#label}-label`]);\n      if (!this.#altText) {\n        this.#altTextTooltip?.remove();\n        return;\n      }\n    } else {\n      if (!this.#altText && !this.#altTextDecorative) {\n        button.classList.remove(\"done\");\n        this.#altTextTooltip?.remove();\n        return;\n      }\n      button.classList.add(\"done\");\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-edit-button\");\n    }\n    let tooltip = this.#altTextTooltip;\n    if (!tooltip) {\n      this.#altTextTooltip = tooltip = document.createElement(\"span\");\n      tooltip.className = \"tooltip\";\n      tooltip.setAttribute(\"role\", \"tooltip\");\n      tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n      const DELAY_TO_SHOW_TOOLTIP = 100;\n      const signal = this.#editor._uiManager._signal;\n      signal.addEventListener(\"abort\", () => {\n        clearTimeout(this.#altTextTooltipTimeout);\n        this.#altTextTooltipTimeout = null;\n      }, {\n        once: true\n      });\n      button.addEventListener(\"mouseenter\", () => {\n        this.#altTextTooltipTimeout = setTimeout(() => {\n          this.#altTextTooltipTimeout = null;\n          this.#altTextTooltip.classList.add(\"show\");\n          this.#editor._reportTelemetry({\n            action: \"alt_text_tooltip\"\n          });\n        }, DELAY_TO_SHOW_TOOLTIP);\n      }, {\n        signal\n      });\n      button.addEventListener(\"mouseleave\", () => {\n        if (this.#altTextTooltipTimeout) {\n          clearTimeout(this.#altTextTooltipTimeout);\n          this.#altTextTooltipTimeout = null;\n        }\n        this.#altTextTooltip?.classList.remove(\"show\");\n      }, {\n        signal\n      });\n    }\n    if (this.#altTextDecorative) {\n      tooltip.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-decorative-tooltip\");\n    } else {\n      tooltip.removeAttribute(\"data-l10n-id\");\n      tooltip.textContent = this.#altText;\n    }\n    if (!tooltip.parentNode) {\n      button.append(tooltip);\n    }\n    const element = this.#editor.getElementForAltText();\n    element?.setAttribute(\"aria-describedby\", tooltip.id);\n  }\n}\n\n;// ./src/display/editor/comment.js\n\nclass Comment {\n  #commentStandaloneButton = null;\n  #commentToolbarButton = null;\n  #commentWasFromKeyBoard = false;\n  #editor = null;\n  #initialText = null;\n  #richText = null;\n  #text = null;\n  #date = null;\n  #deleted = false;\n  #popupPosition = null;\n  constructor(editor) {\n    this.#editor = editor;\n  }\n  renderForToolbar() {\n    const button = this.#commentToolbarButton = document.createElement(\"button\");\n    button.className = \"comment\";\n    return this.#render(button, false);\n  }\n  renderForStandalone() {\n    const button = this.#commentStandaloneButton = document.createElement(\"button\");\n    button.className = \"annotationCommentButton\";\n    const position = this.#editor.commentButtonPosition;\n    if (position) {\n      const {\n        style\n      } = button;\n      style.insetInlineEnd = `calc(${100 * (this.#editor._uiManager.direction === \"ltr\" ? 1 - position[0] : position[0])}% - var(--comment-button-dim))`;\n      style.top = `calc(${100 * position[1]}% - var(--comment-button-dim))`;\n      const color = this.#editor.commentButtonColor;\n      if (color) {\n        style.backgroundColor = color;\n      }\n    }\n    return this.#render(button, true);\n  }\n  focusButton() {\n    setTimeout(() => {\n      (this.#commentStandaloneButton ?? this.#commentToolbarButton)?.focus();\n    }, 0);\n  }\n  onUpdatedColor() {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    const color = this.#editor.commentButtonColor;\n    if (color) {\n      this.#commentStandaloneButton.style.backgroundColor = color;\n    }\n    this.#editor._uiManager.updatePopupColor(this.#editor);\n  }\n  get commentButtonWidth() {\n    return (this.#commentStandaloneButton?.getBoundingClientRect().width ?? 0) / this.#editor.parent.boundingClientRect.width;\n  }\n  get commentPopupPositionInLayer() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    if (!this.#commentStandaloneButton) {\n      return null;\n    }\n    const {\n      x,\n      y,\n      height\n    } = this.#commentStandaloneButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = this.#editor.parent.boundingClientRect;\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n  set commentPopupPositionInLayer(pos) {\n    this.#popupPosition = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n  removeStandaloneCommentButton() {\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n  }\n  removeToolbarCommentButton() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n  }\n  setCommentButtonStates({\n    selected,\n    hasPopup\n  }) {\n    if (!this.#commentStandaloneButton) {\n      return;\n    }\n    this.#commentStandaloneButton.classList.toggle(\"selected\", selected);\n    this.#commentStandaloneButton.ariaExpanded = hasPopup;\n  }\n  #render(comment, isStandalone) {\n    if (!this.#editor._uiManager.hasCommentManager()) {\n      return null;\n    }\n    comment.tabIndex = \"0\";\n    comment.ariaHasPopup = \"dialog\";\n    if (isStandalone) {\n      comment.ariaControls = \"commentPopup\";\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n    } else {\n      comment.ariaControlsElements = [this.#editor._uiManager.getCommentDialogElement()];\n      comment.setAttribute(\"data-l10n-id\", \"pdfjs-editor-add-comment-button\");\n    }\n    const signal = this.#editor._uiManager._signal;\n    if (!(signal instanceof AbortSignal) || signal.aborted) {\n      return comment;\n    }\n    comment.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    if (isStandalone) {\n      comment.addEventListener(\"focusin\", e => {\n        this.#editor._focusEventsAllowed = false;\n        stopEvent(e);\n      }, {\n        capture: true,\n        signal\n      });\n      comment.addEventListener(\"focusout\", e => {\n        this.#editor._focusEventsAllowed = true;\n        stopEvent(e);\n      }, {\n        capture: true,\n        signal\n      });\n    }\n    comment.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n      signal\n    });\n    const onClick = event => {\n      event.preventDefault();\n      if (comment === this.#commentToolbarButton) {\n        this.edit();\n      } else {\n        this.#editor.toggleComment(true);\n      }\n    };\n    comment.addEventListener(\"click\", onClick, {\n      capture: true,\n      signal\n    });\n    comment.addEventListener(\"keydown\", event => {\n      if (event.target === comment && event.key === \"Enter\") {\n        this.#commentWasFromKeyBoard = true;\n        onClick(event);\n      }\n    }, {\n      signal\n    });\n    comment.addEventListener(\"pointerenter\", () => {\n      this.#editor.toggleComment(false, true);\n    }, {\n      signal\n    });\n    comment.addEventListener(\"pointerleave\", () => {\n      this.#editor.toggleComment(false, false);\n    }, {\n      signal\n    });\n    return comment;\n  }\n  edit(options) {\n    const position = this.commentPopupPositionInLayer;\n    let posX, posY;\n    if (position) {\n      [posX, posY] = position;\n    } else {\n      [posX, posY] = this.#editor.commentButtonPosition;\n      const {\n        width,\n        height,\n        x,\n        y\n      } = this.#editor;\n      posX = x + posX * width;\n      posY = y + posY * height;\n    }\n    const parentDimensions = this.#editor.parent.boundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = parentDimensions;\n    this.#editor._uiManager.editComment(this.#editor, parentX + posX * parentWidth, parentY + posY * parentHeight, {\n      ...options,\n      parentDimensions\n    });\n  }\n  finish() {\n    if (!this.#commentToolbarButton) {\n      return;\n    }\n    this.#commentToolbarButton.focus({\n      focusVisible: this.#commentWasFromKeyBoard\n    });\n    this.#commentWasFromKeyBoard = false;\n  }\n  isDeleted() {\n    return this.#deleted || this.#text === \"\";\n  }\n  isEmpty() {\n    return this.#text === null;\n  }\n  hasBeenEdited() {\n    return this.isDeleted() || this.#text !== this.#initialText;\n  }\n  serialize() {\n    return this.data;\n  }\n  get data() {\n    return {\n      text: this.#text,\n      richText: this.#richText,\n      date: this.#date,\n      deleted: this.isDeleted()\n    };\n  }\n  set data(text) {\n    if (text !== this.#text) {\n      this.#richText = null;\n    }\n    if (text === null) {\n      this.#text = \"\";\n      this.#deleted = true;\n      return;\n    }\n    this.#text = text;\n    this.#date = new Date();\n    this.#deleted = false;\n  }\n  restoreData({\n    text,\n    richText,\n    date\n  }) {\n    this.#text = text;\n    this.#richText = richText;\n    this.#date = date;\n    this.#deleted = false;\n  }\n  setInitialText(text, richText = null) {\n    this.#initialText = text;\n    this.data = text;\n    this.#date = null;\n    this.#richText = richText;\n  }\n  shown() {}\n  destroy() {\n    this.#commentToolbarButton?.remove();\n    this.#commentToolbarButton = null;\n    this.#commentStandaloneButton?.remove();\n    this.#commentStandaloneButton = null;\n    this.#text = \"\";\n    this.#richText = null;\n    this.#date = null;\n    this.#editor = null;\n    this.#commentWasFromKeyBoard = false;\n    this.#deleted = false;\n  }\n}\n\n;// ./src/display/touch_manager.js\n\nclass TouchManager {\n  #container;\n  #isPinching = false;\n  #isPinchingStopped = null;\n  #isPinchingDisabled;\n  #onPinchStart;\n  #onPinching;\n  #onPinchEnd;\n  #pointerDownAC = null;\n  #signal;\n  #touchInfo = null;\n  #touchManagerAC;\n  #touchMoveAC = null;\n  constructor({\n    container,\n    isPinchingDisabled = null,\n    isPinchingStopped = null,\n    onPinchStart = null,\n    onPinching = null,\n    onPinchEnd = null,\n    signal\n  }) {\n    this.#container = container;\n    this.#isPinchingStopped = isPinchingStopped;\n    this.#isPinchingDisabled = isPinchingDisabled;\n    this.#onPinchStart = onPinchStart;\n    this.#onPinching = onPinching;\n    this.#onPinchEnd = onPinchEnd;\n    this.#touchManagerAC = new AbortController();\n    this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]);\n    container.addEventListener(\"touchstart\", this.#onTouchStart.bind(this), {\n      passive: false,\n      signal: this.#signal\n    });\n  }\n  get MIN_TOUCH_DISTANCE_TO_PINCH() {\n    return 35 / OutputScale.pixelRatio;\n  }\n  #onTouchStart(evt) {\n    if (this.#isPinchingDisabled?.()) {\n      return;\n    }\n    if (evt.touches.length === 1) {\n      if (this.#pointerDownAC) {\n        return;\n      }\n      const pointerDownAC = this.#pointerDownAC = new AbortController();\n      const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]);\n      const container = this.#container;\n      const opts = {\n        capture: true,\n        signal,\n        passive: false\n      };\n      const cancelPointerDown = e => {\n        if (e.pointerType === \"touch\") {\n          this.#pointerDownAC?.abort();\n          this.#pointerDownAC = null;\n        }\n      };\n      container.addEventListener(\"pointerdown\", e => {\n        if (e.pointerType === \"touch\") {\n          stopEvent(e);\n          cancelPointerDown(e);\n        }\n      }, opts);\n      container.addEventListener(\"pointerup\", cancelPointerDown, opts);\n      container.addEventListener(\"pointercancel\", cancelPointerDown, opts);\n      return;\n    }\n    if (!this.#touchMoveAC) {\n      this.#touchMoveAC = new AbortController();\n      const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]);\n      const container = this.#container;\n      const opt = {\n        signal,\n        capture: false,\n        passive: false\n      };\n      container.addEventListener(\"touchmove\", this.#onTouchMove.bind(this), opt);\n      const onTouchEnd = this.#onTouchEnd.bind(this);\n      container.addEventListener(\"touchend\", onTouchEnd, opt);\n      container.addEventListener(\"touchcancel\", onTouchEnd, opt);\n      opt.capture = true;\n      container.addEventListener(\"pointerdown\", stopEvent, opt);\n      container.addEventListener(\"pointermove\", stopEvent, opt);\n      container.addEventListener(\"pointercancel\", stopEvent, opt);\n      container.addEventListener(\"pointerup\", stopEvent, opt);\n      this.#onPinchStart?.();\n    }\n    stopEvent(evt);\n    if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) {\n      this.#touchInfo = null;\n      return;\n    }\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    this.#touchInfo = {\n      touch0X: touch0.screenX,\n      touch0Y: touch0.screenY,\n      touch1X: touch1.screenX,\n      touch1Y: touch1.screenY\n    };\n  }\n  #onTouchMove(evt) {\n    if (!this.#touchInfo || evt.touches.length !== 2) {\n      return;\n    }\n    stopEvent(evt);\n    let [touch0, touch1] = evt.touches;\n    if (touch0.identifier > touch1.identifier) {\n      [touch0, touch1] = [touch1, touch0];\n    }\n    const {\n      screenX: screen0X,\n      screenY: screen0Y\n    } = touch0;\n    const {\n      screenX: screen1X,\n      screenY: screen1Y\n    } = touch1;\n    const touchInfo = this.#touchInfo;\n    const {\n      touch0X: pTouch0X,\n      touch0Y: pTouch0Y,\n      touch1X: pTouch1X,\n      touch1Y: pTouch1Y\n    } = touchInfo;\n    const prevGapX = pTouch1X - pTouch0X;\n    const prevGapY = pTouch1Y - pTouch0Y;\n    const currGapX = screen1X - screen0X;\n    const currGapY = screen1Y - screen0Y;\n    const distance = Math.hypot(currGapX, currGapY) || 1;\n    const pDistance = Math.hypot(prevGapX, prevGapY) || 1;\n    if (!this.#isPinching && Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH) {\n      return;\n    }\n    touchInfo.touch0X = screen0X;\n    touchInfo.touch0Y = screen0Y;\n    touchInfo.touch1X = screen1X;\n    touchInfo.touch1Y = screen1Y;\n    if (!this.#isPinching) {\n      this.#isPinching = true;\n      return;\n    }\n    const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];\n    this.#onPinching?.(origin, pDistance, distance);\n  }\n  #onTouchEnd(evt) {\n    if (evt.touches.length >= 2) {\n      return;\n    }\n    if (this.#touchMoveAC) {\n      this.#touchMoveAC.abort();\n      this.#touchMoveAC = null;\n      this.#onPinchEnd?.();\n    }\n    if (!this.#touchInfo) {\n      return;\n    }\n    stopEvent(evt);\n    this.#touchInfo = null;\n    this.#isPinching = false;\n  }\n  destroy() {\n    this.#touchManagerAC?.abort();\n    this.#touchManagerAC = null;\n    this.#pointerDownAC?.abort();\n    this.#pointerDownAC = null;\n  }\n}\n\n;// ./src/display/editor/editor.js\n\n\n\n\n\n\n\n\nclass AnnotationEditor {\n  #accessibilityData = null;\n  #allResizerDivs = null;\n  #altText = null;\n  #comment = null;\n  #commentStandaloneButton = null;\n  #disabled = false;\n  #dragPointerId = null;\n  #dragPointerType = \"\";\n  #resizersDiv = null;\n  #lastPointerCoords = null;\n  #savedDimensions = null;\n  #fakeAnnotation = null;\n  #focusAC = null;\n  #focusedResizerName = \"\";\n  #hasBeenClicked = false;\n  #initialRect = null;\n  #isEditing = false;\n  #isInEditMode = false;\n  #isResizerEnabledForKeyboard = false;\n  #moveInDOMTimeout = null;\n  #prevDragX = 0;\n  #prevDragY = 0;\n  #telemetryTimeouts = null;\n  #touchManager = null;\n  isSelected = false;\n  _isCopy = false;\n  _editToolbar = null;\n  _initialOptions = Object.create(null);\n  _initialData = null;\n  _isVisible = true;\n  _uiManager = null;\n  _focusEventsAllowed = true;\n  static _l10n = null;\n  static _l10nAlert = null;\n  static _l10nResizer = null;\n  #isDraggable = false;\n  #zIndex = AnnotationEditor._zIndex++;\n  static _borderLineWidth = -1;\n  static _colorManager = new ColorManager();\n  static _zIndex = 1;\n  static _telemetryTimeout = 1000;\n  static get _resizerKeyboardManager() {\n    const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_resizerKeyboardManager\", new KeyboardManager([[[\"ArrowLeft\"], resize, {\n      args: [-small, 0]\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], resize, {\n      args: [-big, 0]\n    }], [[\"ArrowRight\"], resize, {\n      args: [small, 0]\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], resize, {\n      args: [big, 0]\n    }], [[\"ArrowUp\"], resize, {\n      args: [0, -small]\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, {\n      args: [0, -big]\n    }], [[\"ArrowDown\"], resize, {\n      args: [0, small]\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, {\n      args: [0, big]\n    }], [[\"Escape\"], AnnotationEditor.prototype._stopResizingWithKeyboard]]));\n  }\n  constructor(parameters) {\n    this.parent = parameters.parent;\n    this.id = parameters.id;\n    this.width = this.height = null;\n    this.pageIndex = parameters.parent.pageIndex;\n    this.name = parameters.name;\n    this.div = null;\n    this._uiManager = parameters.uiManager;\n    this.annotationElementId = null;\n    this._willKeepAspectRatio = false;\n    this._initialOptions.isCentered = parameters.isCentered;\n    this._structTreeParentId = null;\n    this.annotationElementId = parameters.annotationElementId || null;\n    this.creationDate = parameters.creationDate || new Date();\n    this.modificationDate = parameters.modificationDate || null;\n    this.canAddComment = true;\n    const {\n      rotation,\n      rawDims: {\n        pageWidth,\n        pageHeight,\n        pageX,\n        pageY\n      }\n    } = this.parent.viewport;\n    this.rotation = rotation;\n    this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n    this.pageDimensions = [pageWidth, pageHeight];\n    this.pageTranslation = [pageX, pageY];\n    const [width, height] = this.parentDimensions;\n    this.x = parameters.x / width;\n    this.y = parameters.y / height;\n    this.isAttachedToDOM = false;\n    this.deleted = false;\n  }\n  updatePageIndex(newPageIndex) {\n    this.pageIndex = newPageIndex;\n  }\n  get editorType() {\n    return Object.getPrototypeOf(this).constructor._type;\n  }\n  get mode() {\n    return Object.getPrototypeOf(this).constructor._editorType;\n  }\n  static get isDrawer() {\n    return false;\n  }\n  static get _defaultLineColor() {\n    return shadow(this, \"_defaultLineColor\", this._colorManager.getHexCode(\"CanvasText\"));\n  }\n  static deleteAnnotationElement(editor) {\n    const fakeEditor = new FakeEditor({\n      id: editor._uiManager.getId(),\n      parent: editor.parent,\n      uiManager: editor._uiManager\n    });\n    fakeEditor.annotationElementId = editor.annotationElementId;\n    fakeEditor.deleted = true;\n    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n  }\n  static initialize(l10n, _uiManager) {\n    AnnotationEditor._l10n ??= l10n;\n    AnnotationEditor._l10nAlert ??= Object.freeze({\n      highlight: \"pdfjs-editor-highlight-added-alert\",\n      freetext: \"pdfjs-editor-freetext-added-alert\",\n      ink: \"pdfjs-editor-ink-added-alert\",\n      stamp: \"pdfjs-editor-stamp-added-alert\",\n      signature: \"pdfjs-editor-signature-added-alert\"\n    });\n    AnnotationEditor._l10nResizer ??= Object.freeze({\n      topLeft: \"pdfjs-editor-resizer-top-left\",\n      topMiddle: \"pdfjs-editor-resizer-top-middle\",\n      topRight: \"pdfjs-editor-resizer-top-right\",\n      middleRight: \"pdfjs-editor-resizer-middle-right\",\n      bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n      bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n      bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n      middleLeft: \"pdfjs-editor-resizer-middle-left\"\n    });\n    if (AnnotationEditor._borderLineWidth !== -1) {\n      return;\n    }\n    const style = getComputedStyle(document.documentElement);\n    AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n  }\n  static updateDefaultParams(_type, _value) {}\n  static get defaultPropertiesToUpdate() {\n    return [];\n  }\n  static isHandlingMimeForPasting(mime) {\n    return false;\n  }\n  static paste(item, parent) {\n    unreachable(\"Not implemented\");\n  }\n  get propertiesToUpdate() {\n    return [];\n  }\n  get _isDraggable() {\n    return this.#isDraggable;\n  }\n  set _isDraggable(value) {\n    this.#isDraggable = value;\n    this.div?.classList.toggle(\"draggable\", value);\n  }\n  get uid() {\n    return this.annotationElementId || this.id;\n  }\n  get isEnterHandled() {\n    return true;\n  }\n  center() {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    switch (this.parentRotation) {\n      case 90:\n        this.x -= this.height * pageHeight / (pageWidth * 2);\n        this.y += this.width * pageWidth / (pageHeight * 2);\n        break;\n      case 180:\n        this.x += this.width / 2;\n        this.y += this.height / 2;\n        break;\n      case 270:\n        this.x += this.height * pageHeight / (pageWidth * 2);\n        this.y -= this.width * pageWidth / (pageHeight * 2);\n        break;\n      default:\n        this.x -= this.width / 2;\n        this.y -= this.height / 2;\n        break;\n    }\n    this.fixAndSetPosition();\n  }\n  addCommands(params) {\n    this._uiManager.addCommands(params);\n  }\n  get currentLayer() {\n    return this._uiManager.currentLayer;\n  }\n  setInBackground() {\n    this.div.style.zIndex = 0;\n  }\n  setInForeground() {\n    this.div.style.zIndex = this.#zIndex;\n  }\n  setParent(parent) {\n    if (parent !== null) {\n      this.pageIndex = parent.pageIndex;\n      this.pageDimensions = parent.pageDimensions;\n    } else {\n      this.#stopResizing();\n      this.#fakeAnnotation?.remove();\n      this.#fakeAnnotation = null;\n    }\n    this.parent = parent;\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.#hasBeenClicked) {\n      this.parent.setSelected(this);\n    } else {\n      this.#hasBeenClicked = false;\n    }\n  }\n  focusout(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      return;\n    }\n    const target = event.relatedTarget;\n    if (target?.closest(`#${this.id}`)) {\n      return;\n    }\n    event.preventDefault();\n    if (!this.parent?.isMultipleSelection) {\n      this.commitOrRemove();\n    }\n  }\n  commitOrRemove() {\n    if (this.isEmpty()) {\n      this.remove();\n    } else {\n      this.commit();\n    }\n  }\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    this.addToAnnotationStorage();\n  }\n  addToAnnotationStorage() {\n    this._uiManager.addToAnnotationStorage(this);\n  }\n  setAt(x, y, tx, ty) {\n    const [width, height] = this.parentDimensions;\n    [tx, ty] = this.screenToPageTranslation(tx, ty);\n    this.x = (x + tx) / width;\n    this.y = (y + ty) / height;\n    this.fixAndSetPosition();\n  }\n  _moveAfterPaste(baseX, baseY) {\n    if (this.isClone) {\n      delete this.isClone;\n      return;\n    }\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);\n    this._onTranslated();\n  }\n  #translate([width, height], x, y) {\n    [x, y] = this.screenToPageTranslation(x, y);\n    this.x += x / width;\n    this.y += y / height;\n    this._onTranslating(this.x, this.y);\n    this.fixAndSetPosition();\n  }\n  translate(x, y) {\n    this.#translate(this.parentDimensions, x, y);\n  }\n  translateInPage(x, y) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.#translate(this.pageDimensions, x, y);\n    this.div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  translationDone() {\n    this._onTranslated(this.x, this.y);\n  }\n  drag(tx, ty) {\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    const {\n      div,\n      parentDimensions: [parentWidth, parentHeight]\n    } = this;\n    this.x += tx / parentWidth;\n    this.y += ty / parentHeight;\n    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n      const {\n        x,\n        y\n      } = this.div.getBoundingClientRect();\n      if (this.parent.findNewParent(this, x, y)) {\n        this.x -= Math.floor(this.x);\n        this.y -= Math.floor(this.y);\n      }\n    }\n    let {\n      x,\n      y\n    } = this;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    const {\n      style\n    } = div;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n    this._onTranslating(x, y);\n    div.scrollIntoView({\n      block: \"nearest\"\n    });\n  }\n  _onTranslating(x, y) {}\n  _onTranslated(x, y) {}\n  get _hasBeenMoved() {\n    return !!this.#initialRect && (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y);\n  }\n  get _hasBeenResized() {\n    return !!this.#initialRect && (this.#initialRect[2] !== this.width || this.#initialRect[3] !== this.height);\n  }\n  getBaseTranslation() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const {\n      _borderLineWidth\n    } = AnnotationEditor;\n    const x = _borderLineWidth / parentWidth;\n    const y = _borderLineWidth / parentHeight;\n    switch (this.rotation) {\n      case 90:\n        return [-x, y];\n      case 180:\n        return [x, y];\n      case 270:\n        return [x, -y];\n      default:\n        return [-x, -y];\n    }\n  }\n  get _mustFixPosition() {\n    return true;\n  }\n  fixAndSetPosition(rotation = this.rotation) {\n    const {\n      div: {\n        style\n      },\n      pageDimensions: [pageWidth, pageHeight]\n    } = this;\n    let {\n      x,\n      y,\n      width,\n      height\n    } = this;\n    width *= pageWidth;\n    height *= pageHeight;\n    x *= pageWidth;\n    y *= pageHeight;\n    if (this._mustFixPosition) {\n      switch (rotation) {\n        case 0:\n          x = MathClamp(x, 0, pageWidth - width);\n          y = MathClamp(y, 0, pageHeight - height);\n          break;\n        case 90:\n          x = MathClamp(x, 0, pageWidth - height);\n          y = MathClamp(y, width, pageHeight);\n          break;\n        case 180:\n          x = MathClamp(x, width, pageWidth);\n          y = MathClamp(y, height, pageHeight);\n          break;\n        case 270:\n          x = MathClamp(x, height, pageWidth);\n          y = MathClamp(y, 0, pageHeight - width);\n          break;\n      }\n    }\n    this.x = x /= pageWidth;\n    this.y = y /= pageHeight;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n    style.left = `${(100 * x).toFixed(2)}%`;\n    style.top = `${(100 * y).toFixed(2)}%`;\n    this.moveInDOM();\n  }\n  static #rotatePoint(x, y, angle) {\n    switch (angle) {\n      case 90:\n        return [y, -x];\n      case 180:\n        return [-x, -y];\n      case 270:\n        return [-y, x];\n      default:\n        return [x, y];\n    }\n  }\n  screenToPageTranslation(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n  }\n  pageTranslationToScreen(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n  }\n  #getRotationMatrix(rotation) {\n    switch (rotation) {\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n        }\n      case 180:\n        return [-1, 0, 0, -1];\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.pageDimensions;\n          return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n        }\n      default:\n        return [1, 0, 0, 1];\n    }\n  }\n  get parentScale() {\n    return this._uiManager.viewParameters.realScale;\n  }\n  get parentRotation() {\n    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n  }\n  get parentDimensions() {\n    const {\n      parentScale,\n      pageDimensions: [pageWidth, pageHeight]\n    } = this;\n    return [pageWidth * parentScale, pageHeight * parentScale];\n  }\n  setDims() {\n    const {\n      div: {\n        style\n      },\n      width,\n      height\n    } = this;\n    style.width = `${(100 * width).toFixed(2)}%`;\n    style.height = `${(100 * height).toFixed(2)}%`;\n  }\n  getInitialTranslation() {\n    return [0, 0];\n  }\n  #createResizers() {\n    if (this.#resizersDiv) {\n      return;\n    }\n    this.#resizersDiv = document.createElement(\"div\");\n    this.#resizersDiv.classList.add(\"resizers\");\n    const classes = this._willKeepAspectRatio ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"] : [\"topLeft\", \"topMiddle\", \"topRight\", \"middleRight\", \"bottomRight\", \"bottomMiddle\", \"bottomLeft\", \"middleLeft\"];\n    const signal = this._uiManager._signal;\n    for (const name of classes) {\n      const div = document.createElement(\"div\");\n      this.#resizersDiv.append(div);\n      div.classList.add(\"resizer\", name);\n      div.setAttribute(\"data-resizer-name\", name);\n      div.addEventListener(\"pointerdown\", this.#resizerPointerdown.bind(this, name), {\n        signal\n      });\n      div.addEventListener(\"contextmenu\", noContextMenu, {\n        signal\n      });\n      div.tabIndex = -1;\n    }\n    this.div.prepend(this.#resizersDiv);\n  }\n  #resizerPointerdown(name, event) {\n    event.preventDefault();\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    this.#altText?.toggle(false);\n    const savedDraggable = this._isDraggable;\n    this._isDraggable = false;\n    this.#lastPointerCoords = [event.screenX, event.screenY];\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n    this.parent.togglePointerEvents(false);\n    window.addEventListener(\"pointermove\", this.#resizerPointermove.bind(this, name), {\n      passive: true,\n      capture: true,\n      signal\n    });\n    window.addEventListener(\"touchmove\", stopEvent, {\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    const savedParentCursor = this.parent.div.style.cursor;\n    const savedCursor = this.div.style.cursor;\n    this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;\n    const pointerUpCallback = () => {\n      ac.abort();\n      this.parent.togglePointerEvents(true);\n      this.#altText?.toggle(true);\n      this._isDraggable = savedDraggable;\n      this.parent.div.style.cursor = savedParentCursor;\n      this.div.style.cursor = savedCursor;\n      this.#addResizeToUndoStack();\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n  }\n  #resize(x, y, width, height) {\n    this.width = width;\n    this.height = height;\n    this.x = x;\n    this.y = y;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResized();\n  }\n  _onResized() {}\n  #addResizeToUndoStack() {\n    if (!this.#savedDimensions) {\n      return;\n    }\n    const {\n      savedX,\n      savedY,\n      savedWidth,\n      savedHeight\n    } = this.#savedDimensions;\n    this.#savedDimensions = null;\n    const newX = this.x;\n    const newY = this.y;\n    const newWidth = this.width;\n    const newHeight = this.height;\n    if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n    this.addCommands({\n      cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight),\n      undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight),\n      mustExec: true\n    });\n  }\n  static _round(x) {\n    return Math.round(x * 10000) / 10000;\n  }\n  #resizerPointermove(name, event) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];\n    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n    const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];\n    let getPoint;\n    let getOpposite;\n    let isDiagonal = false;\n    let isHorizontal = false;\n    switch (name) {\n      case \"topLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, 0];\n        getOpposite = (w, h) => [w, h];\n        break;\n      case \"topMiddle\":\n        getPoint = (w, h) => [w / 2, 0];\n        getOpposite = (w, h) => [w / 2, h];\n        break;\n      case \"topRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, 0];\n        getOpposite = (w, h) => [0, h];\n        break;\n      case \"middleRight\":\n        isHorizontal = true;\n        getPoint = (w, h) => [w, h / 2];\n        getOpposite = (w, h) => [0, h / 2];\n        break;\n      case \"bottomRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, h];\n        getOpposite = (w, h) => [0, 0];\n        break;\n      case \"bottomMiddle\":\n        getPoint = (w, h) => [w / 2, h];\n        getOpposite = (w, h) => [w / 2, 0];\n        break;\n      case \"bottomLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, h];\n        getOpposite = (w, h) => [w, 0];\n        break;\n      case \"middleLeft\":\n        isHorizontal = true;\n        getPoint = (w, h) => [0, h / 2];\n        getOpposite = (w, h) => [w, h / 2];\n        break;\n    }\n    const point = getPoint(savedWidth, savedHeight);\n    const oppositePoint = getOpposite(savedWidth, savedHeight);\n    let transfOppositePoint = transf(...oppositePoint);\n    const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]);\n    const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]);\n    let ratioX = 1;\n    let ratioY = 1;\n    let deltaX, deltaY;\n    if (!event.fromKeyboard) {\n      const {\n        screenX,\n        screenY\n      } = event;\n      const [lastScreenX, lastScreenY] = this.#lastPointerCoords;\n      [deltaX, deltaY] = this.screenToPageTranslation(screenX - lastScreenX, screenY - lastScreenY);\n      this.#lastPointerCoords[0] = screenX;\n      this.#lastPointerCoords[1] = screenY;\n    } else {\n      ({\n        deltaX,\n        deltaY\n      } = event);\n    }\n    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n    if (isDiagonal) {\n      const oldDiag = Math.hypot(savedWidth, savedHeight);\n      ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);\n    } else if (isHorizontal) {\n      ratioX = MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) / savedWidth;\n    } else {\n      ratioY = MathClamp(Math.abs(oppositePoint[1] - point[1] - deltaY), minHeight, 1) / savedHeight;\n    }\n    const newWidth = AnnotationEditor._round(savedWidth * ratioX);\n    const newHeight = AnnotationEditor._round(savedHeight * ratioY);\n    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n    const newX = oppositeX - transfOppositePoint[0];\n    const newY = oppositeY - transfOppositePoint[1];\n    this.#initialRect ||= [this.x, this.y, this.width, this.height];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.x = newX;\n    this.y = newY;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResizing();\n  }\n  _onResizing() {}\n  altTextFinish() {\n    this.#altText?.finish();\n  }\n  get toolbarButtons() {\n    return null;\n  }\n  async addEditToolbar() {\n    if (this._editToolbar || this.#isInEditMode) {\n      return this._editToolbar;\n    }\n    this._editToolbar = new EditorToolbar(this);\n    this.div.append(this._editToolbar.render());\n    const {\n      toolbarButtons\n    } = this;\n    if (toolbarButtons) {\n      for (const [name, tool] of toolbarButtons) {\n        await this._editToolbar.addButton(name, tool);\n      }\n    }\n    if (!this.hasComment) {\n      this._editToolbar.addButton(\"comment\", this.addCommentButton());\n    }\n    this._editToolbar.addButton(\"delete\");\n    return this._editToolbar;\n  }\n  addCommentButtonInToolbar() {\n    this._editToolbar?.addButtonBefore(\"comment\", this.addCommentButton(), \".deleteButton\");\n  }\n  removeCommentButtonFromToolbar() {\n    this._editToolbar?.removeButton(\"comment\");\n  }\n  removeEditToolbar() {\n    this._editToolbar?.remove();\n    this._editToolbar = null;\n    this.#altText?.destroy();\n  }\n  addContainer(container) {\n    const editToolbarDiv = this._editToolbar?.div;\n    if (editToolbarDiv) {\n      editToolbarDiv.before(container);\n    } else {\n      this.div.append(container);\n    }\n  }\n  getClientDimensions() {\n    return this.div.getBoundingClientRect();\n  }\n  createAltText() {\n    if (!this.#altText) {\n      AltText.initialize(AnnotationEditor._l10n);\n      this.#altText = new AltText(this);\n      if (this.#accessibilityData) {\n        this.#altText.data = this.#accessibilityData;\n        this.#accessibilityData = null;\n      }\n    }\n    return this.#altText;\n  }\n  get altTextData() {\n    return this.#altText?.data;\n  }\n  set altTextData(data) {\n    if (!this.#altText) {\n      return;\n    }\n    this.#altText.data = data;\n  }\n  get guessedAltText() {\n    return this.#altText?.guessedText;\n  }\n  async setGuessedAltText(text) {\n    await this.#altText?.setGuessedText(text);\n  }\n  serializeAltText(isForCopying) {\n    return this.#altText?.serialize(isForCopying);\n  }\n  hasAltText() {\n    return !!this.#altText && !this.#altText.isEmpty();\n  }\n  hasAltTextData() {\n    return this.#altText?.hasData() ?? false;\n  }\n  focusCommentButton() {\n    this.#comment?.focusButton();\n  }\n  addCommentButton() {\n    return this.canAddComment ? this.#comment ||= new Comment(this) : null;\n  }\n  addStandaloneCommentButton() {\n    if (!this._uiManager.hasCommentManager()) {\n      return;\n    }\n    if (this.#commentStandaloneButton) {\n      if (this._uiManager.isEditingMode()) {\n        this.#commentStandaloneButton.classList.remove(\"hidden\");\n      }\n      return;\n    }\n    if (!this.hasComment) {\n      return;\n    }\n    this.#commentStandaloneButton = this.#comment.renderForStandalone();\n    this.div.append(this.#commentStandaloneButton);\n  }\n  removeStandaloneCommentButton() {\n    this.#comment.removeStandaloneCommentButton();\n    this.#commentStandaloneButton = null;\n  }\n  hideStandaloneCommentButton() {\n    this.#commentStandaloneButton?.classList.add(\"hidden\");\n  }\n  get comment() {\n    if (!this.#comment) {\n      return null;\n    }\n    const {\n      data: {\n        richText,\n        text,\n        date,\n        deleted\n      }\n    } = this.#comment;\n    return {\n      text,\n      richText,\n      date,\n      deleted,\n      color: this.getNonHCMColor(),\n      opacity: this.opacity ?? 1\n    };\n  }\n  set comment(value) {\n    this.#comment ||= new Comment(this);\n    if (typeof value === \"object\" && value !== null) {\n      this.#comment.restoreData(value);\n    } else {\n      this.#comment.data = value;\n    }\n    if (this.hasComment) {\n      this.removeCommentButtonFromToolbar();\n      this.addStandaloneCommentButton();\n      this._uiManager.updateComment(this);\n    } else {\n      this.addCommentButtonInToolbar();\n      this.removeStandaloneCommentButton();\n      this._uiManager.removeComment(this);\n    }\n  }\n  setCommentData({\n    comment,\n    popupRef,\n    richText\n  }) {\n    if (!popupRef) {\n      return;\n    }\n    this.#comment ||= new Comment(this);\n    this.#comment.setInitialText(comment, richText);\n    if (!this.annotationElementId) {\n      return;\n    }\n    const storedData = this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId);\n    if (storedData) {\n      this.updateFromAnnotationLayer(storedData);\n    }\n  }\n  get hasEditedComment() {\n    return this.#comment?.hasBeenEdited();\n  }\n  get hasDeletedComment() {\n    return this.#comment?.isDeleted();\n  }\n  get hasComment() {\n    return !!this.#comment && !this.#comment.isEmpty() && !this.#comment.isDeleted();\n  }\n  async editComment(options) {\n    this.#comment ||= new Comment(this);\n    this.#comment.edit(options);\n  }\n  toggleComment(isSelected, visibility = undefined) {\n    if (this.hasComment) {\n      this._uiManager.toggleComment(this, isSelected, visibility);\n    }\n  }\n  setSelectedCommentButton(selected) {\n    this.#comment.setSelectedButton(selected);\n  }\n  addComment(serialized) {\n    if (this.hasEditedComment) {\n      const DEFAULT_POPUP_WIDTH = 180;\n      const DEFAULT_POPUP_HEIGHT = 100;\n      const [,,, trY] = serialized.rect;\n      const [pageWidth] = this.pageDimensions;\n      const [pageX] = this.pageTranslation;\n      const blX = pageX + pageWidth + 1;\n      const blY = trY - DEFAULT_POPUP_HEIGHT;\n      const trX = blX + DEFAULT_POPUP_WIDTH;\n      serialized.popup = {\n        contents: this.comment.text,\n        deleted: this.comment.deleted,\n        rect: [blX, blY, trX, trY]\n      };\n    }\n  }\n  updateFromAnnotationLayer({\n    popup: {\n      contents,\n      deleted\n    }\n  }) {\n    this.#comment.data = deleted ? null : contents;\n  }\n  get parentBoundingClientRect() {\n    return this.parent.boundingClientRect;\n  }\n  render() {\n    const div = this.div = document.createElement(\"div\");\n    div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n    div.className = this.name;\n    div.setAttribute(\"id\", this.id);\n    div.tabIndex = this.#disabled ? -1 : 0;\n    div.setAttribute(\"role\", \"application\");\n    if (this.defaultL10nId) {\n      div.setAttribute(\"data-l10n-id\", this.defaultL10nId);\n    }\n    if (!this._isVisible) {\n      div.classList.add(\"hidden\");\n    }\n    this.setInForeground();\n    this.#addFocusListeners();\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (this.parentRotation % 180 !== 0) {\n      div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;\n      div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;\n    }\n    const [tx, ty] = this.getInitialTranslation();\n    this.translate(tx, ty);\n    bindEvents(this, div, [\"keydown\", \"pointerdown\", \"dblclick\"]);\n    if (this.isResizable && this._uiManager._supportsPinchToZoom) {\n      this.#touchManager ||= new TouchManager({\n        container: div,\n        isPinchingDisabled: () => !this.isSelected,\n        onPinchStart: this.#touchPinchStartCallback.bind(this),\n        onPinching: this.#touchPinchCallback.bind(this),\n        onPinchEnd: this.#touchPinchEndCallback.bind(this),\n        signal: this._uiManager._signal\n      });\n    }\n    this.addStandaloneCommentButton();\n    this._uiManager._editorUndoBar?.hide();\n    return div;\n  }\n  #touchPinchStartCallback() {\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    this.#altText?.toggle(false);\n    this.parent.togglePointerEvents(false);\n  }\n  #touchPinchCallback(_origin, prevDistance, distance) {\n    const slowDownFactor = 0.7;\n    let factor = slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;\n    if (factor === 1) {\n      return;\n    }\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n    factor = Math.max(Math.min(factor, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);\n    const newWidth = AnnotationEditor._round(savedWidth * factor);\n    const newHeight = AnnotationEditor._round(savedHeight * factor);\n    if (newWidth === savedWidth && newHeight === savedHeight) {\n      return;\n    }\n    this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight];\n    const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);\n    const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]);\n    const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]);\n    const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);\n    this.x = centerX - newTransfCenterPoint[0];\n    this.y = centerY - newTransfCenterPoint[1];\n    this.width = newWidth;\n    this.height = newHeight;\n    this.setDims();\n    this.fixAndSetPosition();\n    this._onResizing();\n  }\n  #touchPinchEndCallback() {\n    this.#altText?.toggle(true);\n    this.parent.togglePointerEvents(true);\n    this.#addResizeToUndoStack();\n  }\n  pointerdown(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      event.preventDefault();\n      return;\n    }\n    this.#hasBeenClicked = true;\n    if (this._isDraggable) {\n      this.#setUpDragSession(event);\n      return;\n    }\n    this.#selectOnPointerEvent(event);\n  }\n  #selectOnPointerEvent(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {\n      this.parent.toggleSelected(this);\n    } else {\n      this.parent.setSelected(this);\n    }\n  }\n  #setUpDragSession(event) {\n    const {\n      isSelected\n    } = this;\n    this._uiManager.setUpDragSession();\n    let hasDraggingStarted = false;\n    const ac = new AbortController();\n    const signal = this._uiManager.combinedSignal(ac);\n    const opts = {\n      capture: true,\n      passive: false,\n      signal\n    };\n    const cancelDrag = e => {\n      ac.abort();\n      this.#dragPointerId = null;\n      this.#hasBeenClicked = false;\n      if (!this._uiManager.endDragSession()) {\n        this.#selectOnPointerEvent(e);\n      }\n      if (hasDraggingStarted) {\n        this._onStopDragging();\n      }\n    };\n    if (isSelected) {\n      this.#prevDragX = event.clientX;\n      this.#prevDragY = event.clientY;\n      this.#dragPointerId = event.pointerId;\n      this.#dragPointerType = event.pointerType;\n      window.addEventListener(\"pointermove\", e => {\n        if (!hasDraggingStarted) {\n          hasDraggingStarted = true;\n          this._uiManager.toggleComment(this, true, false);\n          this._onStartDragging();\n        }\n        const {\n          clientX: x,\n          clientY: y,\n          pointerId\n        } = e;\n        if (pointerId !== this.#dragPointerId) {\n          stopEvent(e);\n          return;\n        }\n        const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY);\n        this.#prevDragX = x;\n        this.#prevDragY = y;\n        this._uiManager.dragSelectedEditors(tx, ty);\n      }, opts);\n      window.addEventListener(\"touchmove\", stopEvent, opts);\n      window.addEventListener(\"pointerdown\", e => {\n        if (e.pointerType === this.#dragPointerType) {\n          if (this.#touchManager || e.isPrimary) {\n            cancelDrag(e);\n          }\n        }\n        stopEvent(e);\n      }, opts);\n    }\n    const pointerUpCallback = e => {\n      if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) {\n        cancelDrag(e);\n        return;\n      }\n      stopEvent(e);\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n  }\n  _onStartDragging() {}\n  _onStopDragging() {}\n  moveInDOM() {\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n    }\n    this.#moveInDOMTimeout = setTimeout(() => {\n      this.#moveInDOMTimeout = null;\n      this.parent?.moveEditorInDOM(this);\n    }, 0);\n  }\n  _setParentAndPosition(parent, x, y) {\n    parent.changeParent(this);\n    this.x = x;\n    this.y = y;\n    this.fixAndSetPosition();\n    this._onTranslated();\n  }\n  getRect(tx, ty, rotation = this.rotation) {\n    const scale = this.parentScale;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const shiftX = tx / scale;\n    const shiftY = ty / scale;\n    const x = this.x * pageWidth;\n    const y = this.y * pageHeight;\n    const width = this.width * pageWidth;\n    const height = this.height * pageHeight;\n    switch (rotation) {\n      case 0:\n        return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];\n      case 90:\n        return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];\n      case 180:\n        return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];\n      case 270:\n        return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  getRectInCurrentCoords(rect, pageHeight) {\n    const [x1, y1, x2, y2] = rect;\n    const width = x2 - x1;\n    const height = y2 - y1;\n    switch (this.rotation) {\n      case 0:\n        return [x1, pageHeight - y2, width, height];\n      case 90:\n        return [x1, pageHeight - y1, height, width];\n      case 180:\n        return [x2, pageHeight - y1, width, height];\n      case 270:\n        return [x2, pageHeight - y2, height, width];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n  getPDFRect() {\n    return this.getRect(0, 0);\n  }\n  getNonHCMColor() {\n    return this.color && AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color));\n  }\n  onUpdatedColor() {\n    this.#comment?.onUpdatedColor();\n  }\n  getData() {\n    const {\n      comment: {\n        text: str,\n        color,\n        date,\n        opacity,\n        deleted,\n        richText\n      },\n      uid: id,\n      pageIndex,\n      creationDate,\n      modificationDate\n    } = this;\n    return {\n      id,\n      pageIndex,\n      rect: this.getPDFRect(),\n      richText,\n      contentsObj: {\n        str\n      },\n      creationDate,\n      modificationDate: date || modificationDate,\n      popupRef: !deleted,\n      color,\n      opacity\n    };\n  }\n  onceAdded(focus) {}\n  isEmpty() {\n    return false;\n  }\n  enableEditMode() {\n    if (this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(false);\n    this.#isInEditMode = true;\n    return true;\n  }\n  disableEditMode() {\n    if (!this.isInEditMode()) {\n      return false;\n    }\n    this.parent.setEditingState(true);\n    this.#isInEditMode = false;\n    return true;\n  }\n  isInEditMode() {\n    return this.#isInEditMode;\n  }\n  shouldGetKeyboardEvents() {\n    return this.#isResizerEnabledForKeyboard;\n  }\n  needsToBeRebuilt() {\n    return this.div && !this.isAttachedToDOM;\n  }\n  get isOnScreen() {\n    const {\n      top,\n      left,\n      bottom,\n      right\n    } = this.getClientDimensions();\n    const {\n      innerHeight,\n      innerWidth\n    } = window;\n    return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;\n  }\n  #addFocusListeners() {\n    if (this.#focusAC || !this.div) {\n      return;\n    }\n    this.#focusAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#focusAC);\n    this.div.addEventListener(\"focusin\", this.focusin.bind(this), {\n      signal\n    });\n    this.div.addEventListener(\"focusout\", this.focusout.bind(this), {\n      signal\n    });\n  }\n  rebuild() {\n    this.#addFocusListeners();\n  }\n  rotate(_angle) {}\n  resize() {}\n  serializeDeleted() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex,\n      popupRef: this._initialData?.popupRef || \"\"\n    };\n  }\n  serialize(isForCopying = false, context = null) {\n    return {\n      annotationType: this.mode,\n      pageIndex: this.pageIndex,\n      rect: this.getPDFRect(),\n      rotation: this.rotation,\n      structTreeParentId: this._structTreeParentId,\n      popupRef: this._initialData?.popupRef || \"\"\n    };\n  }\n  static async deserialize(data, parent, uiManager) {\n    const editor = new this.prototype.constructor({\n      parent,\n      id: uiManager.getId(),\n      uiManager,\n      annotationElementId: data.annotationElementId,\n      creationDate: data.creationDate,\n      modificationDate: data.modificationDate\n    });\n    editor.rotation = data.rotation;\n    editor.#accessibilityData = data.accessibilityData;\n    editor._isCopy = data.isCopy || false;\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);\n    editor.x = x / pageWidth;\n    editor.y = y / pageHeight;\n    editor.width = width / pageWidth;\n    editor.height = height / pageHeight;\n    return editor;\n  }\n  get hasBeenModified() {\n    return !!this.annotationElementId && (this.deleted || this.serialize() !== null);\n  }\n  remove() {\n    this.#focusAC?.abort();\n    this.#focusAC = null;\n    if (!this.isEmpty()) {\n      this.commit();\n    }\n    if (this.parent) {\n      this.parent.remove(this);\n    } else {\n      this._uiManager.removeEditor(this);\n    }\n    this.hideCommentPopup();\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n      this.#moveInDOMTimeout = null;\n    }\n    this.#stopResizing();\n    this.removeEditToolbar();\n    if (this.#telemetryTimeouts) {\n      for (const timeout of this.#telemetryTimeouts.values()) {\n        clearTimeout(timeout);\n      }\n      this.#telemetryTimeouts = null;\n    }\n    this.parent = null;\n    this.#touchManager?.destroy();\n    this.#touchManager = null;\n    this.#fakeAnnotation?.remove();\n    this.#fakeAnnotation = null;\n  }\n  get isResizable() {\n    return false;\n  }\n  makeResizable() {\n    if (this.isResizable) {\n      this.#createResizers();\n      this.#resizersDiv.classList.remove(\"hidden\");\n    }\n  }\n  get toolbarPosition() {\n    return null;\n  }\n  get commentButtonPosition() {\n    return this._uiManager.direction === \"ltr\" ? [1, 0] : [0, 0];\n  }\n  get commentButtonPositionInPage() {\n    const {\n      commentButtonPosition: [posX, posY]\n    } = this;\n    const [blX, blY, trX, trY] = this.getPDFRect();\n    return [AnnotationEditor._round(blX + (trX - blX) * posX), AnnotationEditor._round(blY + (trY - blY) * (1 - posY))];\n  }\n  get commentButtonColor() {\n    return this._uiManager.makeCommentColor(this.getNonHCMColor(), this.opacity);\n  }\n  get commentPopupPosition() {\n    return this.#comment.commentPopupPositionInLayer;\n  }\n  set commentPopupPosition(pos) {\n    this.#comment.commentPopupPositionInLayer = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#comment.hasDefaultPopupPosition();\n  }\n  get commentButtonWidth() {\n    return this.#comment.commentButtonWidth;\n  }\n  get elementBeforePopup() {\n    return this.div;\n  }\n  setCommentButtonStates(options) {\n    this.#comment?.setCommentButtonStates(options);\n  }\n  keydown(event) {\n    if (!this.isResizable || event.target !== this.div || event.key !== \"Enter\") {\n      return;\n    }\n    this._uiManager.setSelected(this);\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height\n    };\n    const children = this.#resizersDiv.children;\n    if (!this.#allResizerDivs) {\n      this.#allResizerDivs = Array.from(children);\n      const boundResizerKeydown = this.#resizerKeydown.bind(this);\n      const boundResizerBlur = this.#resizerBlur.bind(this);\n      const signal = this._uiManager._signal;\n      for (const div of this.#allResizerDivs) {\n        const name = div.getAttribute(\"data-resizer-name\");\n        div.setAttribute(\"role\", \"spinbutton\");\n        div.addEventListener(\"keydown\", boundResizerKeydown, {\n          signal\n        });\n        div.addEventListener(\"blur\", boundResizerBlur, {\n          signal\n        });\n        div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name), {\n          signal\n        });\n        div.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n    const first = this.#allResizerDivs[0];\n    let firstPosition = 0;\n    for (const div of children) {\n      if (div === first) {\n        break;\n      }\n      firstPosition++;\n    }\n    const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4);\n    if (nextFirstPosition !== firstPosition) {\n      if (nextFirstPosition < firstPosition) {\n        for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n          this.#resizersDiv.append(this.#resizersDiv.firstElementChild);\n        }\n      } else if (nextFirstPosition > firstPosition) {\n        for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n          this.#resizersDiv.firstElementChild.before(this.#resizersDiv.lastElementChild);\n        }\n      }\n      let i = 0;\n      for (const child of children) {\n        const div = this.#allResizerDivs[i++];\n        const name = div.getAttribute(\"data-resizer-name\");\n        child.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n      }\n    }\n    this.#setResizerTabIndex(0);\n    this.#isResizerEnabledForKeyboard = true;\n    this.#resizersDiv.firstElementChild.focus({\n      focusVisible: true\n    });\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n  #resizerKeydown(event) {\n    AnnotationEditor._resizerKeyboardManager.exec(this, event);\n  }\n  #resizerBlur(event) {\n    if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) {\n      this.#stopResizing();\n    }\n  }\n  #resizerFocus(name) {\n    this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n  }\n  #setResizerTabIndex(value) {\n    if (!this.#allResizerDivs) {\n      return;\n    }\n    for (const div of this.#allResizerDivs) {\n      div.tabIndex = value;\n    }\n  }\n  _resizeWithKeyboard(x, y) {\n    if (!this.#isResizerEnabledForKeyboard) {\n      return;\n    }\n    this.#resizerPointermove(this.#focusedResizerName, {\n      deltaX: x,\n      deltaY: y,\n      fromKeyboard: true\n    });\n  }\n  #stopResizing() {\n    this.#isResizerEnabledForKeyboard = false;\n    this.#setResizerTabIndex(-1);\n    this.#addResizeToUndoStack();\n  }\n  _stopResizingWithKeyboard() {\n    this.#stopResizing();\n    this.div.focus();\n  }\n  select() {\n    if (this.isSelected && this._editToolbar) {\n      this._editToolbar.show();\n      return;\n    }\n    this.isSelected = true;\n    this.makeResizable();\n    this.div?.classList.add(\"selectedEditor\");\n    if (!this._editToolbar) {\n      this.addEditToolbar().then(() => {\n        if (this.div?.classList.contains(\"selectedEditor\")) {\n          this._editToolbar?.show();\n        }\n      });\n      return;\n    }\n    this._editToolbar?.show();\n    this.#altText?.toggleAltTextBadge(false);\n  }\n  focus() {\n    if (this.div && !this.div.contains(document.activeElement)) {\n      setTimeout(() => this.div?.focus({\n        preventScroll: true\n      }), 0);\n    }\n  }\n  unselect() {\n    if (!this.isSelected) {\n      return;\n    }\n    this.isSelected = false;\n    this.#resizersDiv?.classList.add(\"hidden\");\n    this.div?.classList.remove(\"selectedEditor\");\n    if (this.div?.contains(document.activeElement)) {\n      this._uiManager.currentLayer.div.focus({\n        preventScroll: true\n      });\n    }\n    this._editToolbar?.hide();\n    this.#altText?.toggleAltTextBadge(true);\n    this.hideCommentPopup();\n  }\n  hideCommentPopup() {\n    if (this.hasComment) {\n      this._uiManager.toggleComment(null);\n    }\n  }\n  updateParams(type, value) {}\n  disableEditing() {}\n  enableEditing() {}\n  get canChangeContent() {\n    return false;\n  }\n  enterInEditMode() {\n    if (!this.canChangeContent) {\n      return;\n    }\n    this.enableEditMode();\n    this.div.focus();\n  }\n  dblclick(event) {\n    if (event.target.nodeName === \"BUTTON\") {\n      return;\n    }\n    this.enterInEditMode();\n    this.parent.updateToolbar({\n      mode: this.constructor._editorType,\n      editId: this.uid\n    });\n  }\n  getElementForAltText() {\n    return this.div;\n  }\n  get contentDiv() {\n    return this.div;\n  }\n  get isEditing() {\n    return this.#isEditing;\n  }\n  set isEditing(value) {\n    this.#isEditing = value;\n    if (!this.parent) {\n      return;\n    }\n    if (value) {\n      this.parent.setSelected(this);\n      this.parent.setActiveEditor(this);\n    } else {\n      this.parent.setActiveEditor(null);\n    }\n  }\n  static get MIN_SIZE() {\n    return 16;\n  }\n  static canCreateNewEmptyEditor() {\n    return true;\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\"\n    };\n  }\n  get telemetryFinalData() {\n    return null;\n  }\n  _reportTelemetry(data, mustWait = false) {\n    if (mustWait) {\n      this.#telemetryTimeouts ||= new Map();\n      const {\n        action\n      } = data;\n      let timeout = this.#telemetryTimeouts.get(action);\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      timeout = setTimeout(() => {\n        this._reportTelemetry(data);\n        this.#telemetryTimeouts.delete(action);\n        if (this.#telemetryTimeouts.size === 0) {\n          this.#telemetryTimeouts = null;\n        }\n      }, AnnotationEditor._telemetryTimeout);\n      this.#telemetryTimeouts.set(action, timeout);\n      return;\n    }\n    data.type ||= this.editorType;\n    this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n      source: this,\n      details: {\n        type: \"editing\",\n        data\n      }\n    });\n  }\n  show(visible = this._isVisible) {\n    this.div.classList.toggle(\"hidden\", !visible);\n    this._isVisible = visible;\n  }\n  enable() {\n    if (this.div) {\n      this.div.tabIndex = 0;\n    }\n    this.#disabled = false;\n  }\n  disable() {\n    if (this.div) {\n      this.div.tabIndex = -1;\n    }\n    this.#disabled = true;\n  }\n  updateFakeAnnotationElement(annotationLayer) {\n    if (!this.#fakeAnnotation && !this.deleted) {\n      this.#fakeAnnotation = annotationLayer.addFakeAnnotation(this);\n      return;\n    }\n    if (this.deleted) {\n      this.#fakeAnnotation.remove();\n      this.#fakeAnnotation = null;\n      return;\n    }\n    if (this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) {\n      this.#fakeAnnotation.updateEdited({\n        rect: this.getPDFRect(),\n        popup: this.comment\n      });\n    }\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    let content = annotation.container.querySelector(\".annotationContent\");\n    if (!content) {\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      annotation.container.prepend(content);\n    } else if (content.nodeName === \"CANVAS\") {\n      const canvas = content;\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      canvas.before(content);\n    }\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    const {\n      firstElementChild\n    } = annotation.container;\n    if (firstElementChild?.nodeName === \"DIV\" && firstElementChild.classList.contains(\"annotationContent\")) {\n      firstElementChild.remove();\n    }\n  }\n}\nclass FakeEditor extends AnnotationEditor {\n  constructor(params) {\n    super(params);\n    this.annotationElementId = params.annotationElementId;\n    this.deleted = true;\n  }\n  serialize() {\n    return this.serializeDeleted();\n  }\n}\n\n;// ./src/shared/murmurhash3.js\nconst SEED = 0xc3d2e1f0;\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\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    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\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    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    k1 = 0;\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      case 1:\n        k1 ^= data[blockCounts * 4];\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    this.h1 = h1;\n    this.h2 = h2;\n  }\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\n    h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\n    h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\n    h1 ^= h2 >>> 1;\n    return (h1 >>> 0).toString(16).padStart(8, \"0\") + (h2 >>> 0).toString(16).padStart(8, \"0\");\n  }\n}\n\n;// ./src/display/annotation_storage.js\n\n\n\nconst SerializableEmpty = Object.freeze({\n  map: null,\n  hash: \"\",\n  transfer: undefined\n});\nclass AnnotationStorage {\n  #modified = false;\n  #modifiedIds = null;\n  #editorsMap = null;\n  #storage = new Map();\n  onSetModified = null;\n  onResetModified = null;\n  onAnnotationEditor = null;\n  getValue(key, defaultValue) {\n    const value = this.#storage.get(key);\n    if (value === undefined) {\n      return defaultValue;\n    }\n    return Object.assign(defaultValue, value);\n  }\n  getRawValue(key) {\n    return this.#storage.get(key);\n  }\n  remove(key) {\n    const storedValue = this.#storage.get(key);\n    if (storedValue === undefined) {\n      return;\n    }\n    if (storedValue instanceof AnnotationEditor) {\n      this.#editorsMap.delete(storedValue.annotationElementId);\n    }\n    this.#storage.delete(key);\n    if (this.#storage.size === 0) {\n      this.resetModified();\n    }\n    if (this.#storage.values().some(v => v instanceof AnnotationEditor)) {\n      return;\n    }\n    this.onAnnotationEditor?.(null);\n  }\n  setValue(key, value) {\n    const obj = this.#storage.get(key);\n    let modified = false;\n    if (obj !== undefined) {\n      for (const [entry, val] of Object.entries(value)) {\n        if (obj[entry] !== val) {\n          modified = true;\n          obj[entry] = val;\n        }\n      }\n    } else {\n      modified = true;\n      this.#storage.set(key, value);\n    }\n    if (modified) {\n      this.#setModified();\n    }\n    if (value instanceof AnnotationEditor) {\n      (this.#editorsMap ||= new Map()).set(value.annotationElementId, value);\n      this.onAnnotationEditor?.(value.constructor._type);\n    }\n  }\n  has(key) {\n    return this.#storage.has(key);\n  }\n  get size() {\n    return this.#storage.size;\n  }\n  #setModified() {\n    if (!this.#modified) {\n      this.#modified = true;\n      this.onSetModified?.();\n    }\n  }\n  resetModified() {\n    if (this.#modified) {\n      this.#modified = false;\n      this.onResetModified?.();\n    }\n  }\n  get print() {\n    return new PrintAnnotationStorage(this);\n  }\n  get serializable() {\n    if (this.#storage.size === 0) {\n      return SerializableEmpty;\n    }\n    const map = new Map(),\n      hash = new MurmurHash3_64(),\n      transfer = [];\n    const context = Object.create(null);\n    let hasBitmap = false;\n    for (const [key, val] of this.#storage) {\n      const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val;\n      if (val.page) {\n        val.pageIndex = val.page._pageIndex;\n        delete val.page;\n      }\n      if (serialized) {\n        map.set(key, serialized);\n        hash.update(`${key}:${JSON.stringify(serialized)}`);\n        hasBitmap ||= !!serialized.bitmap;\n      }\n    }\n    if (hasBitmap) {\n      for (const value of map.values()) {\n        if (value.bitmap) {\n          transfer.push(value.bitmap);\n        }\n      }\n    }\n    return map.size > 0 ? {\n      map,\n      hash: hash.hexdigest(),\n      transfer\n    } : SerializableEmpty;\n  }\n  get editorStats() {\n    let stats = null;\n    const typeToEditor = new Map();\n    let numberOfEditedComments = 0;\n    let numberOfDeletedComments = 0;\n    for (const value of this.#storage.values()) {\n      if (!(value instanceof AnnotationEditor)) {\n        if (value.popup) {\n          if (value.popup.deleted) {\n            numberOfDeletedComments += 1;\n          } else {\n            numberOfEditedComments += 1;\n          }\n        }\n        continue;\n      }\n      if (value.isCommentDeleted) {\n        numberOfDeletedComments += 1;\n      } else if (value.hasEditedComment) {\n        numberOfEditedComments += 1;\n      }\n      const editorStats = value.telemetryFinalData;\n      if (!editorStats) {\n        continue;\n      }\n      const {\n        type\n      } = editorStats;\n      typeToEditor.getOrInsertComputed(type, () => Object.getPrototypeOf(value).constructor);\n      stats ||= Object.create(null);\n      const map = stats[type] ||= new Map();\n      for (const [key, val] of Object.entries(editorStats)) {\n        if (key === \"type\") {\n          continue;\n        }\n        const counters = map.getOrInsertComputed(key, makeMap);\n        counters.set(val, (counters.get(val) ?? 0) + 1);\n      }\n    }\n    if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) {\n      stats ||= Object.create(null);\n      stats.comments = {\n        deleted: numberOfDeletedComments,\n        edited: numberOfEditedComments\n      };\n    }\n    if (!stats) {\n      return null;\n    }\n    for (const [type, editor] of typeToEditor) {\n      stats[type] = editor.computeTelemetryFinalData(stats[type]);\n    }\n    return stats;\n  }\n  resetModifiedIds() {\n    this.#modifiedIds = null;\n  }\n  updateEditor(annotationId, data) {\n    const value = this.#editorsMap?.get(annotationId);\n    if (value) {\n      value.updateFromAnnotationLayer(data);\n      return true;\n    }\n    return false;\n  }\n  getEditor(annotationId) {\n    return this.#editorsMap?.get(annotationId) || null;\n  }\n  get modifiedIds() {\n    if (this.#modifiedIds) {\n      return this.#modifiedIds;\n    }\n    const ids = [];\n    if (this.#editorsMap) {\n      for (const value of this.#editorsMap.values()) {\n        if (!value.serialize()) {\n          continue;\n        }\n        ids.push(value.annotationElementId);\n      }\n    }\n    let hash = \"\";\n    if (ids.length) {\n      const h = new MurmurHash3_64();\n      h.update(ids.join(\",\"));\n      hash = h.hexdigest();\n    }\n    return this.#modifiedIds = {\n      ids: new Set(ids),\n      hash\n    };\n  }\n  [Symbol.iterator]() {\n    return this.#storage.entries();\n  }\n}\nclass PrintAnnotationStorage extends AnnotationStorage {\n  #serializable = SerializableEmpty;\n  constructor(parent) {\n    super();\n    const {\n      serializable\n    } = parent;\n    if (serializable === SerializableEmpty) {\n      return;\n    }\n    const {\n      map,\n      hash,\n      transfer\n    } = serializable;\n    const clone = structuredClone(map, transfer ? {\n      transfer\n    } : null);\n    this.#serializable = {\n      map: clone,\n      hash,\n      transfer: []\n    };\n  }\n  get print() {\n    unreachable(\"Should not call PrintAnnotationStorage.print\");\n  }\n  get serializable() {\n    return this.#serializable;\n  }\n  get modifiedIds() {\n    return shadow(this, \"modifiedIds\", {\n      ids: new Set(),\n      hash: \"\"\n    });\n  }\n}\n\n;// ./src/display/canvas_dependency_tracker.js\n\n\n\nconst FORCED_DEPENDENCY_LABEL = \"__forcedDependency\";\nconst {\n  floor,\n  ceil\n} = Math;\nfunction expandBBox(array, index, minX, minY, maxX, maxY) {\n  array[index * 4 + 0] = Math.min(array[index * 4 + 0], minX);\n  array[index * 4 + 1] = Math.min(array[index * 4 + 1], minY);\n  array[index * 4 + 2] = Math.max(array[index * 4 + 2], maxX);\n  array[index * 4 + 3] = Math.max(array[index * 4 + 3], maxY);\n}\nfunction scaleCharBBox(scaleX, scaleY, x, y, bbox) {\n  let temp;\n  if (scaleX) {\n    if (scaleX < 0) {\n      temp = bbox[0];\n      bbox[0] = bbox[2];\n      bbox[2] = temp;\n    }\n    bbox[0] *= scaleX;\n    bbox[2] *= scaleX;\n    if (scaleY < 0) {\n      temp = bbox[1];\n      bbox[1] = bbox[3];\n      bbox[3] = temp;\n    }\n    bbox[1] *= scaleY;\n    bbox[3] *= scaleY;\n  } else {\n    bbox.fill(0);\n  }\n  bbox[0] += x;\n  bbox[1] += y;\n  bbox[2] += x;\n  bbox[3] += y;\n}\nconst EMPTY_BBOX = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0];\nclass BBoxReader {\n  #bboxes;\n  #coords;\n  constructor(bboxes, coords) {\n    this.#bboxes = bboxes;\n    this.#coords = coords;\n  }\n  get length() {\n    return this.#bboxes.length;\n  }\n  isEmpty(i) {\n    return this.#bboxes[i] === EMPTY_BBOX;\n  }\n  minX(i) {\n    return this.#coords[i * 4 + 0] / 256;\n  }\n  minY(i) {\n    return this.#coords[i * 4 + 1] / 256;\n  }\n  maxX(i) {\n    return (this.#coords[i * 4 + 2] + 1) / 256;\n  }\n  maxY(i) {\n    return (this.#coords[i * 4 + 3] + 1) / 256;\n  }\n}\nconst ensureDebugMetadata = (map, key) => map?.getOrInsertComputed(key, () => ({\n  dependencies: new Set(),\n  isRenderingOperation: false\n}));\nclass CanvasBBoxTracker {\n  #baseTransformStack = [[1, 0, 0, 1, 0, 0]];\n  #clipBox = [-Infinity, -Infinity, Infinity, Infinity];\n  #pendingBBox = new Float64Array(BBOX_INIT);\n  _pendingBBoxIdx = -1;\n  #canvasWidth;\n  #canvasHeight;\n  #bboxesCoords;\n  #bboxes;\n  _savesStack = [];\n  _markedContentStack = [];\n  constructor(canvas, operationsCount) {\n    this.#canvasWidth = canvas.width;\n    this.#canvasHeight = canvas.height;\n    this.#initializeBBoxes(operationsCount);\n  }\n  growOperationsCount(operationsCount) {\n    if (operationsCount >= this.#bboxes.length) {\n      this.#initializeBBoxes(operationsCount, this.#bboxes);\n    }\n  }\n  #initializeBBoxes(operationsCount, oldBBoxes) {\n    const buffer = new ArrayBuffer(operationsCount * 4);\n    this.#bboxesCoords = new Uint8ClampedArray(buffer);\n    this.#bboxes = new Uint32Array(buffer);\n    if (oldBBoxes && oldBBoxes.length > 0) {\n      this.#bboxes.set(oldBBoxes);\n      this.#bboxes.fill(EMPTY_BBOX, oldBBoxes.length);\n    } else {\n      this.#bboxes.fill(EMPTY_BBOX);\n    }\n  }\n  get clipBox() {\n    return this.#clipBox;\n  }\n  save(opIdx) {\n    this.#clipBox = {\n      __proto__: this.#clipBox\n    };\n    this._savesStack.push(opIdx);\n    return this;\n  }\n  restore(opIdx, onSavePopped) {\n    const previous = Object.getPrototypeOf(this.#clipBox);\n    if (previous === null) {\n      return this;\n    }\n    this.#clipBox = previous;\n    const lastSave = this._savesStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  recordOpenMarker(idx) {\n    this._savesStack.push(idx);\n    return this;\n  }\n  getOpenMarker() {\n    if (this._savesStack.length === 0) {\n      return null;\n    }\n    return this._savesStack.at(-1);\n  }\n  recordCloseMarker(opIdx, onSavePopped) {\n    const lastSave = this._savesStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    this._markedContentStack.push(opIdx);\n    return this;\n  }\n  endMarkedContent(opIdx, onSavePopped) {\n    const lastSave = this._markedContentStack.pop();\n    if (lastSave !== undefined) {\n      onSavePopped?.(lastSave, opIdx);\n      this.#bboxes[opIdx] = this.#bboxes[lastSave];\n    }\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#baseTransformStack.push(Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform()));\n    return this;\n  }\n  popBaseTransform() {\n    if (this.#baseTransformStack.length > 1) {\n      this.#baseTransformStack.pop();\n    }\n    return this;\n  }\n  resetBBox(idx) {\n    if (this._pendingBBoxIdx !== idx) {\n      this._pendingBBoxIdx = idx;\n      this.#pendingBBox.set(BBOX_INIT, 0);\n    }\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform());\n    const clipBox = BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, clipBox);\n    const intersection = Util.intersect(this.#clipBox, clipBox);\n    if (intersection) {\n      this.#clipBox[0] = intersection[0];\n      this.#clipBox[1] = intersection[1];\n      this.#clipBox[2] = intersection[2];\n      this.#clipBox[3] = intersection[3];\n    } else {\n      this.#clipBox[0] = this.#clipBox[1] = Infinity;\n      this.#clipBox[2] = this.#clipBox[3] = -Infinity;\n    }\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    const clipBox = this.#clipBox;\n    if (clipBox[0] === Infinity) {\n      return this;\n    }\n    const transform = Util.multiplyByDOMMatrix(this.#baseTransformStack.at(-1), ctx.getTransform());\n    if (clipBox[0] === -Infinity) {\n      Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, this.#pendingBBox);\n      return this;\n    }\n    const bbox = BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([minX, minY, maxX, maxY], transform, bbox);\n    this.#pendingBBox[0] = MathClamp(bbox[0], clipBox[0], this.#pendingBBox[0]);\n    this.#pendingBBox[1] = MathClamp(bbox[1], clipBox[1], this.#pendingBBox[1]);\n    this.#pendingBBox[2] = MathClamp(bbox[2], this.#pendingBBox[2], clipBox[2]);\n    this.#pendingBBox[3] = MathClamp(bbox[3], this.#pendingBBox[3], clipBox[3]);\n    return this;\n  }\n  recordFullPageBBox(idx) {\n    this.#pendingBBox[0] = Math.max(0, this.#clipBox[0]);\n    this.#pendingBBox[1] = Math.max(0, this.#clipBox[1]);\n    this.#pendingBBox[2] = Math.min(this.#canvasWidth, this.#clipBox[2]);\n    this.#pendingBBox[3] = Math.min(this.#canvasHeight, this.#clipBox[3]);\n    return this;\n  }\n  recordOperation(idx, preserve = false, dependencyLists) {\n    if (this._pendingBBoxIdx !== idx) {\n      return this;\n    }\n    const minX = floor(this.#pendingBBox[0] * 256 / this.#canvasWidth);\n    const minY = floor(this.#pendingBBox[1] * 256 / this.#canvasHeight);\n    const maxX = ceil(this.#pendingBBox[2] * 256 / this.#canvasWidth);\n    const maxY = ceil(this.#pendingBBox[3] * 256 / this.#canvasHeight);\n    expandBBox(this.#bboxesCoords, idx, minX, minY, maxX, maxY);\n    if (dependencyLists) {\n      for (const dependencies of dependencyLists) {\n        for (const depIdx of dependencies) {\n          if (depIdx !== idx) {\n            expandBBox(this.#bboxesCoords, depIdx, minX, minY, maxX, maxY);\n          }\n        }\n      }\n    }\n    if (!preserve) {\n      this._pendingBBoxIdx = -1;\n    }\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx) {\n    if (this._pendingBBoxIdx === idx) {\n      this._pendingBBoxIdx = -1;\n      this.#clipBox[0] = Math.max(this.#clipBox[0], this.#pendingBBox[0]);\n      this.#clipBox[1] = Math.max(this.#clipBox[1], this.#pendingBBox[1]);\n      this.#clipBox[2] = Math.min(this.#clipBox[2], this.#pendingBBox[2]);\n      this.#clipBox[3] = Math.min(this.#clipBox[3], this.#pendingBBox[3]);\n    }\n    return this;\n  }\n  take() {\n    return new BBoxReader(this.#bboxes, this.#bboxesCoords);\n  }\n  takeDebugMetadata() {\n    throw new Error(\"Unreachable\");\n  }\n  recordSimpleData(name, idx) {\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    return this;\n  }\n  recordNamedData(name, idx) {\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    return this;\n  }\n  recordFutureForcedDependency(name, idx) {\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return undefined;\n  }\n  recordDependencies(idx, dependencyNames) {\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    return this;\n  }\n  recordShowTextOperation(idx, preserve = false) {\n    return this;\n  }\n}\nclass CanvasDependencyTracker {\n  #simple = {\n    __proto__: null\n  };\n  #incremental = {\n    __proto__: null,\n    transform: [],\n    moveText: [],\n    sameLineText: [],\n    [FORCED_DEPENDENCY_LABEL]: []\n  };\n  #namedDependencies = new Map();\n  #pendingDependencies = new Set();\n  #fontBBoxTrustworthy = new Map();\n  #debugMetadata;\n  #recordDebugMetadataDepenencyAfterRestore;\n  #bboxTracker;\n  constructor(bboxTracker, recordDebugMetadata = false) {\n    this.#bboxTracker = bboxTracker;\n    if (recordDebugMetadata) {\n      this.#debugMetadata = new Map();\n      this.#recordDebugMetadataDepenencyAfterRestore = (lastSave, opIdx) => {\n        ensureDebugMetadata(this.#debugMetadata, opIdx).dependencies.add(lastSave);\n      };\n    }\n  }\n  get clipBox() {\n    return this.#bboxTracker.clipBox;\n  }\n  growOperationsCount(operationsCount) {\n    this.#bboxTracker.growOperationsCount(operationsCount);\n  }\n  save(opIdx) {\n    this.#simple = {\n      __proto__: this.#simple\n    };\n    this.#incremental = {\n      __proto__: this.#incremental,\n      transform: {\n        __proto__: this.#incremental.transform\n      },\n      moveText: {\n        __proto__: this.#incremental.moveText\n      },\n      sameLineText: {\n        __proto__: this.#incremental.sameLineText\n      },\n      [FORCED_DEPENDENCY_LABEL]: {\n        __proto__: this.#incremental[FORCED_DEPENDENCY_LABEL]\n      }\n    };\n    this.#bboxTracker.save(opIdx);\n    return this;\n  }\n  restore(opIdx) {\n    this.#bboxTracker.restore(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    const previous = Object.getPrototypeOf(this.#simple);\n    if (previous === null) {\n      return this;\n    }\n    this.#simple = previous;\n    this.#incremental = Object.getPrototypeOf(this.#incremental);\n    return this;\n  }\n  recordOpenMarker(opIdx) {\n    this.#bboxTracker.recordOpenMarker(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  getOpenMarker() {\n    return this.#bboxTracker.getOpenMarker();\n  }\n  recordCloseMarker(opIdx) {\n    this.#bboxTracker.recordCloseMarker(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    this.#bboxTracker.beginMarkedContent(opIdx);\n    return this;\n  }\n  endMarkedContent(opIdx) {\n    this.#bboxTracker.endMarkedContent(opIdx, this.#recordDebugMetadataDepenencyAfterRestore);\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#bboxTracker.pushBaseTransform(ctx);\n    return this;\n  }\n  popBaseTransform() {\n    this.#bboxTracker.popBaseTransform();\n    return this;\n  }\n  recordSimpleData(name, idx) {\n    this.#simple[name] = idx;\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    this.#incremental[name].push(idx);\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    this.#incremental[name].length = 0;\n    return this;\n  }\n  recordNamedData(name, idx) {\n    this.#namedDependencies.set(name, idx);\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#simple[name] = this.#namedDependencies.get(depName) ?? fallbackIdx;\n  }\n  recordFutureForcedDependency(name, idx) {\n    this.recordIncrementalData(FORCED_DEPENDENCY_LABEL, idx);\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    for (const name of names) {\n      if (name in this.#simple) {\n        this.recordFutureForcedDependency(name, this.#simple[name]);\n      }\n    }\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    for (const dep of this.#pendingDependencies) {\n      this.recordFutureForcedDependency(FORCED_DEPENDENCY_LABEL, dep);\n    }\n    return this;\n  }\n  resetBBox(idx) {\n    this.#bboxTracker.resetBBox(idx);\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    this.#bboxTracker.recordClipBox(idx, ctx, minX, maxX, minY, maxY);\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    this.#bboxTracker.recordBBox(idx, ctx, minX, maxX, minY, maxY);\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale = 1, x = 0, y = 0, getMeasure) {\n    const fontBBox = font.bbox;\n    let isBBoxTrustworthy;\n    let computedBBox;\n    if (fontBBox) {\n      isBBoxTrustworthy = fontBBox[2] !== fontBBox[0] && fontBBox[3] !== fontBBox[1] && this.#fontBBoxTrustworthy.get(font);\n      if (isBBoxTrustworthy !== false) {\n        computedBBox = [0, 0, 0, 0];\n        Util.axialAlignedBoundingBox(fontBBox, font.fontMatrix, computedBBox);\n        if (scale !== 1 || x !== 0 || y !== 0) {\n          scaleCharBBox(scale, -scale, x, y, computedBBox);\n        }\n        if (isBBoxTrustworthy) {\n          return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]);\n        }\n      }\n    }\n    if (!getMeasure) {\n      return this.recordFullPageBBox(idx);\n    }\n    const measure = getMeasure();\n    if (fontBBox && computedBBox && isBBoxTrustworthy === undefined) {\n      isBBoxTrustworthy = computedBBox[0] <= x - measure.actualBoundingBoxLeft && computedBBox[2] >= x + measure.actualBoundingBoxRight && computedBBox[1] <= y - measure.actualBoundingBoxAscent && computedBBox[3] >= y + measure.actualBoundingBoxDescent;\n      this.#fontBBoxTrustworthy.set(font, isBBoxTrustworthy);\n      if (isBBoxTrustworthy) {\n        return this.recordBBox(idx, ctx, computedBBox[0], computedBBox[2], computedBBox[1], computedBBox[3]);\n      }\n    }\n    return this.recordBBox(idx, ctx, x - measure.actualBoundingBoxLeft, x + measure.actualBoundingBoxRight, y - measure.actualBoundingBoxAscent, y + measure.actualBoundingBoxDescent);\n  }\n  recordFullPageBBox(idx) {\n    this.#bboxTracker.recordFullPageBBox(idx);\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return this.#simple[dependencyName];\n  }\n  recordDependencies(idx, dependencyNames) {\n    const pendingDependencies = this.#pendingDependencies;\n    const simple = this.#simple;\n    const incremental = this.#incremental;\n    for (const name of dependencyNames) {\n      if (name in this.#simple) {\n        pendingDependencies.add(simple[name]);\n      } else if (name in incremental) {\n        incremental[name].forEach(pendingDependencies.add, pendingDependencies);\n      }\n    }\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    if (this.#namedDependencies.has(name)) {\n      this.#pendingDependencies.add(this.#namedDependencies.get(name));\n    }\n    return this;\n  }\n  recordOperation(idx, preserve = false) {\n    this.recordDependencies(idx, [FORCED_DEPENDENCY_LABEL]);\n    if (this.#debugMetadata) {\n      const metadata = ensureDebugMetadata(this.#debugMetadata, idx);\n      const {\n        dependencies\n      } = metadata;\n      this.#pendingDependencies.forEach(dependencies.add, dependencies);\n      this.#bboxTracker._savesStack.forEach(dependencies.add, dependencies);\n      this.#bboxTracker._markedContentStack.forEach(dependencies.add, dependencies);\n      dependencies.delete(idx);\n      metadata.isRenderingOperation = true;\n    }\n    const needsCleanup = !preserve && idx === this.#bboxTracker._pendingBBoxIdx;\n    this.#bboxTracker.recordOperation(idx, preserve, [this.#pendingDependencies, this.#bboxTracker._savesStack, this.#bboxTracker._markedContentStack]);\n    if (needsCleanup) {\n      this.#pendingDependencies.clear();\n    }\n    return this;\n  }\n  recordShowTextOperation(idx, preserve = false) {\n    const deps = Array.from(this.#pendingDependencies);\n    this.recordOperation(idx, preserve);\n    this.recordIncrementalData(\"sameLineText\", idx);\n    for (const dep of deps) {\n      this.recordIncrementalData(\"sameLineText\", dep);\n    }\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx, preserve = false) {\n    const needsCleanup = !preserve && idx === this.#bboxTracker._pendingBBoxIdx;\n    this.#bboxTracker.bboxToClipBoxDropOperation(idx);\n    if (needsCleanup) {\n      this.#pendingDependencies.clear();\n    }\n    return this;\n  }\n  take() {\n    this.#fontBBoxTrustworthy.clear();\n    return this.#bboxTracker.take();\n  }\n  takeDebugMetadata() {\n    return this.#debugMetadata;\n  }\n}\nclass CanvasNestedDependencyTracker {\n  #dependencyTracker;\n  #opIdx;\n  #ignoreBBoxes;\n  #nestingLevel = 0;\n  #savesLevel = 0;\n  constructor(dependencyTracker, opIdx, ignoreBBoxes) {\n    if (dependencyTracker instanceof CanvasNestedDependencyTracker && dependencyTracker.#ignoreBBoxes === !!ignoreBBoxes) {\n      return dependencyTracker;\n    }\n    this.#dependencyTracker = dependencyTracker;\n    this.#opIdx = opIdx;\n    this.#ignoreBBoxes = !!ignoreBBoxes;\n  }\n  get clipBox() {\n    return this.#dependencyTracker.clipBox;\n  }\n  growOperationsCount() {\n    throw new Error(\"Unreachable\");\n  }\n  save(opIdx) {\n    this.#savesLevel++;\n    this.#dependencyTracker.save(this.#opIdx);\n    return this;\n  }\n  restore(opIdx) {\n    if (this.#savesLevel > 0) {\n      this.#dependencyTracker.restore(this.#opIdx);\n      this.#savesLevel--;\n    }\n    return this;\n  }\n  recordOpenMarker(idx) {\n    this.#nestingLevel++;\n    return this;\n  }\n  getOpenMarker() {\n    return this.#nestingLevel > 0 ? this.#opIdx : this.#dependencyTracker.getOpenMarker();\n  }\n  recordCloseMarker(idx) {\n    this.#nestingLevel--;\n    return this;\n  }\n  beginMarkedContent(opIdx) {\n    return this;\n  }\n  endMarkedContent(opIdx) {\n    return this;\n  }\n  pushBaseTransform(ctx) {\n    this.#dependencyTracker.pushBaseTransform(ctx);\n    return this;\n  }\n  popBaseTransform() {\n    this.#dependencyTracker.popBaseTransform();\n    return this;\n  }\n  recordSimpleData(name, idx) {\n    this.#dependencyTracker.recordSimpleData(name, this.#opIdx);\n    return this;\n  }\n  recordIncrementalData(name, idx) {\n    this.#dependencyTracker.recordIncrementalData(name, this.#opIdx);\n    return this;\n  }\n  resetIncrementalData(name, idx) {\n    this.#dependencyTracker.resetIncrementalData(name, this.#opIdx);\n    return this;\n  }\n  recordNamedData(name, idx) {\n    return this;\n  }\n  recordSimpleDataFromNamed(name, depName, fallbackIdx) {\n    this.#dependencyTracker.recordSimpleDataFromNamed(name, depName, this.#opIdx);\n    return this;\n  }\n  recordFutureForcedDependency(name, idx) {\n    this.#dependencyTracker.recordFutureForcedDependency(name, this.#opIdx);\n    return this;\n  }\n  inheritSimpleDataAsFutureForcedDependencies(names) {\n    this.#dependencyTracker.inheritSimpleDataAsFutureForcedDependencies(names);\n    return this;\n  }\n  inheritPendingDependenciesAsFutureForcedDependencies() {\n    this.#dependencyTracker.inheritPendingDependenciesAsFutureForcedDependencies();\n    return this;\n  }\n  resetBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.resetBBox(this.#opIdx);\n    }\n    return this;\n  }\n  recordClipBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordClipBox(this.#opIdx, ctx, minX, maxX, minY, maxY);\n    }\n    return this;\n  }\n  recordBBox(idx, ctx, minX, maxX, minY, maxY) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordBBox(this.#opIdx, ctx, minX, maxX, minY, maxY);\n    }\n    return this;\n  }\n  recordCharacterBBox(idx, ctx, font, scale, x, y, getMeasure) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordCharacterBBox(this.#opIdx, ctx, font, scale, x, y, getMeasure);\n    }\n    return this;\n  }\n  recordFullPageBBox(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.recordFullPageBBox(this.#opIdx);\n    }\n    return this;\n  }\n  getSimpleIndex(dependencyName) {\n    return this.#dependencyTracker.getSimpleIndex(dependencyName);\n  }\n  recordDependencies(idx, dependencyNames) {\n    this.#dependencyTracker.recordDependencies(this.#opIdx, dependencyNames);\n    return this;\n  }\n  recordNamedDependency(idx, name) {\n    this.#dependencyTracker.recordNamedDependency(this.#opIdx, name);\n    return this;\n  }\n  recordOperation(idx) {\n    this.#dependencyTracker.recordOperation(this.#opIdx, true);\n    return this;\n  }\n  recordShowTextOperation(idx) {\n    this.#dependencyTracker.recordShowTextOperation(this.#opIdx, true);\n    return this;\n  }\n  bboxToClipBoxDropOperation(idx) {\n    if (!this.#ignoreBBoxes) {\n      this.#dependencyTracker.bboxToClipBoxDropOperation(this.#opIdx, true);\n    }\n    return this;\n  }\n  take() {\n    throw new Error(\"Unreachable\");\n  }\n  takeDebugMetadata() {\n    throw new Error(\"Unreachable\");\n  }\n}\nconst Dependencies = {\n  stroke: [\"path\", \"transform\", \"filter\", \"strokeColor\", \"strokeAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"dash\"],\n  fill: [\"path\", \"transform\", \"filter\", \"fillColor\", \"fillAlpha\", \"globalCompositeOperation\", \"SMask\"],\n  imageXObject: [\"transform\", \"SMask\", \"filter\", \"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\"],\n  rawFillPath: [\"filter\", \"fillColor\", \"fillAlpha\"],\n  showText: [\"transform\", \"leading\", \"charSpacing\", \"wordSpacing\", \"hScale\", \"textRise\", \"moveText\", \"textMatrix\", \"font\", \"fontObj\", \"filter\", \"fillColor\", \"textRenderingMode\", \"SMask\", \"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\", \"sameLineText\"],\n  transform: [\"transform\"],\n  transformAndFill: [\"transform\", \"fillColor\"]\n};\nclass CanvasImagesTracker {\n  #canvasWidth;\n  #canvasHeight;\n  #capacity = 4;\n  #count = 0;\n  #coords = new CanvasImagesTracker.#CoordsArray(this.#capacity * 6);\n  static #CoordsArray = FeatureTest.isFloat16ArraySupported ? Float16Array : Float32Array;\n  constructor(canvas) {\n    this.#canvasWidth = canvas.width;\n    this.#canvasHeight = canvas.height;\n  }\n  record(ctx, width, height, clipBox) {\n    if (this.#count === this.#capacity) {\n      this.#capacity *= 2;\n      const newCoords = new CanvasImagesTracker.#CoordsArray(this.#capacity * 6);\n      newCoords.set(this.#coords);\n      this.#coords = newCoords;\n    }\n    const transform = getCurrentTransform(ctx);\n    let coords;\n    if (clipBox[0] !== Infinity) {\n      const bbox = BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, -height, width, 0], transform, bbox);\n      const finalBBox = Util.intersect(clipBox, bbox);\n      if (!finalBBox) {\n        return;\n      }\n      const [minX, minY, maxX, maxY] = finalBBox;\n      if (minX !== bbox[0] || minY !== bbox[1] || maxX !== bbox[2] || maxY !== bbox[3]) {\n        const rotationAngle = Math.atan2(transform[1], transform[0]);\n        const sin = Math.abs(Math.sin(rotationAngle));\n        const cos = Math.abs(Math.cos(rotationAngle));\n        if (sin < 1e-6 || cos < 1e-6 || Math.abs(sin - cos) < 1e-6) {\n          coords = [minX, minY, minX, maxY, maxX, minY];\n        } else {\n          const finalBBoxWidth = maxX - minX;\n          const finalBBoxHeight = maxY - minY;\n          const sin2 = sin * sin;\n          const cos2 = cos * cos;\n          const cosSin = cos * sin;\n          const denom = cos2 - sin2;\n          const a = (finalBBoxHeight * cos2 - finalBBoxWidth * cosSin) / denom;\n          const b = (finalBBoxHeight * cosSin - finalBBoxWidth * sin2) / denom;\n          coords = [minX + b, minY, minX, minY + a, maxX, maxY - a];\n        }\n      }\n    }\n    if (!coords) {\n      coords = [0, -height, 0, 0, width, -height];\n      Util.applyTransform(coords, transform, 0);\n      Util.applyTransform(coords, transform, 2);\n      Util.applyTransform(coords, transform, 4);\n    }\n    coords[0] /= this.#canvasWidth;\n    coords[1] /= this.#canvasHeight;\n    coords[2] /= this.#canvasWidth;\n    coords[3] /= this.#canvasHeight;\n    coords[4] /= this.#canvasWidth;\n    coords[5] /= this.#canvasHeight;\n    this.#coords.set(coords, this.#count * 6);\n    this.#count++;\n  }\n  take() {\n    return this.#coords.subarray(0, this.#count * 6);\n  }\n}\n\n;// ./src/display/font_loader.js\n\n\nclass FontLoader {\n  #systemFonts = new Set();\n  #styleSheet = null;\n  constructor({\n    ownerDocument = globalThis.document,\n    styleElement = null\n  }) {\n    this._document = ownerDocument;\n    this.nativeFontFaces = new Set();\n    this.styleElement = null;\n    this.loadingRequests = [];\n    this.loadTestFontId = 0;\n  }\n  addNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.add(nativeFontFace);\n    this._document.fonts.add(nativeFontFace);\n  }\n  removeNativeFontFace(nativeFontFace) {\n    this.nativeFontFaces.delete(nativeFontFace);\n    this._document.fonts.delete(nativeFontFace);\n  }\n  insertRule(rule) {\n    const styleSheet = this.#getStyleSheet();\n    styleSheet.insertRule(rule, styleSheet.cssRules.length);\n  }\n  #getStyleSheet() {\n    if (this.#styleSheet) {\n      return this.#styleSheet;\n    }\n    const StyleSheet = this._document.defaultView?.CSSStyleSheet || globalThis.CSSStyleSheet;\n    if (!this.styleElement && StyleSheet) {\n      const {\n        adoptedStyleSheets\n      } = this._document;\n      if (adoptedStyleSheets) {\n        const styleSheet = new StyleSheet();\n        adoptedStyleSheets.push(styleSheet);\n        return this.#styleSheet = styleSheet;\n      }\n    }\n    if (!this.styleElement) {\n      this.styleElement = this._document.createElement(\"style\");\n      this._document.documentElement.getElementsByTagName(\"head\")[0].append(this.styleElement);\n    }\n    return this.#styleSheet = this.styleElement.sheet;\n  }\n  clear() {\n    for (const nativeFontFace of this.nativeFontFaces) {\n      this._document.fonts.delete(nativeFontFace);\n    }\n    this.nativeFontFaces.clear();\n    this.#systemFonts.clear();\n    if (this.#styleSheet) {\n      const {\n        adoptedStyleSheets\n      } = this._document;\n      if (adoptedStyleSheets?.includes(this.#styleSheet)) {\n        this._document.adoptedStyleSheets = adoptedStyleSheets.filter(styleSheet => styleSheet !== this.#styleSheet);\n      }\n      this.#styleSheet = null;\n    }\n    if (this.styleElement) {\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n  async loadSystemFont({\n    systemFontInfo: info,\n    disableFontFace,\n    _inspectFont\n  }) {\n    if (!info || this.#systemFonts.has(info.loadedName)) {\n      return;\n    }\n    assert(!disableFontFace, \"loadSystemFont shouldn't be called when `disableFontFace` is set.\");\n    if (this.isFontLoadingAPISupported) {\n      const {\n        loadedName,\n        src,\n        style\n      } = info;\n      const fontFace = new FontFace(loadedName, src, style);\n      this.addNativeFontFace(fontFace);\n      try {\n        await fontFace.load();\n        this.#systemFonts.add(loadedName);\n        _inspectFont?.(info);\n      } catch {\n        warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);\n        this.removeNativeFontFace(fontFace);\n      }\n      return;\n    }\n    unreachable(\"Not implemented: loadSystemFont without the Font Loading API.\");\n  }\n  async bind(font) {\n    if (font.attached || font.missingFile && !font.systemFontInfo) {\n      return;\n    }\n    font.attached = true;\n    if (font.systemFontInfo) {\n      await this.loadSystemFont(font);\n      return;\n    }\n    if (this.isFontLoadingAPISupported) {\n      const nativeFontFace = font.createNativeFontFace();\n      if (nativeFontFace) {\n        this.addNativeFontFace(nativeFontFace);\n        try {\n          await nativeFontFace.loaded;\n        } catch (ex) {\n          warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n          font.disableFontFace = true;\n          throw ex;\n        }\n      }\n      return;\n    }\n    const rule = font.createFontFaceRule();\n    if (rule) {\n      this.insertRule(rule);\n      if (this.isSyncFontLoadingSupported) {\n        return;\n      }\n      await new Promise(resolve => {\n        const request = this._queueLoadingCallback(resolve);\n        this._prepareFontLoadEvent(font, request);\n      });\n    }\n  }\n  get isFontLoadingAPISupported() {\n    const hasFonts = !!this._document?.fonts;\n    return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n  }\n  get isSyncFontLoadingSupported() {\n    return shadow(this, \"isSyncFontLoadingSupported\", isNodeJS || FeatureTest.platform.isFirefox);\n  }\n  _queueLoadingCallback(callback) {\n    function completeRequest() {\n      assert(!request.done, \"completeRequest() cannot be called twice.\");\n      request.done = true;\n      while (loadingRequests.length > 0 && loadingRequests[0].done) {\n        const otherRequest = loadingRequests.shift();\n        setTimeout(otherRequest.callback, 0);\n      }\n    }\n    const {\n      loadingRequests\n    } = this;\n    const request = {\n      done: false,\n      complete: completeRequest,\n      callback\n    };\n    loadingRequests.push(request);\n    return request;\n  }\n  get _loadTestFont() {\n    const testFont = atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" + \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" + \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" + \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" + \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" + \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" + \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" + \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" + \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" + \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" + \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" + \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" + \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" + \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" + \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" + \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" + \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\n    return shadow(this, \"_loadTestFont\", testFont);\n  }\n  _prepareFontLoadEvent(font, request) {\n    function int32(data, offset) {\n      return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\n    }\n    function string32(value) {\n      return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n    }\n    function spliceString(s, offset, remove, insert) {\n      const chunk1 = s.substring(0, offset);\n      const chunk2 = s.substring(offset + remove);\n      return chunk1 + insert + chunk2;\n    }\n    let i, ii;\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext(\"2d\");\n    let called = 0;\n    function isFontReady(name, callback) {\n      if (++called > 30) {\n        warn(\"Load test font never loaded.\");\n        callback();\n        return;\n      }\n      ctx.font = \"30px \" + name;\n      ctx.fillText(\".\", 0, 20);\n      const imageData = ctx.getImageData(0, 0, 1, 1);\n      if (imageData.data[3] > 0) {\n        callback();\n        return;\n      }\n      setTimeout(isFontReady.bind(null, name, callback));\n    }\n    const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n    let data = this._loadTestFont;\n    const COMMENT_OFFSET = 976;\n    data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\n    const CFF_CHECKSUM_OFFSET = 16;\n    const XXXX_VALUE = 0x58585858;\n    let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n    for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\n    }\n    if (i < loadTestFontId.length) {\n      checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\n    }\n    data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n    const url = `url(data:font/opentype;base64,${btoa(data)});`;\n    const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n    this.insertRule(rule);\n    const div = this._document.createElement(\"div\");\n    div.style.visibility = \"hidden\";\n    div.style.width = div.style.height = \"10px\";\n    div.style.position = \"absolute\";\n    div.style.top = div.style.left = \"0px\";\n    for (const name of [font.loadedName, loadTestFontId]) {\n      const span = this._document.createElement(\"span\");\n      span.textContent = \"Hi\";\n      span.style.fontFamily = name;\n      div.append(span);\n    }\n    this._document.body.append(div);\n    isFontReady(loadTestFontId, () => {\n      div.remove();\n      request.complete();\n    });\n  }\n}\nclass FontFaceObject {\n  compiledGlyphs = Object.create(null);\n  #fontData;\n  constructor(translatedData, inspectFont = null, charProcOperatorList, extra) {\n    this.#fontData = translatedData;\n    this._inspectFont = inspectFont;\n    if (charProcOperatorList) {\n      this.charProcOperatorList = charProcOperatorList;\n    }\n    if (extra) {\n      Object.assign(this, extra);\n    }\n  }\n  createNativeFontFace() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    let nativeFontFace;\n    if (!this.cssFontInfo) {\n      nativeFontFace = new FontFace(this.loadedName, this.data, {});\n    } else {\n      const css = {\n        weight: this.cssFontInfo.fontWeight\n      };\n      if (this.cssFontInfo.italicAngle) {\n        css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n      }\n      nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);\n    }\n    this._inspectFont?.(this);\n    return nativeFontFace;\n  }\n  createFontFaceRule() {\n    if (!this.data || this.disableFontFace) {\n      return null;\n    }\n    const url = `url(data:${this.mimetype};base64,${this.data.toBase64()});`;\n    let rule;\n    if (!this.cssFontInfo) {\n      rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n    } else {\n      let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n      if (this.cssFontInfo.italicAngle) {\n        css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n      }\n      rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n    }\n    this._inspectFont?.(this, url);\n    return rule;\n  }\n  getPathGenerator(objs, character) {\n    if (this.compiledGlyphs[character] !== undefined) {\n      return this.compiledGlyphs[character];\n    }\n    const objId = this.loadedName + \"_path_\" + character;\n    let cmds;\n    try {\n      cmds = objs.get(objId);\n    } catch (ex) {\n      warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n    }\n    const path = makePathFromDrawOPS(cmds?.path);\n    if (!this.fontExtraProperties) {\n      objs.delete(objId);\n    }\n    return this.compiledGlyphs[character] = path;\n  }\n  get black() {\n    return this.#fontData.black;\n  }\n  get bold() {\n    return this.#fontData.bold;\n  }\n  get disableFontFace() {\n    return this.#fontData.disableFontFace;\n  }\n  set disableFontFace(value) {\n    shadow(this, \"disableFontFace\", !!value);\n  }\n  get fontExtraProperties() {\n    return this.#fontData.fontExtraProperties;\n  }\n  get isInvalidPDFjsFont() {\n    return this.#fontData.isInvalidPDFjsFont;\n  }\n  get isType3Font() {\n    return this.#fontData.isType3Font;\n  }\n  get italic() {\n    return this.#fontData.italic;\n  }\n  get missingFile() {\n    return this.#fontData.missingFile;\n  }\n  get remeasure() {\n    return this.#fontData.remeasure;\n  }\n  get vertical() {\n    return this.#fontData.vertical;\n  }\n  get ascent() {\n    return this.#fontData.ascent;\n  }\n  get defaultWidth() {\n    return this.#fontData.defaultWidth;\n  }\n  get descent() {\n    return this.#fontData.descent;\n  }\n  get bbox() {\n    return this.#fontData.bbox;\n  }\n  get fontMatrix() {\n    return this.#fontData.fontMatrix;\n  }\n  get fallbackName() {\n    return this.#fontData.fallbackName;\n  }\n  get loadedName() {\n    return this.#fontData.loadedName;\n  }\n  get mimetype() {\n    return this.#fontData.mimetype;\n  }\n  get name() {\n    return this.#fontData.name;\n  }\n  get data() {\n    return this.#fontData.data;\n  }\n  clearData() {\n    this.#fontData.clearData();\n  }\n  get cssFontInfo() {\n    return this.#fontData.cssFontInfo;\n  }\n  get systemFontInfo() {\n    return this.#fontData.systemFontInfo;\n  }\n  get defaultVMetrics() {\n    return this.#fontData.defaultVMetrics;\n  }\n}\n\n;// ./src/shared/obj_bin_transform_utils.js\nclass CSS_FONT_INFO {\n  static strings = [\"fontFamily\", \"fontWeight\", \"italicAngle\"];\n}\nclass SYSTEM_FONT_INFO {\n  static strings = [\"css\", \"loadedName\", \"baseFontName\", \"src\"];\n}\nclass FONT_INFO {\n  static bools = [\"black\", \"bold\", \"disableFontFace\", \"fontExtraProperties\", \"isInvalidPDFjsFont\", \"isType3Font\", \"italic\", \"missingFile\", \"remeasure\", \"vertical\"];\n  static numbers = [\"ascent\", \"defaultWidth\", \"descent\"];\n  static strings = [\"fallbackName\", \"loadedName\", \"mimetype\", \"name\"];\n  static OFFSET_NUMBERS = Math.ceil(this.bools.length * 2 / 8);\n  static OFFSET_BBOX = this.OFFSET_NUMBERS + this.numbers.length * 8;\n  static OFFSET_FONT_MATRIX = this.OFFSET_BBOX + 1 + 2 * 4;\n  static OFFSET_DEFAULT_VMETRICS = this.OFFSET_FONT_MATRIX + 1 + 8 * 6;\n  static OFFSET_STRINGS = this.OFFSET_DEFAULT_VMETRICS + 1 + 2 * 3;\n}\nclass PATTERN_INFO {\n  static KIND = 0;\n  static HAS_BBOX = 1;\n  static HAS_BACKGROUND = 2;\n  static SHADING_TYPE = 3;\n  static N_COORD = 4;\n  static N_COLOR = 8;\n  static N_STOP = 12;\n  static N_FIGURES = 16;\n}\n\n;// ./src/display/obj_bin_transform_display.js\n\n\nclass CssFontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n  }\n  #readString(index) {\n    assert(index < CSS_FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = 0;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get fontFamily() {\n    return this.#readString(0);\n  }\n  get fontWeight() {\n    return this.#readString(1);\n  }\n  get italicAngle() {\n    return this.#readString(2);\n  }\n}\nclass SystemFontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor(buffer) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n  }\n  get guessFallback() {\n    return this.#view.getUint8(0) !== 0;\n  }\n  #readString(index) {\n    assert(index < SYSTEM_FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = 5;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get css() {\n    return this.#readString(0);\n  }\n  get loadedName() {\n    return this.#readString(1);\n  }\n  get baseFontName() {\n    return this.#readString(2);\n  }\n  get src() {\n    return this.#readString(3);\n  }\n  get style() {\n    let offset = 1;\n    offset += 4 + this.#view.getUint32(offset);\n    const styleLength = this.#view.getUint32(offset);\n    const style = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, styleLength));\n    offset += 4 + styleLength;\n    const weightLength = this.#view.getUint32(offset);\n    const weight = this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, weightLength));\n    return {\n      style,\n      weight\n    };\n  }\n}\nclass FontInfo {\n  #buffer;\n  #decoder = new TextDecoder();\n  #view;\n  constructor({\n    buffer,\n    extra\n  }) {\n    this.#buffer = buffer;\n    this.#view = new DataView(buffer);\n    if (extra) {\n      Object.assign(this, extra);\n    }\n  }\n  #readBoolean(index) {\n    assert(index < FONT_INFO.bools.length, \"Invalid boolean index\");\n    const byteOffset = Math.floor(index / 4);\n    const bitOffset = index * 2 % 8;\n    const value = this.#view.getUint8(byteOffset) >> bitOffset & 0x03;\n    return value === 0x00 ? undefined : value === 0x02;\n  }\n  get black() {\n    return this.#readBoolean(0);\n  }\n  get bold() {\n    return this.#readBoolean(1);\n  }\n  get disableFontFace() {\n    return this.#readBoolean(2);\n  }\n  get fontExtraProperties() {\n    return this.#readBoolean(3);\n  }\n  get isInvalidPDFjsFont() {\n    return this.#readBoolean(4);\n  }\n  get isType3Font() {\n    return this.#readBoolean(5);\n  }\n  get italic() {\n    return this.#readBoolean(6);\n  }\n  get missingFile() {\n    return this.#readBoolean(7);\n  }\n  get remeasure() {\n    return this.#readBoolean(8);\n  }\n  get vertical() {\n    return this.#readBoolean(9);\n  }\n  #readNumber(index) {\n    assert(index < FONT_INFO.numbers.length, \"Invalid number index\");\n    return this.#view.getFloat64(FONT_INFO.OFFSET_NUMBERS + index * 8);\n  }\n  get ascent() {\n    return this.#readNumber(0);\n  }\n  get defaultWidth() {\n    return this.#readNumber(1);\n  }\n  get descent() {\n    return this.#readNumber(2);\n  }\n  #readArray(offset, arrLen, lookupName, increment) {\n    const len = this.#view.getUint8(offset);\n    if (len === 0) {\n      return undefined;\n    }\n    assert(len === arrLen, \"Invalid array length.\");\n    offset += 1;\n    const arr = new Array(len);\n    for (let i = 0; i < len; i++) {\n      arr[i] = this.#view[lookupName](offset, true);\n      offset += increment;\n    }\n    return arr;\n  }\n  get bbox() {\n    return this.#readArray(FONT_INFO.OFFSET_BBOX, 4, \"getInt16\", 2);\n  }\n  get fontMatrix() {\n    return this.#readArray(FONT_INFO.OFFSET_FONT_MATRIX, 6, \"getFloat64\", 8);\n  }\n  get defaultVMetrics() {\n    return this.#readArray(FONT_INFO.OFFSET_DEFAULT_VMETRICS, 3, \"getInt16\", 2);\n  }\n  #readString(index) {\n    assert(index < FONT_INFO.strings.length, \"Invalid string index\");\n    let offset = FONT_INFO.OFFSET_STRINGS + 4;\n    for (let i = 0; i < index; i++) {\n      offset += this.#view.getUint32(offset) + 4;\n    }\n    const length = this.#view.getUint32(offset);\n    return this.#decoder.decode(new Uint8Array(this.#buffer, offset + 4, length));\n  }\n  get fallbackName() {\n    return this.#readString(0);\n  }\n  get loadedName() {\n    return this.#readString(1);\n  }\n  get mimetype() {\n    return this.#readString(2);\n  }\n  get name() {\n    return this.#readString(3);\n  }\n  #getDataOffsets() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + cssFontInfoLength;\n    const length = this.#view.getUint32(offset);\n    return {\n      offset,\n      length\n    };\n  }\n  get data() {\n    const {\n      offset,\n      length\n    } = this.#getDataOffsets();\n    return length === 0 ? undefined : new Uint8Array(this.#buffer, offset + 4, length);\n  }\n  clearData() {\n    const {\n      offset,\n      length\n    } = this.#getDataOffsets();\n    if (length === 0) {\n      return;\n    }\n    this.#view.setUint32(offset, 0);\n    this.#buffer = new Uint8Array(this.#buffer, 0, offset + 4).slice().buffer;\n    this.#view = new DataView(this.#buffer);\n  }\n  get cssFontInfo() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    offset += 4 + systemFontInfoLength;\n    const cssFontInfoLength = this.#view.getUint32(offset);\n    if (cssFontInfoLength === 0) {\n      return null;\n    }\n    const cssFontInfoData = new Uint8Array(cssFontInfoLength);\n    cssFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, cssFontInfoLength));\n    return new CssFontInfo(cssFontInfoData.buffer);\n  }\n  get systemFontInfo() {\n    let offset = FONT_INFO.OFFSET_STRINGS;\n    const stringsLength = this.#view.getUint32(offset);\n    offset += 4 + stringsLength;\n    const systemFontInfoLength = this.#view.getUint32(offset);\n    if (systemFontInfoLength === 0) {\n      return null;\n    }\n    const systemFontInfoData = new Uint8Array(systemFontInfoLength);\n    systemFontInfoData.set(new Uint8Array(this.#buffer, offset + 4, systemFontInfoLength));\n    return new SystemFontInfo(systemFontInfoData.buffer);\n  }\n}\nclass PatternInfo {\n  constructor(buffer) {\n    this.buffer = buffer;\n    this.view = new DataView(buffer);\n    this.data = new Uint8Array(buffer);\n  }\n  getIR() {\n    const dataView = this.view;\n    const kind = this.data[PATTERN_INFO.KIND];\n    const hasBBox = !!this.data[PATTERN_INFO.HAS_BBOX];\n    const hasBackground = !!this.data[PATTERN_INFO.HAS_BACKGROUND];\n    const nCoord = dataView.getUint32(PATTERN_INFO.N_COORD, true);\n    const nColor = dataView.getUint32(PATTERN_INFO.N_COLOR, true);\n    const nStop = dataView.getUint32(PATTERN_INFO.N_STOP, true);\n    let offset = 20;\n    const coords = new Float32Array(this.buffer, offset, nCoord * 2);\n    offset += nCoord * 8;\n    const colors = new Uint8Array(this.buffer, offset, nColor * 4);\n    offset += nColor * 4;\n    const stops = [];\n    for (let i = 0; i < nStop; ++i) {\n      const p = dataView.getFloat32(offset, true);\n      offset += 4;\n      const rgb = dataView.getUint32(offset, true);\n      offset += 4;\n      stops.push([p, `#${rgb.toString(16).padStart(6, \"0\")}`]);\n    }\n    let bbox = null;\n    if (hasBBox) {\n      bbox = [];\n      for (let i = 0; i < 4; ++i) {\n        bbox.push(dataView.getFloat32(offset, true));\n        offset += 4;\n      }\n    }\n    let background = null;\n    if (hasBackground) {\n      background = new Uint8Array(this.buffer, offset, 3);\n      offset += 3;\n    }\n    if (kind === 1) {\n      return [\"RadialAxial\", \"axial\", bbox, stops, Array.from(coords.slice(0, 2)), Array.from(coords.slice(2, 4)), null, null];\n    }\n    if (kind === 2) {\n      return [\"RadialAxial\", \"radial\", bbox, stops, [coords[0], coords[1]], [coords[3], coords[4]], coords[2], coords[5]];\n    }\n    if (kind === 3) {\n      const shadingType = this.data[PATTERN_INFO.SHADING_TYPE];\n      let bounds = null;\n      if (coords.length > 0) {\n        bounds = BBOX_INIT.slice();\n        for (let i = 0, ii = coords.length; i < ii; i += 2) {\n          Util.pointBoundingBox(coords[i], coords[i + 1], bounds);\n        }\n      }\n      return [\"Mesh\", shadingType, coords, colors, nCoord, bounds, bbox, background];\n    }\n    throw new Error(`Unsupported pattern kind: ${kind}`);\n  }\n}\nclass FontPathInfo {\n  #buffer;\n  constructor(buffer) {\n    this.#buffer = buffer;\n  }\n  get path() {\n    if (FeatureTest.isFloat16ArraySupported) {\n      return new Float16Array(this.#buffer);\n    }\n    return new Float32Array(this.#buffer);\n  }\n}\n\n;// ./src/display/api_utils.js\n\nfunction getUrlProp(val) {\n  if (val instanceof URL) {\n    return val;\n  }\n  if (typeof val === \"string\") {\n    if (isNodeJS) {\n      if (/^[a-z][a-z0-9\\-+.]+:/i.test(val)) {\n        return new URL(val);\n      }\n      const url = process.getBuiltinModule(\"url\");\n      return new URL(url.pathToFileURL(val));\n    }\n    const url = URL.parse(val, window.location);\n    if (url) {\n      return url;\n    }\n  }\n  throw new Error(\"Invalid PDF url data: \" + \"either string or URL-object is expected in the url property.\");\n}\nfunction getDataProp(val) {\n  if (isNodeJS && typeof Buffer !== \"undefined\" && val instanceof Buffer) {\n    throw new Error(\"Please provide binary data as `Uint8Array`, rather than `Buffer`.\");\n  }\n  if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n    return val;\n  }\n  if (typeof val === \"string\") {\n    return stringToBytes(val);\n  }\n  if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === \"object\" && !isNaN(val?.length)) {\n    return new Uint8Array(val);\n  }\n  throw new Error(\"Invalid PDF binary data: either TypedArray, \" + \"string, or array-like object is expected in the data property.\");\n}\nfunction getFactoryUrlProp(val) {\n  if (typeof val !== \"string\") {\n    return null;\n  }\n  if (val.endsWith(\"/\")) {\n    return val;\n  }\n  throw new Error(`Invalid factory url: \"${val}\" must include trailing slash.`);\n}\nconst isRefProxy = v => typeof v === \"object\" && Number.isInteger(v?.num) && v.num >= 0 && Number.isInteger(v?.gen) && v.gen >= 0;\nconst isNameProxy = v => typeof v === \"object\" && typeof v?.name === \"string\";\nconst isValidExplicitDest = _isValidExplicitDest.bind(null, isRefProxy, isNameProxy);\nclass LoopbackPort {\n  #listeners = new Map();\n  #deferred = Promise.resolve();\n  postMessage(obj, transfer) {\n    const event = {\n      data: structuredClone(obj, transfer ? {\n        transfer\n      } : null)\n    };\n    this.#deferred.then(() => {\n      for (const [listener] of this.#listeners) {\n        listener.call(this, event);\n      }\n    });\n  }\n  addEventListener(name, listener, options = null) {\n    let rmAbort = null;\n    if (options?.signal instanceof AbortSignal) {\n      const {\n        signal\n      } = options;\n      if (signal.aborted) {\n        warn(\"LoopbackPort - cannot use an `aborted` signal.\");\n        return;\n      }\n      const onAbort = () => this.removeEventListener(name, listener);\n      rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n      signal.addEventListener(\"abort\", onAbort);\n    }\n    this.#listeners.set(listener, rmAbort);\n  }\n  removeEventListener(name, listener) {\n    const rmAbort = this.#listeners.get(listener);\n    rmAbort?.();\n    this.#listeners.delete(listener);\n  }\n  terminate() {\n    for (const [, rmAbort] of this.#listeners) {\n      rmAbort?.();\n    }\n    this.#listeners.clear();\n  }\n}\n\n;// ./src/shared/message_handler.js\n\nconst CallbackKind = {\n  DATA: 1,\n  ERROR: 2\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};\nfunction onFn() {}\nfunction wrapReason(ex) {\n  if (ex instanceof AbortException || ex instanceof InvalidPDFException || ex instanceof PasswordException || ex instanceof ResponseException || ex instanceof UnknownErrorException) {\n    return ex;\n  }\n  if (!(ex instanceof Error || typeof ex === \"object\" && ex !== null)) {\n    unreachable('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.');\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}\nclass MessageHandler {\n  #messageAC = new AbortController();\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    comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n      signal: this.#messageAC.signal\n    });\n  }\n  #onMessage({\n    data\n  }) {\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      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      Promise.try(action, data.data).then(function (result) {\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          callback: CallbackKind.DATA,\n          callbackId: data.callbackId,\n          data: result\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      return;\n    }\n    if (data.streamId) {\n      this.#createStreamSink(data);\n      return;\n    }\n    action(data.data);\n  }\n  on(actionName, handler) {\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  send(actionName, data, transfers) {\n    this.comObj.postMessage({\n      sourceName: this.sourceName,\n      targetName: this.targetName,\n      action: actionName,\n      data\n    }, transfers);\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        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        callbackId,\n        data\n      }, transfers);\n    } catch (ex) {\n      capability.reject(ex);\n    }\n    return capability.promise;\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    return new ReadableStream({\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          sourceName,\n          targetName,\n          action: actionName,\n          streamId,\n          data,\n          desiredSize: controller.desiredSize\n        }, transfers);\n        return startCapability.promise;\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        return pullCapability.promise;\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 cancelCapability.promise;\n      }\n    }, queueingStrategy);\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    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        if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n          this.sinkCapability = Promise.withResolvers();\n          this.ready = this.sinkCapability.promise;\n        }\n        comObj.postMessage({\n          sourceName,\n          targetName,\n          stream: StreamKind.ENQUEUE,\n          streamId,\n          chunk\n        }, transfers);\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      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      sinkCapability: Promise.withResolvers(),\n      onPull: null,\n      onCancel: null,\n      isCancelled: false,\n      desiredSize: data.desiredSize,\n      ready: null\n    };\n    streamSink.sinkCapability.resolve();\n    streamSink.ready = streamSink.sinkCapability.promise;\n    this.streamSinks[streamId] = streamSink;\n    Promise.try(action, data.data, streamSink).then(function () {\n      comObj.postMessage({\n        sourceName,\n        targetName,\n        stream: StreamKind.START_COMPLETE,\n        streamId,\n        success: true\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  #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    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        if (!streamSink) {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\n          });\n          break;\n        }\n        if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n          streamSink.sinkCapability.resolve();\n        }\n        streamSink.desiredSize = data.desiredSize;\n        Promise.try(streamSink.onPull || onFn).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.PULL_COMPLETE,\n            streamId,\n            success: true\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        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        Promise.try(streamSink.onCancel || onFn, dataReason).then(function () {\n          comObj.postMessage({\n            sourceName,\n            targetName,\n            stream: StreamKind.CANCEL_COMPLETE,\n            streamId,\n            success: true\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        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  async #deleteStreamController(streamController, streamId) {\n    await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);\n    delete this.streamControllers[streamId];\n  }\n  destroy() {\n    this.#messageAC?.abort();\n    this.#messageAC = null;\n  }\n}\n\n;// ./src/display/binary_data_factory.js\n\n\nclass BaseBinaryDataFactory {\n  #errorStr = Object.freeze({\n    cMapUrl: \"CMap\",\n    standardFontDataUrl: \"font\",\n    wasmUrl: \"wasm\"\n  });\n  constructor({\n    cMapUrl = null,\n    standardFontDataUrl = null,\n    wasmUrl = null\n  }) {\n    this.cMapUrl = cMapUrl;\n    this.standardFontDataUrl = standardFontDataUrl;\n    this.wasmUrl = wasmUrl;\n  }\n  async fetch({\n    kind,\n    filename\n  }) {\n    switch (kind) {\n      case \"cMapUrl\":\n      case \"standardFontDataUrl\":\n      case \"wasmUrl\":\n        break;\n      default:\n        unreachable(`Not implemented: ${kind}`);\n    }\n    const baseUrl = this[kind];\n    if (!baseUrl) {\n      throw new Error(`Ensure that the \\`${kind}\\` API parameter is provided.`);\n    }\n    const url = `${baseUrl}${filename}`;\n    return this._fetch(url, kind).catch(reason => {\n      throw new Error(`Unable to load ${this.#errorStr[kind]} data at: ${url}`);\n    });\n  }\n  async _fetch(url, kind) {\n    unreachable(\"Abstract method `_fetch` called.\");\n  }\n}\nclass DOMBinaryDataFactory extends BaseBinaryDataFactory {\n  async _fetch(url, kind) {\n    const type = kind === \"cMapUrl\" && !url.endsWith(\".bcmap\") ? \"text\" : \"bytes\";\n    const data = await fetchData(url, type);\n    return data instanceof Uint8Array ? data : stringToBytes(data);\n  }\n}\n\n;// ./src/display/canvas_factory.js\n\nclass BaseCanvasFactory {\n  #enableHWA = false;\n  constructor({\n    enableHWA = false\n  }) {\n    this.#enableHWA = enableHWA;\n  }\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._createCanvas(width, height);\n    return {\n      canvas,\n      context: canvas.getContext(\"2d\", {\n        willReadFrequently: !this.#enableHWA\n      })\n    };\n  }\n  reset({\n    canvas\n  }, width, height) {\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    canvas.width = width;\n    canvas.height = height;\n  }\n  destroy(canvasAndContext) {\n    const {\n      canvas\n    } = canvasAndContext;\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    canvas.width = canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({\n    ownerDocument = globalThis.document,\n    enableHWA = false\n  }) {\n    super({\n      enableHWA\n    });\n    this._document = ownerDocument;\n  }\n  _createCanvas(width, height) {\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n}\n\n;// ./src/display/filter_factory.js\n\n\nclass BaseFilterFactory {\n  addFilter(maps) {\n    return \"none\";\n  }\n  addHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n  addAlphaFilter(map) {\n    return \"none\";\n  }\n  addLuminosityFilter(map) {\n    return \"none\";\n  }\n  addKnockoutFilter(alpha = 0) {\n    return \"none\";\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    return \"none\";\n  }\n  addSelectionHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n  addSelectionFilter() {\n    return \"none\";\n  }\n  createSelectionStyle(pageColors = null) {\n    return null;\n  }\n  destroy(keepHCM = false) {}\n}\nclass DOMFilterFactory extends BaseFilterFactory {\n  #baseUrl;\n  #_cache;\n  #_defs;\n  #docId;\n  #document;\n  #_hcmCache;\n  #id = 0;\n  constructor({\n    docId,\n    ownerDocument = globalThis.document\n  }) {\n    super();\n    this.#docId = docId;\n    this.#document = ownerDocument;\n  }\n  get #cache() {\n    return this.#_cache ||= new Map();\n  }\n  get #hcmCache() {\n    return this.#_hcmCache ||= new Map();\n  }\n  get #defs() {\n    if (!this.#_defs) {\n      const div = this.#document.createElement(\"div\");\n      const {\n        style\n      } = div;\n      style.colorScheme = \"only light\";\n      style.visibility = \"hidden\";\n      style.contain = \"strict\";\n      style.width = style.height = 0;\n      style.position = \"absolute\";\n      style.top = style.left = 0;\n      style.zIndex = -1;\n      const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n      svg.setAttribute(\"width\", 0);\n      svg.setAttribute(\"height\", 0);\n      this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n      div.append(svg);\n      svg.append(this.#_defs);\n      this.#document.body.append(div);\n    }\n    return this.#_defs;\n  }\n  #createTables(maps) {\n    if (maps.length === 1) {\n      const mapR = maps[0];\n      const buffer = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        buffer[i] = mapR[i] / 255;\n      }\n      const table = buffer.join(\",\");\n      return [table, table, table];\n    }\n    const [mapR, mapG, mapB] = maps;\n    const bufferR = new Array(256);\n    const bufferG = new Array(256);\n    const bufferB = new Array(256);\n    for (let i = 0; i < 256; i++) {\n      bufferR[i] = mapR[i] / 255;\n      bufferG[i] = mapG[i] / 255;\n      bufferB[i] = mapB[i] / 255;\n    }\n    return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n  }\n  #createUrl(id) {\n    if (this.#baseUrl === undefined) {\n      this.#baseUrl = \"\";\n      const url = this.#document.URL;\n      if (url !== this.#document.baseURI) {\n        if (isDataScheme(url)) {\n          warn('#createUrl: ignore \"data:\"-URL for performance reasons.');\n        } else {\n          this.#baseUrl = updateUrlHash(url, \"\");\n        }\n      }\n    }\n    return `url(${this.#baseUrl}#${id})`;\n  }\n  addFilter(maps) {\n    if (!maps) {\n      return \"none\";\n    }\n    let value = this.#cache.get(maps);\n    if (value) {\n      return value;\n    }\n    const [tableR, tableG, tableB] = this.#createTables(maps);\n    const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(maps, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(maps, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n    return url;\n  }\n  addHCMFilter(fgColor, bgColor) {\n    const key = `${fgColor}-${bgColor}`;\n    const filterName = \"base\";\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const fgRGB = this.#getRGB(fgColor);\n    fgColor = Util.makeHexColor(...fgRGB);\n    const bgRGB = this.#getRGB(bgColor);\n    bgColor = Util.makeHexColor(...bgRGB);\n    this.#resetDefsColor();\n    if (fgColor === \"#000000\" && bgColor === \"#ffffff\" || fgColor === bgColor) {\n      return info.url;\n    }\n    const map = new Array(256);\n    for (let i = 0; i <= 255; i++) {\n      const x = i / 255;\n      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n    }\n    const table = map.join(\",\");\n    const id = `g_${this.#docId}_hcm_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addTransferMapConversion(table, table, table, filter);\n    this.#addGrayConversion(filter);\n    const getSteps = (c, n) => {\n      const start = fgRGB[c] / 255;\n      const end = bgRGB[c] / 255;\n      const arr = new Array(n + 1);\n      for (let i = 0; i <= n; i++) {\n        arr[i] = start + i / n * (end - start);\n      }\n      return arr.join(\",\");\n    };\n    this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n  addSelectionHCMFilter(fgColor, bgColor) {\n    return this.addHighlightHCMFilter(\"selection\", fgColor, bgColor, \"HighlightText\", \"Highlight\");\n  }\n  addSelectionFilter() {\n    return this.addHighlightHCMFilter(\"selection_default\", \"black\", \"white\", \"HighlightText\", \"Highlight\");\n  }\n  createSelectionStyle(pageColors = null) {\n    const filter = pageColors ? this.addSelectionHCMFilter(pageColors.foreground, pageColors.background) : this.addSelectionFilter();\n    if (filter === \"none\" || !FeatureTest.platform.isFirefox) {\n      return null;\n    }\n    return {\n      \"backdrop-filter\": filter,\n      \"background-color\": \"transparent\"\n    };\n  }\n  addAlphaFilter(map) {\n    let value = this.#cache.get(map);\n    if (value) {\n      return value;\n    }\n    const [tableA] = this.#createTables([map]);\n    const key = `alpha_${tableA}`;\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addTransferMapAlphaConversion(tableA, filter);\n    return url;\n  }\n  addLuminosityFilter(map) {\n    let value = this.#cache.get(map || \"luminosity\");\n    if (value) {\n      return value;\n    }\n    let tableA, key;\n    if (map) {\n      [tableA] = this.#createTables([map]);\n      key = `luminosity_${tableA}`;\n    } else {\n      key = \"luminosity\";\n    }\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(map, value);\n      return value;\n    }\n    const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(map, url);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    this.#addLuminosityConversion(filter);\n    if (map) {\n      this.#addTransferMapAlphaConversion(tableA, filter);\n    }\n    return url;\n  }\n  addKnockoutFilter(alpha = 0) {\n    const slope = alpha > 0 ? Math.min(1 / alpha, 1e6) : 1e6;\n    const key = `knockout_${slope}`;\n    const value = this.#cache.get(key);\n    if (value) {\n      return value;\n    }\n    const id = `g_${this.#docId}_knockout_filter_${this.#id++}`;\n    const url = this.#createUrl(id);\n    this.#cache.set(key, url);\n    const filter = this.#createFilter(id);\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    const feFuncA = this.#document.createElementNS(SVG_NS, \"feFuncA\");\n    feFuncA.setAttribute(\"type\", \"linear\");\n    feFuncA.setAttribute(\"slope\", `${slope}`);\n    feFuncA.setAttribute(\"intercept\", \"0\");\n    feComponentTransfer.append(feFuncA);\n    return url;\n  }\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n    let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);\n    let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);\n    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getOpaqueTextColor.bind(this));\n    if (bgGray < fgGray) {\n      [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];\n    }\n    this.#resetDefsColor();\n    const getSteps = (fg, bg, n) => {\n      const arr = new Array(256);\n      const step = (bgGray - fgGray) / n;\n      const newStart = fg / 255;\n      const newStep = (bg - fg) / (255 * n);\n      let prev = 0;\n      for (let i = 0; i <= n; i++) {\n        const k = Math.round(fgGray + i * step);\n        const value = newStart + i * newStep;\n        for (let j = prev; j <= k; j++) {\n          arr[j] = value;\n        }\n        prev = k + 1;\n      }\n      for (let i = prev; i < 256; i++) {\n        arr[i] = arr[prev - 1];\n      }\n      return arr.join(\",\");\n    };\n    const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n    const filter = info.filter = this.#createFilter(id);\n    this.#addGrayConversion(filter);\n    this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);\n    info.url = this.#createUrl(id);\n    return info.url;\n  }\n  destroy(keepHCM = false) {\n    if (keepHCM && this.#_hcmCache?.size) {\n      return;\n    }\n    this.#_defs?.parentNode.parentNode.remove();\n    this.#_defs = null;\n    this.#_cache?.clear();\n    this.#_cache = null;\n    this.#_hcmCache?.clear();\n    this.#_hcmCache = null;\n    this.#id = 0;\n  }\n  #addLuminosityConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\");\n    filter.append(feColorMatrix);\n  }\n  #addGrayConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(SVG_NS, \"feColorMatrix\");\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\"values\", \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\");\n    filter.append(feColorMatrix);\n  }\n  #createFilter(id) {\n    const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n    filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n    filter.setAttribute(\"id\", id);\n    this.#defs.append(filter);\n    return filter;\n  }\n  #appendFeFunc(feComponentTransfer, func, table) {\n    const feFunc = this.#document.createElementNS(SVG_NS, func);\n    feFunc.setAttribute(\"type\", \"discrete\");\n    feFunc.setAttribute(\"tableValues\", table);\n    feComponentTransfer.append(feFunc);\n  }\n  #addTransferMapConversion(rTable, gTable, bTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n  }\n  #addTransferMapAlphaConversion(aTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(SVG_NS, \"feComponentTransfer\");\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n  }\n  #getRGB(color) {\n    this.#defs.style.color = \"CanvasText\";\n    this.#defs.style.backgroundColor = color;\n    return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"background-color\"));\n  }\n  #getRGBA(color) {\n    this.#defs.style.color = \"CanvasText\";\n    this.#defs.style.backgroundColor = color;\n    return getRGBA(getComputedStyle(this.#defs).getPropertyValue(\"background-color\"));\n  }\n  #resetDefsColor() {\n    this.#defs.style.color = \"\";\n    this.#defs.style.backgroundColor = \"\";\n  }\n  #getOpaqueTextColor(color) {\n    const [r, g, b, alpha] = this.#getRGBA(color);\n    if (alpha === 1) {\n      return [r, g, b];\n    }\n    const [canvasR, canvasG, canvasB] = this.#getRGB(\"Canvas\");\n    return [blend(r, canvasR, alpha), blend(g, canvasG, alpha), blend(b, canvasB, alpha)];\n  }\n}\nfunction blend(fg, bg, alpha) {\n  return Math.round(alpha * fg + (1 - alpha) * bg);\n}\n\n;// ./src/display/node_utils.js\n\n\n\n\nif (isNodeJS) {\n  warn(\"Please use the `legacy` build in Node.js environments.\");\n}\nasync function node_utils_fetchData(url) {\n  const fs = process.getBuiltinModule(\"fs/promises\");\n  const data = await fs.readFile(url);\n  return new Uint8Array(data);\n}\nclass NodeFilterFactory extends BaseFilterFactory {}\nclass NodeCanvasFactory extends BaseCanvasFactory {\n  _createCanvas(width, height) {\n    const require = process.getBuiltinModule(\"module\").createRequire(import.meta.url);\n    const canvas = require(\"@napi-rs/canvas\");\n    return canvas.createCanvas(width, height);\n  }\n}\nclass NodeBinaryDataFactory extends BaseBinaryDataFactory {\n  async _fetch(url, kind) {\n    return node_utils_fetchData(url);\n  }\n}\n\n;// ./src/shared/image_utils.js\n/* unused harmony import specifier */ var image_utils_ImageKind;\n/* unused harmony import specifier */ var image_utils_FeatureTest;\n\nfunction convertToRGBA(params) {\n  switch (params.kind) {\n    case image_utils_ImageKind.GRAYSCALE_1BPP:\n      return convertBlackAndWhiteToRGBA(params);\n    case image_utils_ImageKind.RGB_24BPP:\n      return convertRGBToRGBA(params);\n  }\n  return null;\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 ? [nonBlackColor, black] : [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  for (let i = 0; i < height; ++i) {\n    for (const max = srcPos + widthInSource; srcPos < max; ++srcPos, destPos += 8) {\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  return {\n    srcPos,\n    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  if (FeatureTest.isLittleEndian) {\n    for (; i < len32 - 2; i += 3, destPos += 4) {\n      const s1 = src32[i],\n        s2 = src32[i + 1],\n        s3 = src32[i + 2];\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    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] = 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],\n        s2 = src32[i + 1],\n        s3 = src32[i + 2];\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    for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n      dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | alphaMask;\n    }\n  }\n  return {\n    srcPos: srcPos + len,\n    destPos\n  };\n}\nfunction grayToRGBA(src, dest) {\n  if (image_utils_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\n;// ./src/display/webgpu.js\nconst MESH_WGSL = `\nstruct Uniforms {\n  offsetX      : f32,\n  offsetY      : f32,\n  scaleX       : f32,\n  scaleY       : f32,\n  paddedWidth  : f32,\n  paddedHeight : f32,\n  borderSize   : f32,\n  _pad         : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n\nstruct VertexInput {\n  @location(0) position : vec2<f32>,\n  @location(1) color    : vec4<f32>,\n};\n\nstruct VertexOutput {\n  @builtin(position) position : vec4<f32>,\n  @location(0)       color    : vec3<f32>,\n};\n\n@vertex\nfn vs_main(in : VertexInput) -> VertexOutput {\n  var out : VertexOutput;\n  let cx = (in.position.x + u.offsetX) * u.scaleX;\n  let cy = (in.position.y + u.offsetY) * u.scaleY;\n  out.position = vec4<f32>(\n    ((cx + u.borderSize) / u.paddedWidth) * 2.0 - 1.0,\n    1.0 - ((cy + u.borderSize) / u.paddedHeight) * 2.0,\n    0.0,\n    1.0\n  );\n  out.color = in.color.rgb;\n  return out;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n  return vec4<f32>(in.color, 1.0);\n}\n`;\nclass WebGPU {\n  #initPromise = null;\n  #device = null;\n  #meshPipeline = null;\n  #preferredFormat = null;\n  async #initGPU() {\n    if (!globalThis.navigator?.gpu) {\n      return false;\n    }\n    try {\n      const adapter = await navigator.gpu.requestAdapter();\n      if (!adapter) {\n        return false;\n      }\n      this.#preferredFormat = navigator.gpu.getPreferredCanvasFormat();\n      this.#device = await adapter.requestDevice();\n      return true;\n    } catch {\n      return false;\n    }\n  }\n  init() {\n    return this.#initPromise ||= this.#initGPU();\n  }\n  get isReady() {\n    return this.#device !== null;\n  }\n  loadMeshShader() {\n    if (!this.#device || this.#meshPipeline) {\n      return;\n    }\n    const shaderModule = this.#device.createShaderModule({\n      code: MESH_WGSL\n    });\n    this.#meshPipeline = this.#device.createRenderPipeline({\n      layout: \"auto\",\n      vertex: {\n        module: shaderModule,\n        entryPoint: \"vs_main\",\n        buffers: [{\n          arrayStride: 2 * 4,\n          attributes: [{\n            shaderLocation: 0,\n            offset: 0,\n            format: \"float32x2\"\n          }]\n        }, {\n          arrayStride: 4,\n          attributes: [{\n            shaderLocation: 1,\n            offset: 0,\n            format: \"unorm8x4\"\n          }]\n        }]\n      },\n      fragment: {\n        module: shaderModule,\n        entryPoint: \"fs_main\",\n        targets: [{\n          format: this.#preferredFormat\n        }]\n      },\n      primitive: {\n        topology: \"triangle-list\"\n      }\n    });\n  }\n  draw(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize) {\n    this.loadMeshShader();\n    const device = this.#device;\n    const {\n      offsetX,\n      offsetY,\n      scaleX,\n      scaleY\n    } = context;\n    const posBuffer = device.createBuffer({\n      size: Math.max(posData.byteLength, 4),\n      usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n    });\n    if (posData.byteLength > 0) {\n      device.queue.writeBuffer(posBuffer, 0, posData);\n    }\n    const colBuffer = device.createBuffer({\n      size: Math.max(colData.byteLength, 4),\n      usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST\n    });\n    if (colData.byteLength > 0) {\n      device.queue.writeBuffer(colBuffer, 0, colData);\n    }\n    const uniformBuffer = device.createBuffer({\n      size: 8 * 4,\n      usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n    });\n    device.queue.writeBuffer(uniformBuffer, 0, new Float32Array([offsetX, offsetY, scaleX, scaleY, paddedWidth, paddedHeight, borderSize, 0]));\n    const bindGroup = device.createBindGroup({\n      layout: this.#meshPipeline.getBindGroupLayout(0),\n      entries: [{\n        binding: 0,\n        resource: {\n          buffer: uniformBuffer\n        }\n      }]\n    });\n    const offscreen = new OffscreenCanvas(paddedWidth, paddedHeight);\n    const gpuCtx = offscreen.getContext(\"webgpu\");\n    gpuCtx.configure({\n      device,\n      format: this.#preferredFormat,\n      alphaMode: backgroundColor ? \"opaque\" : \"premultiplied\"\n    });\n    const clearValue = backgroundColor ? {\n      r: backgroundColor[0] / 255,\n      g: backgroundColor[1] / 255,\n      b: backgroundColor[2] / 255,\n      a: 1\n    } : {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 0\n    };\n    const commandEncoder = device.createCommandEncoder();\n    const renderPass = commandEncoder.beginRenderPass({\n      colorAttachments: [{\n        view: gpuCtx.getCurrentTexture().createView(),\n        clearValue,\n        loadOp: \"clear\",\n        storeOp: \"store\"\n      }]\n    });\n    if (vertexCount > 0) {\n      renderPass.setPipeline(this.#meshPipeline);\n      renderPass.setBindGroup(0, bindGroup);\n      renderPass.setVertexBuffer(0, posBuffer);\n      renderPass.setVertexBuffer(1, colBuffer);\n      renderPass.draw(vertexCount);\n    }\n    renderPass.end();\n    device.queue.submit([commandEncoder.finish()]);\n    posBuffer.destroy();\n    colBuffer.destroy();\n    uniformBuffer.destroy();\n    return offscreen.transferToImageBitmap();\n  }\n}\nconst _webGPU = new WebGPU();\nfunction initGPU() {\n  return _webGPU.init();\n}\nfunction isGPUReady() {\n  return _webGPU.isReady;\n}\nfunction loadMeshShader() {\n  _webGPU.loadMeshShader();\n}\nfunction drawMeshWithGPU(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize) {\n  return _webGPU.draw(posData, colData, vertexCount, context, backgroundColor, paddedWidth, paddedHeight, borderSize);\n}\n\n;// ./src/display/pattern_helper.js\n\n\n\n\nconst PathType = {\n  FILL: \"Fill\",\n  STROKE: \"Stroke\",\n  SHADING: \"Shading\"\n};\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox) {\n    return;\n  }\n  const width = bbox[2] - bbox[0];\n  const height = bbox[3] - bbox[1];\n  const region = new Path2D();\n  region.rect(bbox[0], bbox[1], width, height);\n  ctx.clip(region);\n}\nclass BaseShadingPattern {\n  matrix = null;\n  isModifyingCurrentTransform() {\n    return false;\n  }\n  getPattern() {\n    unreachable(\"Abstract method `getPattern` called.\");\n  }\n}\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._type = IR[1];\n    this._bbox = IR[2];\n    this._colorStops = IR[3];\n    this._p0 = IR[4];\n    this._p1 = IR[5];\n    this._r0 = IR[6];\n    this._r1 = IR[7];\n  }\n  isOriginBased() {\n    return this._p0[0] === 0 && this._p0[1] === 0 && (!this.isRadial() || this._p1[0] === 0 && this._p1[1] === 0);\n  }\n  isRadial() {\n    return this._type === \"radial\";\n  }\n  areConic() {\n    if (!this.isRadial()) {\n      return false;\n    }\n    const dist = Math.hypot(this._p0[0] - this._p1[0], this._p0[1] - this._p1[1]);\n    return dist + this._r1 > this._r0 && dist + this._r0 > this._r1;\n  }\n  _createGradient(ctx, transform = null) {\n    let grad;\n    let firstPoint = this._p0;\n    let secondPoint = this._p1;\n    if (transform) {\n      firstPoint = firstPoint.slice();\n      secondPoint = secondPoint.slice();\n      Util.applyTransform(firstPoint, transform);\n      Util.applyTransform(secondPoint, transform);\n    }\n    if (this._type === \"axial\") {\n      grad = ctx.createLinearGradient(firstPoint[0], firstPoint[1], secondPoint[0], secondPoint[1]);\n    } else if (this._type === \"radial\") {\n      let r0 = this._r0;\n      let r1 = this._r1;\n      if (transform) {\n        const scale = new Float32Array(2);\n        Util.singularValueDecompose2dScale(transform, scale);\n        r0 *= scale[0];\n        r1 *= scale[0];\n      }\n      grad = ctx.createRadialGradient(firstPoint[0], firstPoint[1], r0, secondPoint[0], secondPoint[1], r1);\n    }\n    for (const colorStop of this._colorStops) {\n      grad.addColorStop(colorStop[0], colorStop[1]);\n    }\n    return grad;\n  }\n  _createReversedGradient(ctx, transform = null) {\n    let firstPoint = this._p1;\n    let secondPoint = this._p0;\n    if (transform) {\n      firstPoint = firstPoint.slice();\n      secondPoint = secondPoint.slice();\n      Util.applyTransform(firstPoint, transform);\n      Util.applyTransform(secondPoint, transform);\n    }\n    let r0 = this._r1;\n    let r1 = this._r0;\n    if (transform) {\n      const scale = new Float32Array(2);\n      Util.singularValueDecompose2dScale(transform, scale);\n      r0 *= scale[0];\n      r1 *= scale[0];\n    }\n    const grad = ctx.createRadialGradient(firstPoint[0], firstPoint[1], r0, secondPoint[0], secondPoint[1], r1);\n    const reversedStops = this._colorStops.map(([t, c]) => [1 - t, c]).reverse();\n    for (const [t, c] of reversedStops) {\n      grad.addColorStop(t, c);\n    }\n    return grad;\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    let pattern;\n    if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n      if (this.isOriginBased()) {\n        let transf = Util.transform(inverse, owner.baseTransform);\n        if (this.matrix) {\n          transf = Util.transform(transf, this.matrix);\n        }\n        const precision = 1e-3;\n        const n1 = Math.hypot(transf[0], transf[1]);\n        const n2 = Math.hypot(transf[2], transf[3]);\n        const ps = (transf[0] * transf[2] + transf[1] * transf[3]) / (n1 * n2);\n        if (Math.abs(ps) < precision) {\n          if (this.isRadial()) {\n            if (Math.abs(n1 - n2) < precision) {\n              return this._createGradient(ctx, transf);\n            }\n          } else {\n            return this._createGradient(ctx, transf);\n          }\n        }\n      }\n      const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0];\n      const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n      const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n      const tmpCanvas = owner.canvasFactory.create(width, height);\n      const tmpCtx = tmpCanvas.context;\n      tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.beginPath();\n      tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n      tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n      inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);\n      tmpCtx.transform(...owner.baseTransform);\n      if (this.matrix) {\n        tmpCtx.transform(...this.matrix);\n      }\n      applyBoundingBox(tmpCtx, this._bbox);\n      if (this.areConic()) {\n        tmpCtx.fillStyle = this._createReversedGradient(tmpCtx);\n        tmpCtx.fill();\n      }\n      tmpCtx.fillStyle = this._createGradient(tmpCtx);\n      tmpCtx.fill();\n      pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n      owner.canvasFactory.destroy(tmpCanvas);\n      const domMatrix = new DOMMatrix(inverse);\n      pattern.setTransform(domMatrix);\n    } else {\n      if (this.areConic()) {\n        ctx.save();\n        applyBoundingBox(ctx, this._bbox);\n        ctx.fillStyle = this._createReversedGradient(ctx);\n        ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n        ctx.restore();\n      }\n      applyBoundingBox(ctx, this._bbox);\n      pattern = this._createGradient(ctx);\n    }\n    return pattern;\n  }\n}\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n  const coords = context.coords,\n    colors = context.colors;\n  const bytes = data.data,\n    rowSize = data.width * 4;\n  let tmp;\n  if (coords[p1 * 2 + 1] > coords[p2 * 2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  if (coords[p2 * 2 + 1] > coords[p3 * 2 + 1]) {\n    tmp = p2;\n    p2 = p3;\n    p3 = tmp;\n    tmp = c2;\n    c2 = c3;\n    c3 = tmp;\n  }\n  if (coords[p1 * 2 + 1] > coords[p2 * 2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n  const x1 = (coords[p1 * 2] + context.offsetX) * context.scaleX;\n  const y1 = (coords[p1 * 2 + 1] + context.offsetY) * context.scaleY;\n  const x2 = (coords[p2 * 2] + context.offsetX) * context.scaleX;\n  const y2 = (coords[p2 * 2 + 1] + context.offsetY) * context.scaleY;\n  const x3 = (coords[p3 * 2] + context.offsetX) * context.scaleX;\n  const y3 = (coords[p3 * 2 + 1] + context.offsetY) * context.scaleY;\n  if (y1 >= y3) {\n    return;\n  }\n  const c1r = colors[c1 * 4],\n    c1g = colors[c1 * 4 + 1],\n    c1b = colors[c1 * 4 + 2];\n  const c2r = colors[c2 * 4],\n    c2g = colors[c2 * 4 + 1],\n    c2b = colors[c2 * 4 + 2];\n  const c3r = colors[c3 * 4],\n    c3g = colors[c3 * 4 + 1],\n    c3b = colors[c3 * 4 + 2];\n  const minY = Math.round(y1),\n    maxY = Math.round(y3);\n  let xa, car, cag, cab;\n  let xb, cbr, cbg, cbb;\n  for (let y = minY; y <= maxY; y++) {\n    if (y < y2) {\n      const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n      xa = x1 - (x1 - x2) * k;\n      car = c1r - (c1r - c2r) * k;\n      cag = c1g - (c1g - c2g) * k;\n      cab = c1b - (c1b - c2b) * k;\n    } else {\n      let k;\n      if (y > y3) {\n        k = 1;\n      } else if (y2 === y3) {\n        k = 0;\n      } else {\n        k = (y2 - y) / (y2 - y3);\n      }\n      xa = x2 - (x2 - x3) * k;\n      car = c2r - (c2r - c3r) * k;\n      cag = c2g - (c2g - c3g) * k;\n      cab = c2b - (c2b - c3b) * k;\n    }\n    let k;\n    if (y < y1) {\n      k = 0;\n    } else if (y > y3) {\n      k = 1;\n    } else {\n      k = (y1 - y) / (y1 - y3);\n    }\n    xb = x1 - (x1 - x3) * k;\n    cbr = c1r - (c1r - c3r) * k;\n    cbg = c1g - (c1g - c3g) * k;\n    cbb = c1b - (c1b - c3b) * k;\n    const x1_ = Math.round(Math.min(xa, xb));\n    const x2_ = Math.round(Math.max(xa, xb));\n    let j = rowSize * y + x1_ * 4;\n    for (let x = x1_; x <= x2_; x++) {\n      k = (xa - x) / (xa - xb);\n      if (k < 0) {\n        k = 0;\n      } else if (k > 1) {\n        k = 1;\n      }\n      bytes[j++] = car - (car - cbr) * k | 0;\n      bytes[j++] = cag - (cag - cbg) * k | 0;\n      bytes[j++] = cab - (cab - cbb) * k | 0;\n      bytes[j++] = 255;\n    }\n  }\n}\nclass MeshShadingPattern extends BaseShadingPattern {\n  constructor(IR) {\n    super();\n    this._posData = IR[2];\n    this._colData = IR[3];\n    this._vertexCount = IR[4];\n    this._bounds = IR[5];\n    this._bbox = IR[6];\n    this._background = IR[7];\n    loadMeshShader();\n  }\n  _createMeshCanvas(combinedScale, backgroundColor, canvasFactory) {\n    const EXPECTED_SCALE = 1.1;\n    const MAX_PATTERN_SIZE = 3000;\n    const BORDER_SIZE = 2;\n    const offsetX = Math.floor(this._bounds[0]);\n    const offsetY = Math.floor(this._bounds[1]);\n    const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n    const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n    const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE) || 1;\n    const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE) || 1;\n    const scaleX = boundsWidth ? boundsWidth / width : 1;\n    const scaleY = boundsHeight ? boundsHeight / height : 1;\n    const context = {\n      coords: this._posData,\n      colors: this._colData,\n      offsetX: -offsetX,\n      offsetY: -offsetY,\n      scaleX: 1 / scaleX,\n      scaleY: 1 / scaleY\n    };\n    const paddedWidth = width + BORDER_SIZE * 2;\n    const paddedHeight = height + BORDER_SIZE * 2;\n    const tmpCanvas = canvasFactory.create(paddedWidth, paddedHeight);\n    if (isGPUReady() && this._vertexCount > 48) {\n      tmpCanvas.context.drawImage(drawMeshWithGPU(this._posData, this._colData, this._vertexCount, context, backgroundColor, paddedWidth, paddedHeight, BORDER_SIZE), 0, 0);\n    } else {\n      const data = tmpCanvas.context.createImageData(width, height);\n      if (backgroundColor) {\n        const bytes = data.data;\n        for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n          bytes[i] = backgroundColor[0];\n          bytes[i + 1] = backgroundColor[1];\n          bytes[i + 2] = backgroundColor[2];\n          bytes[i + 3] = 255;\n        }\n      }\n      for (let i = 0, ii = this._vertexCount; i < ii; i += 3) {\n        drawTriangle(data, context, i, i + 1, i + 2, i, i + 1, i + 2);\n      }\n      tmpCanvas.context.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n    }\n    return {\n      canvas: tmpCanvas.canvas,\n      offsetX: offsetX - BORDER_SIZE * scaleX,\n      offsetY: offsetY - BORDER_SIZE * scaleY,\n      scaleX,\n      scaleY\n    };\n  }\n  isModifyingCurrentTransform() {\n    return true;\n  }\n  getPattern(ctx, owner, inverse, pathType) {\n    applyBoundingBox(ctx, this._bbox);\n    const scale = new Float32Array(2);\n    if (pathType === PathType.SHADING) {\n      Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);\n    } else if (this.matrix) {\n      Util.singularValueDecompose2dScale(this.matrix, scale);\n      const [matrixScaleX, matrixScaleY] = scale;\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n      scale[0] *= matrixScaleX;\n      scale[1] *= matrixScaleY;\n    } else {\n      Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n    }\n    const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.canvasFactory);\n    if (pathType !== PathType.SHADING) {\n      ctx.setTransform(...owner.baseTransform);\n      if (this.matrix) {\n        ctx.transform(...this.matrix);\n      }\n    }\n    ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n    owner.canvasFactory.destroy(temporaryPatternCanvas);\n    return pattern;\n  }\n}\nclass DummyShadingPattern extends BaseShadingPattern {\n  getPattern() {\n    return \"hotpink\";\n  }\n}\nfunction getShadingPattern(IR) {\n  switch (IR[0]) {\n    case \"RadialAxial\":\n      return new RadialAxialShadingPattern(IR);\n    case \"Mesh\":\n      return new MeshShadingPattern(IR);\n    case \"Dummy\":\n      return new DummyShadingPattern();\n  }\n  throw new Error(`Unknown IR type: ${IR[0]}`);\n}\nconst PaintType = {\n  COLORED: 1,\n  UNCOLORED: 2\n};\nclass TilingPattern {\n  static MAX_PATTERN_SIZE = 3000;\n  constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {\n    this.color = IR[1];\n    this.operatorList = IR[2];\n    this.matrix = IR[3];\n    this.bbox = IR[4];\n    this.xstep = IR[5];\n    this.ystep = IR[6];\n    this.paintType = IR[7];\n    this.tilingType = IR[8];\n    this.needsIsolation = IR[9] ?? true;\n    this.ctx = ctx;\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\n    this.baseTransform = baseTransform;\n    this.patternBaseMatrix = this.matrix ? Util.transform(baseTransform, this.matrix) : baseTransform;\n  }\n  canSkipPatternCanvas([width, height, offsetX, offsetY]) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const absXStep = Math.abs(this.xstep);\n    const absYStep = Math.abs(this.ystep);\n    if (width > absXStep + 1e-6 || height > absYStep + 1e-6) {\n      return null;\n    }\n    const nXFirst = Math.floor((offsetX - x1) / absXStep) + 1;\n    const nXLast = Math.ceil((offsetX + width - x0) / absXStep) - 1;\n    const nYFirst = Math.floor((offsetY - y1) / absYStep) + 1;\n    const nYLast = Math.ceil((offsetY + height - y0) / absYStep) - 1;\n    return nXLast <= nXFirst && nYLast <= nYFirst ? [nXFirst, nYFirst] : null;\n  }\n  updatePatternDims(clippedBBox, dims) {\n    const inv = Util.inverseTransform(this.patternBaseMatrix);\n    const c1 = [clippedBBox[0], clippedBBox[1]];\n    const c2 = [clippedBBox[2], clippedBBox[3]];\n    Util.applyTransform(c1, inv);\n    Util.applyTransform(c2, inv);\n    dims[0] = Math.abs(c2[0] - c1[0]);\n    dims[1] = Math.abs(c2[1] - c1[1]);\n    dims[2] = Math.min(c1[0], c2[0]);\n    dims[3] = Math.min(c1[1], c2[1]);\n  }\n  _renderTileCanvas(owner, opIdx, dimx, dimy) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const tmpCanvas = owner.canvasFactory.create(dimx.size, dimy.size);\n    const tmpCtx = tmpCanvas.context;\n    const graphics = this.canvasGraphicsFactory.createCanvasGraphics(tmpCtx, opIdx);\n    graphics.groupLevel = owner.groupLevel;\n    this.setFillAndStrokeStyleToContext(graphics, this.paintType, this.color);\n    tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);\n    graphics.transform(0, dimx.scale, 0, 0, dimy.scale, 0, 0);\n    tmpCtx.save();\n    graphics.dependencyTracker?.save();\n    this.clipBbox(graphics, x0, y0, x1, y1);\n    graphics.baseTransform = getCurrentTransform(graphics.ctx);\n    graphics.executeOperatorList(this.operatorList);\n    graphics.endDrawing();\n    graphics.dependencyTracker?.restore();\n    tmpCtx.restore();\n    return tmpCanvas;\n  }\n  _getCombinedScales() {\n    const scale = new Float32Array(2);\n    Util.singularValueDecompose2dScale(this.matrix, scale);\n    const [matrixScaleX, matrixScaleY] = scale;\n    Util.singularValueDecompose2dScale(this.baseTransform, scale);\n    return [matrixScaleX * scale[0], matrixScaleY * scale[1]];\n  }\n  drawPattern(owner, path, useEOFill = false, [n, m], opIdx) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const dependencyTracker = owner.dependencyTracker;\n    if (dependencyTracker) {\n      owner.dependencyTracker = new CanvasNestedDependencyTracker(dependencyTracker, opIdx);\n    }\n    owner.save();\n    if (useEOFill) {\n      owner.ctx.clip(path, \"evenodd\");\n    } else {\n      owner.ctx.clip(path);\n    }\n    owner.ctx.setTransform(...this.patternBaseMatrix);\n    owner.ctx.translate(n * this.xstep, m * this.ystep);\n    if (this.needsIsolation || owner.ctx.globalAlpha !== 1 || owner.ctx.globalCompositeOperation !== \"source-over\" || owner.inSMaskMode) {\n      const bboxWidth = x1 - x0;\n      const bboxHeight = y1 - y0;\n      const [combinedScaleX, combinedScaleY] = this._getCombinedScales();\n      const dimx = this.getSizeAndScale(bboxWidth, this.ctx.canvas.width, combinedScaleX);\n      const dimy = this.getSizeAndScale(bboxHeight, this.ctx.canvas.height, combinedScaleY);\n      const tmpCanvas = this._renderTileCanvas(owner, opIdx, dimx, dimy);\n      owner.ctx.drawImage(tmpCanvas.canvas, x0, y0, bboxWidth, bboxHeight);\n      owner.canvasFactory.destroy(tmpCanvas);\n    } else {\n      this.setFillAndStrokeStyleToContext(owner, this.paintType, this.color);\n      this.clipBbox(owner, x0, y0, x1, y1);\n      owner.baseTransformStack.push(owner.baseTransform);\n      owner.baseTransform = getCurrentTransform(owner.ctx);\n      owner.executeOperatorList(this.operatorList);\n      owner.baseTransform = owner.baseTransformStack.pop();\n    }\n    owner.restore();\n    if (dependencyTracker) {\n      owner.dependencyTracker = dependencyTracker;\n    }\n  }\n  createPatternCanvas(owner, opIdx) {\n    const [x0, y0, x1, y1] = this.bbox;\n    const width = x1 - x0;\n    const height = y1 - y0;\n    let {\n      xstep,\n      ystep\n    } = this;\n    xstep = Math.abs(xstep);\n    ystep = Math.abs(ystep);\n    info(\"TilingType: \" + this.tilingType);\n    const [combinedScaleX, combinedScaleY] = this._getCombinedScales();\n    let canvasWidth = width,\n      canvasHeight = height,\n      redrawHorizontally = false,\n      redrawVertically = false;\n    if (Math.ceil(xstep * combinedScaleX) >= Math.ceil(width * combinedScaleX)) {\n      canvasWidth = xstep;\n    } else {\n      redrawHorizontally = true;\n    }\n    if (Math.ceil(ystep * combinedScaleY) >= Math.ceil(height * combinedScaleY)) {\n      canvasHeight = ystep;\n    } else {\n      redrawVertically = true;\n    }\n    const dimx = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);\n    const dimy = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);\n    const tmpCanvas = this._renderTileCanvas(owner, opIdx, dimx, dimy);\n    if (redrawHorizontally || redrawVertically) {\n      const image = tmpCanvas.canvas;\n      if (redrawHorizontally) {\n        canvasWidth = xstep;\n      }\n      if (redrawVertically) {\n        canvasHeight = ystep;\n      }\n      const dimx2 = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);\n      const dimy2 = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);\n      const xSize = dimx2.size;\n      const ySize = dimy2.size;\n      const tmpCanvas2 = owner.canvasFactory.create(xSize, ySize);\n      const tmpCtx2 = tmpCanvas2.context;\n      const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;\n      const jj = redrawVertically ? Math.floor(height / ystep) : 0;\n      for (let i = 0; i <= ii; i++) {\n        for (let j = 0; j <= jj; j++) {\n          tmpCtx2.drawImage(image, xSize * i, ySize * j, xSize, ySize, 0, 0, xSize, ySize);\n        }\n      }\n      owner.canvasFactory.destroy(tmpCanvas);\n      return {\n        canvas: tmpCanvas2.canvas,\n        canvasEntry: tmpCanvas2,\n        scaleX: dimx2.scale,\n        scaleY: dimy2.scale,\n        offsetX: x0,\n        offsetY: y0\n      };\n    }\n    return {\n      canvas: tmpCanvas.canvas,\n      canvasEntry: tmpCanvas,\n      scaleX: dimx.scale,\n      scaleY: dimy.scale,\n      offsetX: x0,\n      offsetY: y0\n    };\n  }\n  getSizeAndScale(step, realOutputSize, scale) {\n    const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n    let size = Math.ceil(step * scale);\n    if (size >= maxSize) {\n      size = maxSize;\n    } else {\n      scale = size / step;\n    }\n    return {\n      scale,\n      size\n    };\n  }\n  clipBbox(graphics, x0, y0, x1, y1) {\n    const bboxWidth = x1 - x0;\n    const bboxHeight = y1 - y0;\n    const clip = new Path2D();\n    clip.rect(x0, y0, bboxWidth, bboxHeight);\n    Util.axialAlignedBoundingBox([x0, y0, x1, y1], getCurrentTransform(graphics.ctx), graphics.current.minMax);\n    graphics.ctx.clip(clip);\n    graphics.current.updateClipFromPath();\n  }\n  setFillAndStrokeStyleToContext(graphics, paintType, color) {\n    const context = graphics.ctx,\n      current = graphics.current;\n    current.patternFill = current.patternStroke = false;\n    switch (paintType) {\n      case PaintType.COLORED:\n        const {\n          fillStyle,\n          strokeStyle\n        } = this.ctx;\n        context.fillStyle = current.fillColor = fillStyle;\n        context.strokeStyle = current.strokeColor = strokeStyle;\n        break;\n      case PaintType.UNCOLORED:\n        context.fillStyle = context.strokeStyle = color;\n        current.fillColor = current.strokeColor = color;\n        break;\n      default:\n        throw new FormatError(`Unsupported paint type: ${paintType}`);\n    }\n  }\n  isModifyingCurrentTransform() {\n    return false;\n  }\n  getPattern(ctx, owner, inverse, pathType, opIdx) {\n    const matrix = pathType !== PathType.SHADING ? Util.transform(inverse, this.patternBaseMatrix) : inverse;\n    const temporaryPatternCanvas = this.createPatternCanvas(owner, opIdx);\n    let domMatrix = new DOMMatrix(matrix);\n    domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n    domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);\n    const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n    owner.canvasFactory.destroy(temporaryPatternCanvas.canvasEntry);\n    pattern.setTransform(domMatrix);\n    return pattern;\n  }\n}\n\n;// ./src/display/canvas.js\n\n\n\n\n\n\nconst MIN_FONT_SIZE = 16;\nconst MAX_FONT_SIZE = 100;\nconst EXECUTION_TIME = 15;\nconst EXECUTION_STEPS = 10;\nconst FULL_CHUNK_HEIGHT = 16;\nconst SCALE_MATRIX = new DOMMatrix();\nconst XY = new Float32Array(2);\nfunction mirrorContextOperations(ctx, destCtx) {\n  if (ctx._removeMirroring) {\n    throw new Error(\"Context is already forwarding operations.\");\n  }\n  const originalMethods = new Map();\n  for (const name of [\"save\", \"restore\", \"rotate\", \"scale\", \"translate\", \"transform\", \"setTransform\", \"resetTransform\", \"clip\", \"moveTo\", \"lineTo\", \"bezierCurveTo\", \"quadraticCurveTo\", \"arc\", \"arcTo\", \"ellipse\", \"rect\", \"roundRect\", \"closePath\", \"beginPath\"]) {\n    const original = ctx[name];\n    if (typeof original !== \"function\" || typeof destCtx[name] !== \"function\") {\n      continue;\n    }\n    originalMethods.set(name, original);\n    ctx[name] = function (...args) {\n      destCtx[name](...args);\n      return original.apply(this, args);\n    };\n  }\n  ctx._removeMirroring = () => {\n    for (const [name, original] of originalMethods) {\n      ctx[name] = original;\n    }\n    delete ctx._removeMirroring;\n  };\n}\nfunction drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {\n  const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n  if (b === 0 && c === 0) {\n    const tlX = destX * a + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destY * d + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destX + destW) * a + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destY + destH) * d + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rWidth, rHeight];\n  }\n  if (a === 0 && d === 0) {\n    const tlX = destY * c + tx;\n    const rTlX = Math.round(tlX);\n    const tlY = destX * b + ty;\n    const rTlY = Math.round(tlY);\n    const brX = (destY + destH) * c + tx;\n    const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n    const brY = (destX + destW) * b + ty;\n    const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n    ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n    ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n    ctx.setTransform(a, b, c, d, tx, ty);\n    return [rHeight, rWidth];\n  }\n  ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n  const scaleX = Math.hypot(a, b);\n  const scaleY = Math.hypot(c, d);\n  return [scaleX * destW, scaleY * destH];\n}\nclass CanvasExtraState {\n  alphaIsShape = false;\n  fontSize = 0;\n  fontSizeScale = 1;\n  textMatrix = null;\n  textMatrixScale = 1;\n  fontMatrix = FONT_IDENTITY_MATRIX;\n  leading = 0;\n  x = 0;\n  y = 0;\n  lineX = 0;\n  lineY = 0;\n  charSpacing = 0;\n  wordSpacing = 0;\n  textHScale = 1;\n  textRenderingMode = TextRenderingMode.FILL;\n  textRise = 0;\n  fillColor = \"#000000\";\n  strokeColor = \"#000000\";\n  tilingPatternDims = null;\n  patternFill = false;\n  patternStroke = false;\n  fillAlpha = 1;\n  strokeAlpha = 1;\n  lineWidth = 1;\n  activeSMask = null;\n  transferMaps = \"none\";\n  minMax = F32_BBOX_INIT.slice();\n  constructor(width, height) {\n    this.clipBox = new Float32Array([0, 0, width, height]);\n  }\n  clone() {\n    const clone = Object.create(this);\n    clone.clipBox = this.clipBox.slice();\n    clone.minMax = this.minMax.slice();\n    clone.tilingPatternDims = this.tilingPatternDims?.slice();\n    return clone;\n  }\n  getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    const box = this.minMax.slice();\n    if (pathType === PathType.STROKE) {\n      if (!transform) {\n        unreachable(\"Stroke bounding box must include transform.\");\n      }\n      Util.singularValueDecompose2dScale(transform, XY);\n      const xStrokePad = XY[0] * this.lineWidth / 2;\n      const yStrokePad = XY[1] * this.lineWidth / 2;\n      box[0] -= xStrokePad;\n      box[1] -= yStrokePad;\n      box[2] += xStrokePad;\n      box[3] += yStrokePad;\n    }\n    return box;\n  }\n  updateClipFromPath() {\n    const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n    this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n  }\n  isEmptyClip() {\n    return this.minMax[0] === Infinity;\n  }\n  startNewPathAndClipBox(box) {\n    this.clipBox.set(box, 0);\n    this.minMax.set(F32_BBOX_INIT, 0);\n  }\n  getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n    return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));\n  }\n}\nfunction putBinaryImageData(ctx, imgData) {\n  const {\n    width,\n    height,\n    kind\n  } = imgData;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  let i;\n  if (kind === ImageKind.GRAYSCALE_1BPP) {\n    for (i = 0; i < totalChunks; i++) {\n      ({\n        srcPos\n      } = convertBlackAndWhiteToRGBA({\n        src,\n        srcPos,\n        dest,\n        width,\n        height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight\n      }));\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else if (kind === ImageKind.RGBA_32BPP) {\n    let j = 0;\n    let elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n    for (i = 0; i < fullChunks; i++) {\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      srcPos += elemsInThisChunk;\n      ctx.putImageData(chunkImgData, 0, j);\n      j += FULL_CHUNK_HEIGHT;\n    }\n    if (i < totalChunks) {\n      elemsInThisChunk = width * partialChunkHeight * 4;\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      ctx.putImageData(chunkImgData, 0, j);\n    }\n  } else if (kind === ImageKind.RGB_24BPP) {\n    for (i = 0; i < totalChunks; i++) {\n      ({\n        srcPos\n      } = convertRGBToRGBA({\n        src,\n        srcPos,\n        dest: new Uint32Array(dest.buffer),\n        width,\n        height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight\n      }));\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else {\n    throw new Error(`bad image kind: ${kind}`);\n  }\n}\nfunction putBinaryImageMask(ctx, imgData) {\n  if (imgData.bitmap) {\n    ctx.drawImage(imgData.bitmap, 0, 0);\n    return;\n  }\n  const {\n    width,\n    height\n  } = imgData;\n  const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  let srcPos = 0;\n  const src = imgData.data;\n  const dest = chunkImgData.data;\n  for (let i = 0; i < totalChunks; i++) {\n    ({\n      srcPos\n    } = convertBlackAndWhiteToRGBA({\n      src,\n      srcPos,\n      dest,\n      width,\n      height: i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight,\n      nonBlackColor: 0\n    }));\n    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n  }\n}\nfunction copyCtxState(sourceCtx, destCtx) {\n  const properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\", \"filter\"];\n  for (const property of properties) {\n    if (sourceCtx[property] !== undefined) {\n      destCtx[property] = sourceCtx[property];\n    }\n  }\n  if (sourceCtx.setLineDash !== undefined) {\n    destCtx.setLineDash(sourceCtx.getLineDash());\n    destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n  }\n}\nfunction resetCtxToDefault(ctx) {\n  ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n  ctx.fillRule = \"nonzero\";\n  ctx.globalAlpha = 1;\n  ctx.lineWidth = 1;\n  ctx.lineCap = \"butt\";\n  ctx.lineJoin = \"miter\";\n  ctx.miterLimit = 10;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.font = \"10px sans-serif\";\n  if (ctx.setLineDash !== undefined) {\n    ctx.setLineDash([]);\n    ctx.lineDashOffset = 0;\n  }\n  const {\n    filter\n  } = ctx;\n  if (filter !== \"none\" && filter !== \"\") {\n    ctx.filter = \"none\";\n  }\n}\nfunction getImageSmoothingEnabled(transform, interpolate) {\n  if (interpolate) {\n    return true;\n  }\n  Util.singularValueDecompose2dScale(transform, XY);\n  const actualScale = Math.fround(OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS);\n  return XY[0] <= actualScale && XY[1] <= actualScale;\n}\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\nclass CanvasGraphics {\n  #knockoutGroupLevel = 0;\n  #knockoutElementDepth = 0;\n  #knockoutTempCanvasEntry = null;\n  #knockoutSavedCtx = null;\n  #knockoutSavedSMaskCtx = null;\n  #knockoutSavedGCO = null;\n  #knockoutElementAlpha = 1;\n  #knockoutFilterCache;\n  #knockoutElementGroupMeta = null;\n  #groupStackMeta = [];\n  constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {\n    optionalContentConfig,\n    markedContentStack = null\n  }, annotationCanvasMap, pageColors, dependencyTracker, imagesTracker) {\n    this.ctx = canvasCtx;\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.stateStack = [];\n    this.pendingClip = null;\n    this.pendingEOFill = false;\n    this.commonObjs = commonObjs;\n    this.objs = objs;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this.groupStack = [];\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.tempSMask = null;\n    this.smaskGroupCanvases = [];\n    this.smaskPreparedEntry = null;\n    this.smaskPreparedFor = null;\n    this.smaskPreparedOffsetX = 0;\n    this.smaskPreparedOffsetY = 0;\n    this.smaskPreparedOOBAlpha = null;\n    this.suspendedCtx = null;\n    this.contentVisible = true;\n    this.markedContentStack = markedContentStack || [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedPatterns = new Map();\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.viewportScale = 1;\n    this.outputScaleX = 1;\n    this.outputScaleY = 1;\n    this.pageColors = pageColors;\n    this._cachedScaleForStroking = [-1, 0];\n    this._cachedGetSinglePixelWidth = null;\n    this._cachedBitmapsMap = new Map();\n    this.dependencyTracker = dependencyTracker ?? null;\n    this.imagesTracker = imagesTracker ?? null;\n  }\n  getObject(opIdx, data, fallback = null) {\n    if (typeof data === \"string\") {\n      this.dependencyTracker?.recordNamedDependency(opIdx, data);\n      return data.startsWith(\"g_\") ? this.commonObjs.get(data) : this.objs.get(data);\n    }\n    return fallback;\n  }\n  beginDrawing({\n    transform,\n    viewport,\n    transparency = false,\n    background = null\n  }) {\n    const width = this.ctx.canvas.width;\n    const height = this.ctx.canvas.height;\n    const savedFillStyle = this.ctx.fillStyle;\n    this.ctx.fillStyle = background || \"#ffffff\";\n    this.ctx.fillRect(0, 0, width, height);\n    this.ctx.fillStyle = savedFillStyle;\n    if (transparency) {\n      const transparentCanvas = this.transparentCanvasEntry = this.canvasFactory.create(width, height);\n      this.compositeCtx = this.ctx;\n      ({\n        canvas: this.transparentCanvas,\n        context: this.ctx\n      } = transparentCanvas);\n      this.ctx.save();\n      this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n    }\n    this.ctx.save();\n    resetCtxToDefault(this.ctx);\n    if (transform) {\n      this.ctx.transform(...transform);\n      this.outputScaleX = transform[0];\n      this.outputScaleY = transform[3];\n    }\n    this.ctx.transform(...viewport.transform);\n    this.viewportScale = viewport.scale;\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n  executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper, operationsFilter) {\n    const argsArray = operatorList.argsArray;\n    const fnArray = operatorList.fnArray;\n    let i = executionStartIdx || 0;\n    const argsArrayLen = argsArray.length;\n    if (argsArrayLen === i) {\n      return i;\n    }\n    const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\n    const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n    let steps = 0;\n    const commonObjs = this.commonObjs;\n    const objs = this.objs;\n    let fnId, fnArgs;\n    while (true) {\n      if (stepper !== undefined) {\n        if (i === stepper.nextBreakPoint) {\n          stepper.breakIt(i, continueCallback);\n          return i;\n        }\n        if (stepper.shouldSkip(i)) {\n          if (++i === argsArrayLen) {\n            return i;\n          }\n          continue;\n        }\n      }\n      if (!operationsFilter || operationsFilter(i)) {\n        fnId = fnArray[i];\n        fnArgs = argsArray[i] ?? null;\n        if (fnId !== OPS.dependency) {\n          if (fnArgs === null) {\n            this[fnId](i);\n          } else {\n            this[fnId](i, ...fnArgs);\n          }\n        } else {\n          for (const depObjId of fnArgs) {\n            this.dependencyTracker?.recordNamedData(depObjId, i);\n            const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n            if (!objsPool.has(depObjId)) {\n              objsPool.get(depObjId, continueCallback);\n              return i;\n            }\n          }\n        }\n      }\n      i++;\n      if (i === argsArrayLen) {\n        return i;\n      }\n      if (chunkOperations && ++steps > EXECUTION_STEPS) {\n        if (Date.now() > endTime) {\n          continueCallback();\n          return i;\n        }\n        steps = 0;\n      }\n    }\n  }\n  #restoreInitialState() {\n    while (this.stateStack.length || this.inSMaskMode) {\n      this.restore();\n    }\n    this.current.activeSMask = null;\n    this.ctx.restore();\n    if (this.transparentCanvas) {\n      this.ctx = this.compositeCtx;\n      this.ctx.save();\n      this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n      this.ctx.drawImage(this.transparentCanvas, 0, 0);\n      this.ctx.restore();\n      this.canvasFactory.destroy(this.transparentCanvasEntry);\n      this.transparentCanvas = null;\n      this.transparentCanvasEntry = null;\n    }\n  }\n  endDrawing() {\n    this.#restoreInitialState();\n    for (const canvas of this.smaskGroupCanvases) {\n      this.canvasFactory.destroy(canvas);\n    }\n    this.smaskGroupCanvases.length = 0;\n    this._clearPreparedSMask();\n    this.tempSMask = null;\n    this.smaskStack.length = 0;\n    for (const meta of this.#groupStackMeta) {\n      this.#destroyKnockoutPools(meta);\n    }\n    this.#groupStackMeta.length = 0;\n    this.#knockoutTempCanvasEntry = null;\n    this.#knockoutSavedCtx = null;\n    this.#knockoutSavedSMaskCtx = null;\n    this.#knockoutSavedGCO = null;\n    this.#knockoutElementAlpha = 1;\n    this.#knockoutElementGroupMeta = null;\n    this.#knockoutElementDepth = 0;\n    this.#knockoutGroupLevel = 0;\n    this.cachedPatterns.clear();\n    for (const cache of this._cachedBitmapsMap.values()) {\n      for (const canvas of cache.values()) {\n        if (typeof HTMLCanvasElement !== \"undefined\" && canvas instanceof HTMLCanvasElement) {\n          canvas.width = canvas.height = 0;\n        }\n      }\n      cache.clear();\n    }\n    this._cachedBitmapsMap.clear();\n    this.#drawFilter();\n  }\n  #drawFilter() {\n    if (this.pageColors) {\n      const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);\n      if (hcmFilterId !== \"none\") {\n        const savedFilter = this.ctx.filter;\n        this.ctx.filter = hcmFilterId;\n        this.ctx.drawImage(this.ctx.canvas, 0, 0);\n        this.ctx.filter = savedFilter;\n      }\n    }\n  }\n  _scaleImage(img, inverseTransform) {\n    const width = img.width ?? img.displayWidth;\n    const height = img.height ?? img.displayHeight;\n    const widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);\n    const heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);\n    const scaleSteps = [];\n    let ws = widthScale,\n      hs = heightScale,\n      pw = width,\n      ph = height;\n    while (ws > 2 && pw > 1 || hs > 2 && ph > 1) {\n      let nw = pw,\n        nh = ph;\n      if (ws > 2 && pw > 1) {\n        nw = Math.ceil(pw / 2);\n        ws /= pw / nw;\n      }\n      if (hs > 2 && ph > 1) {\n        nh = Math.ceil(ph / 2);\n        hs /= ph / nh;\n      }\n      scaleSteps.push({\n        newWidth: nw,\n        newHeight: nh\n      });\n      pw = nw;\n      ph = nh;\n    }\n    if (scaleSteps.length === 0) {\n      return {\n        img,\n        paintWidth: width,\n        paintHeight: height,\n        tmpCanvas: null\n      };\n    }\n    if (scaleSteps.length === 1) {\n      const {\n        newWidth,\n        newHeight\n      } = scaleSteps[0];\n      const tmpCanvas = this.canvasFactory.create(newWidth, newHeight);\n      tmpCanvas.context.drawImage(img, 0, 0, width, height, 0, 0, newWidth, newHeight);\n      return {\n        img: tmpCanvas.canvas,\n        paintWidth: newWidth,\n        paintHeight: newHeight,\n        tmpCanvas\n      };\n    }\n    let readEntry = this.canvasFactory.create(1, 1);\n    let writeEntry = this.canvasFactory.create(1, 1);\n    let paintWidth = width,\n      paintHeight = height;\n    let source = img;\n    for (const {\n      newWidth,\n      newHeight\n    } of scaleSteps) {\n      this.canvasFactory.reset(writeEntry, newWidth, newHeight);\n      writeEntry.context.drawImage(source, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\n      [readEntry, writeEntry] = [writeEntry, readEntry];\n      source = readEntry.canvas;\n      paintWidth = newWidth;\n      paintHeight = newHeight;\n    }\n    this.canvasFactory.destroy(writeEntry);\n    return {\n      img: readEntry.canvas,\n      paintWidth,\n      paintHeight,\n      tmpCanvas: readEntry\n    };\n  }\n  _createMaskCanvas(opIdx, img) {\n    const ctx = this.ctx;\n    const {\n      width,\n      height\n    } = img;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    const currentTransform = getCurrentTransform(ctx);\n    let cache, cacheKey, scaled, maskCanvas;\n    if ((img.bitmap || img.data) && img.count > 1) {\n      const mainKey = img.bitmap || img.data.buffer;\n      cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);\n      cache = this._cachedBitmapsMap.getOrInsertComputed(mainKey, makeMap);\n      const cachedImage = cache.get(cacheKey);\n      if (cachedImage && !isPatternFill) {\n        const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);\n        const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);\n        this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill);\n        return {\n          canvas: cachedImage,\n          offsetX,\n          offsetY\n        };\n      }\n      scaled = cachedImage;\n    }\n    if (!scaled) {\n      maskCanvas = this.canvasFactory.create(width, height);\n      putBinaryImageMask(maskCanvas.context, img);\n    }\n    let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);\n    maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n    const minMax = F32_BBOX_INIT.slice();\n    Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);\n    const [minX, minY, maxX, maxY] = minMax;\n    const drawnWidth = Math.round(maxX - minX) || 1;\n    const drawnHeight = Math.round(maxY - minY) || 1;\n    const fillCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    const fillCtx = fillCanvas.context;\n    const offsetX = minX;\n    const offsetY = minY;\n    fillCtx.translate(-offsetX, -offsetY);\n    fillCtx.transform(...maskToCanvas);\n    let scaledEntry = null;\n    if (!scaled) {\n      const scaleResult = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx));\n      scaled = scaleResult.img;\n      scaledEntry = scaleResult.tmpCanvas;\n      if (scaled !== maskCanvas.canvas) {\n        this.canvasFactory.destroy(maskCanvas);\n        maskCanvas = null;\n      }\n      if (cache && isPatternFill) {\n        cache.set(cacheKey, scaled);\n        scaledEntry = null;\n        maskCanvas = null;\n      }\n    }\n    fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate);\n    drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);\n    if (scaledEntry) {\n      this.canvasFactory.destroy(scaledEntry);\n    }\n    if (maskCanvas) {\n      this.canvasFactory.destroy(maskCanvas);\n    }\n    fillCtx.globalCompositeOperation = \"source-in\";\n    const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);\n    fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL, opIdx) : fillColor;\n    fillCtx.fillRect(0, 0, width, height);\n    if (cache && !isPatternFill) {\n      cache.set(cacheKey, fillCanvas.canvas);\n    }\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.transformAndFill);\n    return {\n      canvas: fillCanvas.canvas,\n      canvasEntry: cache && !isPatternFill ? null : fillCanvas,\n      offsetX: Math.round(offsetX),\n      offsetY: Math.round(offsetY)\n    };\n  }\n  setLineWidth(opIdx, width) {\n    this.dependencyTracker?.recordSimpleData(\"lineWidth\", opIdx);\n    if (width !== this.current.lineWidth) {\n      this._cachedScaleForStroking[0] = -1;\n    }\n    this.current.lineWidth = width;\n    this.ctx.lineWidth = width;\n  }\n  setLineCap(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineCap\", opIdx);\n    this.ctx.lineCap = LINE_CAP_STYLES[style];\n  }\n  setLineJoin(opIdx, style) {\n    this.dependencyTracker?.recordSimpleData(\"lineJoin\", opIdx);\n    this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n  }\n  setMiterLimit(opIdx, limit) {\n    this.dependencyTracker?.recordSimpleData(\"miterLimit\", opIdx);\n    this.ctx.miterLimit = limit;\n  }\n  setDash(opIdx, dashArray, dashPhase) {\n    this.dependencyTracker?.recordSimpleData(\"dash\", opIdx);\n    const ctx = this.ctx;\n    if (ctx.setLineDash !== undefined) {\n      ctx.setLineDash(dashArray);\n      ctx.lineDashOffset = dashPhase;\n    }\n  }\n  setRenderingIntent(opIdx, intent) {}\n  setFlatness(opIdx, flatness) {}\n  setGState(opIdx, states) {\n    for (const [key, value] of states) {\n      switch (key) {\n        case \"LW\":\n          this.setLineWidth(opIdx, value);\n          break;\n        case \"LC\":\n          this.setLineCap(opIdx, value);\n          break;\n        case \"LJ\":\n          this.setLineJoin(opIdx, value);\n          break;\n        case \"ML\":\n          this.setMiterLimit(opIdx, value);\n          break;\n        case \"D\":\n          this.setDash(opIdx, value[0], value[1]);\n          break;\n        case \"RI\":\n          this.setRenderingIntent(opIdx, value);\n          break;\n        case \"FL\":\n          this.setFlatness(opIdx, value);\n          break;\n        case \"Font\":\n          this.setFont(opIdx, value[0], value[1]);\n          break;\n        case \"CA\":\n          this.dependencyTracker?.recordSimpleData(\"strokeAlpha\", opIdx);\n          this.current.strokeAlpha = value;\n          break;\n        case \"ca\":\n          this.dependencyTracker?.recordSimpleData(\"fillAlpha\", opIdx);\n          this.ctx.globalAlpha = this.current.fillAlpha = value;\n          break;\n        case \"BM\":\n          this.dependencyTracker?.recordSimpleData(\"globalCompositeOperation\", opIdx);\n          this.ctx.globalCompositeOperation = value;\n          break;\n        case \"SMask\":\n          this.dependencyTracker?.recordSimpleData(\"SMask\", opIdx);\n          this.current.activeSMask = value ? this.tempSMask : null;\n          if (this.current.activeSMask) {\n            this.current.activeSMask.blendMode = this.ctx.globalCompositeOperation;\n          }\n          this.tempSMask = null;\n          this.checkSMaskState(opIdx);\n          break;\n        case \"TR\":\n          this.dependencyTracker?.recordSimpleData(\"filter\", opIdx);\n          this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);\n          break;\n      }\n    }\n  }\n  get inSMaskMode() {\n    return !!this.suspendedCtx;\n  }\n  _clearPreparedSMask() {\n    if (this.smaskPreparedEntry) {\n      this.canvasFactory.destroy(this.smaskPreparedEntry);\n      this.smaskPreparedEntry = null;\n    }\n    this.smaskPreparedFor = null;\n    this.smaskPreparedOffsetX = 0;\n    this.smaskPreparedOffsetY = 0;\n    this.smaskPreparedOOBAlpha = null;\n  }\n  _ensurePreparedSMask(smask) {\n    if (smask === this.smaskPreparedFor) {\n      return;\n    }\n    this._clearPreparedSMask();\n    this._prepareSMaskCanvas(smask);\n  }\n  checkSMaskState(opIdx) {\n    const inSMaskMode = this.inSMaskMode;\n    if (this.current.activeSMask && !inSMaskMode) {\n      this.beginSMaskMode(opIdx);\n    } else if (!this.current.activeSMask && inSMaskMode) {\n      this.endSMaskMode();\n    } else if (this.current.activeSMask && inSMaskMode) {\n      this._ensurePreparedSMask(this.current.activeSMask);\n    }\n  }\n  _prepareSMaskCanvas(smask) {\n    const {\n      canvas: maskCanvas,\n      subtype,\n      backdrop,\n      transferMap\n    } = smask;\n    const hasFilter = subtype === \"Luminosity\" || subtype === \"Alpha\" && transferMap;\n    if (!hasFilter && !(subtype === \"Luminosity\" && backdrop)) {\n      this.smaskPreparedFor = smask;\n      return;\n    }\n    let filteredOOBAlpha;\n    if (subtype === \"Luminosity\" && backdrop) {\n      const [r, g, b] = getRGBA(backdrop);\n      const inputAlpha = Math.round(0.3 * r + 0.59 * g + 0.11 * b);\n      filteredOOBAlpha = transferMap?.[inputAlpha] ?? inputAlpha;\n    } else {\n      filteredOOBAlpha = transferMap?.[0] ?? 0;\n    }\n    const SMASK_LAYER_TO_MASK_AREA_RATIO = 4;\n    const {\n      width: layerW,\n      height: layerH\n    } = this.ctx.canvas;\n    const maskArea = maskCanvas.width * maskCanvas.height;\n    const useLayerSize = layerW * layerH < SMASK_LAYER_TO_MASK_AREA_RATIO * maskArea;\n    const filterSpec = hasFilter ? {\n      url: subtype === \"Alpha\" ? this.filterFactory.addAlphaFilter(transferMap) : this.filterFactory.addLuminosityFilter(transferMap),\n      subtype,\n      transferMap\n    } : null;\n    const bakedBackdrop = subtype === \"Luminosity\" ? backdrop : null;\n    let preparedEntry, offsetX, offsetY;\n    if (useLayerSize) {\n      preparedEntry = this._bakeSMaskCanvas(maskCanvas, smask.offsetX, smask.offsetY, layerW, layerH, bakedBackdrop, filterSpec);\n      offsetX = 0;\n      offsetY = 0;\n    } else {\n      preparedEntry = this._bakeSMaskCanvas(maskCanvas, 0, 0, maskCanvas.width, maskCanvas.height, bakedBackdrop, filterSpec);\n      offsetX = smask.offsetX;\n      offsetY = smask.offsetY;\n    }\n    this.smaskPreparedEntry = preparedEntry;\n    this.smaskPreparedFor = smask;\n    this.smaskPreparedOffsetX = offsetX;\n    this.smaskPreparedOffsetY = offsetY;\n    this.smaskPreparedOOBAlpha = !useLayerSize && filteredOOBAlpha !== 0 ? filteredOOBAlpha : null;\n  }\n  _bakeSMaskCanvas(maskCanvas, drawX, drawY, w, h, backdrop, filterSpec) {\n    if (!backdrop && !filterSpec) {\n      unreachable(\"_bakeSMaskCanvas with neither backdrop nor filter\");\n    }\n    const srcEntry = this.canvasFactory.create(w, h);\n    const sCtx = srcEntry.context;\n    sCtx.drawImage(maskCanvas, drawX, drawY);\n    if (backdrop) {\n      sCtx.globalCompositeOperation = \"destination-atop\";\n      sCtx.fillStyle = backdrop;\n      sCtx.fillRect(0, 0, w, h);\n    }\n    if (!filterSpec) {\n      return srcEntry;\n    }\n    const preparedEntry = this.canvasFactory.create(w, h);\n    const pCtx = preparedEntry.context;\n    pCtx.filter = filterSpec.url;\n    const filterApplied = FeatureTest.isCanvasFilterSupported && pCtx.filter !== \"none\" && pCtx.filter !== \"\";\n    pCtx.drawImage(srcEntry.canvas, 0, 0);\n    if (FeatureTest.isCanvasFilterSupported) {\n      pCtx.filter = \"none\";\n    }\n    if (!filterApplied) {\n      const img = pCtx.getImageData(0, 0, w, h);\n      const {\n        data\n      } = img;\n      const {\n        transferMap\n      } = filterSpec;\n      if (filterSpec.subtype === \"Luminosity\") {\n        for (let i = 0, ii = data.length; i < ii; i += 4) {\n          const a = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2] + 0.5 | 0;\n          data[i] = data[i + 1] = data[i + 2] = 0;\n          data[i + 3] = transferMap?.[a] ?? a;\n        }\n      } else {\n        for (let i = 3, ii = data.length; i < ii; i += 4) {\n          data[i] = transferMap[data[i]];\n        }\n      }\n      pCtx.putImageData(img, 0, 0);\n    }\n    this.canvasFactory.destroy(srcEntry);\n    return preparedEntry;\n  }\n  beginSMaskMode(opIdx) {\n    if (this.inSMaskMode) {\n      throw new Error(\"beginSMaskMode called while already in smask mode\");\n    }\n    const {\n      width: drawnWidth,\n      height: drawnHeight\n    } = this.ctx.canvas;\n    const scratchCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    this.smaskScratchCanvas = scratchCanvas;\n    this.suspendedCtx = this.ctx;\n    const ctx = this.ctx = scratchCanvas.context;\n    ctx.setTransform(this.suspendedCtx.getTransform());\n    copyCtxState(this.suspendedCtx, ctx);\n    mirrorContextOperations(ctx, this.suspendedCtx);\n    this._ensurePreparedSMask(this.current.activeSMask);\n    this.setGState(opIdx, [[\"BM\", \"source-over\"]]);\n  }\n  endSMaskMode() {\n    if (!this.inSMaskMode) {\n      throw new Error(\"endSMaskMode called while not in smask mode\");\n    }\n    this.ctx._removeMirroring();\n    copyCtxState(this.ctx, this.suspendedCtx);\n    this.ctx = this.suspendedCtx;\n    this.suspendedCtx = null;\n    this.canvasFactory.destroy(this.smaskScratchCanvas);\n    this.smaskScratchCanvas = null;\n    this._clearPreparedSMask();\n  }\n  #createKnockoutMaskCanvas(sourceCanvas, reuseEntry = null, alpha = 1) {\n    const {\n      width,\n      height\n    } = sourceCanvas;\n    const maskEntry = reuseEntry ?? this.canvasFactory.create(width, height);\n    const maskCtx = maskEntry.context;\n    alpha = Math.round(alpha * 255) / 255;\n    const needsAlphaScaling = alpha < 1;\n    if (needsAlphaScaling && this.#knockoutFilterCache === undefined) {\n      this.#knockoutFilterCache = FeatureTest.isCanvasFilterSupported ? new Map() : \"none\";\n    }\n    let knockoutFilter = \"none\";\n    if (needsAlphaScaling && this.#knockoutFilterCache instanceof Map) {\n      knockoutFilter = this.#knockoutFilterCache.getOrInsertComputed(alpha, () => this.filterFactory.addKnockoutFilter(alpha));\n    }\n    if (!needsAlphaScaling || knockoutFilter !== \"none\") {\n      if (reuseEntry) {\n        maskCtx.save();\n        maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n        maskCtx.clearRect(0, 0, width, height);\n        maskCtx.restore();\n      }\n      maskCtx.filter = knockoutFilter;\n      maskCtx.drawImage(sourceCanvas, 0, 0);\n      maskCtx.filter = \"none\";\n      return maskEntry;\n    }\n    const sourceData = sourceCanvas.getContext(\"2d\", {\n      willReadFrequently: true\n    }).getImageData(0, 0, width, height);\n    const maskData = maskCtx.createImageData(width, height);\n    const sourcePixels = sourceData.data,\n      maskPixels = maskData.data;\n    const alphaScale = alpha > 0 ? 1 / alpha : 1e6;\n    for (let i = 3, ii = sourcePixels.length; i < ii; i += 4) {\n      maskPixels[i] = Math.min(Math.round(sourcePixels[i] * alphaScale), 255);\n    }\n    maskCtx.putImageData(maskData, 0, 0);\n    return maskEntry;\n  }\n  #getOrCreatePooledEntry(meta, key, width, height) {\n    let entry = meta?.[key] ?? null;\n    if (entry && (entry.canvas.width !== width || entry.canvas.height !== height)) {\n      this.canvasFactory.destroy(entry);\n      entry = null;\n    }\n    if (!entry) {\n      entry = this.canvasFactory.create(width, height);\n      if (meta) {\n        meta[key] = entry;\n      }\n      return entry;\n    }\n    const ctx = entry.context;\n    ctx.save();\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.clearRect(0, 0, width, height);\n    ctx.restore();\n    return entry;\n  }\n  #compositeKnockoutSurface(destCtx, surfaceCanvas, options = {}) {\n    const {\n      backdropCanvas = null,\n      destTransform = [1, 0, 0, 1, 0, 0],\n      backdropOffset = [0, 0],\n      reuseMaskEntry = null,\n      poolMeta = null,\n      sourceAlpha = 1,\n      sourceFilter = \"none\",\n      knockoutAlpha = 1\n    } = options;\n    const {\n      width,\n      height\n    } = surfaceCanvas;\n    const knockoutMaskEntry = this.#createKnockoutMaskCanvas(surfaceCanvas, reuseMaskEntry, knockoutAlpha);\n    const sourceCompositeOperation = destCtx.globalCompositeOperation;\n    destCtx.save();\n    destCtx.setTransform(...destTransform);\n    destCtx.globalAlpha = 1;\n    if (FeatureTest.isCanvasFilterSupported) {\n      destCtx.filter = \"none\";\n    }\n    destCtx.globalCompositeOperation = \"destination-out\";\n    destCtx.drawImage(knockoutMaskEntry.canvas, 0, 0);\n    if (backdropCanvas) {\n      const [bx, by] = backdropOffset;\n      const backdropEntry = this.#getOrCreatePooledEntry(poolMeta, \"knockoutBackdropEntry\", width, height);\n      const backdropCtx = backdropEntry.context;\n      backdropCtx.drawImage(backdropCanvas, bx, by, width, height, 0, 0, width, height);\n      backdropCtx.globalCompositeOperation = \"destination-in\";\n      backdropCtx.drawImage(knockoutMaskEntry.canvas, 0, 0);\n      backdropCtx.globalCompositeOperation = \"source-over\";\n      destCtx.globalCompositeOperation = \"destination-over\";\n      destCtx.drawImage(backdropEntry.canvas, 0, 0);\n      if (!poolMeta) {\n        this.canvasFactory.destroy(backdropEntry);\n      }\n    }\n    destCtx.globalCompositeOperation = sourceCompositeOperation;\n    destCtx.globalAlpha = sourceAlpha;\n    if (FeatureTest.isCanvasFilterSupported) {\n      destCtx.filter = sourceFilter ?? \"none\";\n    }\n    destCtx.drawImage(surfaceCanvas, 0, 0);\n    destCtx.restore();\n    if (!reuseMaskEntry) {\n      this.canvasFactory.destroy(knockoutMaskEntry);\n    }\n  }\n  #beginKnockoutElement(alpha = 1) {\n    if (this.#knockoutGroupLevel === 0 || this.#knockoutElementDepth > 0 || !this.contentVisible) {\n      return false;\n    }\n    this.#knockoutElementDepth++;\n    this.#knockoutElementAlpha = alpha;\n    const groupMeta = this.#groupStackMeta.at(-1);\n    const {\n      canvas\n    } = this.ctx;\n    const tempEntry = this.#getOrCreatePooledEntry(groupMeta, \"knockoutTempEntry\", canvas.width, canvas.height);\n    this.#knockoutTempCanvasEntry = tempEntry;\n    const tempCtx = tempEntry.context;\n    tempCtx.save();\n    tempCtx.setTransform(this.ctx.getTransform());\n    copyCtxState(this.ctx, tempCtx);\n    this.#knockoutSavedGCO = tempCtx.globalCompositeOperation;\n    tempCtx.globalCompositeOperation = \"source-over\";\n    mirrorContextOperations(tempCtx, this.ctx);\n    this.#knockoutElementGroupMeta = groupMeta;\n    this.#knockoutSavedCtx = this.ctx;\n    this.#knockoutSavedSMaskCtx = this.suspendedCtx;\n    this.ctx = tempCtx;\n    if (this.inSMaskMode) {\n      this.suspendedCtx = tempCtx;\n    }\n    return true;\n  }\n  #endKnockoutElement(started) {\n    if (!started) {\n      return;\n    }\n    const tempEntry = this.#knockoutTempCanvasEntry;\n    const savedCtx = this.#knockoutSavedCtx;\n    const savedSMaskCtx = this.#knockoutSavedSMaskCtx;\n    const tempCtx = tempEntry.context;\n    this.#knockoutTempCanvasEntry = null;\n    this.#knockoutSavedCtx = null;\n    this.#knockoutSavedSMaskCtx = null;\n    if (this.inSMaskMode && this.suspendedCtx === tempCtx && this.ctx !== tempCtx) {\n      this.endSMaskMode();\n    }\n    if (this.inSMaskMode) {\n      this.suspendedCtx = savedSMaskCtx;\n    }\n    this.ctx._removeMirroring();\n    this.ctx.globalCompositeOperation = this.#knockoutSavedGCO;\n    this.#knockoutSavedGCO = null;\n    copyCtxState(this.ctx, savedCtx);\n    this.ctx = savedCtx;\n    const groupMeta = this.#knockoutElementGroupMeta;\n    this.#knockoutElementGroupMeta = null;\n    const knockoutAlpha = this.#knockoutElementAlpha;\n    this.#knockoutElementAlpha = 1;\n    try {\n      this.#compositeKnockoutSurface(savedSMaskCtx ?? savedCtx, tempEntry.canvas, {\n        backdropCanvas: groupMeta?.backdropCtx?.canvas ?? null,\n        backdropOffset: groupMeta?.backdropCtx ? [groupMeta.offsetX, groupMeta.offsetY] : [0, 0],\n        reuseMaskEntry: groupMeta?.knockoutMaskEntry ?? null,\n        poolMeta: groupMeta,\n        knockoutAlpha\n      });\n    } finally {\n      tempCtx.restore();\n      this.#knockoutElementDepth--;\n      if (!groupMeta) {\n        this.canvasFactory.destroy(tempEntry);\n      }\n    }\n  }\n  compose(dirtyBox) {\n    if (!this.current.activeSMask) {\n      return;\n    }\n    dirtyBox = dirtyBox ? [Math.floor(dirtyBox[0]), Math.floor(dirtyBox[1]), Math.ceil(dirtyBox[2]), Math.ceil(dirtyBox[3])] : [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n    const smask = this.current.activeSMask;\n    const suspendedCtx = this.suspendedCtx;\n    const applySMaskInPlace = this.#knockoutElementDepth > 0 && suspendedCtx === this.ctx;\n    this.composeSMask(applySMaskInPlace ? null : suspendedCtx, smask, this.ctx, dirtyBox);\n    if (applySMaskInPlace) {\n      return;\n    }\n    this.ctx.save();\n    this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.ctx.restore();\n  }\n  composeSMask(ctx, smask, layerCtx, layerBox) {\n    const layerOffsetX = layerBox[0];\n    const layerOffsetY = layerBox[1];\n    const layerWidth = layerBox[2] - layerOffsetX;\n    const layerHeight = layerBox[3] - layerOffsetY;\n    if (layerWidth === 0 || layerHeight === 0) {\n      return;\n    }\n    const preparedEntry = this.smaskPreparedEntry;\n    if (preparedEntry) {\n      let clipX = layerOffsetX;\n      let clipY = layerOffsetY;\n      let clipW = layerWidth;\n      let clipH = layerHeight;\n      const oobAlpha = this.smaskPreparedOOBAlpha;\n      const hasOOBAlpha = oobAlpha !== null;\n      if (hasOOBAlpha) {\n        clipX = Math.max(layerOffsetX, smask.offsetX);\n        clipY = Math.max(layerOffsetY, smask.offsetY);\n        const x1 = Math.min(layerOffsetX + layerWidth, smask.offsetX + smask.canvas.width);\n        const y1 = Math.min(layerOffsetY + layerHeight, smask.offsetY + smask.canvas.height);\n        clipW = x1 - clipX;\n        clipH = y1 - clipY;\n      }\n      if (clipW > 0 && clipH > 0) {\n        const srcX = clipX - this.smaskPreparedOffsetX;\n        const srcY = clipY - this.smaskPreparedOffsetY;\n        layerCtx.save();\n        layerCtx.globalAlpha = 1;\n        layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n        const clip = new Path2D();\n        clip.rect(clipX, clipY, clipW, clipH);\n        layerCtx.clip(clip);\n        layerCtx.globalCompositeOperation = \"destination-in\";\n        layerCtx.drawImage(preparedEntry.canvas, srcX, srcY, clipW, clipH, clipX, clipY, clipW, clipH);\n        layerCtx.restore();\n      }\n      if (hasOOBAlpha && oobAlpha < 255) {\n        this._applySMaskOOBAlpha(layerCtx, layerOffsetX, layerOffsetY, layerWidth, layerHeight, clipX, clipY, clipX + clipW, clipY + clipH, oobAlpha);\n      }\n    } else {\n      this.genericComposeSMask(smask, layerCtx, layerWidth, layerHeight, layerOffsetX, layerOffsetY);\n    }\n    if (!ctx) {\n      return;\n    }\n    ctx.save();\n    ctx.globalAlpha = 1;\n    ctx.globalCompositeOperation = smask.blendMode || \"source-over\";\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(layerCtx.canvas, layerOffsetX, layerOffsetY, layerWidth, layerHeight, layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    ctx.restore();\n  }\n  _applySMaskOOBAlpha(layerCtx, layerOffsetX, layerOffsetY, layerWidth, layerHeight, maskX0, maskY0, maskX1, maskY1, alpha) {\n    const hasInnerCutout = maskX0 < maskX1 && maskY0 < maskY1;\n    if (hasInnerCutout && maskX0 === layerOffsetX && maskY0 === layerOffsetY && maskX1 === layerOffsetX + layerWidth && maskY1 === layerOffsetY + layerHeight) {\n      return;\n    }\n    const path = new Path2D();\n    path.rect(layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    if (hasInnerCutout) {\n      path.rect(maskX0, maskY0, maskX1 - maskX0, maskY1 - maskY0);\n    }\n    layerCtx.save();\n    layerCtx.globalAlpha = alpha / 255;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n    layerCtx.clip(path, \"evenodd\");\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.fillStyle = \"#000000\";\n    layerCtx.fillRect(layerOffsetX, layerOffsetY, layerWidth, layerHeight);\n    layerCtx.restore();\n  }\n  genericComposeSMask(smask, layerCtx, width, height, layerOffsetX, layerOffsetY) {\n    const {\n      context: maskCtx,\n      offsetX: maskOffsetX,\n      offsetY: maskOffsetY\n    } = smask;\n    layerCtx.save();\n    layerCtx.globalAlpha = 1;\n    layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n    const clip = new Path2D();\n    clip.rect(layerOffsetX, layerOffsetY, width, height);\n    layerCtx.clip(clip);\n    layerCtx.globalCompositeOperation = \"destination-in\";\n    layerCtx.drawImage(maskCtx.canvas, layerOffsetX - maskOffsetX, layerOffsetY - maskOffsetY, width, height, layerOffsetX, layerOffsetY, width, height);\n    layerCtx.restore();\n  }\n  save(opIdx) {\n    if (this.inSMaskMode) {\n      copyCtxState(this.ctx, this.suspendedCtx);\n    }\n    this.ctx.save();\n    const old = this.current;\n    this.stateStack.push(old);\n    this.current = old.clone();\n    this.dependencyTracker?.save(opIdx);\n  }\n  restore(opIdx) {\n    this.dependencyTracker?.restore(opIdx);\n    if (this.stateStack.length === 0) {\n      if (this.inSMaskMode) {\n        this.endSMaskMode();\n      }\n      return;\n    }\n    this.current = this.stateStack.pop();\n    this.ctx.restore();\n    if (this.inSMaskMode) {\n      copyCtxState(this.suspendedCtx, this.ctx);\n      this.ctx.setTransform(this.suspendedCtx.getTransform());\n    }\n    this.checkSMaskState(opIdx);\n    this.pendingClip = null;\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n  transform(opIdx, a, b, c, d, e, f) {\n    this.dependencyTracker?.recordIncrementalData(\"transform\", opIdx);\n    this.ctx.transform(a, b, c, d, e, f);\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n  }\n  constructPath(opIdx, op, data, minMax) {\n    let [path] = data;\n    if (!minMax) {\n      path ||= data[0] = new Path2D();\n      if (op !== OPS.stroke && op !== OPS.closeStroke) {\n        this.current.tilingPatternDims = null;\n      }\n      this[op](opIdx, path);\n      return;\n    }\n    if (this.dependencyTracker !== null) {\n      const outerExtraSize = op === OPS.stroke ? this.current.lineWidth / 2 : 0;\n      this.dependencyTracker.resetBBox(opIdx).recordBBox(opIdx, this.ctx, minMax[0] - outerExtraSize, minMax[2] + outerExtraSize, minMax[1] - outerExtraSize, minMax[3] + outerExtraSize).recordDependencies(opIdx, [\"transform\"]);\n    }\n    if (!(path instanceof Path2D)) {\n      path = data[0] = makePathFromDrawOPS(path);\n    }\n    Util.axialAlignedBoundingBox(minMax, getCurrentTransform(this.ctx), this.current.minMax);\n    const tilingDims = this.current.tilingPatternDims;\n    if (tilingDims && op !== OPS.stroke && op !== OPS.closeStroke && this.current.fillColor instanceof TilingPattern) {\n      const clippedBBox = Util.intersect(this.current.clipBox, this.current.minMax);\n      if (!clippedBBox) {\n        this.current.tilingPatternDims = null;\n      } else {\n        this.current.fillColor.updatePatternDims(clippedBBox, tilingDims);\n      }\n    }\n    this[op](opIdx, path);\n    this._pathStartIdx = opIdx;\n  }\n  closePath(opIdx) {\n    this.ctx.closePath();\n  }\n  stroke(opIdx, path, consumePath = true) {\n    const started = consumePath && this.#beginKnockoutElement(this.current.strokeAlpha);\n    const ctx = this.ctx;\n    const strokeColor = this.current.strokeColor;\n    ctx.globalAlpha = this.current.strokeAlpha;\n    if (this.contentVisible) {\n      if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n        const baseTransform = strokeColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;\n        ctx.save();\n        ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx);\n        if (baseTransform) {\n          const newPath = new Path2D();\n          newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));\n          path = newPath;\n        }\n        this.rescaleAndStroke(path, false);\n        ctx.restore();\n      } else {\n        this.rescaleAndStroke(path, true);\n      }\n    }\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.stroke);\n    if (consumePath) {\n      this.consumePath(opIdx, path, this.current.getClippedPathBoundingBox(PathType.STROKE, getCurrentTransform(this.ctx)));\n    }\n    ctx.globalAlpha = this.current.fillAlpha;\n    this.#endKnockoutElement(started);\n  }\n  closeStroke(opIdx, path) {\n    this.stroke(opIdx, path);\n  }\n  fill(opIdx, path, consumePath = true) {\n    const started = consumePath && this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    let needRestore = false;\n    const intersect = this.current.getClippedPathBoundingBox();\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.fill);\n    if (isPatternFill) {\n      const dims = this.current.tilingPatternDims;\n      const tileIdx = dims && fillColor.canSkipPatternCanvas(dims);\n      if (tileIdx) {\n        fillColor.drawPattern(this, path, this.pendingEOFill, tileIdx, opIdx);\n        this.pendingEOFill = false;\n        if (consumePath) {\n          this.consumePath(opIdx, path, intersect);\n        }\n        this.current.tilingPatternDims = null;\n        this.#endKnockoutElement(started);\n        return;\n      }\n      const baseTransform = fillColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;\n      this.dependencyTracker?.save(opIdx);\n      ctx.save();\n      ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx);\n      if (baseTransform) {\n        const newPath = new Path2D();\n        newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));\n        path = newPath;\n      }\n      needRestore = true;\n    }\n    if (this.contentVisible && intersect !== null) {\n      if (this.pendingEOFill) {\n        ctx.fill(path, \"evenodd\");\n        this.pendingEOFill = false;\n      } else {\n        ctx.fill(path);\n      }\n    }\n    if (needRestore) {\n      ctx.restore();\n      this.dependencyTracker?.restore(opIdx);\n    }\n    if (consumePath) {\n      this.consumePath(opIdx, path, intersect);\n    }\n    this.#endKnockoutElement(started);\n  }\n  eoFill(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fill(opIdx, path);\n  }\n  fillStroke(opIdx, path) {\n    const started = this.#beginKnockoutElement(Math.min(this.current.fillAlpha, this.current.strokeAlpha));\n    this.fill(opIdx, path, false);\n    this.stroke(opIdx, path, false);\n    this.consumePath(opIdx, path);\n    this.#endKnockoutElement(started);\n  }\n  eoFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n  closeFillStroke(opIdx, path) {\n    this.fillStroke(opIdx, path);\n  }\n  closeEOFillStroke(opIdx, path) {\n    this.pendingEOFill = true;\n    this.fillStroke(opIdx, path);\n  }\n  endPath(opIdx, path) {\n    this.consumePath(opIdx, path);\n  }\n  rawFillPath(opIdx, path) {\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    this.ctx.fill(path);\n    this.dependencyTracker?.recordDependencies(opIdx, Dependencies.rawFillPath).recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  clip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = NORMAL_CLIP;\n  }\n  eoClip(opIdx) {\n    this.dependencyTracker?.recordFutureForcedDependency(\"clipMode\", opIdx);\n    this.pendingClip = EO_CLIP;\n  }\n  beginText(opIdx) {\n    this.current.textMatrix = null;\n    this.current.textMatrixScale = 1;\n    this.current.x = this.current.lineX = 0;\n    this.current.y = this.current.lineY = 0;\n    this.dependencyTracker?.recordOpenMarker(opIdx).resetIncrementalData(\"sameLineText\").resetIncrementalData(\"moveText\", opIdx);\n  }\n  endText(opIdx) {\n    const paths = this.pendingTextPaths;\n    const ctx = this.ctx;\n    if (this.dependencyTracker) {\n      const {\n        dependencyTracker\n      } = this;\n      if (paths !== undefined) {\n        dependencyTracker.recordFutureForcedDependency(\"textClip\", dependencyTracker.getOpenMarker()).recordFutureForcedDependency(\"textClip\", opIdx);\n      }\n      dependencyTracker.recordCloseMarker(opIdx);\n    }\n    if (paths !== undefined) {\n      const newPath = new Path2D();\n      const invTransf = ctx.getTransform().invertSelf();\n      for (const {\n        transform,\n        x,\n        y,\n        fontSize,\n        path\n      } of paths) {\n        if (!path) {\n          continue;\n        }\n        newPath.addPath(path, new DOMMatrix(transform).preMultiplySelf(invTransf).translate(x, y).scale(fontSize, -fontSize));\n      }\n      ctx.clip(newPath);\n    }\n    delete this.pendingTextPaths;\n  }\n  setCharSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"charSpacing\", opIdx);\n    this.current.charSpacing = spacing;\n  }\n  setWordSpacing(opIdx, spacing) {\n    this.dependencyTracker?.recordSimpleData(\"wordSpacing\", opIdx);\n    this.current.wordSpacing = spacing;\n  }\n  setHScale(opIdx, scale) {\n    this.dependencyTracker?.recordSimpleData(\"hScale\", opIdx);\n    this.current.textHScale = scale / 100;\n  }\n  setLeading(opIdx, leading) {\n    this.dependencyTracker?.recordSimpleData(\"leading\", opIdx);\n    this.current.leading = -leading;\n  }\n  setFont(opIdx, fontRefName, size) {\n    this.dependencyTracker?.recordSimpleData(\"font\", opIdx).recordSimpleDataFromNamed(\"fontObj\", fontRefName, opIdx);\n    const fontObj = this.commonObjs.get(fontRefName);\n    const current = this.current;\n    if (!fontObj) {\n      throw new Error(`Can't find font for ${fontRefName}`);\n    }\n    current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n    if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n      warn(\"Invalid font matrix for font \" + fontRefName);\n    }\n    if (size < 0) {\n      size = -size;\n      current.fontDirection = -1;\n    } else {\n      current.fontDirection = 1;\n    }\n    this.current.font = fontObj;\n    this.current.fontSize = size;\n    if (fontObj.isType3Font) {\n      return;\n    }\n    const name = fontObj.loadedName || \"sans-serif\";\n    const typeface = fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n    let bold = \"normal\";\n    if (fontObj.black) {\n      bold = \"900\";\n    } else if (fontObj.bold) {\n      bold = \"bold\";\n    }\n    const italic = fontObj.italic ? \"italic\" : \"normal\";\n    const browserFontSize = MathClamp(size, MIN_FONT_SIZE, MAX_FONT_SIZE);\n    this.current.fontSizeScale = size / browserFontSize;\n    this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n  }\n  setTextRenderingMode(opIdx, mode) {\n    this.dependencyTracker?.recordSimpleData(\"textRenderingMode\", opIdx);\n    this.current.textRenderingMode = mode;\n  }\n  setTextRise(opIdx, rise) {\n    this.dependencyTracker?.recordSimpleData(\"textRise\", opIdx);\n    this.current.textRise = rise;\n  }\n  moveText(opIdx, x, y) {\n    this.dependencyTracker?.resetIncrementalData(\"sameLineText\").recordIncrementalData(\"moveText\", opIdx);\n    this.current.x = this.current.lineX += x;\n    this.current.y = this.current.lineY += y;\n  }\n  setLeadingMoveText(opIdx, x, y) {\n    this.setLeading(opIdx, -y);\n    this.moveText(opIdx, x, y);\n  }\n  setTextMatrix(opIdx, matrix) {\n    this.dependencyTracker?.resetIncrementalData(\"sameLineText\").recordSimpleData(\"textMatrix\", opIdx);\n    const {\n      current\n    } = this;\n    current.textMatrix = matrix;\n    current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);\n    current.x = current.lineX = 0;\n    current.y = current.lineY = 0;\n  }\n  nextLine(opIdx) {\n    this.moveText(opIdx, 0, this.current.leading);\n    this.dependencyTracker?.recordIncrementalData(\"moveText\", this.dependencyTracker.getSimpleIndex(\"leading\") ?? opIdx);\n  }\n  #getScaledPath(path, currentTransform, transform) {\n    const newPath = new Path2D();\n    newPath.addPath(path, new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform));\n    return newPath;\n  }\n  paintChar(opIdx, character, x, y, patternFillTransform, patternStrokeTransform) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const textRenderingMode = current.textRenderingMode;\n    const fontSize = current.fontSize / current.fontSizeScale;\n    const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG);\n    const patternFill = current.patternFill && !font.missingFile;\n    const patternStroke = current.patternStroke && !font.missingFile;\n    let path;\n    if ((font.disableFontFace || isAddToPathSet || patternFill || patternStroke) && !font.missingFile) {\n      path = font.getPathGenerator(this.commonObjs, character);\n    }\n    if (path && (font.disableFontFace || patternFill || patternStroke)) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.scale(fontSize, -fontSize);\n      this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font);\n      let currentTransform;\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (patternFillTransform) {\n          currentTransform = ctx.getTransform();\n          ctx.setTransform(...patternFillTransform);\n          const scaledPath = this.#getScaledPath(path, currentTransform, patternFillTransform);\n          ctx.fill(scaledPath);\n        } else {\n          ctx.fill(path);\n        }\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (patternStrokeTransform) {\n          currentTransform ||= ctx.getTransform();\n          ctx.setTransform(...patternStrokeTransform);\n          const {\n            a,\n            b,\n            c,\n            d\n          } = currentTransform;\n          const invPatternTransform = Util.inverseTransform(patternStrokeTransform);\n          const transf = Util.transform([a, b, c, d, 0, 0], invPatternTransform);\n          Util.singularValueDecompose2dScale(transf, XY);\n          ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;\n          ctx.stroke(this.#getScaledPath(path, currentTransform, patternStrokeTransform));\n        } else {\n          ctx.lineWidth /= fontSize;\n          ctx.stroke(path);\n        }\n      }\n      ctx.restore();\n    } else {\n      if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        ctx.fillText(character, x, y);\n        this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character));\n      }\n      if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {\n        if (this.dependencyTracker) {\n          this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y, () => ctx.measureText(character)).recordDependencies(opIdx, Dependencies.stroke);\n        }\n        ctx.strokeText(character, x, y);\n      }\n    }\n    if (isAddToPathSet) {\n      const paths = this.pendingTextPaths ||= [];\n      paths.push({\n        transform: getCurrentTransform(ctx),\n        x,\n        y,\n        fontSize,\n        path\n      });\n      this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, font, fontSize, x, y);\n    }\n  }\n  get isFontSubpixelAAEnabled() {\n    const tmpCanvas = this.canvasFactory.create(10, 10);\n    const ctx = tmpCanvas.context;\n    ctx.scale(1.5, 1);\n    ctx.fillText(\"I\", 0, 10);\n    const data = ctx.getImageData(0, 0, 10, 10).data;\n    this.canvasFactory.destroy(tmpCanvas);\n    let enabled = false;\n    for (let i = 3; i < data.length; i += 4) {\n      if (data[i] > 0 && data[i] < 255) {\n        enabled = true;\n        break;\n      }\n    }\n    return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n  }\n  showText(opIdx, glyphs) {\n    if (this.dependencyTracker) {\n      this.dependencyTracker.recordDependencies(opIdx, Dependencies.showText).resetBBox(opIdx);\n      if (this.current.textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) {\n        this.dependencyTracker.recordFutureForcedDependency(\"textClip\", opIdx).inheritPendingDependenciesAsFutureForcedDependencies();\n      }\n    }\n    const current = this.current;\n    const font = current.font;\n    if (font.isType3Font) {\n      const started = this.#beginKnockoutElement(current.fillAlpha);\n      this.showType3Text(opIdx, glyphs);\n      this.dependencyTracker?.recordShowTextOperation(opIdx);\n      this.#endKnockoutElement(started);\n      return;\n    }\n    const fontSize = current.fontSize;\n    if (fontSize === 0) {\n      this.dependencyTracker?.recordOperation(opIdx);\n      return;\n    }\n    const started = this.#beginKnockoutElement(current.fillAlpha);\n    const ctx = this.ctx;\n    const fontSizeScale = current.fontSizeScale;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const fontDirection = current.fontDirection;\n    const textHScale = current.textHScale * fontDirection;\n    const glyphsLength = glyphs.length;\n    const vertical = font.vertical;\n    const spacingDir = vertical ? 1 : -1;\n    const defaultVMetrics = font.defaultVMetrics;\n    const widthAdvanceScale = fontSize * current.fontMatrix[0];\n    const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n    if (fontDirection > 0) {\n      ctx.scale(textHScale, -1);\n    } else {\n      ctx.scale(textHScale, 1);\n    }\n    let patternFillTransform, patternStrokeTransform;\n    const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n    const needsFill = fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE;\n    const needsStroke = fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE;\n    let lineWidth = current.lineWidth;\n    const scale = current.textMatrixScale;\n    if (scale === 0 || lineWidth === 0) {\n      if (needsStroke) {\n        lineWidth = this.getSinglePixelWidth();\n      }\n    } else {\n      lineWidth /= scale;\n    }\n    if (fontSizeScale !== 1.0) {\n      ctx.scale(fontSizeScale, fontSizeScale);\n      lineWidth /= fontSizeScale;\n    }\n    ctx.lineWidth = lineWidth;\n    if (needsFill && current.patternFill) {\n      ctx.save();\n      const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx);\n      patternFillTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.fillStyle = pattern;\n    }\n    if (needsStroke && current.patternStroke) {\n      ctx.save();\n      const pattern = current.strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE, opIdx);\n      patternStrokeTransform = getCurrentTransform(ctx);\n      ctx.restore();\n      ctx.strokeStyle = pattern;\n    }\n    if (font.isInvalidPDFjsFont) {\n      const chars = [];\n      let width = 0;\n      for (const glyph of glyphs) {\n        chars.push(glyph.unicode);\n        width += glyph.width;\n      }\n      const joinedChars = chars.join(\"\");\n      ctx.fillText(joinedChars, 0, 0);\n      if (this.dependencyTracker !== null) {\n        const measure = ctx.measureText(joinedChars);\n        this.dependencyTracker.recordBBox(opIdx, this.ctx, -measure.actualBoundingBoxLeft, measure.actualBoundingBoxRight, -measure.actualBoundingBoxAscent, measure.actualBoundingBoxDescent).recordShowTextOperation(opIdx);\n      }\n      current.x += width * widthAdvanceScale * textHScale;\n      ctx.restore();\n      this.compose();\n      this.#endKnockoutElement(started);\n      return;\n    }\n    let x = 0,\n      i;\n    for (i = 0; i < glyphsLength; ++i) {\n      const glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        x += spacingDir * glyph * fontSize / 1000;\n        continue;\n      }\n      let restoreNeeded = false;\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const character = glyph.fontChar;\n      const accent = glyph.accent;\n      let scaledX, scaledY;\n      let width = glyph.width;\n      if (vertical) {\n        const vmetric = glyph.vmetric || defaultVMetrics;\n        const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n        const vy = vmetric[2] * widthAdvanceScale;\n        width = vmetric ? -vmetric[0] : width;\n        scaledX = vx / fontSizeScale;\n        scaledY = (x + vy) / fontSizeScale;\n      } else {\n        scaledX = x / fontSizeScale;\n        scaledY = 0;\n      }\n      let measure;\n      if (font.remeasure && width > 0) {\n        measure = ctx.measureText(character);\n        const measuredWidth = measure.width * 1000 / fontSize * fontSizeScale;\n        if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n          const characterScaleX = width / measuredWidth;\n          restoreNeeded = true;\n          ctx.save();\n          ctx.scale(characterScaleX, 1);\n          scaledX /= characterScaleX;\n        } else if (width !== measuredWidth) {\n          scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\n        }\n      }\n      if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n        if (simpleFillText && !accent) {\n          ctx.fillText(character, scaledX, scaledY);\n          this.dependencyTracker?.recordCharacterBBox(opIdx, ctx, measure ? {\n            bbox: null\n          } : font, fontSize / fontSizeScale, scaledX, scaledY, () => measure ?? ctx.measureText(character));\n        } else {\n          this.paintChar(opIdx, character, scaledX, scaledY, patternFillTransform, patternStrokeTransform);\n          if (accent) {\n            const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;\n            const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;\n            this.paintChar(opIdx, accent.fontChar, scaledAccentX, scaledAccentY, patternFillTransform, patternStrokeTransform);\n          }\n        }\n      }\n      const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;\n      x += charWidth;\n      if (restoreNeeded) {\n        ctx.restore();\n      }\n    }\n    if (vertical) {\n      current.y -= x;\n    } else {\n      current.x += x * textHScale;\n    }\n    ctx.restore();\n    this.compose();\n    this.dependencyTracker?.recordShowTextOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  showType3Text(opIdx, glyphs) {\n    const ctx = this.ctx;\n    const current = this.current;\n    const font = current.font;\n    const fontSize = current.fontSize;\n    const fontDirection = current.fontDirection;\n    const spacingDir = font.vertical ? 1 : -1;\n    const charSpacing = current.charSpacing;\n    const wordSpacing = current.wordSpacing;\n    const textHScale = current.textHScale * fontDirection;\n    const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n    const glyphsLength = glyphs.length;\n    const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE;\n    let i, glyph, width, spacingLength;\n    if (isTextInvisible || fontSize === 0) {\n      return;\n    }\n    this._cachedScaleForStroking[0] = -1;\n    this._cachedGetSinglePixelWidth = null;\n    ctx.save();\n    if (current.textMatrix) {\n      ctx.transform(...current.textMatrix);\n    }\n    ctx.translate(current.x, current.y + current.textRise);\n    ctx.scale(textHScale, fontDirection);\n    const dependencyTracker = this.dependencyTracker;\n    this.dependencyTracker = dependencyTracker ? new CanvasNestedDependencyTracker(dependencyTracker, opIdx) : null;\n    for (i = 0; i < glyphsLength; ++i) {\n      glyph = glyphs[i];\n      if (typeof glyph === \"number\") {\n        spacingLength = spacingDir * glyph * fontSize / 1000;\n        this.ctx.translate(spacingLength, 0);\n        current.x += spacingLength * textHScale;\n        continue;\n      }\n      const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n      const operatorList = font.charProcOperatorList[glyph.operatorListId];\n      if (!operatorList) {\n        warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n      } else if (this.contentVisible) {\n        this.save();\n        if (operatorList.fnArray[0] === OPS.setCharWidth) {\n          current.fillAlpha = current.strokeAlpha = 1;\n          ctx.globalAlpha = 1;\n        }\n        ctx.scale(fontSize, fontSize);\n        ctx.transform(...fontMatrix);\n        this.executeOperatorList(operatorList);\n        this.restore();\n      }\n      const p = [glyph.width, 0];\n      Util.applyTransform(p, fontMatrix);\n      width = p[0] * fontSize + spacing;\n      ctx.translate(width, 0);\n      current.x += width * textHScale;\n    }\n    ctx.restore();\n    if (dependencyTracker) {\n      this.dependencyTracker = dependencyTracker;\n    }\n  }\n  setCharWidth(opIdx, xWidth, yWidth) {}\n  setCharWidthAndBounds(opIdx, xWidth, yWidth, llx, lly, urx, ury) {\n    const clip = new Path2D();\n    clip.rect(llx, lly, urx - llx, ury - lly);\n    this.ctx.clip(clip);\n    this.dependencyTracker?.recordBBox(opIdx, this.ctx, llx, urx, lly, ury).recordClipBox(opIdx, this.ctx, llx, urx, lly, ury);\n    this.endPath(opIdx);\n  }\n  getColorN_Pattern(opIdx, IR) {\n    let pattern;\n    if (IR[0] === \"TilingPattern\") {\n      const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n      const canvasGraphicsFactory = {\n        createCanvasGraphics: (ctx, renderingOpIdx) => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n          optionalContentConfig: this.optionalContentConfig,\n          markedContentStack: this.markedContentStack\n        }, undefined, undefined, this.dependencyTracker ? new CanvasNestedDependencyTracker(this.dependencyTracker, renderingOpIdx, true) : null)\n      };\n      pattern = new TilingPattern(IR, this.ctx, canvasGraphicsFactory, baseTransform);\n    } else {\n      pattern = this._getPattern(opIdx, IR[1], IR[2]);\n    }\n    return pattern;\n  }\n  setStrokeColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.current.strokeColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternStroke = true;\n  }\n  setFillColorN(opIdx, ...args) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    const pattern = this.current.fillColor = this.getColorN_Pattern(opIdx, args);\n    this.current.patternFill = true;\n    this.current.tilingPatternDims = pattern instanceof TilingPattern ? [0, 0, 0, 0] : null;\n  }\n  setStrokeRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = color;\n    this.current.patternStroke = false;\n  }\n  setStrokeTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"strokeColor\", opIdx);\n    this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n    this.current.patternStroke = false;\n  }\n  setFillRGBColor(opIdx, color) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = color;\n    this.current.patternFill = false;\n    this.current.tilingPatternDims = null;\n  }\n  setFillTransparent(opIdx) {\n    this.dependencyTracker?.recordSimpleData(\"fillColor\", opIdx);\n    this.ctx.fillStyle = this.current.fillColor = \"transparent\";\n    this.current.patternFill = false;\n    this.current.tilingPatternDims = null;\n  }\n  _getPattern(opIdx, objId, matrix = null) {\n    const pattern = this.cachedPatterns.getOrInsertComputed(objId, () => getShadingPattern(this.getObject(opIdx, objId)));\n    if (matrix) {\n      pattern.matrix = matrix;\n    }\n    return pattern;\n  }\n  shadingFill(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    this.save(opIdx);\n    const pattern = this._getPattern(opIdx, objId);\n    ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING, opIdx);\n    const inv = getCurrentTransformInverse(ctx);\n    if (inv) {\n      const {\n        width,\n        height\n      } = ctx.canvas;\n      const minMax = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);\n      const [x0, y0, x1, y1] = minMax;\n      this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n    } else {\n      this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n    }\n    this.dependencyTracker?.resetBBox(opIdx).recordFullPageBBox(opIdx).recordDependencies(opIdx, Dependencies.transform).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx);\n    this.compose(this.current.getClippedPathBoundingBox());\n    this.restore(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  beginInlineImage() {\n    unreachable(\"Should not call beginInlineImage\");\n  }\n  beginImageData() {\n    unreachable(\"Should not call beginImageData\");\n  }\n  paintFormXObjectBegin(opIdx, matrix, bbox) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save(opIdx);\n    this.baseTransformStack.push(this.baseTransform);\n    if (matrix) {\n      this.transform(opIdx, ...matrix);\n    }\n    this.baseTransform = getCurrentTransform(this.ctx);\n    if (bbox) {\n      Util.axialAlignedBoundingBox(bbox, this.baseTransform, this.current.minMax);\n      const [x0, y0, x1, y1] = bbox;\n      const clip = new Path2D();\n      clip.rect(x0, y0, x1 - x0, y1 - y0);\n      this.ctx.clip(clip);\n      this.dependencyTracker?.recordClipBox(opIdx, this.ctx, x0, x1, y0, y1);\n      this.endPath(opIdx);\n    }\n  }\n  paintFormXObjectEnd(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.restore(opIdx);\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n  beginGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.save(opIdx);\n    const {\n      inSMaskMode\n    } = this;\n    if (inSMaskMode) {\n      this.endSMaskMode();\n      this.current.activeSMask = null;\n    }\n    const currentCtx = this.ctx;\n    if ((!group.needsIsolation || !group.isolated && !group.hasSoftMask) && !group.knockout && !group.isGray && this.#knockoutGroupLevel === 0 && currentCtx.globalAlpha === 1 && currentCtx.globalCompositeOperation === \"source-over\" && !inSMaskMode) {\n      if (group.bbox) {\n        let clip = new Path2D();\n        const [x0, y0, x1, y1] = group.bbox;\n        clip.rect(x0, y0, x1 - x0, y1 - y0);\n        if (group.matrix) {\n          const path = new Path2D();\n          path.addPath(clip, new DOMMatrix(group.matrix));\n          clip = path;\n        }\n        currentCtx.clip(clip);\n      }\n      this.groupStack.push(null);\n      this.#groupStackMeta.push(null);\n      this.groupLevel++;\n      return;\n    }\n    if (!group.isolated && !group.knockout && this.#knockoutGroupLevel === 0) {\n      info(\"TODO: Fully support non-isolated non-knockout groups.\");\n    }\n    const currentTransform = getCurrentTransform(currentCtx);\n    if (group.matrix) {\n      currentCtx.transform(...group.matrix);\n    }\n    const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\n    let bounds;\n    if (group.bbox) {\n      bounds = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx), bounds);\n      bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n    } else {\n      bounds = canvasBounds;\n    }\n    const offsetX = Math.floor(bounds[0]);\n    const offsetY = Math.floor(bounds[1]);\n    const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n    const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n    this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n    const scratchCanvas = this.canvasFactory.create(drawnWidth, drawnHeight);\n    if (group.smask) {\n      this.smaskGroupCanvases.push(scratchCanvas);\n    }\n    const groupCtx = scratchCanvas.context;\n    const backdropCtx = group.knockout && !group.isolated ? currentCtx : null;\n    const hasInnerBackdrop = !group.isolated && !group.knockout && !group.smask && group.needsIsolation && this.#knockoutGroupLevel > 0;\n    const knockoutMaskEntry = group.knockout ? this.canvasFactory.create(drawnWidth, drawnHeight) : null;\n    const savedKnockoutLevel = this.#knockoutGroupLevel;\n    if (group.knockout) {\n      this.#knockoutGroupLevel++;\n    } else {\n      this.#knockoutGroupLevel = 0;\n    }\n    groupCtx.translate(-offsetX, -offsetY);\n    groupCtx.transform(...currentTransform);\n    const needsBackdropCopy = !group.isolated && !group.smask && group.needsIsolation;\n    const replaceBackdrop = needsBackdropCopy && !inSMaskMode && savedKnockoutLevel === 0 && !group.knockout && !group.isGray && group.hasSoftMask && currentCtx.globalAlpha === 1 && currentCtx.globalCompositeOperation === \"source-over\" && this.current.transferMaps === \"none\";\n    if (needsBackdropCopy && (inSMaskMode || replaceBackdrop)) {\n      groupCtx.save();\n      groupCtx.setTransform(1, 0, 0, 1, 0, 0);\n      groupCtx.drawImage(currentCtx.canvas, -offsetX, -offsetY);\n      groupCtx.restore();\n    }\n    if (group.bbox) {\n      let clip = new Path2D();\n      const [x0, y0, x1, y1] = group.bbox;\n      clip.rect(x0, y0, x1 - x0, y1 - y0);\n      if (group.matrix) {\n        const path = new Path2D();\n        path.addPath(clip, new DOMMatrix(group.matrix));\n        clip = path;\n      }\n      groupCtx.clip(clip);\n    }\n    if (group.smask) {\n      this.smaskStack.push({\n        canvas: scratchCanvas.canvas,\n        context: groupCtx,\n        offsetX,\n        offsetY,\n        subtype: group.smask.subtype,\n        backdrop: group.smask.backdrop,\n        transferMap: group.smask.transferMap || null\n      });\n    }\n    if (!group.smask || this.dependencyTracker) {\n      currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n      currentCtx.translate(offsetX, offsetY);\n      currentCtx.save();\n    }\n    copyCtxState(currentCtx, groupCtx);\n    this.ctx = groupCtx;\n    this.dependencyTracker?.inheritSimpleDataAsFutureForcedDependencies([\"fillAlpha\", \"strokeAlpha\", \"globalCompositeOperation\"]).pushBaseTransform(currentCtx);\n    this.setGState(opIdx, [[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1], [\"TR\", null]]);\n    this.groupStack.push(currentCtx);\n    this.#groupStackMeta.push({\n      backdropCtx,\n      savedKnockoutLevel,\n      offsetX,\n      offsetY,\n      hasInnerBackdrop,\n      replaceBackdrop,\n      knockoutMaskEntry,\n      knockoutTempEntry: null,\n      knockoutBackdropEntry: null\n    });\n    this.groupLevel++;\n  }\n  endGroup(opIdx, group) {\n    if (!this.contentVisible) {\n      return;\n    }\n    this.groupLevel--;\n    const groupCtx = this.ctx;\n    const ctx = this.groupStack.pop();\n    const groupMeta = this.#groupStackMeta.pop();\n    if (groupMeta) {\n      this.#knockoutGroupLevel = groupMeta.savedKnockoutLevel;\n    }\n    if (ctx === null) {\n      this.restore(opIdx);\n      return;\n    }\n    if (group.isGray) {\n      this.#convertGroupToGray(groupCtx);\n    }\n    this.ctx = ctx;\n    this.ctx.imageSmoothingEnabled = false;\n    this.dependencyTracker?.popBaseTransform();\n    if (group.smask) {\n      this.tempSMask = this.smaskStack.pop();\n      this.restore(opIdx);\n      if (this.dependencyTracker) {\n        this.ctx.restore();\n        if (this.inSMaskMode) {\n          this.ctx.setTransform(this.suspendedCtx.getTransform());\n        }\n      }\n      this.#destroyKnockoutPools(groupMeta);\n    } else {\n      this.ctx.restore();\n      const currentMtx = getCurrentTransform(this.ctx);\n      this.restore(opIdx);\n      this.ctx.save();\n      this.ctx.setTransform(...currentMtx);\n      const dirtyBox = F32_BBOX_INIT.slice();\n      Util.axialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx, dirtyBox);\n      const parentGroupMeta = this.#groupStackMeta.at(-1);\n      if (this.#knockoutGroupLevel > 0) {\n        if (groupMeta.hasInnerBackdrop) {\n          const {\n            width,\n            height\n          } = groupCtx.canvas;\n          const colorEntry = this.canvasFactory.create(width, height);\n          const colorCtx = colorEntry.context;\n          colorCtx.drawImage(ctx.canvas, groupMeta.offsetX, groupMeta.offsetY, width, height, 0, 0, width, height);\n          colorCtx.globalCompositeOperation = \"source-over\";\n          colorCtx.drawImage(groupCtx.canvas, 0, 0);\n          const shapeMaskEntry = this.#createKnockoutMaskCanvas(groupCtx.canvas);\n          colorCtx.globalCompositeOperation = \"destination-in\";\n          colorCtx.drawImage(shapeMaskEntry.canvas, 0, 0);\n          const sourceCompositeOperation = this.ctx.globalCompositeOperation;\n          const sourceAlpha = this.ctx.globalAlpha;\n          const sourceFilter = this.ctx.filter;\n          this.ctx.save();\n          this.ctx.setTransform(...currentMtx);\n          this.ctx.globalAlpha = 1;\n          if (FeatureTest.isCanvasFilterSupported) {\n            this.ctx.filter = \"none\";\n          }\n          this.ctx.globalCompositeOperation = \"destination-out\";\n          this.ctx.drawImage(shapeMaskEntry.canvas, 0, 0);\n          this.ctx.globalCompositeOperation = sourceCompositeOperation;\n          this.ctx.globalAlpha = sourceAlpha;\n          if (FeatureTest.isCanvasFilterSupported) {\n            this.ctx.filter = sourceFilter ?? \"none\";\n          }\n          this.ctx.drawImage(colorEntry.canvas, 0, 0);\n          this.ctx.restore();\n          this.canvasFactory.destroy(shapeMaskEntry);\n          this.canvasFactory.destroy(colorEntry);\n        } else {\n          const backdropCtx = parentGroupMeta?.backdropCtx ?? null;\n          this.#compositeKnockoutSurface(this.ctx, groupCtx.canvas, {\n            backdropCanvas: backdropCtx?.canvas ?? null,\n            destTransform: currentMtx,\n            backdropOffset: backdropCtx ? [parentGroupMeta.offsetX + groupMeta.offsetX, parentGroupMeta.offsetY + groupMeta.offsetY] : [0, 0],\n            sourceAlpha: this.ctx.globalAlpha,\n            sourceFilter: this.ctx.filter\n          });\n        }\n      } else {\n        if (groupMeta.replaceBackdrop) {\n          const clip = new Path2D();\n          clip.rect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);\n          this.ctx.clip(clip);\n          this.ctx.globalCompositeOperation = \"copy\";\n        }\n        this.ctx.drawImage(groupCtx.canvas, 0, 0);\n      }\n      this.ctx.restore();\n      this.canvasFactory.destroy({\n        canvas: groupCtx.canvas,\n        context: groupCtx\n      });\n      this.#destroyKnockoutPools(groupMeta);\n      this.compose(dirtyBox);\n    }\n  }\n  #convertGroupToGray(groupCtx) {\n    const {\n      canvas\n    } = groupCtx;\n    const {\n      width,\n      height\n    } = canvas;\n    if (FeatureTest.isCanvasFilterSupported) {\n      groupCtx.save();\n      groupCtx.setTransform(1, 0, 0, 1, 0, 0);\n      groupCtx.filter = \"grayscale(1)\";\n      groupCtx.globalAlpha = 1;\n      groupCtx.globalCompositeOperation = \"copy\";\n      groupCtx.drawImage(canvas, 0, 0);\n      groupCtx.restore();\n      return;\n    }\n    const imageData = groupCtx.getImageData(0, 0, width, height);\n    const {\n      data\n    } = imageData;\n    for (let i = 0, ii = data.length; i < ii; i += 4) {\n      const gray = data[i] * 0.2126 + data[i + 1] * 0.7152 + data[i + 2] * 0.0722 + 0.5 | 0;\n      data[i] = data[i + 1] = data[i + 2] = gray;\n    }\n    groupCtx.putImageData(imageData, 0, 0);\n  }\n  #destroyKnockoutPools(groupMeta) {\n    if (!groupMeta) {\n      return;\n    }\n    if (groupMeta.knockoutMaskEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutMaskEntry);\n      groupMeta.knockoutMaskEntry = null;\n    }\n    if (groupMeta.knockoutTempEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutTempEntry);\n      groupMeta.knockoutTempEntry = null;\n    }\n    if (groupMeta.knockoutBackdropEntry) {\n      this.canvasFactory.destroy(groupMeta.knockoutBackdropEntry);\n      groupMeta.knockoutBackdropEntry = null;\n    }\n  }\n  beginAnnotation(opIdx, id, rect, transform, matrix, hasOwnCanvas, canvasName) {\n    this.#restoreInitialState();\n    resetCtxToDefault(this.ctx);\n    this.ctx.save();\n    this.save(opIdx);\n    if (this.baseTransform) {\n      this.ctx.setTransform(...this.baseTransform);\n    }\n    if (rect) {\n      const width = rect[2] - rect[0];\n      const height = rect[3] - rect[1];\n      if (hasOwnCanvas && this.annotationCanvasMap) {\n        transform = transform.slice();\n        transform[4] -= rect[0];\n        transform[5] -= rect[1];\n        rect = rect.slice();\n        rect[0] = rect[1] = 0;\n        rect[2] = width;\n        rect[3] = height;\n        Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);\n        const {\n          viewportScale\n        } = this;\n        const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);\n        const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);\n        this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);\n        const {\n          canvas,\n          context\n        } = this.annotationCanvas;\n        if (canvasName) {\n          const canvases = this.annotationCanvasMap.getOrInsertComputed(id, makeArr);\n          canvas.setAttribute(\"data-canvas-name\", canvasName);\n          const index = canvases.findIndex(c => c.getAttribute(\"data-canvas-name\") === canvasName);\n          if (index === -1) {\n            canvases.push(canvas);\n          } else {\n            canvases[index] = canvas;\n          }\n        } else {\n          this.annotationCanvasMap.set(id, canvas);\n        }\n        this.annotationCanvas.savedCtx = this.ctx;\n        this.ctx = context;\n        this.ctx.save();\n        this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);\n        resetCtxToDefault(this.ctx);\n      } else {\n        resetCtxToDefault(this.ctx);\n        this.endPath(opIdx);\n        const clip = new Path2D();\n        clip.rect(rect[0], rect[1], width, height);\n        this.ctx.clip(clip);\n      }\n    }\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.baseTransformStack.push(this.baseTransform);\n    this.transform(opIdx, ...transform);\n    this.transform(opIdx, ...matrix);\n    this.baseTransform = getCurrentTransform(this.ctx);\n  }\n  endAnnotation(opIdx) {\n    if (this.annotationCanvas) {\n      this.ctx.restore();\n      this.#drawFilter();\n      this.ctx = this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas.savedCtx;\n      delete this.annotationCanvas;\n    }\n    this.baseTransform = this.baseTransformStack.pop();\n  }\n  paintImageMaskXObject(opIdx, img) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const count = img.count;\n    img = this.getObject(opIdx, img.data, img);\n    img.count = count;\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const mask = this._createMaskCanvas(opIdx, img);\n    const maskCanvas = mask.canvas;\n    ctx.save();\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\n    ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n    this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, mask.offsetX, mask.offsetX + maskCanvas.width, mask.offsetY, mask.offsetY + maskCanvas.height).recordOperation(opIdx);\n    ctx.restore();\n    if (mask.canvasEntry) {\n      this.canvasFactory.destroy(mask.canvasEntry);\n    }\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  paintImageMaskXObjectRepeat(opIdx, img, scaleX, skewX = 0, skewY = 0, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    img = this.getObject(opIdx, img.data, img);\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    ctx.save();\n    const currentTransform = getCurrentTransform(ctx);\n    ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n    const mask = this._createMaskCanvas(opIdx, img);\n    ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);\n    this.dependencyTracker?.resetBBox(opIdx);\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);\n      ctx.drawImage(mask.canvas, trans[4], trans[5]);\n      this.dependencyTracker?.recordBBox(opIdx, this.ctx, trans[4], trans[4] + mask.canvas.width, trans[5], trans[5] + mask.canvas.height);\n    }\n    ctx.restore();\n    if (mask.canvasEntry) {\n      this.canvasFactory.destroy(mask.canvasEntry);\n    }\n    this.compose();\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintImageMaskXObjectGroup(opIdx, images) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    const fillColor = this.current.fillColor;\n    const isPatternFill = this.current.patternFill;\n    this.dependencyTracker?.resetBBox(opIdx).recordDependencies(opIdx, Dependencies.transformAndFill);\n    for (const image of images) {\n      const {\n        data,\n        width,\n        height,\n        transform\n      } = image;\n      const maskCanvas = this.canvasFactory.create(width, height);\n      const maskCtx = maskCanvas.context;\n      maskCtx.save();\n      const img = this.getObject(opIdx, data, image);\n      putBinaryImageMask(maskCtx, img);\n      maskCtx.globalCompositeOperation = \"source-in\";\n      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL, opIdx) : fillColor;\n      maskCtx.fillRect(0, 0, width, height);\n      maskCtx.restore();\n      ctx.save();\n      ctx.transform(...transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n      this.canvasFactory.destroy(maskCanvas);\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, width, 0, height);\n      ctx.restore();\n    }\n    this.compose();\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintImageXObject(opIdx, objId) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    this.paintInlineImageXObject(opIdx, imgData);\n  }\n  paintImageXObjectRepeat(opIdx, objId, scaleX, scaleY, positions) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const imgData = this.getObject(opIdx, objId);\n    if (!imgData) {\n      warn(\"Dependent image isn't ready yet\");\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const map = [];\n    for (let i = 0, ii = positions.length; i < ii; i += 2) {\n      map.push({\n        transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n        x: 0,\n        y: 0,\n        w: width,\n        h: height\n      });\n    }\n    this.paintInlineImageXObjectGroup(opIdx, imgData, map);\n  }\n  applyTransferMapsToCanvas(ctx) {\n    if (this.current.transferMaps !== \"none\") {\n      ctx.filter = this.current.transferMaps;\n      ctx.drawImage(ctx.canvas, 0, 0);\n      ctx.filter = \"none\";\n    }\n    return ctx.canvas;\n  }\n  applyTransferMapsToBitmap(imgData) {\n    if (this.current.transferMaps === \"none\") {\n      return {\n        img: imgData.bitmap,\n        canvasEntry: null\n      };\n    }\n    const {\n      bitmap,\n      width,\n      height\n    } = imgData;\n    const tmpCanvas = this.canvasFactory.create(width, height);\n    const tmpCtx = tmpCanvas.context;\n    tmpCtx.filter = this.current.transferMaps;\n    tmpCtx.drawImage(bitmap, 0, 0);\n    tmpCtx.filter = \"none\";\n    return {\n      img: tmpCanvas.canvas,\n      canvasEntry: tmpCanvas\n    };\n  }\n  paintInlineImageXObject(opIdx, imgData) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const width = imgData.width;\n    const height = imgData.height;\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    this.save(opIdx);\n    const {\n      filter\n    } = ctx;\n    if (filter !== \"none\" && filter !== \"\") {\n      ctx.filter = \"none\";\n    }\n    ctx.scale(1 / width, -1 / height);\n    let imgToPaint;\n    let inlineImgCanvas = null;\n    if (imgData.bitmap) {\n      const result = this.applyTransferMapsToBitmap(imgData);\n      imgToPaint = result.img;\n      inlineImgCanvas = result.canvasEntry;\n    } else {\n      const tmpCanvas = this.canvasFactory.create(width, height);\n      putBinaryImageData(tmpCanvas.context, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCanvas.context);\n      inlineImgCanvas = tmpCanvas;\n    }\n    const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx));\n    ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate);\n    if (this.dependencyTracker) {\n      this.dependencyTracker.resetBBox(opIdx).recordBBox(opIdx, ctx, 0, width, -height, 0).recordDependencies(opIdx, Dependencies.imageXObject).recordOperation(opIdx);\n      this.imagesTracker?.record(ctx, width, height, this.dependencyTracker.clipBox);\n    }\n    drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);\n    if (scaled.tmpCanvas) {\n      this.canvasFactory.destroy(scaled.tmpCanvas);\n    }\n    if (inlineImgCanvas) {\n      this.canvasFactory.destroy(inlineImgCanvas);\n    }\n    this.compose();\n    this.restore(opIdx);\n    this.#endKnockoutElement(started);\n  }\n  paintInlineImageXObjectGroup(opIdx, imgData, map) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    const ctx = this.ctx;\n    let imgToPaint;\n    let inlineImgCanvas = null;\n    if (imgData.bitmap) {\n      imgToPaint = imgData.bitmap;\n    } else {\n      const w = imgData.width;\n      const h = imgData.height;\n      const tmpCanvas = this.canvasFactory.create(w, h);\n      putBinaryImageData(tmpCanvas.context, imgData);\n      imgToPaint = this.applyTransferMapsToCanvas(tmpCanvas.context);\n      inlineImgCanvas = tmpCanvas;\n    }\n    this.dependencyTracker?.resetBBox(opIdx);\n    for (const entry of map) {\n      ctx.save();\n      ctx.transform(...entry.transform);\n      ctx.scale(1, -1);\n      drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\n      this.dependencyTracker?.recordBBox(opIdx, ctx, 0, 1, -1, 0);\n      ctx.restore();\n    }\n    if (inlineImgCanvas) {\n      this.canvasFactory.destroy(inlineImgCanvas);\n    }\n    this.dependencyTracker?.recordOperation(opIdx);\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  paintSolidColorImageMask(opIdx) {\n    if (!this.contentVisible) {\n      return;\n    }\n    const started = this.#beginKnockoutElement(this.current.fillAlpha);\n    this.dependencyTracker?.resetBBox(opIdx).recordBBox(opIdx, this.ctx, 0, 1, 0, 1).recordDependencies(opIdx, Dependencies.fill).recordOperation(opIdx);\n    this.ctx.fillRect(0, 0, 1, 1);\n    this.compose();\n    this.#endKnockoutElement(started);\n  }\n  markPoint(opIdx, tag) {}\n  markPointProps(opIdx, tag, properties) {}\n  beginMarkedContent(opIdx, tag) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    this.markedContentStack.push({\n      visible: true\n    });\n  }\n  beginMarkedContentProps(opIdx, tag, properties) {\n    this.dependencyTracker?.beginMarkedContent(opIdx);\n    if (tag === \"OC\") {\n      this.markedContentStack.push({\n        visible: this.optionalContentConfig.isVisible(properties)\n      });\n    } else {\n      this.markedContentStack.push({\n        visible: true\n      });\n    }\n    this.contentVisible = this.isContentVisible();\n  }\n  endMarkedContent(opIdx) {\n    this.dependencyTracker?.endMarkedContent(opIdx);\n    this.markedContentStack.pop();\n    this.contentVisible = this.isContentVisible();\n  }\n  beginCompat(opIdx) {}\n  endCompat(opIdx) {}\n  consumePath(opIdx, path, clipBox) {\n    const isEmpty = this.current.isEmptyClip();\n    if (this.pendingClip) {\n      this.current.updateClipFromPath();\n    }\n    if (!this.pendingClip) {\n      this.compose(clipBox);\n    }\n    const ctx = this.ctx;\n    if (this.pendingClip) {\n      if (!isEmpty) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(path, \"evenodd\");\n        } else {\n          ctx.clip(path);\n        }\n      }\n      this.pendingClip = null;\n      this.dependencyTracker?.bboxToClipBoxDropOperation(opIdx).recordFutureForcedDependency(\"clipPath\", opIdx);\n    } else {\n      this.dependencyTracker?.recordOperation(opIdx);\n    }\n    this.current.startNewPathAndClipBox(this.current.clipBox);\n  }\n  getSinglePixelWidth() {\n    if (!this._cachedGetSinglePixelWidth) {\n      const m = getCurrentTransform(this.ctx);\n      if (m[1] === 0 && m[2] === 0) {\n        this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n      } else {\n        const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n        const normX = Math.hypot(m[0], m[2]);\n        const normY = Math.hypot(m[1], m[3]);\n        this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n      }\n    }\n    return this._cachedGetSinglePixelWidth;\n  }\n  getScaleForStroking() {\n    if (this._cachedScaleForStroking[0] === -1) {\n      const {\n        lineWidth\n      } = this.current;\n      const {\n        a,\n        b,\n        c,\n        d\n      } = this.ctx.getTransform();\n      let scaleX, scaleY;\n      if (b === 0 && c === 0) {\n        const normX = Math.abs(a);\n        const normY = Math.abs(d);\n        if (normX === normY) {\n          if (lineWidth === 0) {\n            scaleX = scaleY = 1 / normX;\n          } else {\n            const scaledLineWidth = normX * lineWidth;\n            scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n          }\n        } else if (lineWidth === 0) {\n          scaleX = 1 / normX;\n          scaleY = 1 / normY;\n        } else {\n          const scaledXLineWidth = normX * lineWidth;\n          const scaledYLineWidth = normY * lineWidth;\n          scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n          scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n        }\n      } else {\n        const absDet = Math.abs(a * d - b * c);\n        const normX = Math.hypot(a, b);\n        const normY = Math.hypot(c, d);\n        if (lineWidth === 0) {\n          scaleX = normY / absDet;\n          scaleY = normX / absDet;\n        } else {\n          const baseArea = lineWidth * absDet;\n          scaleX = normY > baseArea ? normY / baseArea : 1;\n          scaleY = normX > baseArea ? normX / baseArea : 1;\n        }\n      }\n      this._cachedScaleForStroking[0] = scaleX;\n      this._cachedScaleForStroking[1] = scaleY;\n    }\n    return this._cachedScaleForStroking;\n  }\n  rescaleAndStroke(path, saveRestore) {\n    const {\n      ctx,\n      current: {\n        lineWidth\n      }\n    } = this;\n    const [scaleX, scaleY] = this.getScaleForStroking();\n    if (scaleX === scaleY) {\n      ctx.lineWidth = (lineWidth || 1) * scaleX;\n      ctx.stroke(path);\n      return;\n    }\n    const dashes = ctx.getLineDash();\n    if (saveRestore) {\n      ctx.save();\n    }\n    ctx.scale(scaleX, scaleY);\n    SCALE_MATRIX.a = 1 / scaleX;\n    SCALE_MATRIX.d = 1 / scaleY;\n    const newPath = new Path2D();\n    newPath.addPath(path, SCALE_MATRIX);\n    if (dashes.length > 0) {\n      const scale = Math.max(scaleX, scaleY);\n      ctx.setLineDash(dashes.map(x => x / scale));\n      ctx.lineDashOffset /= scale;\n    }\n    ctx.lineWidth = lineWidth || 1;\n    ctx.stroke(newPath);\n    if (saveRestore) {\n      ctx.restore();\n    }\n  }\n  isContentVisible() {\n    for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n      if (!this.markedContentStack[i].visible) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\nfor (const op in OPS) {\n  if (CanvasGraphics.prototype[op] !== undefined) {\n    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n  }\n}\n\n;// ./src/shared/base_pdf_stream.js\n\nclass BasePDFStream {\n  #PDFStreamReader = null;\n  #PDFStreamRangeReader = null;\n  _fullReader = null;\n  _rangeReaders = new Set();\n  _source = null;\n  constructor(source, PDFStreamReader, PDFStreamRangeReader) {\n    this._source = source;\n    this.#PDFStreamReader = PDFStreamReader;\n    this.#PDFStreamRangeReader = PDFStreamRangeReader;\n  }\n  get _progressiveDataLength() {\n    return this._fullReader?._loaded ?? 0;\n  }\n  getFullReader() {\n    assert(!this._fullReader, \"BasePDFStream.getFullReader can only be called once.\");\n    return this._fullReader = new this.#PDFStreamReader(this);\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  cancelAllRequests(reason) {\n    this._fullReader?.cancel(reason);\n    for (const reader of new Set(this._rangeReaders)) {\n      reader.cancel(reason);\n    }\n  }\n}\nclass BasePDFStreamReader {\n  onProgress = null;\n  _contentLength = 0;\n  _filename = null;\n  _headersCapability = Promise.withResolvers();\n  _isRangeSupported = false;\n  _isStreamingSupported = false;\n  _loaded = 0;\n  _stream = null;\n  constructor(stream) {\n    this._stream = stream;\n  }\n  _callOnProgress() {\n    this.onProgress?.({\n      loaded: this._loaded,\n      total: this._contentLength\n    });\n  }\n  get headersReady() {\n    return this._headersCapability.promise;\n  }\n  get filename() {\n    return this._filename;\n  }\n  get contentLength() {\n    return this._contentLength;\n  }\n  get isRangeSupported() {\n    return this._isRangeSupported;\n  }\n  get isStreamingSupported() {\n    return this._isStreamingSupported;\n  }\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\nclass BasePDFStreamRangeReader {\n  _stream = null;\n  constructor(stream, begin, end) {\n    this._stream = stream;\n  }\n  async read() {\n    unreachable(\"Abstract method `read` called\");\n  }\n  cancel(reason) {\n    unreachable(\"Abstract method `cancel` called\");\n  }\n}\n\n;// ./src/display/content_disposition.js\n\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  let needsEncodingFixup = true;\n  let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = unescape(filename);\n    filename = rfc5987decode(filename);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  tmp = rfc2231getparam(contentDisposition);\n  if (tmp) {\n    const filename = rfc2047decode(tmp);\n    return fixupEncoding(filename);\n  }\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n  if (tmp) {\n    tmp = tmp[1];\n    let filename = rfc2616unquote(tmp);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\n  }\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n      try {\n        const decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        const buffer = stringToBytes(value);\n        value = decoder.decode(buffer);\n        needsEncodingFixup = false;\n      } catch {}\n    }\n    return value;\n  }\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      value = textdecode(\"utf-8\", value);\n      if (needsEncodingFixup) {\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n    return value;\n  }\n  function rfc2231getparam(contentDispositionStr) {\n    const matches = [];\n    let match;\n    const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      let [, n, quot, part] = match;\n      n = parseInt(n, 10);\n      if (n in matches) {\n        if (n === 0) {\n          break;\n        }\n        continue;\n      }\n      matches[n] = [quot, part];\n    }\n    const parts = [];\n    for (let n = 0; n < matches.length; ++n) {\n      if (!(n in matches)) {\n        break;\n      }\n      let [quot, part] = matches[n];\n      part = rfc2616unquote(part);\n      if (quot) {\n        part = unescape(part);\n        if (n === 0) {\n          part = rfc5987decode(part);\n        }\n      }\n      parts.push(part);\n    }\n    return parts.join(\"\");\n  }\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      const parts = value.slice(1).split('\\\\\"');\n      for (let i = 0; i < parts.length; ++i) {\n        const quotindex = parts[i].indexOf('\"');\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1;\n        }\n        parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n      }\n      value = parts.join('\"');\n    }\n    return value;\n  }\n  function rfc5987decode(extvalue) {\n    const encodingend = extvalue.indexOf(\"'\");\n    if (encodingend === -1) {\n      return extvalue;\n    }\n    const encoding = extvalue.slice(0, encodingend);\n    const langvalue = extvalue.slice(encodingend + 1);\n    const value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n  function rfc2047decode(value) {\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n    return value.replaceAll(/=\\?([\\w-]*)\\?([QB])\\?((?:[^?]|\\?(?!=))*)\\?=/gi, function (matches, charset, encoding, text) {\n      if (encoding === \"q\" || encoding === \"Q\") {\n        text = text.replaceAll(\"_\", \" \");\n        text = text.replaceAll(/=([0-9a-f]{2})/gi, function (match, hex) {\n          return String.fromCharCode(parseInt(hex, 16));\n        });\n        return textdecode(charset, text);\n      }\n      try {\n        text = atob(text);\n      } catch {}\n      return textdecode(charset, text);\n    });\n  }\n  return \"\";\n}\n\n;// ./src/display/network_utils.js\n\n\n\nfunction createHeaders(isHttp, httpHeaders) {\n  const headers = new Headers();\n  if (!isHttp || !httpHeaders || typeof httpHeaders !== \"object\") {\n    return headers;\n  }\n  for (const key in httpHeaders) {\n    const val = httpHeaders[key];\n    if (val !== undefined) {\n      headers.append(key, val);\n    }\n  }\n  return headers;\n}\nfunction getResponseOrigin(url) {\n  return URL.parse(url)?.origin ?? null;\n}\nfunction validateRangeRequestCapabilities({\n  responseHeaders,\n  isHttp,\n  rangeChunkSize,\n  disableRange\n}) {\n  const rv = {\n    contentLength: 0,\n    isRangeSupported: false\n  };\n  const length = parseInt(responseHeaders.get(\"Content-Length\"), 10);\n  if (!Number.isInteger(length)) {\n    return rv;\n  }\n  rv.contentLength = length;\n  if (length <= 2 * rangeChunkSize) {\n    return rv;\n  }\n  if (disableRange || !isHttp) {\n    return rv;\n  }\n  if (responseHeaders.get(\"Accept-Ranges\") !== \"bytes\") {\n    return rv;\n  }\n  const contentEncoding = responseHeaders.get(\"Content-Encoding\") || \"identity\";\n  if (contentEncoding === \"identity\") {\n    rv.isRangeSupported = true;\n  }\n  return rv;\n}\nfunction extractFilenameFromHeader(responseHeaders) {\n  const contentDisposition = responseHeaders.get(\"Content-Disposition\");\n  if (contentDisposition) {\n    let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch {}\n    }\n    if (isPdfFile(filename)) {\n      return filename;\n    }\n  }\n  return null;\n}\nfunction createResponseError(status, url) {\n  return new ResponseException(`Unexpected server response (${status}) while retrieving PDF \"${url.href}\".`, status, status === 404 || status === 0 && url.protocol === \"file:\");\n}\nfunction ensureResponseOrigin(rangeOrigin, origin) {\n  if (rangeOrigin !== origin) {\n    throw new Error(`Expected range response-origin \"${rangeOrigin}\" to match \"${origin}\".`);\n  }\n}\n\n;// ./src/display/fetch_stream.js\n\n\n\nfunction fetchUrl(url, headers, withCredentials, abortController) {\n  return fetch(url, {\n    method: \"GET\",\n    headers,\n    signal: abortController.signal,\n    mode: \"cors\",\n    credentials: withCredentials ? \"include\" : \"same-origin\",\n    redirect: \"follow\"\n  });\n}\nfunction ensureResponseStatus(status, url) {\n  if (status !== 200 && status !== 206) {\n    throw createResponseError(status, url);\n  }\n}\nfunction getArrayBuffer(val) {\n  if (val instanceof Uint8Array) {\n    return val.buffer;\n  }\n  if (val instanceof ArrayBuffer) {\n    return val;\n  }\n  throw new Error(`getArrayBuffer - unexpected data: ${val}`);\n}\nclass PDFFetchStream extends BasePDFStream {\n  _responseOrigin = null;\n  constructor(source) {\n    super(source, PDFFetchStreamReader, PDFFetchStreamRangeReader);\n    const {\n      httpHeaders,\n      url\n    } = source;\n    assert(/https?:/.test(url.protocol), \"PDFFetchStream only supports http(s):// URLs.\");\n    this.headers = createHeaders(true, httpHeaders);\n  }\n}\nclass PDFFetchStreamReader extends BasePDFStreamReader {\n  _abortController = new AbortController();\n  _reader = null;\n  constructor(stream) {\n    super(stream);\n    const {\n      disableRange,\n      disableStream,\n      rangeChunkSize,\n      url,\n      withCredentials\n    } = stream._source;\n    this._isStreamingSupported = !disableStream;\n    const headers = new Headers(stream.headers);\n    fetchUrl(url, headers, withCredentials, this._abortController).then(response => {\n      stream._responseOrigin = getResponseOrigin(response.url);\n      ensureResponseStatus(response.status, url);\n      this._reader = response.body.getReader();\n      const responseHeaders = response.headers;\n      const {\n        contentLength,\n        isRangeSupported\n      } = validateRangeRequestCapabilities({\n        responseHeaders,\n        isHttp: true,\n        rangeChunkSize,\n        disableRange\n      });\n      this._contentLength = contentLength;\n      this._isRangeSupported = isRangeSupported;\n      this._filename = extractFilenameFromHeader(responseHeaders);\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this.cancel(new AbortException(\"Streaming is disabled.\"));\n      }\n      this._headersCapability.resolve();\n    }).catch(this._headersCapability.reject);\n  }\n  async read() {\n    await this._headersCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this._callOnProgress();\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\nclass PDFFetchStreamRangeReader extends BasePDFStreamRangeReader {\n  _abortController = new AbortController();\n  _readCapability = Promise.withResolvers();\n  _reader = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    const {\n      url,\n      withCredentials\n    } = stream._source;\n    const headers = new Headers(stream.headers);\n    headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n    fetchUrl(url, headers, withCredentials, this._abortController).then(response => {\n      const responseOrigin = getResponseOrigin(response.url);\n      ensureResponseOrigin(responseOrigin, stream._responseOrigin);\n      ensureResponseStatus(response.status, url);\n      this._reader = response.body.getReader();\n      this._readCapability.resolve();\n    }).catch(this._readCapability.reject);\n  }\n  async read() {\n    await this._readCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n    this._abortController.abort();\n  }\n}\n\n;// ./src/display/transport_stream.js\n\n\n\nfunction transport_stream_getArrayBuffer(val) {\n  return val instanceof Uint8Array && val.byteLength === val.buffer.byteLength ? val.buffer : new Uint8Array(val).buffer;\n}\nfunction endRequests() {\n  for (const capability of this._requests) {\n    capability.resolve({\n      value: undefined,\n      done: true\n    });\n  }\n  this._requests.length = 0;\n}\nclass PDFDataTransportStream extends BasePDFStream {\n  _progressiveDone = false;\n  _queuedChunks = [];\n  constructor(source) {\n    super(source, PDFDataTransportStreamReader, PDFDataTransportStreamRangeReader);\n    const {\n      pdfDataRangeTransport\n    } = source;\n    const {\n      initialData,\n      progressiveDone\n    } = pdfDataRangeTransport;\n    if (initialData?.length > 0) {\n      const buffer = transport_stream_getArrayBuffer(initialData);\n      this._queuedChunks.push(buffer);\n    }\n    this._progressiveDone = progressiveDone;\n    const listener = args => {\n      switch (args.type) {\n        case \"range\":\n        case \"progressiveRead\":\n          this.#onReceiveData(args.begin, args.chunk);\n          break;\n        case \"progressiveDone\":\n          this._fullReader?.progressiveDone();\n          this._progressiveDone = true;\n          break;\n      }\n    };\n    pdfDataRangeTransport.transportReady(listener);\n  }\n  #onReceiveData(begin, chunk) {\n    const buffer = transport_stream_getArrayBuffer(chunk);\n    if (begin === undefined) {\n      if (this._fullReader) {\n        this._fullReader._enqueue(buffer);\n      } else {\n        this._queuedChunks.push(buffer);\n      }\n    } else {\n      const rangeReader = this._rangeReaders.keys().find(r => r._begin === begin);\n      assert(rangeReader, \"#onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n      rangeReader._enqueue(buffer);\n    }\n  }\n  getFullReader() {\n    const reader = super.getFullReader();\n    this._queuedChunks = null;\n    return reader;\n  }\n  getRangeReader(begin, end) {\n    const reader = super.getRangeReader(begin, end);\n    if (reader) {\n      reader.onDone = () => this._rangeReaders.delete(reader);\n      this._source.pdfDataRangeTransport.requestDataRange(begin, end);\n    }\n    return reader;\n  }\n  cancelAllRequests(reason) {\n    super.cancelAllRequests(reason);\n    this._source.pdfDataRangeTransport.abort();\n  }\n}\nclass PDFDataTransportStreamReader extends BasePDFStreamReader {\n  #endRequests = endRequests.bind(this);\n  _done = false;\n  _queuedChunks = null;\n  _requests = [];\n  constructor(stream) {\n    super(stream);\n    const {\n      pdfDataRangeTransport,\n      disableRange,\n      disableStream\n    } = stream._source;\n    const {\n      length,\n      contentDispositionFilename\n    } = pdfDataRangeTransport;\n    this._queuedChunks = stream._queuedChunks || [];\n    for (const chunk of this._queuedChunks) {\n      this._loaded += chunk.byteLength;\n    }\n    this._done = stream._progressiveDone;\n    this._contentLength = length;\n    this._isStreamingSupported = !disableStream;\n    this._isRangeSupported = !disableRange;\n    if (isPdfFile(contentDispositionFilename)) {\n      this._filename = contentDispositionFilename;\n    }\n    this._headersCapability.resolve();\n    const loaded = this._loaded;\n    Promise.resolve().then(() => {\n      if (loaded > 0 && this._loaded === loaded) {\n        this._callOnProgress();\n      }\n    });\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunks.push(chunk);\n    }\n    this._loaded += chunk.byteLength;\n    this._callOnProgress();\n  }\n  async read() {\n    if (this._queuedChunks.length > 0) {\n      const chunk = this._queuedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n  }\n  progressiveDone() {\n    this._done ||= true;\n    if (this._queuedChunks.length === 0) {\n      this.#endRequests();\n    }\n  }\n}\nclass PDFDataTransportStreamRangeReader extends BasePDFStreamRangeReader {\n  #endRequests = endRequests.bind(this);\n  onDone = null;\n  _begin = -1;\n  _done = false;\n  _queuedChunk = null;\n  _requests = [];\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    this._begin = begin;\n  }\n  _enqueue(chunk) {\n    if (this._done) {\n      return;\n    }\n    if (this._requests.length === 0) {\n      this._queuedChunk = chunk;\n    } else {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n      this.#endRequests();\n    }\n    this._done = true;\n    this.onDone?.();\n  }\n  async read() {\n    if (this._queuedChunk) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n    this.onDone?.();\n  }\n}\n\n;// ./src/display/network.js\n\n\n\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\nfunction network_getArrayBuffer(val) {\n  return typeof val !== \"string\" ? val : stringToBytes(val).buffer;\n}\nclass PDFNetworkStream extends BasePDFStream {\n  #pendingRequests = new WeakMap();\n  _responseOrigin = null;\n  constructor(source) {\n    super(source, PDFNetworkStreamReader, PDFNetworkStreamRangeReader);\n    const {\n      httpHeaders,\n      url\n    } = source;\n    this.url = url;\n    this.isHttp = /https?:/.test(url.protocol);\n    this.headers = createHeaders(this.isHttp, httpHeaders);\n  }\n  _request(args) {\n    const xhr = new XMLHttpRequest();\n    const pendingRequest = {\n      validateStatus: null,\n      onHeadersReceived: args.onHeadersReceived,\n      onDone: args.onDone,\n      onError: args.onError,\n      onProgress: args.onProgress\n    };\n    this.#pendingRequests.set(xhr, pendingRequest);\n    xhr.open(\"GET\", this.url);\n    xhr.withCredentials = this._source.withCredentials;\n    for (const [key, val] of this.headers) {\n      xhr.setRequestHeader(key, val);\n    }\n    if (this.isHttp && \"begin\" in args && \"end\" in args) {\n      xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n      pendingRequest.validateStatus = status => status === PARTIAL_CONTENT_RESPONSE || status === OK_RESPONSE;\n    } else {\n      pendingRequest.validateStatus = status => status === OK_RESPONSE;\n    }\n    xhr.responseType = \"arraybuffer\";\n    assert(args.onError, \"Expected `onError` callback to be provided.\");\n    xhr.onerror = () => args.onError(xhr.status);\n    xhr.onreadystatechange = this.#onStateChange.bind(this, xhr);\n    xhr.onprogress = this.#onProgress.bind(this, xhr);\n    xhr.send(null);\n    return xhr;\n  }\n  #onProgress(xhr, evt) {\n    const pendingRequest = this.#pendingRequests.get(xhr);\n    pendingRequest?.onProgress?.(evt);\n  }\n  #onStateChange(xhr, evt) {\n    const pendingRequest = this.#pendingRequests.get(xhr);\n    if (!pendingRequest) {\n      return;\n    }\n    if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n      pendingRequest.onHeadersReceived();\n      delete pendingRequest.onHeadersReceived;\n    }\n    if (xhr.readyState !== 4) {\n      return;\n    }\n    if (!this.#pendingRequests.has(xhr)) {\n      return;\n    }\n    this.#pendingRequests.delete(xhr);\n    if (xhr.status === 0 && this.isHttp) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n    const xhrStatus = xhr.status || OK_RESPONSE;\n    if (!pendingRequest.validateStatus(xhrStatus)) {\n      pendingRequest.onError(xhr.status);\n      return;\n    }\n    const chunk = network_getArrayBuffer(xhr.response);\n    if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n      const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n      if (/bytes \\d+-\\d+\\/\\d+/.test(rangeHeader)) {\n        pendingRequest.onDone(chunk);\n      } else {\n        warn(`Missing or invalid \"Content-Range\" header.`);\n        pendingRequest.onError(0);\n      }\n    } else if (chunk) {\n      pendingRequest.onDone(chunk);\n    } else {\n      pendingRequest.onError(xhr.status);\n    }\n  }\n  _abortRequest(xhr) {\n    if (this.#pendingRequests.has(xhr)) {\n      this.#pendingRequests.delete(xhr);\n      xhr.abort();\n    }\n  }\n  getRangeReader(begin, end) {\n    const reader = super.getRangeReader(begin, end);\n    if (reader) {\n      reader.onClosed = () => this._rangeReaders.delete(reader);\n    }\n    return reader;\n  }\n}\nclass PDFNetworkStreamReader extends BasePDFStreamReader {\n  #endRequests = endRequests.bind(this);\n  _cachedChunks = [];\n  _done = false;\n  _requests = [];\n  _storedError = null;\n  constructor(stream) {\n    super(stream);\n    this._fullRequestXhr = stream._request({\n      onHeadersReceived: this.#onHeadersReceived.bind(this),\n      onDone: this.#onDone.bind(this),\n      onError: this.#onError.bind(this),\n      onProgress: this.#onProgress.bind(this)\n    });\n  }\n  #onHeadersReceived() {\n    const stream = this._stream;\n    const {\n      disableRange,\n      rangeChunkSize\n    } = stream._source;\n    const fullRequestXhr = this._fullRequestXhr;\n    stream._responseOrigin = getResponseOrigin(fullRequestXhr.responseURL);\n    const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();\n    const responseHeaders = new Headers(rawResponseHeaders ? rawResponseHeaders.trimStart().replace(/[^\\S ]+$/, \"\").split(/[\\r\\n]+/).map(x => {\n      const [key, ...val] = x.split(\": \");\n      return [key, val.join(\": \")];\n    }) : []);\n    const {\n      contentLength,\n      isRangeSupported\n    } = validateRangeRequestCapabilities({\n      responseHeaders,\n      isHttp: stream.isHttp,\n      rangeChunkSize,\n      disableRange\n    });\n    this._contentLength = contentLength;\n    this._isRangeSupported = isRangeSupported;\n    this._filename = extractFilenameFromHeader(responseHeaders);\n    if (this._isRangeSupported) {\n      stream._abortRequest(fullRequestXhr);\n    }\n    this._headersCapability.resolve();\n  }\n  #onDone(chunk) {\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._cachedChunks.push(chunk);\n    }\n    this._done = true;\n    if (this._cachedChunks.length === 0) {\n      this.#endRequests();\n    }\n  }\n  #onError(status) {\n    this._storedError = createResponseError(status, this._stream.url);\n    this._headersCapability.reject(this._storedError);\n    for (const capability of this._requests) {\n      capability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._cachedChunks.length = 0;\n  }\n  #onProgress(evt) {\n    this.onProgress?.({\n      loaded: evt.loaded,\n      total: evt.lengthComputable ? evt.total : this._contentLength\n    });\n  }\n  async read() {\n    await this._headersCapability.promise;\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._cachedChunks.length > 0) {\n      const chunk = this._cachedChunks.shift();\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this._headersCapability.reject(reason);\n    this.#endRequests();\n    this._stream._abortRequest(this._fullRequestXhr);\n    this._fullRequestXhr = null;\n  }\n}\nclass PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {\n  #endRequests = endRequests.bind(this);\n  onClosed = null;\n  _done = false;\n  _queuedChunk = null;\n  _requests = [];\n  _storedError = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    this._requestXhr = stream._request({\n      begin,\n      end,\n      onHeadersReceived: this.#onHeadersReceived.bind(this),\n      onDone: this.#onDone.bind(this),\n      onError: this.#onError.bind(this),\n      onProgress: null\n    });\n  }\n  #onHeadersReceived() {\n    const responseOrigin = getResponseOrigin(this._requestXhr?.responseURL);\n    try {\n      ensureResponseOrigin(responseOrigin, this._stream._responseOrigin);\n    } catch (ex) {\n      this._storedError = ex;\n      this.#onError(0);\n    }\n  }\n  #onDone(chunk) {\n    if (this._requests.length > 0) {\n      const capability = this._requests.shift();\n      capability.resolve({\n        value: chunk,\n        done: false\n      });\n    } else {\n      this._queuedChunk = chunk;\n    }\n    this._done = true;\n    this.#endRequests();\n    this.onClosed?.();\n  }\n  #onError(status) {\n    this._storedError ??= createResponseError(status, this._stream.url);\n    for (const capability of this._requests) {\n      capability.reject(this._storedError);\n    }\n    this._requests.length = 0;\n    this._queuedChunk = null;\n  }\n  async read() {\n    if (this._storedError) {\n      throw this._storedError;\n    }\n    if (this._queuedChunk !== null) {\n      const chunk = this._queuedChunk;\n      this._queuedChunk = null;\n      return {\n        value: chunk,\n        done: false\n      };\n    }\n    if (this._done) {\n      return {\n        value: undefined,\n        done: true\n      };\n    }\n    const capability = Promise.withResolvers();\n    this._requests.push(capability);\n    return capability.promise;\n  }\n  cancel(reason) {\n    this._done = true;\n    this.#endRequests();\n    this._stream._abortRequest(this._requestXhr);\n    this.onClosed?.();\n  }\n}\n\n;// ./src/display/node_stream.js\n\n\n\n\nfunction getReadableStream(url, opts = null) {\n  const fs = process.getBuiltinModule(\"fs\");\n  const {\n    Readable\n  } = process.getBuiltinModule(\"stream\");\n  const readStream = fs.createReadStream(url, opts);\n  return Readable.toWeb(readStream);\n}\nclass PDFNodeStream extends BasePDFStream {\n  constructor(source) {\n    super(source, PDFNodeStreamReader, PDFNodeStreamRangeReader);\n    const {\n      url\n    } = source;\n    assert(url.protocol === \"file:\", \"PDFNodeStream only supports file:// URLs.\");\n  }\n}\nclass PDFNodeStreamReader extends BasePDFStreamReader {\n  _reader = null;\n  constructor(stream) {\n    super(stream);\n    const {\n      disableRange,\n      disableStream,\n      rangeChunkSize,\n      url\n    } = stream._source;\n    this._isStreamingSupported = !disableStream;\n    const fs = process.getBuiltinModule(\"fs/promises\");\n    fs.lstat(url).then(stat => {\n      const readableStream = getReadableStream(url);\n      this._reader = readableStream.getReader();\n      const {\n        size\n      } = stat;\n      this._contentLength = size;\n      this._isRangeSupported = !disableRange && size > 2 * rangeChunkSize;\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this.cancel(new AbortException(\"Streaming is disabled.\"));\n      }\n      this._headersCapability.resolve();\n    }).catch(error => {\n      if (error.code === \"ENOENT\") {\n        error = createResponseError(0, url);\n      }\n      this._headersCapability.reject(error);\n    });\n  }\n  async read() {\n    await this._headersCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    this._loaded += value.byteLength;\n    this._callOnProgress();\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n  }\n}\nclass PDFNodeStreamRangeReader extends BasePDFStreamRangeReader {\n  _readCapability = Promise.withResolvers();\n  _reader = null;\n  constructor(stream, begin, end) {\n    super(stream, begin, end);\n    const {\n      url\n    } = stream._source;\n    try {\n      const readableStream = getReadableStream(url, {\n        start: begin,\n        end: end - 1\n      });\n      this._reader = readableStream.getReader();\n      this._readCapability.resolve();\n    } catch (error) {\n      this._readCapability.reject(error);\n    }\n  }\n  async read() {\n    await this._readCapability.promise;\n    const {\n      value,\n      done\n    } = await this._reader.read();\n    if (done) {\n      return {\n        value,\n        done\n      };\n    }\n    return {\n      value: getArrayBuffer(value),\n      done: false\n    };\n  }\n  cancel(reason) {\n    this._reader?.cancel(reason);\n  }\n}\n\n;// ./src/display/network_stream.js\n\n\n\n\n\nfunction getNetworkStream(url) {\n  return isValidFetchUrl(url) ? PDFFetchStream : isNodeJS ? PDFNodeStream : PDFNetworkStream;\n}\n\n;// ./src/display/worker_options.js\nclass GlobalWorkerOptions {\n  static #port = null;\n  static #src = \"\";\n  static get workerPort() {\n    return this.#port;\n  }\n  static set workerPort(val) {\n    if (!(typeof Worker !== \"undefined\" && val instanceof Worker) && val !== null) {\n      throw new Error(\"Invalid `workerPort` type.\");\n    }\n    this.#port = val;\n  }\n  static get workerSrc() {\n    return this.#src;\n  }\n  static set workerSrc(val) {\n    if (typeof val !== \"string\") {\n      throw new Error(\"Invalid `workerSrc` type.\");\n    }\n    this.#src = val;\n  }\n}\n\n;// ./src/display/metadata.js\nclass Metadata {\n  #map;\n  #data;\n  constructor({\n    parsedData,\n    rawData\n  }) {\n    this.#map = parsedData;\n    this.#data = rawData;\n  }\n  getRaw() {\n    return this.#data;\n  }\n  get(name) {\n    return this.#map.get(name) ?? null;\n  }\n  [Symbol.iterator]() {\n    return this.#map.entries();\n  }\n}\n\n;// ./src/display/optional_content_config.js\n\n\nconst INTERNAL = Symbol(\"INTERNAL\");\nclass OptionalContentGroup {\n  #isDisplay = false;\n  #isPrint = false;\n  #userSet = false;\n  #visible = true;\n  constructor(renderingIntent, {\n    name,\n    intent,\n    usage,\n    rbGroups\n  }) {\n    this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n    this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    this.name = name;\n    this.intent = intent;\n    this.usage = usage;\n    this.rbGroups = rbGroups;\n  }\n  get visible() {\n    if (this.#userSet) {\n      return this.#visible;\n    }\n    if (!this.#visible) {\n      return false;\n    }\n    const {\n      print,\n      view\n    } = this.usage;\n    if (this.#isDisplay) {\n      return view?.viewState !== \"OFF\";\n    } else if (this.#isPrint) {\n      return print?.printState !== \"OFF\";\n    }\n    return true;\n  }\n  _setVisible(internal, visible, userSet = false) {\n    if (internal !== INTERNAL) {\n      unreachable(\"Internal method `_setVisible` called.\");\n    }\n    this.#userSet = userSet;\n    this.#visible = visible;\n  }\n  get serializable() {\n    return {\n      userSet: this.#userSet,\n      visible: this.#visible\n    };\n  }\n}\nclass OptionalContentConfig {\n  #cachedGetHash = null;\n  #groups = new Map();\n  #initialHash = null;\n  #order = null;\n  #rawData;\n  creator = null;\n  name = null;\n  constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY, groupState = null) {\n    this.#rawData = data;\n    this.renderingIntent = renderingIntent;\n    if (data === null) {\n      return;\n    }\n    this.name = data.name;\n    this.creator = data.creator;\n    this.#order = data.order;\n    for (const group of data.groups) {\n      this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group));\n    }\n    if (groupState) {\n      if (groupState.size !== this.#groups.size) {\n        unreachable(\"Incorrect serialized groupState.\");\n      }\n      for (const [id, group] of groupState) {\n        this.#groups.get(id)._setVisible(INTERNAL, group.visible, group.userSet);\n      }\n    } else {\n      if (data.baseState === \"OFF\") {\n        for (const group of this.#groups.values()) {\n          group._setVisible(INTERNAL, false);\n        }\n      }\n      for (const on of data.on) {\n        this.#groups.get(on)._setVisible(INTERNAL, true);\n      }\n      for (const off of data.off) {\n        this.#groups.get(off)._setVisible(INTERNAL, false);\n      }\n    }\n    this.#initialHash = this.getHash();\n  }\n  #evaluateVisibilityExpression(array) {\n    const length = array.length;\n    if (length < 2) {\n      return true;\n    }\n    const operator = array[0];\n    for (let i = 1; i < length; i++) {\n      const element = array[i];\n      let state;\n      if (Array.isArray(element)) {\n        state = this.#evaluateVisibilityExpression(element);\n      } else if (this.#groups.has(element)) {\n        state = this.#groups.get(element).visible;\n      } else {\n        warn(`Optional content group not found: ${element}`);\n        return true;\n      }\n      switch (operator) {\n        case \"And\":\n          if (!state) {\n            return false;\n          }\n          break;\n        case \"Or\":\n          if (state) {\n            return true;\n          }\n          break;\n        case \"Not\":\n          return !state;\n        default:\n          return true;\n      }\n    }\n    return operator === \"And\";\n  }\n  isVisible(group) {\n    if (this.#groups.size === 0) {\n      return true;\n    }\n    if (!group) {\n      info(\"Optional content group not defined.\");\n      return true;\n    }\n    if (group.type === \"OCG\") {\n      if (!this.#groups.has(group.id)) {\n        warn(`Optional content group not found: ${group.id}`);\n        return true;\n      }\n      return this.#groups.get(group.id).visible;\n    } else if (group.type === \"OCMD\") {\n      if (group.expression) {\n        return this.#evaluateVisibilityExpression(group.expression);\n      }\n      if (!group.policy || group.policy === \"AnyOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOn\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      } else if (group.policy === \"AnyOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (!this.#groups.get(id).visible) {\n            return true;\n          }\n        }\n        return false;\n      } else if (group.policy === \"AllOff\") {\n        for (const id of group.ids) {\n          if (!this.#groups.has(id)) {\n            warn(`Optional content group not found: ${id}`);\n            return true;\n          }\n          if (this.#groups.get(id).visible) {\n            return false;\n          }\n        }\n        return true;\n      }\n      warn(`Unknown optional content policy ${group.policy}.`);\n      return true;\n    }\n    warn(`Unknown group type ${group.type}.`);\n    return true;\n  }\n  setVisibility(id, visible = true, preserveRB = true) {\n    const group = this.#groups.get(id);\n    if (!group) {\n      warn(`Optional content group not found: ${id}`);\n      return;\n    }\n    if (preserveRB && visible && group.rbGroups.length) {\n      for (const rbGroup of group.rbGroups) {\n        for (const otherId of rbGroup) {\n          if (otherId !== id) {\n            this.#groups.get(otherId)?._setVisible(INTERNAL, false, true);\n          }\n        }\n      }\n    }\n    group._setVisible(INTERNAL, !!visible, true);\n    this.#cachedGetHash = null;\n  }\n  setOCGState({\n    state,\n    preserveRB\n  }) {\n    let operator;\n    for (const elem of state) {\n      switch (elem) {\n        case \"ON\":\n        case \"OFF\":\n        case \"Toggle\":\n          operator = elem;\n          continue;\n      }\n      const group = this.#groups.get(elem);\n      if (!group) {\n        continue;\n      }\n      switch (operator) {\n        case \"ON\":\n          this.setVisibility(elem, true, preserveRB);\n          break;\n        case \"OFF\":\n          this.setVisibility(elem, false, preserveRB);\n          break;\n        case \"Toggle\":\n          this.setVisibility(elem, !group.visible, preserveRB);\n          break;\n      }\n    }\n    this.#cachedGetHash = null;\n  }\n  get hasInitialVisibility() {\n    return this.#initialHash === null || this.getHash() === this.#initialHash;\n  }\n  getOrder() {\n    if (!this.#groups.size) {\n      return null;\n    }\n    if (this.#order) {\n      return this.#order.slice();\n    }\n    return [...this.#groups.keys()];\n  }\n  getGroup(id) {\n    return this.#groups.get(id) || null;\n  }\n  getHash() {\n    if (this.#cachedGetHash !== null) {\n      return this.#cachedGetHash;\n    }\n    const hash = new MurmurHash3_64();\n    for (const [id, group] of this.#groups) {\n      hash.update(`${id}:${group.visible}`);\n    }\n    return this.#cachedGetHash = hash.hexdigest();\n  }\n  [Symbol.iterator]() {\n    return this.#groups.entries();\n  }\n  get serializable() {\n    const groupState = new Map();\n    for (const [id, group] of this.#groups) {\n      groupState.set(id, group.serializable);\n    }\n    return {\n      data: this.#rawData,\n      renderingIntent: this.renderingIntent,\n      groupState\n    };\n  }\n  static fromSerializable({\n    data,\n    renderingIntent,\n    groupState\n  }) {\n    return new OptionalContentConfig(data, renderingIntent, groupState);\n  }\n}\n\n;// ./src/display/pages_mapper.js\n\n\nclass PagesMapper {\n  #pageNumberToId = null;\n  #prevPageNumbers = null;\n  #pagesNumber = 0;\n  #clipboard = null;\n  #savedData = null;\n  get pagesNumber() {\n    return this.#pagesNumber;\n  }\n  set pagesNumber(n) {\n    if (this.#pagesNumber === n) {\n      return;\n    }\n    this.#pagesNumber = n;\n    this.#pageNumberToId = null;\n    this.#prevPageNumbers = null;\n  }\n  #ensureInit() {\n    if (this.#pageNumberToId) {\n      return;\n    }\n    const n = this.#pagesNumber;\n    const pageNumberToId = this.#pageNumberToId = new Uint32Array(n);\n    for (let i = 0; i < n; i++) {\n      pageNumberToId[i] = i + 1;\n    }\n    this.#prevPageNumbers = new Int32Array(pageNumberToId);\n  }\n  #buildIdToPageNumber() {\n    const idToPageNumber = new Map();\n    const pageNumberToId = this.#pageNumberToId;\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      const id = pageNumberToId[i];\n      const pageNumbers = idToPageNumber.get(id);\n      if (pageNumbers) {\n        pageNumbers.push(i + 1);\n      } else {\n        idToPageNumber.set(id, [i + 1]);\n      }\n    }\n    return idToPageNumber;\n  }\n  movePages(selectedPages, pagesToMove, index) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    const movedCount = pagesToMove.length;\n    const mappedPagesToMove = new Uint32Array(movedCount);\n    let removedBeforeTarget = 0;\n    for (let i = 0; i < movedCount; i++) {\n      const pageIndex = pagesToMove[i] - 1;\n      mappedPagesToMove[i] = pageNumberToId[pageIndex];\n      if (pageIndex < index) {\n        removedBeforeTarget++;\n      }\n    }\n    const pagesNumber = this.#pagesNumber;\n    const remainingLen = pagesNumber - movedCount;\n    const adjustedTarget = MathClamp(index - removedBeforeTarget, 0, remainingLen);\n    for (let i = 0, r = 0; i < pagesNumber; i++) {\n      if (!selectedPages.has(i + 1)) {\n        pageNumberToId[r++] = pageNumberToId[i];\n      }\n    }\n    pageNumberToId.copyWithin(adjustedTarget + movedCount, adjustedTarget, remainingLen);\n    pageNumberToId.set(mappedPagesToMove, adjustedTarget);\n    this.#updatePrevPageNumbers(prevIdToPageNumber);\n    if (pageNumberToId.every((id, i) => id === i + 1)) {\n      this.#pageNumberToId = null;\n    }\n  }\n  deletePages(pagesToDelete) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    this.#savedData = {\n      pageNumberToId: pageNumberToId.slice(),\n      pagesNumber: this.#pagesNumber,\n      prevPageNumbers: this.#prevPageNumbers.slice()\n    };\n    const newN = this.#pagesNumber - pagesToDelete.length;\n    this.#pagesNumber = newN;\n    const newPageNumberToId = this.#pageNumberToId = new Uint32Array(newN);\n    this.#prevPageNumbers = new Int32Array(newN);\n    let sourceIndex = 0;\n    let destIndex = 0;\n    for (const pageNumber of pagesToDelete) {\n      const pageIndex = pageNumber - 1;\n      if (pageIndex !== sourceIndex) {\n        newPageNumberToId.set(pageNumberToId.subarray(sourceIndex, pageIndex), destIndex);\n        destIndex += pageIndex - sourceIndex;\n      }\n      sourceIndex = pageIndex + 1;\n    }\n    if (sourceIndex < pageNumberToId.length) {\n      newPageNumberToId.set(pageNumberToId.subarray(sourceIndex), destIndex);\n    }\n    this.#updatePrevPageNumbers(prevIdToPageNumber, new Set(pagesToDelete));\n  }\n  cancelDelete() {\n    if (this.#savedData) {\n      this.#pageNumberToId = this.#savedData.pageNumberToId;\n      this.#pagesNumber = this.#savedData.pagesNumber;\n      this.#prevPageNumbers = this.#savedData.prevPageNumbers;\n      this.#savedData = null;\n    }\n  }\n  cleanSavedData() {\n    this.#savedData = null;\n  }\n  copyPages(pagesToCopy) {\n    this.#ensureInit();\n    this.#clipboard = {\n      pageNumbers: pagesToCopy,\n      pageIds: pagesToCopy.map(n => this.#pageNumberToId[n - 1])\n    };\n  }\n  cancelCopy() {\n    this.#clipboard = null;\n  }\n  pastePages(index) {\n    this.#ensureInit();\n    const pageNumberToId = this.#pageNumberToId;\n    const prevIdToPageNumber = this.#buildIdToPageNumber();\n    const {\n      pageNumbers: copiedPageNumbers,\n      pageIds: copiedPageIds\n    } = this.#clipboard;\n    const newN = this.#pagesNumber + copiedPageNumbers.length;\n    this.#pagesNumber = newN;\n    const newPageNumberToId = this.#pageNumberToId = new Uint32Array(newN);\n    this.#prevPageNumbers = new Int32Array(newN);\n    newPageNumberToId.set(pageNumberToId.subarray(0, index), 0);\n    newPageNumberToId.set(copiedPageIds, index);\n    newPageNumberToId.set(pageNumberToId.subarray(index), index + copiedPageNumbers.length);\n    this.#updatePrevPageNumbers(prevIdToPageNumber, null, index, copiedPageNumbers);\n    this.#clipboard = null;\n  }\n  #updatePrevPageNumbers(prevIdToPageNumber, deletedPageNumbers = null, pasteIndex = -1, copiedPageNumbers = null) {\n    const prevPageNumbers = this.#prevPageNumbers;\n    const newPageNumberToId = this.#pageNumberToId;\n    const pasteEnd = pasteIndex + (copiedPageNumbers?.length ?? 0);\n    const idsIndices = new Map();\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      if (i >= pasteIndex && i < pasteEnd) {\n        prevPageNumbers[i] = -copiedPageNumbers[i - pasteIndex];\n        continue;\n      }\n      const id = newPageNumberToId[i];\n      const oldPositions = prevIdToPageNumber.get(id);\n      let j = idsIndices.get(id) || 0;\n      if (deletedPageNumbers && oldPositions) {\n        while (j < oldPositions.length && deletedPageNumbers.has(oldPositions[j])) {\n          j++;\n        }\n      }\n      prevPageNumbers[i] = oldPositions?.[j];\n      idsIndices.set(id, j + 1);\n    }\n  }\n  hasBeenAltered() {\n    return this.#pageNumberToId !== null;\n  }\n  getPageMappingForSaving(idToPageNumber = null) {\n    idToPageNumber ??= this.#buildIdToPageNumber();\n    let nCopy = 0;\n    for (const pageNumbers of idToPageNumber.values()) {\n      nCopy = Math.max(nCopy, pageNumbers.length);\n    }\n    const extractParams = new Array(nCopy);\n    for (let i = 0; i < nCopy; i++) {\n      extractParams[i] = {\n        document: null,\n        pageIndices: [],\n        includePages: []\n      };\n    }\n    for (const [id, pageNumbers] of idToPageNumber) {\n      for (let i = 0, ii = pageNumbers.length; i < ii; i++) {\n        extractParams[i].includePages.push([id - 1, pageNumbers[i] - 1]);\n      }\n    }\n    for (const {\n      includePages,\n      pageIndices\n    } of extractParams) {\n      includePages.sort((a, b) => a[0] - b[0]);\n      for (let i = 0, ii = includePages.length; i < ii; i++) {\n        pageIndices.push(includePages[i][1]);\n        includePages[i] = includePages[i][0];\n      }\n    }\n    return extractParams;\n  }\n  extractPages(extractedPageNumbers) {\n    extractedPageNumbers = Array.from(extractedPageNumbers).sort((a, b) => a - b);\n    const usedIds = new Map();\n    for (let i = 0, ii = extractedPageNumbers.length; i < ii; i++) {\n      const id = this.getPageId(extractedPageNumbers[i]);\n      const usedPageNumbers = usedIds.getOrInsertComputed(id, makeArr);\n      usedPageNumbers.push(i + 1);\n    }\n    return this.getPageMappingForSaving(usedIds);\n  }\n  getPrevPageNumber(pageNumber) {\n    return this.#prevPageNumbers?.[pageNumber - 1] ?? 0;\n  }\n  getPageNumber(id) {\n    if (!this.#pageNumberToId) {\n      return id;\n    }\n    const pageNumberToId = this.#pageNumberToId;\n    for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {\n      if (pageNumberToId[i] === id) {\n        return i + 1;\n      }\n    }\n    return 0;\n  }\n  getPageId(pageNumber) {\n    return this.#pageNumberToId?.[pageNumber - 1] ?? pageNumber;\n  }\n  getMapping() {\n    return this.#pageNumberToId?.subarray(0, this.pagesNumber);\n  }\n}\n\n;// ./src/display/pdf_objects.js\nconst INITIAL_DATA = Symbol(\"INITIAL_DATA\");\nconst dataObj = () => ({\n  ...Promise.withResolvers(),\n  data: INITIAL_DATA\n});\nclass PDFObjects {\n  #objs = new Map();\n  get(objId, callback = null) {\n    if (callback) {\n      const obj = this.#objs.getOrInsertComputed(objId, dataObj);\n      obj.promise.then(() => callback(obj.data));\n      return null;\n    }\n    const obj = this.#objs.get(objId);\n    if (!obj || obj.data === INITIAL_DATA) {\n      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);\n    }\n    return obj.data;\n  }\n  has(objId) {\n    const obj = this.#objs.get(objId);\n    return !!obj && obj.data !== INITIAL_DATA;\n  }\n  delete(objId) {\n    const obj = this.#objs.get(objId);\n    if (!obj || obj.data === INITIAL_DATA) {\n      return false;\n    }\n    this.#objs.delete(objId);\n    return true;\n  }\n  resolve(objId, data = null) {\n    const obj = this.#objs.getOrInsertComputed(objId, dataObj);\n    if (obj.data !== INITIAL_DATA) {\n      throw new Error(`Object already resolved ${objId}.`);\n    }\n    obj.data = data;\n    obj.resolve();\n  }\n  clear() {\n    for (const {\n      data\n    } of this.#objs.values()) {\n      data?.bitmap?.close();\n    }\n    this.#objs.clear();\n  }\n  *[Symbol.iterator]() {\n    for (const [objId, {\n      data\n    }] of this.#objs) {\n      if (data !== INITIAL_DATA) {\n        yield [objId, data];\n      }\n    }\n  }\n}\n\n;// ./src/display/text_layer.js\n\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\nclass TextLayer {\n  #capability = Promise.withResolvers();\n  #container = null;\n  #disableProcessItems = false;\n  #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n  #imagesHandler = null;\n  #lang = null;\n  #layoutTextParams = null;\n  #pageHeight = 0;\n  #pageWidth = 0;\n  #reader = null;\n  #rootContainer = null;\n  #rotation = 0;\n  #scale = 0;\n  #styleCache = Object.create(null);\n  #textContentItemsStr = [];\n  #textContentSource = null;\n  #textDivs = [];\n  #textDivProperties = new WeakMap();\n  #transform = null;\n  static #ascentCache = new Map();\n  static #canvasContexts = new Map();\n  static #canvasCtxFonts = new WeakMap();\n  static #minFontSize = null;\n  static #pendingTextLayers = new Set();\n  constructor({\n    textContentSource,\n    images,\n    container,\n    viewport\n  }) {\n    if (textContentSource instanceof ReadableStream) {\n      this.#textContentSource = textContentSource;\n    } else if (typeof textContentSource === \"object\") {\n      this.#textContentSource = new ReadableStream({\n        start(controller) {\n          controller.enqueue(textContentSource);\n          controller.close();\n        }\n      });\n    } else {\n      throw new Error('No \"textContentSource\" parameter specified.');\n    }\n    this.#container = this.#rootContainer = container;\n    this.#imagesHandler = images;\n    this.#scale = viewport.scale * OutputScale.pixelRatio;\n    this.#rotation = viewport.rotation;\n    this.#layoutTextParams = {\n      div: null,\n      properties: null,\n      ctx: null\n    };\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n    this.#pageWidth = pageWidth;\n    this.#pageHeight = pageHeight;\n    TextLayer.#ensureMinFontSizeComputed();\n    container.style.setProperty(\"--min-font-size\", TextLayer.#minFontSize);\n    setLayerDimensions(container, viewport);\n    this.#capability.promise.finally(() => {\n      TextLayer.#pendingTextLayers.delete(this);\n      this.#layoutTextParams = null;\n      this.#styleCache = null;\n    }).catch(() => {});\n  }\n  static get fontFamilyMap() {\n    const {\n      isWindows,\n      isFirefox\n    } = FeatureTest.platform;\n    return shadow(this, \"fontFamilyMap\", new Map([[\"sans-serif\", `${isWindows && isFirefox ? \"Calibri, \" : \"\"}sans-serif`], [\"monospace\", `${isWindows && isFirefox ? \"Lucida Console, \" : \"\"}monospace`]]));\n  }\n  render() {\n    if (this.#imagesHandler) {\n      this.#container.append(this.#imagesHandler.render());\n    }\n    const pump = () => {\n      this.#reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          this.#capability.resolve();\n          return;\n        }\n        this.#lang ??= value.lang;\n        Object.assign(this.#styleCache, value.styles);\n        this.#processItems(value.items);\n        pump();\n      }, this.#capability.reject);\n    };\n    this.#reader = this.#textContentSource.getReader();\n    TextLayer.#pendingTextLayers.add(this);\n    pump();\n    return this.#capability.promise;\n  }\n  update({\n    viewport,\n    onBefore = null\n  }) {\n    const scale = viewport.scale * OutputScale.pixelRatio;\n    const rotation = viewport.rotation;\n    if (rotation !== this.#rotation) {\n      onBefore?.();\n      this.#rotation = rotation;\n      setLayerDimensions(this.#rootContainer, {\n        rotation\n      });\n    }\n    if (scale !== this.#scale) {\n      onBefore?.();\n      this.#scale = scale;\n      const params = {\n        div: null,\n        properties: null,\n        ctx: TextLayer.#getCtx(this.#lang)\n      };\n      for (const div of this.#textDivs) {\n        params.properties = this.#textDivProperties.get(div);\n        params.div = div;\n        this.#layout(params);\n      }\n    }\n  }\n  cancel() {\n    const abortEx = new AbortException(\"TextLayer task cancelled.\");\n    this.#reader?.cancel(abortEx).catch(() => {});\n    this.#reader = null;\n    this.#capability.reject(abortEx);\n  }\n  get textDivs() {\n    return this.#textDivs;\n  }\n  get textContentItemsStr() {\n    return this.#textContentItemsStr;\n  }\n  #processItems(items) {\n    if (this.#disableProcessItems) {\n      return;\n    }\n    this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang);\n    const textDivs = this.#textDivs,\n      textContentItemsStr = this.#textContentItemsStr;\n    for (const item of items) {\n      if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n        warn(\"Ignoring additional textDivs for performance reasons.\");\n        this.#disableProcessItems = true;\n        return;\n      }\n      if (item.str === undefined) {\n        if (item.type === \"beginMarkedContentProps\" || item.type === \"beginMarkedContent\") {\n          const parent = this.#container;\n          this.#container = document.createElement(\"span\");\n          this.#container.classList.add(\"markedContent\");\n          if (item.id) {\n            this.#container.setAttribute(\"id\", item.id);\n          }\n          if (item.tag === \"Artifact\") {\n            this.#container.ariaHidden = true;\n          }\n          parent.append(this.#container);\n        } else if (item.type === \"endMarkedContent\") {\n          this.#container = this.#container.parentNode;\n        }\n        continue;\n      }\n      textContentItemsStr.push(item.str);\n      this.#appendText(item);\n    }\n  }\n  #appendText(geom) {\n    const textDiv = document.createElement(\"span\");\n    const textDivProperties = {\n      angle: 0,\n      canvasWidth: 0,\n      hasText: geom.str !== \"\",\n      hasEOL: geom.hasEOL,\n      fontSize: 0\n    };\n    this.#textDivs.push(textDiv);\n    const tx = Util.transform(this.#transform, geom.transform);\n    let angle = Math.atan2(tx[1], tx[0]);\n    const style = this.#styleCache[geom.fontName];\n    if (style.vertical) {\n      angle += Math.PI / 2;\n    }\n    let fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily;\n    fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;\n    const fontHeight = Math.hypot(tx[2], tx[3]);\n    const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang);\n    let left, top;\n    if (angle === 0) {\n      left = tx[4];\n      top = tx[5] - fontAscent;\n    } else {\n      left = tx[4] + fontAscent * Math.sin(angle);\n      top = tx[5] - fontAscent * Math.cos(angle);\n    }\n    const divStyle = textDiv.style;\n    divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`;\n    divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`;\n    divStyle.setProperty(\"--font-height\", `${fontHeight.toFixed(2)}px`);\n    divStyle.fontFamily = fontFamily;\n    textDivProperties.fontSize = fontHeight;\n    textDiv.setAttribute(\"role\", \"presentation\");\n    textDiv.textContent = geom.str;\n    textDiv.dir = geom.dir;\n    if (this.#fontInspectorEnabled) {\n      textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName;\n    }\n    if (angle !== 0) {\n      textDivProperties.angle = angle * (180 / Math.PI);\n    }\n    let shouldScaleText = false;\n    if (geom.str.length > 1) {\n      shouldScaleText = true;\n    } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n      const absScaleX = Math.abs(geom.transform[0]),\n        absScaleY = Math.abs(geom.transform[3]);\n      if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\n        shouldScaleText = true;\n      }\n    }\n    if (shouldScaleText) {\n      textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n    }\n    this.#textDivProperties.set(textDiv, textDivProperties);\n    this.#layoutTextParams.div = textDiv;\n    this.#layoutTextParams.properties = textDivProperties;\n    this.#layout(this.#layoutTextParams);\n    if (textDivProperties.hasText) {\n      this.#container.append(textDiv);\n    }\n    if (textDivProperties.hasEOL) {\n      const br = document.createElement(\"br\");\n      br.setAttribute(\"role\", \"presentation\");\n      this.#container.append(br);\n    }\n  }\n  #layout(params) {\n    const {\n      div,\n      properties,\n      ctx\n    } = params;\n    const {\n      style\n    } = div;\n    if (properties.canvasWidth !== 0 && properties.hasText) {\n      const {\n        fontFamily\n      } = style;\n      const {\n        canvasWidth,\n        fontSize\n      } = properties;\n      TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily);\n      const {\n        width\n      } = ctx.measureText(div.textContent);\n      if (width > 0) {\n        style.setProperty(\"--scale-x\", canvasWidth * this.#scale / width);\n      }\n    }\n    if (properties.angle !== 0) {\n      style.setProperty(\"--rotate\", `${properties.angle}deg`);\n    }\n  }\n  static cleanup() {\n    if (this.#pendingTextLayers.size > 0) {\n      return;\n    }\n    this.#ascentCache.clear();\n    for (const {\n      canvas\n    } of this.#canvasContexts.values()) {\n      canvas.remove();\n    }\n    this.#canvasContexts.clear();\n  }\n  static #getCtx(lang = null) {\n    let ctx = this.#canvasContexts.get(lang ||= \"\");\n    if (!ctx) {\n      const canvas = document.createElement(\"canvas\");\n      canvas.style.cssText = \"position:absolute;top:0;left:0;width:0;height:0;display:none;\" + \"letter-spacing:normal;word-spacing:normal\";\n      canvas.lang = lang;\n      document.body.append(canvas);\n      ctx = canvas.getContext(\"2d\", {\n        alpha: false,\n        willReadFrequently: true\n      });\n      this.#canvasContexts.set(lang, ctx);\n      this.#canvasCtxFonts.set(ctx, {\n        size: 0,\n        family: \"\"\n      });\n    }\n    return ctx;\n  }\n  static #ensureCtxFont(ctx, size, family) {\n    const cached = this.#canvasCtxFonts.get(ctx);\n    if (size === cached.size && family === cached.family) {\n      return;\n    }\n    ctx.font = `${size}px ${family}`;\n    cached.size = size;\n    cached.family = family;\n  }\n  static #ensureMinFontSizeComputed() {\n    if (this.#minFontSize !== null) {\n      return;\n    }\n    const div = document.createElement(\"div\");\n    div.style.opacity = 0;\n    div.style.lineHeight = 1;\n    div.style.fontSize = \"1px\";\n    div.style.position = \"absolute\";\n    div.textContent = \"X\";\n    document.body.append(div);\n    this.#minFontSize = div.getBoundingClientRect().height;\n    div.remove();\n  }\n  static #getAscent(fontFamily, style, lang) {\n    const cachedAscent = this.#ascentCache.get(fontFamily);\n    if (cachedAscent) {\n      return cachedAscent;\n    }\n    const ctx = this.#getCtx(lang);\n    ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n    this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily);\n    const metrics = ctx.measureText(\"\");\n    const ascent = metrics.fontBoundingBoxAscent;\n    const descent = Math.abs(metrics.fontBoundingBoxDescent);\n    ctx.canvas.width = ctx.canvas.height = 0;\n    let ratio = 0.8;\n    if (ascent) {\n      ratio = ascent / (ascent + descent);\n    } else {\n      if (FeatureTest.platform.isFirefox) {\n        warn(\"Enable the `dom.textMetrics.fontBoundingBox.enabled` preference \" + \"in `about:config` to improve TextLayer rendering.\");\n      }\n      if (style.ascent) {\n        ratio = style.ascent;\n      } else if (style.descent) {\n        ratio = 1 + style.descent;\n      }\n    }\n    this.#ascentCache.set(fontFamily, ratio);\n    return ratio;\n  }\n}\n\n;// ./src/display/api.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RENDERING_CANCELLED_TIMEOUT = 100;\nfunction getDocument(src = {}) {\n  const task = new PDFDocumentLoadingTask();\n  const {\n    docId\n  } = task;\n  const url = src.url ? getUrlProp(src.url) : null;\n  const data = src.data ? getDataProp(src.data) : null;\n  const httpHeaders = src.httpHeaders || null;\n  const withCredentials = src.withCredentials === true;\n  const password = src.password ?? null;\n  const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;\n  const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : 2 ** 16;\n  let worker = src.worker instanceof PDFWorker ? src.worker : null;\n  const verbosity = src.verbosity;\n  const docBaseUrl = typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null;\n  const cMapUrl = getFactoryUrlProp(src.cMapUrl);\n  const cMapPacked = src.cMapPacked !== false;\n  const iccUrl = getFactoryUrlProp(src.iccUrl);\n  const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl);\n  const wasmUrl = getFactoryUrlProp(src.wasmUrl);\n  const ignoreErrors = src.stopAtErrors !== true;\n  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;\n  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === \"boolean\" ? src.isOffscreenCanvasSupported : !isNodeJS;\n  const isImageDecoderSupported = typeof src.isImageDecoderSupported === \"boolean\" ? src.isImageDecoderSupported : !isNodeJS;\n  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;\n  const disableFontFace = typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n  const fontExtraProperties = src.fontExtraProperties === true;\n  const enableXfa = src.enableXfa === true;\n  const ownerDocument = src.ownerDocument || globalThis.document;\n  const disableRange = src.disableRange === true;\n  const disableStream = src.disableStream === true;\n  const disableAutoFetch = src.disableAutoFetch === true;\n  const pdfBug = src.pdfBug === true;\n  const CanvasFactory = src.CanvasFactory || (isNodeJS ? NodeCanvasFactory : DOMCanvasFactory);\n  const FilterFactory = src.FilterFactory || (isNodeJS ? NodeFilterFactory : DOMFilterFactory);\n  const BinaryDataFactory = src.BinaryDataFactory || (isNodeJS ? NodeBinaryDataFactory : DOMBinaryDataFactory);\n  const enableHWA = src.enableHWA === true;\n  const enableWebGPU = src.enableWebGPU === true;\n  const gpuPromise = enableWebGPU ? initGPU() : Promise.resolve(false);\n  const useWasm = src.useWasm !== false;\n  const pagesMapper = src.pagesMapper || new PagesMapper();\n  const useSystemFonts = typeof src.useSystemFonts === \"boolean\" ? src.useSystemFonts : !isNodeJS && !disableFontFace;\n  const useWorkerFetch = typeof src.useWorkerFetch === \"boolean\" ? src.useWorkerFetch : !!(BinaryDataFactory === DOMBinaryDataFactory && cMapUrl && cMapPacked && standardFontDataUrl && wasmUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI) && isValidFetchUrl(wasmUrl, document.baseURI));\n  const styleElement = null;\n  setVerbosityLevel(verbosity);\n  const transportFactory = {\n    canvasFactory: new CanvasFactory({\n      ownerDocument,\n      enableHWA\n    }),\n    filterFactory: new FilterFactory({\n      docId,\n      ownerDocument\n    }),\n    binaryDataFactory: useWorkerFetch ? null : new BinaryDataFactory({\n      cMapUrl,\n      standardFontDataUrl,\n      wasmUrl\n    })\n  };\n  if (!worker) {\n    worker = PDFWorker.create({\n      verbosity,\n      port: GlobalWorkerOptions.workerPort\n    });\n    task._worker = worker;\n  }\n  const docParams = {\n    docId,\n    apiVersion: \"6.2.108\",\n    data,\n    password,\n    disableAutoFetch,\n    rangeChunkSize,\n    docBaseUrl,\n    enableXfa,\n    evaluatorOptions: {\n      maxImageSize,\n      disableFontFace,\n      ignoreErrors,\n      isOffscreenCanvasSupported,\n      isImageDecoderSupported,\n      canvasMaxAreaInBytes,\n      fontExtraProperties,\n      useSystemFonts,\n      useWasm,\n      useWorkerFetch,\n      cMapUrl,\n      cMapPacked,\n      iccUrl,\n      standardFontDataUrl,\n      wasmUrl,\n      hasGPU: false\n    }\n  };\n  const transportParams = {\n    ownerDocument,\n    pdfBug,\n    styleElement,\n    enableHWA,\n    loadingParams: {\n      disableAutoFetch,\n      enableXfa\n    }\n  };\n  Promise.all([worker.promise, gpuPromise]).then(function ([, hasGPU]) {\n    if (worker.destroyed) {\n      throw new Error(\"Worker was destroyed\");\n    }\n    docParams.evaluatorOptions.hasGPU = hasGPU;\n    const workerIdPromise = worker.messageHandler.sendWithPromise(\"GetDocRequest\", docParams, data ? [data.buffer] : null);\n    let networkStream;\n    if (data) {} else if (rangeTransport) {\n      networkStream = new PDFDataTransportStream({\n        pdfDataRangeTransport: rangeTransport,\n        disableRange,\n        disableStream\n      });\n    } else if (url) {\n      const NetworkStream = getNetworkStream(url);\n      networkStream = new NetworkStream({\n        url,\n        httpHeaders,\n        withCredentials,\n        rangeChunkSize,\n        disableRange,\n        disableStream\n      });\n    } else {\n      throw new Error(\"getDocument - expected either `data`, `range`, or `url` parameter.\");\n    }\n    return workerIdPromise.then(workerId => {\n      if (worker.destroyed) {\n        throw new Error(\"Worker was destroyed\");\n      }\n      const messageHandler = new MessageHandler(docId, workerId, worker.port);\n      const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory, pagesMapper);\n      task._transport = transport;\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n      messageHandler.send(\"Ready\", null);\n    });\n  }).catch(task._capability.reject).finally(task._setupCapability.resolve);\n  return task;\n}\nclass PDFDocumentLoadingTask {\n  static #docId = 0;\n  _capability = Promise.withResolvers();\n  _setupCapability = Promise.withResolvers();\n  _transport = null;\n  _worker = null;\n  docId = `d${PDFDocumentLoadingTask.#docId++}`;\n  destroyed = false;\n  onPassword = null;\n  onProgress = null;\n  get promise() {\n    return this._capability.promise;\n  }\n  async destroy() {\n    this.destroyed = true;\n    this._capability.promise.catch(() => {});\n    try {\n      if (this._worker?.port) {\n        this._worker._pendingDestroy = true;\n      }\n      await this._setupCapability.promise;\n      await this._transport?.destroy();\n    } catch (ex) {\n      if (this._worker?.port) {\n        delete this._worker._pendingDestroy;\n      }\n      throw ex;\n    }\n    this._transport = null;\n    this._worker?.destroy();\n    this._worker = null;\n  }\n  async getData() {\n    return this._transport.getData();\n  }\n}\nclass PDFDataRangeTransport {\n  #capability = Promise.withResolvers();\n  #listener = null;\n  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n    this.contentDispositionFilename = contentDispositionFilename;\n  }\n  onDataRange(begin, chunk) {\n    this.#listener({\n      type: \"range\",\n      begin,\n      chunk\n    });\n  }\n  onDataProgressiveRead(chunk) {\n    this.#capability.promise.then(() => {\n      this.#listener({\n        type: \"progressiveRead\",\n        chunk\n      });\n    });\n  }\n  onDataProgressiveDone() {\n    this.#capability.promise.then(() => {\n      this.#listener({\n        type: \"progressiveDone\"\n      });\n    });\n  }\n  transportReady(listener) {\n    this.#listener = listener;\n    this.#capability.resolve();\n  }\n  requestDataRange(begin, end) {\n    unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n  }\n  abort() {}\n}\nclass PDFDocumentProxy {\n  constructor(pdfInfo, transport) {\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n  }\n  get pagesMapper() {\n    return this._transport.pagesMapper;\n  }\n  get annotationStorage() {\n    return this._transport.annotationStorage;\n  }\n  get canvasFactory() {\n    return this._transport.canvasFactory;\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get numPages() {\n    return this._pdfInfo.numPages;\n  }\n  get fingerprints() {\n    return this._pdfInfo.fingerprints;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  get allXfaHtml() {\n    return this._transport._htmlForXfa;\n  }\n  getPage(pageNumber) {\n    return this._transport.getPage(pageNumber);\n  }\n  getPageIndex(ref) {\n    return this._transport.getPageIndex(ref);\n  }\n  getDestinations() {\n    return this._transport.getDestinations();\n  }\n  getDestination(id) {\n    return this._transport.getDestination(id);\n  }\n  getPageLabels() {\n    return this._transport.getPageLabels();\n  }\n  getPageLayout() {\n    return this._transport.getPageLayout();\n  }\n  getPageMode() {\n    return this._transport.getPageMode();\n  }\n  getViewerPreferences() {\n    return this._transport.getViewerPreferences();\n  }\n  getOpenAction() {\n    return this._transport.getOpenAction();\n  }\n  getAttachments() {\n    return this._transport.getAttachments();\n  }\n  getAttachmentContent(id) {\n    return this._transport.getAttachmentContent(id);\n  }\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this._transport.getAnnotationsByType(types, pageIndexesToSkip);\n  }\n  getJSActions() {\n    return this._transport.getDocJSActions();\n  }\n  getOutline() {\n    return this._transport.getOutline();\n  }\n  getOptionalContentConfig({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getOptionalContentConfig(renderingIntent);\n  }\n  getPermissions() {\n    return this._transport.getPermissions();\n  }\n  getMetadata() {\n    return this._transport.getMetadata();\n  }\n  getMarkInfo() {\n    return this._transport.getMarkInfo();\n  }\n  getData() {\n    return this._transport.getData();\n  }\n  saveDocument() {\n    return this._transport.saveDocument();\n  }\n  extractPages(pageInfos) {\n    return this._transport.extractPages(pageInfos);\n  }\n  getDownloadInfo() {\n    return this._transport.downloadInfoCapability.promise;\n  }\n  getRawData(data) {\n    return this._transport.getRawData(data);\n  }\n  cleanup(keepLoadedFonts = false) {\n    return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n  }\n  cachedPageNumber(ref) {\n    return this._transport.cachedPageNumber(ref);\n  }\n  get loadingParams() {\n    return this._transport.loadingParams;\n  }\n  get loadingTask() {\n    return this._transport.loadingTask;\n  }\n  getFieldObjects() {\n    return this._transport.getFieldObjects();\n  }\n  getSignatures() {\n    return this._transport.getSignatures();\n  }\n  getSignatureData(id) {\n    return this._transport.getSignatureData(id);\n  }\n  hasJSActions() {\n    return this._transport.hasJSActions();\n  }\n  getCalculationOrderIds() {\n    return this._transport.getCalculationOrderIds();\n  }\n}\nclass PDFPageProxy {\n  #pendingCleanup = false;\n  #pagesMapper = null;\n  constructor(pageIndex, pageInfo, transport, pagesMapper, pdfBug = false) {\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._transport = transport;\n    this._stats = pdfBug ? new StatTimer() : null;\n    this._pdfBug = pdfBug;\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n    this._intentStates = new Map();\n    this.destroyed = false;\n    this.recordedBBoxes = null;\n    this.#pagesMapper = pagesMapper;\n    this.imageCoordinates = null;\n  }\n  clone(id) {\n    const clone = new PDFPageProxy(id, this._pageInfo, this._transport, this.#pagesMapper, this._pdfBug);\n    clone.clonedFromIndex = this.clonedFromIndex ?? this._pageIndex;\n    this._transport.updatePage(clone);\n    return clone;\n  }\n  get pageNumber() {\n    return this._pageIndex + 1;\n  }\n  set pageNumber(value) {\n    this._pageIndex = value - 1;\n    this._transport.updatePage(this);\n  }\n  get rotate() {\n    return this._pageInfo.rotate;\n  }\n  get ref() {\n    return this._pageInfo.ref;\n  }\n  get userUnit() {\n    return this._pageInfo.userUnit;\n  }\n  get view() {\n    return this._pageInfo.view;\n  }\n  getViewport({\n    scale,\n    rotation = this.rotate,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.view,\n      userUnit: this.userUnit,\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip\n    });\n  }\n  getAnnotations({\n    intent = \"display\"\n  } = {}) {\n    const {\n      renderingIntent\n    } = this._transport.getRenderingIntent(intent);\n    return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n  }\n  getJSActions() {\n    return this._transport.getPageJSActions(this._pageIndex);\n  }\n  get filterFactory() {\n    return this._transport.filterFactory;\n  }\n  get isPureXfa() {\n    return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n  }\n  async getXfa() {\n    return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n  }\n  render({\n    canvasContext,\n    canvas = canvasContext.canvas,\n    viewport,\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    transform = null,\n    background = null,\n    optionalContentConfigPromise = null,\n    annotationCanvasMap = null,\n    pageColors = null,\n    printAnnotationStorage = null,\n    isEditing = false,\n    recordImages = false,\n    recordOperations = false,\n    operationsFilter = null\n  }) {\n    this._stats?.time(\"Overall\");\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing);\n    const {\n      renderingIntent,\n      cacheKey\n    } = intentArgs;\n    this.#pendingCleanup = false;\n    optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent);\n    const intentState = this._intentStates.getOrInsertComputed(cacheKey, makeObj);\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n    if (!intentState.displayReadyCapability) {\n      intentState.displayReadyCapability = Promise.withResolvers();\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    const recordForDebugger = !!(this._pdfBug && globalThis.StepperManager?.enabled);\n    const shouldRecordOperations = !!canvas && !this.recordedBBoxes && (recordOperations || recordForDebugger);\n    const shouldRecordImages = !!canvas && !this.imageCoordinates && recordImages;\n    const complete = error => {\n      intentState.renderTasks.delete(internalRenderTask);\n      if (shouldRecordOperations) {\n        const recordedBBoxes = internalRenderTask.gfx?.dependencyTracker.take();\n        if (recordedBBoxes) {\n          internalRenderTask.stepper?.setOperatorBBoxes(recordedBBoxes, internalRenderTask.gfx.dependencyTracker.takeDebugMetadata());\n          if (recordOperations) {\n            this.recordedBBoxes = recordedBBoxes;\n          }\n        }\n      }\n      if (shouldRecordImages && !error) {\n        this.imageCoordinates = internalRenderTask.gfx?.imagesTracker.take();\n      }\n      if (intentPrint) {\n        this.#pendingCleanup = true;\n      }\n      this.#tryCleanup();\n      if (error) {\n        internalRenderTask.capability.reject(error);\n        this._abortOperatorList({\n          intentState,\n          reason: error instanceof Error ? error : new Error(error)\n        });\n      } else {\n        internalRenderTask.capability.resolve();\n      }\n      if (this._stats) {\n        this._stats.timeEnd(\"Rendering\");\n        this._stats.timeEnd(\"Overall\");\n        if (globalThis.Stats?.enabled) {\n          globalThis.Stats.add(this.pageNumber, this._stats);\n        }\n      }\n    };\n    let dependencyTracker = null;\n    let bboxTracker = null;\n    if (shouldRecordOperations || shouldRecordImages) {\n      bboxTracker = new CanvasBBoxTracker(canvas, intentState.operatorList.length);\n    }\n    if (shouldRecordOperations) {\n      dependencyTracker = new CanvasDependencyTracker(bboxTracker, recordForDebugger);\n    }\n    const internalRenderTask = new InternalRenderTask({\n      callback: complete,\n      params: {\n        canvas,\n        canvasContext,\n        dependencyTracker: dependencyTracker ?? bboxTracker,\n        imagesTracker: shouldRecordImages ? new CanvasImagesTracker(canvas) : null,\n        viewport,\n        transform,\n        background\n      },\n      objs: this.objs,\n      commonObjs: this.commonObjs,\n      annotationCanvasMap,\n      operatorList: intentState.operatorList,\n      pageIndex: this._pageIndex,\n      canvasFactory: this._transport.canvasFactory,\n      filterFactory: this._transport.filterFactory,\n      useRequestAnimationFrame: !intentPrint,\n      pdfBug: this._pdfBug,\n      pageColors,\n      enableHWA: this._transport.enableHWA,\n      operationsFilter\n    });\n    (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n    const renderTask = internalRenderTask.task;\n    Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {\n      if (this.destroyed) {\n        complete();\n        return;\n      }\n      this._stats?.time(\"Rendering\");\n      if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n        throw new Error(\"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" + \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\");\n      }\n      internalRenderTask.initializeGraphics({\n        transparency,\n        optionalContentConfig\n      });\n      internalRenderTask.operatorListChanged();\n    }).catch(complete);\n    return renderTask;\n  }\n  getOperatorList({\n    intent = \"display\",\n    annotationMode = AnnotationMode.ENABLE,\n    printAnnotationStorage = null,\n    isEditing = false\n  } = {}) {\n    function operatorListChanged() {\n      if (intentState.operatorList.lastChunk) {\n        intentState.opListReadCapability.resolve(intentState.operatorList);\n        intentState.renderTasks.delete(opListTask);\n      }\n    }\n    const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true);\n    const intentState = this._intentStates.getOrInsertComputed(intentArgs.cacheKey, makeObj);\n    let opListTask;\n    if (!intentState.opListReadCapability) {\n      opListTask = Object.create(null);\n      opListTask.operatorListChanged = operatorListChanged;\n      intentState.opListReadCapability = Promise.withResolvers();\n      (intentState.renderTasks ||= new Set()).add(opListTask);\n      intentState.operatorList = {\n        fnArray: [],\n        argsArray: [],\n        lastChunk: false,\n        separateAnnots: null\n      };\n      this._stats?.time(\"Page Request\");\n      this._pumpOperatorList(intentArgs);\n    }\n    return intentState.opListReadCapability.promise;\n  }\n  streamTextContent({\n    includeMarkedContent = false,\n    disableNormalization = false\n  } = {}) {\n    const TEXT_CONTENT_CHUNK_SIZE = 100;\n    return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n      pageId: this.#pagesMapper.getPageId(this._pageIndex + 1) - 1,\n      pageIndex: this._pageIndex,\n      includeMarkedContent: includeMarkedContent === true,\n      disableNormalization: disableNormalization === true\n    }, {\n      highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n      size(textContent) {\n        return textContent.items.length;\n      }\n    });\n  }\n  async getTextContent(params = {}) {\n    if (this._transport._htmlForXfa) {\n      return this.getXfa().then(xfa => XfaText.textContent(xfa));\n    }\n    const readableStream = this.streamTextContent(params);\n    const textContent = {\n      items: [],\n      styles: Object.create(null),\n      lang: null\n    };\n    for await (const value of readableStream) {\n      textContent.lang ??= value.lang;\n      Object.assign(textContent.styles, value.styles);\n      textContent.items.push(...value.items);\n    }\n    return textContent;\n  }\n  getStructTree() {\n    return this._transport.getStructTree(this._pageIndex);\n  }\n  _destroy() {\n    this.destroyed = true;\n    const waitOn = [];\n    for (const intentState of this._intentStates.values()) {\n      this._abortOperatorList({\n        intentState,\n        reason: new Error(\"Page was destroyed.\"),\n        force: true\n      });\n      if (intentState.opListReadCapability) {\n        continue;\n      }\n      for (const internalRenderTask of intentState.renderTasks) {\n        waitOn.push(internalRenderTask.completed);\n        internalRenderTask.cancel();\n      }\n    }\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return Promise.all(waitOn);\n  }\n  cleanup(resetStats = false) {\n    this.#pendingCleanup = true;\n    const success = this.#tryCleanup();\n    if (resetStats && success) {\n      this._stats &&= new StatTimer();\n    }\n    return success;\n  }\n  #tryCleanup() {\n    if (!this.#pendingCleanup || this.destroyed) {\n      return false;\n    }\n    for (const {\n      renderTasks,\n      operatorList\n    } of this._intentStates.values()) {\n      if (renderTasks.size > 0 || !operatorList.lastChunk) {\n        return false;\n      }\n    }\n    this._intentStates.clear();\n    this.objs.clear();\n    this.#pendingCleanup = false;\n    return true;\n  }\n  _startRenderPage(transparency, cacheKey) {\n    const intentState = this._intentStates.get(cacheKey);\n    if (!intentState) {\n      return;\n    }\n    this._stats?.timeEnd(\"Page Request\");\n    intentState.displayReadyCapability?.resolve(transparency);\n  }\n  _renderPageChunk(operatorListChunk, intentState) {\n    for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n      intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n      intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n    }\n    intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n    intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n    for (const internalRenderTask of intentState.renderTasks) {\n      internalRenderTask.operatorListChanged();\n    }\n    if (operatorListChunk.lastChunk) {\n      this.#tryCleanup();\n    }\n  }\n  _pumpOperatorList({\n    renderingIntent,\n    cacheKey,\n    annotationStorageSerializable,\n    modifiedIds\n  }) {\n    const {\n      map,\n      transfer\n    } = annotationStorageSerializable;\n    const readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", {\n      pageId: this.#pagesMapper.getPageId(this._pageIndex + 1) - 1,\n      pageIndex: this._pageIndex,\n      intent: renderingIntent,\n      cacheKey,\n      annotationStorage: map,\n      modifiedIds\n    }, undefined, transfer);\n    const reader = readableStream.getReader();\n    const intentState = this._intentStates.get(cacheKey);\n    intentState.streamReader = reader;\n    const pump = () => {\n      reader.read().then(({\n        value,\n        done\n      }) => {\n        if (done) {\n          intentState.streamReader = null;\n          return;\n        }\n        if (this._transport.destroyed) {\n          return;\n        }\n        this._renderPageChunk(value, intentState);\n        pump();\n      }, reason => {\n        intentState.streamReader = null;\n        if (this._transport.destroyed) {\n          return;\n        }\n        if (intentState.operatorList) {\n          intentState.operatorList.lastChunk = true;\n          for (const internalRenderTask of intentState.renderTasks) {\n            internalRenderTask.operatorListChanged();\n          }\n          this.#tryCleanup();\n        }\n        if (intentState.displayReadyCapability) {\n          intentState.displayReadyCapability.reject(reason);\n        } else if (intentState.opListReadCapability) {\n          intentState.opListReadCapability.reject(reason);\n        } else {\n          throw reason;\n        }\n      });\n    };\n    pump();\n  }\n  _abortOperatorList({\n    intentState,\n    reason,\n    force = false\n  }) {\n    if (!intentState.streamReader) {\n      return;\n    }\n    if (intentState.streamReaderCancelTimeout) {\n      clearTimeout(intentState.streamReaderCancelTimeout);\n      intentState.streamReaderCancelTimeout = null;\n    }\n    if (!force) {\n      if (intentState.renderTasks.size > 0) {\n        return;\n      }\n      if (reason instanceof RenderingCancelledException) {\n        let delay = RENDERING_CANCELLED_TIMEOUT;\n        if (reason.extraDelay > 0 && reason.extraDelay < 1000) {\n          delay += reason.extraDelay;\n        }\n        intentState.streamReaderCancelTimeout = setTimeout(() => {\n          intentState.streamReaderCancelTimeout = null;\n          this._abortOperatorList({\n            intentState,\n            reason,\n            force: true\n          });\n        }, delay);\n        return;\n      }\n    }\n    intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {});\n    intentState.streamReader = null;\n    if (this._transport.destroyed) {\n      return;\n    }\n    for (const [curCacheKey, curIntentState] of this._intentStates) {\n      if (curIntentState === intentState) {\n        this._intentStates.delete(curCacheKey);\n        break;\n      }\n    }\n    this.cleanup();\n  }\n  get stats() {\n    return this._stats;\n  }\n}\nclass PDFWorker {\n  #capability = Promise.withResolvers();\n  #messageHandler = null;\n  #port = null;\n  #webWorker = null;\n  static #fakeWorkerId = 0;\n  static #isWorkerDisabled = false;\n  static #workerPorts = new WeakMap();\n  static {\n    if (isNodeJS) {\n      this.#isWorkerDisabled = true;\n      GlobalWorkerOptions.workerSrc ||= \"./pdf.worker.mjs\";\n    }\n    this._isSameOrigin = (baseUrl, otherUrl) => {\n      const base = URL.parse(baseUrl);\n      if (!base?.origin || base.origin === \"null\") {\n        return false;\n      }\n      const other = new URL(otherUrl, base);\n      return base.origin === other.origin;\n    };\n    this._createCDNWrapper = url => {\n      const wrapper = `await import(\"${url}\");`;\n      return URL.createObjectURL(new Blob([wrapper], {\n        type: \"text/javascript\"\n      }));\n    };\n  }\n  constructor({\n    name = null,\n    port = null,\n    verbosity = getVerbosityLevel()\n  } = {}) {\n    this.name = name;\n    this.destroyed = false;\n    this.verbosity = verbosity;\n    if (port) {\n      if (PDFWorker.#workerPorts.has(port)) {\n        throw new Error(\"Cannot use more than one PDFWorker per port.\");\n      }\n      PDFWorker.#workerPorts.set(port, this);\n      this.#initializeFromPort(port);\n    } else {\n      this.#initialize();\n    }\n  }\n  get promise() {\n    return this.#capability.promise;\n  }\n  #resolve() {\n    this.#capability.resolve();\n    this.#messageHandler.send(\"configure\", {\n      verbosity: this.verbosity\n    });\n  }\n  get port() {\n    return this.#port;\n  }\n  get messageHandler() {\n    return this.#messageHandler;\n  }\n  #initializeFromPort(port) {\n    this.#port = port;\n    this.#messageHandler = new MessageHandler(\"main\", \"worker\", port);\n    this.#messageHandler.on(\"ready\", () => {});\n    this.#resolve();\n  }\n  #initialize() {\n    if (PDFWorker.#isWorkerDisabled || PDFWorker.#mainThreadWorkerMessageHandler) {\n      this.#setupFakeWorker();\n      return;\n    }\n    let {\n      workerSrc\n    } = PDFWorker;\n    try {\n      if (!PDFWorker._isSameOrigin(window.location, workerSrc)) {\n        workerSrc = PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href);\n      }\n      const worker = new Worker(workerSrc, {\n        type: \"module\"\n      });\n      const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n      const terminateEarly = () => {\n        ac.abort();\n        messageHandler.destroy();\n        worker.terminate();\n        if (this.destroyed) {\n          this.#capability.reject(new Error(\"Worker was destroyed\"));\n        } else {\n          this.#setupFakeWorker();\n        }\n      };\n      const ac = new AbortController();\n      worker.addEventListener(\"error\", () => {\n        if (!this.#webWorker) {\n          terminateEarly();\n        }\n      }, {\n        signal: ac.signal\n      });\n      messageHandler.on(\"test\", data => {\n        ac.abort();\n        if (this.destroyed || !data) {\n          terminateEarly();\n          return;\n        }\n        this.#messageHandler = messageHandler;\n        this.#port = worker;\n        this.#webWorker = worker;\n        this.#resolve();\n      });\n      messageHandler.on(\"ready\", data => {\n        ac.abort();\n        if (this.destroyed) {\n          terminateEarly();\n          return;\n        }\n        try {\n          sendTest();\n        } catch {\n          this.#setupFakeWorker();\n        }\n      });\n      const sendTest = () => {\n        const testObj = new Uint8Array();\n        messageHandler.send(\"test\", testObj, [testObj.buffer]);\n      };\n      sendTest();\n      return;\n    } catch {\n      info(\"The worker has been disabled.\");\n    }\n    this.#setupFakeWorker();\n  }\n  #setupFakeWorker() {\n    if (!PDFWorker.#isWorkerDisabled) {\n      warn(\"Setting up fake worker.\");\n      PDFWorker.#isWorkerDisabled = true;\n    }\n    PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {\n      if (this.destroyed) {\n        this.#capability.reject(new Error(\"Worker was destroyed\"));\n        return;\n      }\n      const port = new LoopbackPort();\n      this.#port = port;\n      const id = `fake${PDFWorker.#fakeWorkerId++}`;\n      const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n      WorkerMessageHandler.setup(workerHandler, port);\n      this.#messageHandler = new MessageHandler(id, id + \"_worker\", port);\n      this.#resolve();\n    }).catch(reason => {\n      this.#capability.reject(new Error(`Setting up fake worker failed: \"${reason.message}\".`));\n    });\n  }\n  destroy() {\n    this.destroyed = true;\n    this.#webWorker?.terminate();\n    this.#webWorker = null;\n    PDFWorker.#workerPorts.delete(this.#port);\n    this.#port = null;\n    this.#messageHandler?.destroy();\n    this.#messageHandler = null;\n  }\n  static create(params) {\n    const cachedPort = this.#workerPorts.get(params?.port);\n    if (cachedPort) {\n      if (cachedPort._pendingDestroy) {\n        throw new Error(\"PDFWorker.create - the worker is being destroyed.\\n\" + \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\");\n      }\n      return cachedPort;\n    }\n    return new PDFWorker(params);\n  }\n  static get workerSrc() {\n    if (GlobalWorkerOptions.workerSrc) {\n      return GlobalWorkerOptions.workerSrc;\n    }\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n  }\n  static get #mainThreadWorkerMessageHandler() {\n    try {\n      return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n    } catch {\n      return null;\n    }\n  }\n  static get _setupFakeWorkerGlobal() {\n    const loader = async () => {\n      if (this.#mainThreadWorkerMessageHandler) {\n        return this.#mainThreadWorkerMessageHandler;\n      }\n      const worker = await import(\n      /*webpackIgnore: true*/\n      /*@vite-ignore*/\n      this.workerSrc);\n      return worker.WorkerMessageHandler;\n    };\n    return shadow(this, \"_setupFakeWorkerGlobal\", loader());\n  }\n}\nclass WorkerTransport {\n  downloadInfoCapability = Promise.withResolvers();\n  #fullReader = null;\n  #methodPromises = new Map();\n  #networkStream = null;\n  #pageCache = new Map();\n  #pagePromises = new Map();\n  #pageRefCache = new Map();\n  #passwordCapability = null;\n  constructor(messageHandler, loadingTask, networkStream, params, factory, pagesMapper) {\n    this.messageHandler = messageHandler;\n    this.loadingTask = loadingTask;\n    this.#networkStream = networkStream;\n    this.commonObjs = new PDFObjects();\n    this.fontLoader = new FontLoader({\n      ownerDocument: params.ownerDocument,\n      styleElement: params.styleElement\n    });\n    this.enableHWA = params.enableHWA;\n    this.loadingParams = params.loadingParams;\n    this._params = params;\n    this.canvasFactory = factory.canvasFactory;\n    this.filterFactory = factory.filterFactory;\n    this.binaryDataFactory = factory.binaryDataFactory;\n    this.pagesMapper = pagesMapper;\n    this.destroyed = false;\n    this.destroyCapability = null;\n    this.setupMessageHandler();\n  }\n  updatePage(page) {\n    const {\n      _pageIndex\n    } = page;\n    this.#pageCache.set(_pageIndex, page);\n    this.#pagePromises.set(_pageIndex, Promise.resolve(page));\n  }\n  #cacheSimpleMethod(name, data = null) {\n    return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, data));\n  }\n  #onProgress({\n    loaded,\n    total\n  }) {\n    this.loadingTask.onProgress?.({\n      loaded,\n      total,\n      percent: total ? MathClamp(Math.round(loaded / total * 100), 0, 100) : NaN\n    });\n  }\n  get annotationStorage() {\n    return shadow(this, \"annotationStorage\", new AnnotationStorage());\n  }\n  getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) {\n    let renderingIntent = RenderingIntentFlag.DISPLAY;\n    let annotationStorageSerializable = SerializableEmpty;\n    switch (intent) {\n      case \"any\":\n        renderingIntent = RenderingIntentFlag.ANY;\n        break;\n      case \"display\":\n        break;\n      case \"print\":\n        renderingIntent = RenderingIntentFlag.PRINT;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid intent: ${intent}`);\n    }\n    const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;\n    switch (annotationMode) {\n      case AnnotationMode.DISABLE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE;\n        break;\n      case AnnotationMode.ENABLE:\n        break;\n      case AnnotationMode.ENABLE_FORMS:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS;\n        break;\n      case AnnotationMode.ENABLE_STORAGE:\n        renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE;\n        annotationStorageSerializable = annotationStorage.serializable;\n        break;\n      default:\n        warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);\n    }\n    if (isEditing) {\n      renderingIntent += RenderingIntentFlag.IS_EDITING;\n    }\n    if (isOpList) {\n      renderingIntent += RenderingIntentFlag.OPLIST;\n    }\n    const {\n      ids: modifiedIds,\n      hash: modifiedIdsHash\n    } = annotationStorage.modifiedIds;\n    const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash];\n    return {\n      renderingIntent,\n      cacheKey: cacheKeyBuf.join(\"_\"),\n      annotationStorageSerializable,\n      modifiedIds\n    };\n  }\n  destroy() {\n    if (this.destroyCapability) {\n      return this.destroyCapability.promise;\n    }\n    this.destroyed = true;\n    this.destroyCapability = Promise.withResolvers();\n    this.#passwordCapability?.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n    const waitOn = [];\n    for (const page of this.#pageCache.values()) {\n      waitOn.push(page._destroy());\n    }\n    this.#pageCache.clear();\n    this.#pagePromises.clear();\n    this.#pageRefCache.clear();\n    if (Object.hasOwn(this, \"annotationStorage\")) {\n      this.annotationStorage.resetModified();\n    }\n    const terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n    waitOn.push(terminated);\n    Promise.all(waitOn).then(() => {\n      this.commonObjs.clear();\n      this.fontLoader.clear();\n      this.#methodPromises.clear();\n      this.filterFactory.destroy();\n      TextLayer.cleanup();\n      this.#networkStream?.cancelAllRequests(new AbortException(\"Worker was terminated.\"));\n      this.messageHandler?.destroy();\n      this.messageHandler = null;\n      this.destroyCapability.resolve();\n    }, this.destroyCapability.reject);\n    return this.destroyCapability.promise;\n  }\n  setupMessageHandler() {\n    const {\n      messageHandler,\n      loadingTask\n    } = this;\n    messageHandler.on(\"GetReader\", (data, sink) => {\n      assert(this.#networkStream, \"GetReader - no `BasePDFStream` instance available.\");\n      this.#fullReader = this.#networkStream.getFullReader();\n      this.#fullReader.onProgress = evt => this.#onProgress(evt);\n      sink.onPull = () => {\n        this.#fullReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        this.#fullReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"ReaderHeadersReady\", async data => {\n      await this.#fullReader.headersReady;\n      const {\n        isStreamingSupported,\n        isRangeSupported,\n        contentLength\n      } = this.#fullReader;\n      if (isStreamingSupported && isRangeSupported) {\n        this.#fullReader.onProgress = null;\n      }\n      return {\n        isStreamingSupported,\n        isRangeSupported,\n        contentLength\n      };\n    });\n    messageHandler.on(\"GetRangeReader\", (data, sink) => {\n      assert(this.#networkStream, \"GetRangeReader - no `BasePDFStream` instance available.\");\n      const rangeReader = this.#networkStream.getRangeReader(data.begin, data.end);\n      if (!rangeReader) {\n        sink.close();\n        return;\n      }\n      sink.onPull = () => {\n        rangeReader.read().then(function ({\n          value,\n          done\n        }) {\n          if (done) {\n            sink.close();\n            return;\n          }\n          assert(value instanceof ArrayBuffer, \"GetRangeReader - expected an ArrayBuffer.\");\n          sink.enqueue(new Uint8Array(value), 1, [value]);\n        }).catch(reason => {\n          sink.error(reason);\n        });\n      };\n      sink.onCancel = reason => {\n        rangeReader.cancel(reason);\n        sink.ready.catch(readyReason => {\n          if (this.destroyed) {\n            return;\n          }\n          throw readyReason;\n        });\n      };\n    });\n    messageHandler.on(\"GetDoc\", ({\n      pdfInfo\n    }) => {\n      this.pagesMapper.pagesNumber = pdfInfo.numPages;\n      this._numPages = pdfInfo.numPages;\n      this._htmlForXfa = pdfInfo.htmlForXfa;\n      delete pdfInfo.htmlForXfa;\n      loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));\n    });\n    messageHandler.on(\"DocException\", ex => {\n      loadingTask._capability.reject(wrapReason(ex));\n    });\n    messageHandler.on(\"PasswordRequest\", ex => {\n      this.#passwordCapability = Promise.withResolvers();\n      try {\n        if (!loadingTask.onPassword) {\n          throw wrapReason(ex);\n        }\n        const updatePassword = password => {\n          if (password instanceof Error) {\n            this.#passwordCapability.reject(password);\n          } else {\n            this.#passwordCapability.resolve({\n              password\n            });\n          }\n        };\n        loadingTask.onPassword(updatePassword, ex.code);\n      } catch (err) {\n        this.#passwordCapability.reject(err);\n      }\n      return this.#passwordCapability.promise;\n    });\n    messageHandler.on(\"DataLoaded\", data => {\n      this.#onProgress({\n        loaded: data.length,\n        total: data.length\n      });\n      this.downloadInfoCapability.resolve(data);\n    });\n    messageHandler.on(\"StartRenderPage\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      const page = this.#pageCache.get(data.pageIndex);\n      page._startRenderPage(data.transparency, data.cacheKey);\n    });\n    messageHandler.on(\"commonobj\", ([id, type, exportedData]) => {\n      if (this.destroyed) {\n        return null;\n      }\n      if (this.commonObjs.has(id)) {\n        return null;\n      }\n      switch (type) {\n        case \"Font\":\n          if (\"error\" in exportedData) {\n            const exportedError = exportedData.error;\n            warn(`Error during font loading: ${exportedError}`);\n            this.commonObjs.resolve(id, exportedError);\n            break;\n          }\n          const fontData = new FontInfo(exportedData);\n          const inspectFont = this._params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;\n          const font = new FontFaceObject(fontData, inspectFont, exportedData.charProcOperatorList, exportedData.extra);\n          this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise(\"FontFallback\", {\n            id\n          })).finally(() => {\n            if (!font.fontExtraProperties) {\n              font.clearData();\n            }\n            this.commonObjs.resolve(id, font);\n          });\n          break;\n        case \"CopyLocalImage\":\n          const {\n            imageRef\n          } = exportedData;\n          assert(imageRef, \"The imageRef must be defined.\");\n          for (const pageProxy of this.#pageCache.values()) {\n            for (const [, data] of pageProxy.objs) {\n              if (data?.ref !== imageRef) {\n                continue;\n              }\n              if (!data.dataLen) {\n                return null;\n              }\n              const copy = structuredClone(data);\n              this.commonObjs.resolve(id, copy);\n              return data.dataLen;\n            }\n          }\n          break;\n        case \"FontPath\":\n          this.commonObjs.resolve(id, new FontPathInfo(exportedData));\n          break;\n        case \"Image\":\n          this.commonObjs.resolve(id, exportedData);\n          break;\n        case \"Pattern\":\n          const pattern = new PatternInfo(exportedData);\n          this.commonObjs.resolve(id, pattern.getIR());\n          break;\n        default:\n          throw new Error(`Got unknown common object type ${type}`);\n      }\n      return null;\n    });\n    messageHandler.on(\"obj\", ([id, pageIndex, type, imageData]) => {\n      if (this.destroyed) {\n        return;\n      }\n      const pageProxy = this.#pageCache.get(pageIndex);\n      if (pageProxy.objs.has(id)) {\n        return;\n      }\n      if (pageProxy._intentStates.size === 0) {\n        imageData?.bitmap?.close();\n        return;\n      }\n      switch (type) {\n        case \"Image\":\n        case \"Pattern\":\n          pageProxy.objs.resolve(id, imageData);\n          break;\n        default:\n          throw new Error(`Got unknown object type ${type}`);\n      }\n    });\n    messageHandler.on(\"DocProgress\", data => {\n      if (this.destroyed) {\n        return;\n      }\n      this.#onProgress(data);\n    });\n    messageHandler.on(\"FetchBinaryData\", async data => {\n      if (this.destroyed) {\n        throw new Error(\"Worker was destroyed.\");\n      }\n      if (!this.binaryDataFactory) {\n        throw new Error(\"`BinaryDataFactory` not initialized, see the `useWorkerFetch` parameter.\");\n      }\n      return this.binaryDataFactory.fetch(data);\n    });\n  }\n  getData() {\n    return this.messageHandler.sendWithPromise(\"GetData\", null);\n  }\n  saveDocument() {\n    if (this.annotationStorage.size <= 0) {\n      warn(\"saveDocument called while `annotationStorage` is empty, \" + \"please use the getData-method instead.\");\n    }\n    const {\n      map,\n      transfer\n    } = this.annotationStorage.serializable;\n    return this.messageHandler.sendWithPromise(\"SaveDocument\", {\n      isPureXfa: !!this._htmlForXfa,\n      numPages: this._numPages,\n      annotationStorage: map,\n      filename: this.#fullReader?.filename ?? null\n    }, transfer).finally(() => {\n      this.annotationStorage.resetModified();\n    });\n  }\n  extractPages(pageInfos) {\n    const params = {\n      pageInfos\n    };\n    let transfer;\n    const ImageBitmapCtor = globalThis.ImageBitmap;\n    if (typeof ImageBitmapCtor === \"function\") {\n      const infos = Array.isArray(pageInfos) ? pageInfos : [pageInfos];\n      for (const pageInfo of infos) {\n        if (pageInfo?.image instanceof ImageBitmapCtor) {\n          (transfer ||= []).push(pageInfo.image);\n        }\n      }\n    }\n    if (this.annotationStorage.size > 0) {\n      const serialized = this.annotationStorage.serializable;\n      let {\n        map\n      } = serialized;\n      if (serialized.transfer?.length) {\n        if (transfer) {\n          transfer.push(...serialized.transfer);\n        } else {\n          transfer = serialized.transfer;\n        }\n      }\n      const mapping = this.pagesMapper.getMapping();\n      if (mapping) {\n        const remapped = new Map();\n        for (const [k, v] of map) {\n          if (v?.pageIndex !== undefined && v.pageIndex >= 0 && v.pageIndex < mapping.length) {\n            const sourceIdx = mapping[v.pageIndex] - 1;\n            if (sourceIdx !== v.pageIndex) {\n              remapped.set(k, {\n                ...v,\n                pageIndex: sourceIdx\n              });\n              continue;\n            }\n          }\n          remapped.set(k, v);\n        }\n        map = remapped;\n      }\n      params.annotationStorage = map;\n    }\n    return this.messageHandler.sendWithPromise(\"ExtractPages\", params, transfer).finally(() => {\n      this.annotationStorage.resetModified();\n    });\n  }\n  getPage(pageNumber) {\n    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.pagesMapper.pagesNumber) {\n      return Promise.reject(new Error(\"Invalid page request.\"));\n    }\n    const pageIndex = pageNumber - 1;\n    const newPageIndex = this.pagesMapper.getPageId(pageNumber) - 1;\n    const cachedPromise = this.#pagePromises.get(pageIndex);\n    if (cachedPromise) {\n      return cachedPromise;\n    }\n    const promise = this.messageHandler.sendWithPromise(\"GetPage\", {\n      pageIndex: newPageIndex\n    }).then(pageInfo => {\n      if (this.destroyed) {\n        throw new Error(\"Transport destroyed\");\n      }\n      if (pageInfo.refStr) {\n        this.#pageRefCache.set(pageInfo.refStr, newPageIndex);\n      }\n      const page = new PDFPageProxy(pageIndex, pageInfo, this, this.pagesMapper, this._params.pdfBug);\n      this.#pageCache.set(pageIndex, page);\n      return page;\n    });\n    this.#pagePromises.set(pageIndex, promise);\n    return promise;\n  }\n  async getPageIndex(ref) {\n    if (!isRefProxy(ref)) {\n      throw new Error(\"Invalid pageIndex request.\");\n    }\n    const index = await this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n      num: ref.num,\n      gen: ref.gen\n    });\n    const pageNumber = this.pagesMapper.getPageNumber(index + 1);\n    if (pageNumber === 0) {\n      throw new Error(\"GetPageIndex: page has been removed.\");\n    }\n    return pageNumber - 1;\n  }\n  getAnnotations(pageIndex, intent) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1,\n      intent\n    });\n  }\n  getFieldObjects() {\n    return this.#cacheSimpleMethod(\"GetFieldObjects\");\n  }\n  getSignatures() {\n    return this.#cacheSimpleMethod(\"GetSignatures\");\n  }\n  getSignatureData(id) {\n    return this.messageHandler.sendWithPromise(\"GetSignatureData\", id);\n  }\n  hasJSActions() {\n    return this.#cacheSimpleMethod(\"HasJSActions\");\n  }\n  getCalculationOrderIds() {\n    return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n  }\n  getDestinations() {\n    return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n  }\n  getDestination(id) {\n    if (typeof id !== \"string\") {\n      return Promise.reject(new Error(\"Invalid destination request.\"));\n    }\n    return this.messageHandler.sendWithPromise(\"GetDestination\", {\n      id\n    });\n  }\n  getPageLabels() {\n    return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n  }\n  getPageLayout() {\n    return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n  }\n  getPageMode() {\n    return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n  }\n  getViewerPreferences() {\n    return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n  }\n  getOpenAction() {\n    return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n  }\n  getAttachments() {\n    return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n  }\n  getAttachmentContent(id) {\n    return this.messageHandler.sendWithPromise(\"GetAttachmentContent\", id);\n  }\n  getAnnotationsByType(types, pageIndexesToSkip) {\n    return this.messageHandler.sendWithPromise(\"GetAnnotationsByType\", {\n      types,\n      pageIndexesToSkip\n    });\n  }\n  getDocJSActions() {\n    return this.#cacheSimpleMethod(\"GetDocJSActions\");\n  }\n  getPageJSActions(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1\n    });\n  }\n  getStructTree(pageIndex) {\n    return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n      pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1\n    });\n  }\n  getOutline() {\n    return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n  }\n  getOptionalContentConfig(renderingIntent) {\n    return this.#cacheSimpleMethod(\"GetOptionalContentConfig\").then(data => new OptionalContentConfig(data, renderingIntent));\n  }\n  getPermissions() {\n    return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n  }\n  getMetadata() {\n    const name = \"GetMetadata\";\n    return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, null).then(results => ({\n      info: results[0],\n      metadata: results[1] ? new Metadata(results[1]) : null,\n      contentDispositionFilename: this.#fullReader?.filename ?? null,\n      contentLength: this.#fullReader?.contentLength ?? null,\n      hasStructTree: results[2]\n    })));\n  }\n  getMarkInfo() {\n    return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n  }\n  getRawData(data) {\n    return this.messageHandler.sendWithPromise(\"GetRawData\", data);\n  }\n  async startCleanup(keepLoadedFonts = false) {\n    if (this.destroyed) {\n      return;\n    }\n    await this.messageHandler.sendWithPromise(\"Cleanup\", null);\n    for (const page of this.#pageCache.values()) {\n      const cleanupSuccessful = page.cleanup();\n      if (!cleanupSuccessful) {\n        throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);\n      }\n    }\n    this.commonObjs.clear();\n    if (!keepLoadedFonts) {\n      this.fontLoader.clear();\n    }\n    this.#methodPromises.clear();\n    this.filterFactory.destroy(true);\n    TextLayer.cleanup();\n  }\n  cachedPageNumber(ref) {\n    if (!isRefProxy(ref)) {\n      return null;\n    }\n    const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;\n    const pageIndex = this.#pageRefCache.get(refStr);\n    if (pageIndex >= 0) {\n      const pageNumber = this.pagesMapper.getPageNumber(pageIndex + 1);\n      if (pageNumber !== 0) {\n        return pageNumber;\n      }\n    }\n    return null;\n  }\n}\nclass RenderTask {\n  _internalRenderTask = null;\n  onContinue = null;\n  onError = null;\n  constructor(internalRenderTask) {\n    this._internalRenderTask = internalRenderTask;\n  }\n  get promise() {\n    return this._internalRenderTask.capability.promise;\n  }\n  cancel(extraDelay = 0) {\n    this._internalRenderTask.cancel(null, extraDelay);\n  }\n  get separateAnnots() {\n    const {\n      separateAnnots\n    } = this._internalRenderTask.operatorList;\n    if (!separateAnnots) {\n      return false;\n    }\n    const {\n      annotationCanvasMap\n    } = this._internalRenderTask;\n    return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;\n  }\n  get imageCoordinates() {\n    return this._internalRenderTask.imageCoordinates || null;\n  }\n}\nclass InternalRenderTask {\n  #rAF = null;\n  static #canvasInUse = new WeakSet();\n  constructor({\n    callback,\n    params,\n    objs,\n    commonObjs,\n    annotationCanvasMap,\n    operatorList,\n    pageIndex,\n    canvasFactory,\n    filterFactory,\n    useRequestAnimationFrame = false,\n    pdfBug = false,\n    pageColors = null,\n    enableHWA = false,\n    operationsFilter = null\n  }) {\n    this.callback = callback;\n    this.params = params;\n    this.objs = objs;\n    this.commonObjs = commonObjs;\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.operatorListIdx = null;\n    this.operatorList = operatorList;\n    this._pageIndex = pageIndex;\n    this.canvasFactory = canvasFactory;\n    this.filterFactory = filterFactory;\n    this._pdfBug = pdfBug;\n    this.pageColors = pageColors;\n    this.running = false;\n    this.graphicsReadyCallback = null;\n    this.graphicsReady = false;\n    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\n    this.cancelled = false;\n    this.capability = Promise.withResolvers();\n    this.task = new RenderTask(this);\n    this._cancelBound = this.cancel.bind(this);\n    this._continueBound = this._continue.bind(this);\n    this._scheduleNextBound = this._scheduleNext.bind(this);\n    this._nextBound = this._next.bind(this);\n    this._canvas = params.canvas;\n    this._canvasContext = params.canvas ? null : params.canvasContext;\n    this._enableHWA = enableHWA;\n    this._dependencyTracker = params.dependencyTracker;\n    this._imagesTracker = params.imagesTracker;\n    this._operationsFilter = operationsFilter;\n  }\n  get completed() {\n    return this.capability.promise.catch(function () {});\n  }\n  initializeGraphics({\n    transparency = false,\n    optionalContentConfig\n  }) {\n    if (this.cancelled) {\n      return;\n    }\n    if (this._canvas) {\n      if (InternalRenderTask.#canvasInUse.has(this._canvas)) {\n        throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\n      }\n      InternalRenderTask.#canvasInUse.add(this._canvas);\n    }\n    if (this._pdfBug && globalThis.StepperManager?.enabled) {\n      this.stepper = globalThis.StepperManager.create(this._pageIndex);\n      this.stepper.init(this.operatorList);\n      this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n    }\n    const {\n      viewport,\n      transform,\n      background,\n      dependencyTracker,\n      imagesTracker\n    } = this.params;\n    const canvasContext = this._canvasContext || this._canvas.getContext(\"2d\", {\n      alpha: false,\n      willReadFrequently: !this._enableHWA\n    });\n    this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n      optionalContentConfig\n    }, this.annotationCanvasMap, this.pageColors, dependencyTracker, imagesTracker);\n    this.gfx.beginDrawing({\n      transform,\n      viewport,\n      transparency,\n      background\n    });\n    this.operatorListIdx = 0;\n    this.graphicsReady = true;\n    this.graphicsReadyCallback?.();\n  }\n  cancel(error = null, extraDelay = 0) {\n    this.running = false;\n    this.cancelled = true;\n    this.gfx?.endDrawing();\n    if (this.#rAF) {\n      window.cancelAnimationFrame(this.#rAF);\n      this.#rAF = null;\n    }\n    InternalRenderTask.#canvasInUse.delete(this._canvas);\n    error ||= new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay);\n    this.callback(error);\n    this.task.onError?.(error);\n  }\n  operatorListChanged() {\n    if (!this.graphicsReady) {\n      this.graphicsReadyCallback ||= this._continueBound;\n      return;\n    }\n    this.gfx.dependencyTracker?.growOperationsCount(this.operatorList.fnArray.length);\n    this.stepper?.updateOperatorList(this.operatorList);\n    if (this.running) {\n      return;\n    }\n    this._continue();\n  }\n  _continue() {\n    this.running = true;\n    if (this.cancelled) {\n      return;\n    }\n    if (this.task.onContinue) {\n      this.task.onContinue(this._scheduleNextBound);\n    } else {\n      this._scheduleNext();\n    }\n  }\n  _scheduleNext() {\n    if (this._useRequestAnimationFrame) {\n      this.#rAF = window.requestAnimationFrame(() => {\n        this.#rAF = null;\n        this._nextBound().catch(this._cancelBound);\n      });\n    } else {\n      Promise.resolve().then(this._nextBound).catch(this._cancelBound);\n    }\n  }\n  async _next() {\n    if (this.cancelled) {\n      return;\n    }\n    this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper, this._operationsFilter);\n    if (this.operatorListIdx === this.operatorList.argsArray.length) {\n      this.running = false;\n      if (this.operatorList.lastChunk) {\n        this.gfx.endDrawing();\n        InternalRenderTask.#canvasInUse.delete(this._canvas);\n        this.callback();\n      }\n    }\n  }\n}\nconst version = \"6.2.108\";\nconst build = \"0365cbde0\";\n\n;// ./src/display/editor/color_picker.js\n\n\n\nclass ColorPicker {\n  #button = null;\n  #buttonSwatch = null;\n  #defaultColor;\n  #dropdown = null;\n  #dropdownWasFromKeyboard = false;\n  #isMainColorPicker = false;\n  #editor = null;\n  #eventBus;\n  #openDropdownAC = null;\n  #uiManager = null;\n  static #l10nColor = null;\n  static get _keyboardManager() {\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"Escape\"], ColorPicker.prototype._hideDropdownFromKeyboard], [[\"Space\"], ColorPicker.prototype._colorSelectFromKeyboard], [[\"ArrowDown\", \"ArrowRight\"], ColorPicker.prototype._moveToNext], [[\"ArrowUp\", \"ArrowLeft\"], ColorPicker.prototype._moveToPrevious], [[\"Home\"], ColorPicker.prototype._moveToBeginning], [[\"End\"], ColorPicker.prototype._moveToEnd]]));\n  }\n  constructor({\n    editor = null,\n    uiManager = null\n  }) {\n    if (editor) {\n      this.#isMainColorPicker = false;\n      this.#editor = editor;\n    } else {\n      this.#isMainColorPicker = true;\n    }\n    this.#uiManager = editor?._uiManager || uiManager;\n    this.#eventBus = this.#uiManager._eventBus;\n    this.#defaultColor = editor?.color?.toUpperCase() || this.#uiManager?.highlightColors.values().next().value || \"#FFFF98\";\n    ColorPicker.#l10nColor ||= Object.freeze({\n      blue: \"pdfjs-editor-colorpicker-blue\",\n      green: \"pdfjs-editor-colorpicker-green\",\n      pink: \"pdfjs-editor-colorpicker-pink\",\n      red: \"pdfjs-editor-colorpicker-red\",\n      yellow: \"pdfjs-editor-colorpicker-yellow\"\n    });\n  }\n  renderButton() {\n    const button = this.#button = document.createElement(\"button\");\n    button.className = \"colorPicker\";\n    button.tabIndex = \"0\";\n    button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-button\");\n    button.ariaHasPopup = \"true\";\n    if (this.#editor) {\n      button.ariaControls = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    const signal = this.#uiManager._signal;\n    button.addEventListener(\"click\", this.#openDropdown.bind(this), {\n      signal\n    });\n    button.addEventListener(\"keydown\", this.#keyDown.bind(this), {\n      signal\n    });\n    const swatch = this.#buttonSwatch = document.createElement(\"span\");\n    swatch.className = \"swatch\";\n    swatch.ariaHidden = \"true\";\n    swatch.style.backgroundColor = this.#defaultColor;\n    button.append(swatch);\n    return button;\n  }\n  renderMainDropdown() {\n    const dropdown = this.#dropdown = this.#getDropdownRoot();\n    dropdown.ariaOrientation = \"horizontal\";\n    dropdown.ariaLabelledBy = \"highlightColorPickerLabel\";\n    return dropdown;\n  }\n  #getDropdownRoot() {\n    const div = document.createElement(\"div\");\n    const signal = this.#uiManager._signal;\n    div.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    div.className = \"dropdown\";\n    div.role = \"listbox\";\n    div.ariaMultiSelectable = \"false\";\n    div.ariaOrientation = \"vertical\";\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-dropdown\");\n    if (this.#editor) {\n      div.id = `${this.#editor.id}_colorpicker_dropdown`;\n    }\n    for (const [name, color] of this.#uiManager.highlightColors) {\n      const button = document.createElement(\"button\");\n      button.tabIndex = \"0\";\n      button.role = \"option\";\n      button.setAttribute(\"data-color\", color);\n      button.title = name;\n      button.setAttribute(\"data-l10n-id\", ColorPicker.#l10nColor[name]);\n      const swatch = document.createElement(\"span\");\n      button.append(swatch);\n      swatch.className = \"swatch\";\n      swatch.style.backgroundColor = color;\n      button.ariaSelected = color === this.#defaultColor;\n      button.addEventListener(\"click\", this.#colorSelect.bind(this, color), {\n        signal\n      });\n      div.append(button);\n    }\n    div.addEventListener(\"keydown\", this.#keyDown.bind(this), {\n      signal\n    });\n    return div;\n  }\n  #colorSelect(color, event) {\n    event.stopPropagation();\n    this.#eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      value: color\n    });\n    this.updateColor(color);\n  }\n  _colorSelectFromKeyboard(event) {\n    if (event.target === this.#button) {\n      this.#openDropdown(event);\n      return;\n    }\n    const color = event.target.getAttribute(\"data-color\");\n    if (!color) {\n      return;\n    }\n    this.#colorSelect(color, event);\n  }\n  _moveToNext(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    if (event.target === this.#button) {\n      this.#dropdown.firstElementChild?.focus();\n      return;\n    }\n    event.target.nextSibling?.focus();\n  }\n  _moveToPrevious(event) {\n    if (event.target === this.#dropdown?.firstElementChild || event.target === this.#button) {\n      if (this.#isDropdownVisible) {\n        this._hideDropdownFromKeyboard();\n      }\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n    }\n    event.target.previousSibling?.focus();\n  }\n  _moveToBeginning(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.firstElementChild?.focus();\n  }\n  _moveToEnd(event) {\n    if (!this.#isDropdownVisible) {\n      this.#openDropdown(event);\n      return;\n    }\n    this.#dropdown.lastElementChild?.focus();\n  }\n  #keyDown(event) {\n    ColorPicker._keyboardManager.exec(this, event);\n  }\n  #openDropdown(event) {\n    if (this.#isDropdownVisible) {\n      this.hideDropdown();\n      return;\n    }\n    this.#dropdownWasFromKeyboard = event.detail === 0;\n    if (!this.#openDropdownAC) {\n      this.#openDropdownAC = new AbortController();\n      window.addEventListener(\"pointerdown\", this.#pointerDown.bind(this), {\n        signal: this.#uiManager.combinedSignal(this.#openDropdownAC)\n      });\n    }\n    this.#button.ariaExpanded = \"true\";\n    if (this.#dropdown) {\n      this.#dropdown.classList.remove(\"hidden\");\n      return;\n    }\n    const root = this.#dropdown = this.#getDropdownRoot();\n    this.#button.append(root);\n  }\n  #pointerDown(event) {\n    if (this.#dropdown?.contains(event.target)) {\n      return;\n    }\n    this.hideDropdown();\n  }\n  hideDropdown() {\n    this.#dropdown?.classList.add(\"hidden\");\n    this.#button.ariaExpanded = \"false\";\n    this.#openDropdownAC?.abort();\n    this.#openDropdownAC = null;\n  }\n  get #isDropdownVisible() {\n    return this.#dropdown && !this.#dropdown.classList.contains(\"hidden\");\n  }\n  _hideDropdownFromKeyboard() {\n    if (this.#isMainColorPicker) {\n      return;\n    }\n    if (!this.#isDropdownVisible) {\n      this.#editor?.unselect();\n      return;\n    }\n    this.hideDropdown();\n    this.#button.focus({\n      preventScroll: true,\n      focusVisible: this.#dropdownWasFromKeyboard\n    });\n  }\n  updateColor(color) {\n    if (this.#buttonSwatch) {\n      this.#buttonSwatch.style.backgroundColor = color;\n    }\n    if (!this.#dropdown) {\n      return;\n    }\n    const i = this.#uiManager.highlightColors.values();\n    for (const child of this.#dropdown.children) {\n      child.ariaSelected = i.next().value === color.toUpperCase();\n    }\n  }\n  destroy() {\n    this.#button?.remove();\n    this.#button = null;\n    this.#buttonSwatch = null;\n    this.#dropdown?.remove();\n    this.#dropdown = null;\n  }\n}\nclass BasicColorPicker {\n  #input = null;\n  #hasAlpha = false;\n  #editor = null;\n  #uiManager = null;\n  static #l10nColor = null;\n  constructor(editor) {\n    this.#editor = editor;\n    this.#uiManager = editor._uiManager;\n    BasicColorPicker.#l10nColor ||= Object.freeze({\n      freetext: \"pdfjs-editor-color-picker-free-text-input\",\n      ink: \"pdfjs-editor-color-picker-ink-input\"\n    });\n  }\n  renderButton() {\n    if (this.#input) {\n      return this.#input;\n    }\n    const {\n      editorType,\n      colorType,\n      colorAndOpacityType,\n      opacityType,\n      color,\n      opacity\n    } = this.#editor;\n    const hasAlpha = this.#hasAlpha = FeatureTest.isAlphaColorInputSupported && opacityType !== undefined;\n    const input = this.#input = document.createElement(\"input\");\n    input.type = \"color\";\n    if (hasAlpha) {\n      input.setAttribute(\"alpha\", \"\");\n      const alphaHex = Util.hexNums[Math.round((opacity ?? 1) * 255)];\n      input.value = (color || \"#000000\") + alphaHex;\n    } else {\n      input.value = color || \"#000000\";\n    }\n    input.className = \"basicColorPicker\";\n    input.tabIndex = 0;\n    input.setAttribute(\"data-l10n-id\", BasicColorPicker.#l10nColor[editorType]);\n    input.addEventListener(\"input\", () => {\n      if (hasAlpha) {\n        const rgba = getRGBA(input.value);\n        if (!rgba) {\n          return;\n        }\n        const [r, g, b, op] = rgba;\n        const hex = Util.makeHexColor(r, g, b);\n        if (colorAndOpacityType !== undefined) {\n          this.#uiManager.updateParams(colorAndOpacityType, {\n            color: hex,\n            opacity: op\n          });\n        } else {\n          this.#uiManager.updateParams(colorType, hex);\n          this.#uiManager.updateParams(opacityType, op);\n        }\n      } else {\n        this.#uiManager.updateParams(colorType, input.value);\n      }\n    }, {\n      signal: this.#uiManager._signal\n    });\n    return input;\n  }\n  update(value) {\n    if (!this.#input) {\n      return;\n    }\n    if (this.#hasAlpha) {\n      const alphaHex = Util.hexNums[Math.round(this.#editor.opacity * 255)];\n      this.#input.value = value + alphaHex;\n    } else {\n      this.#input.value = value;\n    }\n  }\n  updateOpacity(value) {\n    if (!this.#input || !this.#hasAlpha) {\n      return;\n    }\n    const alphaHex = Util.hexNums[Math.round(value * 255)];\n    this.#input.value = this.#editor.color + alphaHex;\n  }\n  destroy() {\n    this.#input?.remove();\n    this.#input = null;\n  }\n  hideDropdown() {}\n}\n\n;// ./src/shared/scripting_utils.js\n\nfunction makeColorComp(n) {\n  return Math.floor(MathClamp(n, 0, 1) * 255).toString(16).padStart(2, \"0\");\n}\nfunction scaleAndClamp(x) {\n  return MathClamp(x, 0, 1) * 255;\n}\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  static G_CMYK([g]) {\n    return [\"CMYK\", 0, 0, 0, 1 - g];\n  }\n  static G_RGB([g]) {\n    return [\"RGB\", g, g, g];\n  }\n  static G_rgb([g]) {\n    g = scaleAndClamp(g);\n    return [g, g, g];\n  }\n  static G_HTML([g]) {\n    const G = makeColorComp(g);\n    return `#${G}${G}${G}`;\n  }\n  static RGB_G([r, g, b]) {\n    return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n  }\n  static RGB_rgb(color) {\n    return color.map(scaleAndClamp);\n  }\n  static RGB_HTML(color) {\n    return `#${color.map(makeColorComp).join(\"\")}`;\n  }\n  static T_HTML() {\n    return \"#00000000\";\n  }\n  static T_rgb() {\n    return [null];\n  }\n  static CMYK_RGB([c, y, m, k]) {\n    return [\"RGB\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\n  }\n  static CMYK_rgb([c, y, m, k]) {\n    return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];\n  }\n  static CMYK_HTML(components) {\n    const rgb = this.CMYK_RGB(components).slice(1);\n    return this.RGB_HTML(rgb);\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}\nconst DateFormats = (/* unused pure expression or super */ null && ([\"m/d\", \"m/d/yy\", \"mm/dd/yy\", \"mm/yy\", \"d-mmm\", \"d-mmm-yy\", \"dd-mmm-yy\", \"yy-mm-dd\", \"mmm-yy\", \"mmmm-yy\", \"mmm d, yyyy\", \"mmmm d, yyyy\", \"m/d/yy h:MM tt\", \"m/d/yy HH:MM\"]));\nconst TimeFormats = (/* unused pure expression or super */ null && ([\"HH:MM\", \"h:MM tt\", \"HH:MM:ss\", \"h:MM:ss tt\"]));\n\n;// ./src/display/svg_factory.js\n\nclass BaseSVGFactory {\n  create(width, height, skipDimensions = false) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid SVG dimensions\");\n    }\n    const svg = this._createSVG(\"svg:svg\");\n    svg.setAttribute(\"version\", \"1.1\");\n    if (!skipDimensions) {\n      svg.setAttribute(\"width\", `${width}px`);\n      svg.setAttribute(\"height\", `${height}px`);\n    }\n    svg.setAttribute(\"preserveAspectRatio\", \"none\");\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n    return svg;\n  }\n  createElement(type) {\n    if (typeof type !== \"string\") {\n      throw new Error(\"Invalid SVG element type\");\n    }\n    return this._createSVG(type);\n  }\n  _createSVG(type) {\n    unreachable(\"Abstract method `_createSVG` called.\");\n  }\n}\nclass DOMSVGFactory extends BaseSVGFactory {\n  _createSVG(type) {\n    return document.createElementNS(SVG_NS, type);\n  }\n}\n\n;// ./src/display/annotation_layer.js\n\n\n\n\n\nconst annotation_layer_DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\nconst TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000;\nclass AnnotationElementFactory {\n  static create(parameters) {\n    const subtype = parameters.data.annotationType;\n    switch (subtype) {\n      case AnnotationType.LINK:\n        return new LinkAnnotationElement(parameters);\n      case AnnotationType.TEXT:\n        return new TextAnnotationElement(parameters);\n      case AnnotationType.WIDGET:\n        const fieldType = parameters.data.fieldType;\n        switch (fieldType) {\n          case \"Tx\":\n            return new TextWidgetAnnotationElement(parameters);\n          case \"Btn\":\n            if (parameters.data.radioButton) {\n              return new RadioButtonWidgetAnnotationElement(parameters);\n            } else if (parameters.data.checkBox) {\n              return new CheckboxWidgetAnnotationElement(parameters);\n            }\n            return new PushButtonWidgetAnnotationElement(parameters);\n          case \"Ch\":\n            return new ChoiceWidgetAnnotationElement(parameters);\n          case \"Sig\":\n            return new SignatureWidgetAnnotationElement(parameters);\n        }\n        return new WidgetAnnotationElement(parameters);\n      case AnnotationType.POPUP:\n        return new PopupAnnotationElement(parameters);\n      case AnnotationType.FREETEXT:\n        return new FreeTextAnnotationElement(parameters);\n      case AnnotationType.LINE:\n        return new LineAnnotationElement(parameters);\n      case AnnotationType.SQUARE:\n        return new SquareAnnotationElement(parameters);\n      case AnnotationType.CIRCLE:\n        return new CircleAnnotationElement(parameters);\n      case AnnotationType.POLYLINE:\n        return new PolylineAnnotationElement(parameters);\n      case AnnotationType.CARET:\n        return new CaretAnnotationElement(parameters);\n      case AnnotationType.INK:\n        return new InkAnnotationElement(parameters);\n      case AnnotationType.POLYGON:\n        return new PolygonAnnotationElement(parameters);\n      case AnnotationType.HIGHLIGHT:\n        return new HighlightAnnotationElement(parameters);\n      case AnnotationType.UNDERLINE:\n        return new UnderlineAnnotationElement(parameters);\n      case AnnotationType.SQUIGGLY:\n        return new SquigglyAnnotationElement(parameters);\n      case AnnotationType.STRIKEOUT:\n        return new StrikeOutAnnotationElement(parameters);\n      case AnnotationType.STAMP:\n        return new StampAnnotationElement(parameters);\n      case AnnotationType.FILEATTACHMENT:\n        return new FileAttachmentAnnotationElement(parameters);\n      case AnnotationType.RICHMEDIA:\n      case AnnotationType.SCREEN:\n      case AnnotationType.SOUND:\n        return new MediaAnnotationElement(parameters);\n      default:\n        return new AnnotationElement(parameters);\n    }\n  }\n}\nclass AnnotationElement {\n  #updates = null;\n  #hasBorder = false;\n  #popupElement = null;\n  constructor(parameters, {\n    isRenderable = false,\n    ignoreBorder = false,\n    createQuadrilaterals = false\n  } = {}) {\n    this.isRenderable = isRenderable;\n    this.data = parameters.data;\n    this.layer = parameters.layer;\n    this.linkService = parameters.linkService;\n    this.downloadManager = parameters.downloadManager;\n    this.imageResourcesPath = parameters.imageResourcesPath;\n    this.renderForms = parameters.renderForms;\n    this.svgFactory = parameters.svgFactory;\n    this.annotationStorage = parameters.annotationStorage;\n    this.enableComment = parameters.enableComment;\n    this.enableScripting = parameters.enableScripting;\n    this.hasJSActions = parameters.hasJSActions;\n    this._fieldObjects = parameters.fieldObjects;\n    this.parent = parameters.parent;\n    this.hasOwnCommentButton = false;\n    if (isRenderable) {\n      this.contentElement = this.container = this._createContainer(ignoreBorder);\n    }\n    if (createQuadrilaterals) {\n      this._createQuadrilaterals();\n    }\n  }\n  static _hasPopupData({\n    contentsObj,\n    richText\n  }) {\n    return !!(contentsObj?.str || richText?.str);\n  }\n  get _isEditable() {\n    return this.data.isEditable;\n  }\n  get hasPopupData() {\n    return AnnotationElement._hasPopupData(this.data) || this.enableComment && !!this.commentText;\n  }\n  get commentData() {\n    const {\n      data\n    } = this;\n    const editor = this.annotationStorage?.getEditor(data.id);\n    if (editor) {\n      return editor.getData();\n    }\n    return data;\n  }\n  get hasCommentButton() {\n    return this.enableComment && this.hasPopupElement;\n  }\n  get commentButtonPosition() {\n    const editor = this.annotationStorage?.getEditor(this.data.id);\n    if (editor) {\n      return editor.commentButtonPositionInPage;\n    }\n    const {\n      quadPoints,\n      inkLists,\n      rect\n    } = this.data;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    if (quadPoints?.length >= 8) {\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        if (quadPoints[i + 1] > maxY) {\n          maxY = quadPoints[i + 1];\n          maxX = quadPoints[i + 2];\n        } else if (quadPoints[i + 1] === maxY) {\n          maxX = Math.max(maxX, quadPoints[i + 2]);\n        }\n      }\n      return [maxX, maxY];\n    }\n    if (inkLists?.length >= 1) {\n      for (const inkList of inkLists) {\n        for (let i = 0, ii = inkList.length; i < ii; i += 2) {\n          if (inkList[i + 1] > maxY) {\n            maxY = inkList[i + 1];\n            maxX = inkList[i];\n          } else if (inkList[i + 1] === maxY) {\n            maxX = Math.max(maxX, inkList[i]);\n          }\n        }\n      }\n      if (maxX !== Infinity) {\n        return [maxX, maxY];\n      }\n    }\n    if (rect) {\n      return [rect[2], rect[3]];\n    }\n    return null;\n  }\n  _normalizePoint(point) {\n    const {\n      page: {\n        view\n      },\n      viewport: {\n        rawDims: {\n          pageWidth,\n          pageHeight,\n          pageX,\n          pageY\n        }\n      }\n    } = this.parent;\n    point[1] = view[3] - point[1] + view[1];\n    point[0] = 100 * (point[0] - pageX) / pageWidth;\n    point[1] = 100 * (point[1] - pageY) / pageHeight;\n    return point;\n  }\n  get commentText() {\n    const {\n      data\n    } = this;\n    return this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)?.popup?.contents || data.contentsObj?.str || \"\";\n  }\n  set commentText(text) {\n    const {\n      data\n    } = this;\n    const popup = {\n      deleted: !text,\n      contents: text || \"\"\n    };\n    if (!this.annotationStorage.updateEditor(data.id, {\n      popup\n    })) {\n      this.annotationStorage.setValue(`${AnnotationEditorPrefix}${data.id}`, {\n        id: data.id,\n        annotationType: data.annotationType,\n        page: this.parent.page,\n        popup,\n        popupRef: data.popupRef,\n        modificationDate: new Date()\n      });\n    }\n    if (!text) {\n      this.removePopup();\n    }\n  }\n  removePopup() {\n    (this.#popupElement?.popup || this.popup)?.remove();\n    this.#popupElement = this.popup = null;\n  }\n  updateEdited(params) {\n    if (!this.container) {\n      return;\n    }\n    if (params.rect) {\n      this.#updates ||= {\n        rect: this.data.rect.slice(0)\n      };\n    }\n    const {\n      rect,\n      popup: newPopup\n    } = params;\n    if (rect) {\n      this.#setRectEdited(rect);\n    }\n    let popup = this.#popupElement?.popup || this.popup;\n    if (!popup && newPopup?.text) {\n      this._createPopup(newPopup);\n      popup = this.#popupElement.popup;\n    }\n    if (!popup) {\n      return;\n    }\n    popup.updateEdited(params);\n    if (newPopup?.deleted) {\n      popup.remove();\n      this.#popupElement = null;\n      this.popup = null;\n    }\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    this.#setRectEdited(this.#updates.rect);\n    this.#popupElement?.popup.resetEdited();\n    this.#updates = null;\n  }\n  #setRectEdited(rect) {\n    const {\n      container: {\n        style\n      },\n      data: {\n        rect: currentRect,\n        rotation\n      },\n      parent: {\n        viewport: {\n          rawDims: {\n            pageWidth,\n            pageHeight,\n            pageX,\n            pageY\n          }\n        }\n      }\n    } = this;\n    currentRect?.splice(0, 4, ...rect);\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`;\n    if (rotation === 0) {\n      style.width = `${100 * (rect[2] - rect[0]) / pageWidth}%`;\n      style.height = `${100 * (rect[3] - rect[1]) / pageHeight}%`;\n    } else {\n      this.setRotation(rotation);\n    }\n  }\n  _createContainer(ignoreBorder) {\n    const {\n      data,\n      parent: {\n        page,\n        viewport\n      }\n    } = this;\n    const container = document.createElement(\"section\");\n    container.setAttribute(\"data-annotation-id\", data.id);\n    if (!(this instanceof WidgetAnnotationElement) && !(this instanceof LinkAnnotationElement) && !(this instanceof MediaAnnotationElement)) {\n      container.tabIndex = 0;\n    }\n    const {\n      style\n    } = container;\n    style.zIndex = this.parent.zIndex;\n    this.parent.zIndex += 2;\n    if (data.alternativeText) {\n      container.title = data.alternativeText;\n    }\n    if (data.noRotate) {\n      container.classList.add(\"norotate\");\n    }\n    if (!data.rect || this instanceof PopupAnnotationElement) {\n      const {\n        rotation\n      } = data;\n      if (!data.hasOwnCanvas && rotation !== 0) {\n        this.setRotation(rotation, container);\n      }\n      return container;\n    }\n    const {\n      width,\n      height\n    } = this;\n    if (!ignoreBorder && data.borderStyle.width > 0) {\n      style.borderWidth = `${data.borderStyle.width}px`;\n      const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n      const verticalRadius = data.borderStyle.verticalCornerRadius;\n      if (horizontalRadius > 0 || verticalRadius > 0) {\n        const radius = `calc(${horizontalRadius}px * var(--total-scale-factor)) / calc(${verticalRadius}px * var(--total-scale-factor))`;\n        style.borderRadius = radius;\n      }\n      switch (data.borderStyle.style) {\n        case AnnotationBorderStyleType.SOLID:\n          style.borderStyle = \"solid\";\n          break;\n        case AnnotationBorderStyleType.DASHED:\n          style.borderStyle = \"dashed\";\n          break;\n        case AnnotationBorderStyleType.BEVELED:\n          warn(\"Unimplemented border style: beveled\");\n          break;\n        case AnnotationBorderStyleType.INSET:\n          warn(\"Unimplemented border style: inset\");\n          break;\n        case AnnotationBorderStyleType.UNDERLINE:\n          style.borderBottomStyle = \"solid\";\n          break;\n        default:\n          break;\n      }\n      const borderColor = data.borderColor || null;\n      if (borderColor) {\n        this.#hasBorder = true;\n        style.borderColor = Util.makeHexColor(...borderColor);\n      } else {\n        style.borderWidth = 0;\n      }\n    }\n    const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\n    const {\n      pageWidth,\n      pageHeight,\n      pageX,\n      pageY\n    } = viewport.rawDims;\n    style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;\n    style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;\n    const {\n      rotation\n    } = data;\n    if (data.hasOwnCanvas || rotation === 0) {\n      style.width = `${100 * width / pageWidth}%`;\n      style.height = `${100 * height / pageHeight}%`;\n    } else {\n      this.setRotation(rotation, container);\n    }\n    return container;\n  }\n  setRotation(angle, container = this.container) {\n    if (!this.data.rect) {\n      return;\n    }\n    const {\n      pageWidth,\n      pageHeight\n    } = this.parent.viewport.rawDims;\n    let {\n      width,\n      height\n    } = this;\n    if (angle % 180 !== 0) {\n      [width, height] = [height, width];\n    }\n    container.style.width = `${100 * width / pageWidth}%`;\n    container.style.height = `${100 * height / pageHeight}%`;\n    container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n  }\n  get _commonActions() {\n    const setColor = (jsName, styleName, event) => {\n      const color = event.detail[jsName];\n      const colorType = color[0];\n      const colorArray = color.slice(1);\n      event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray);\n      this.annotationStorage.setValue(this.data.id, {\n        [styleName]: ColorConverters[`${colorType}_rgb`](colorArray)\n      });\n    };\n    return shadow(this, \"_commonActions\", {\n      display: event => {\n        const {\n          display\n        } = event.detail;\n        const hidden = display % 2 === 1;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noView: hidden,\n          noPrint: display === 1 || display === 2\n        });\n      },\n      print: event => {\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: !event.detail.print\n        });\n      },\n      hidden: event => {\n        const {\n          hidden\n        } = event.detail;\n        this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n        this.annotationStorage.setValue(this.data.id, {\n          noPrint: hidden,\n          noView: hidden\n        });\n      },\n      focus: event => {\n        setTimeout(() => event.target.focus({\n          preventScroll: false\n        }), 0);\n      },\n      userName: event => {\n        event.target.title = event.detail.userName;\n      },\n      readonly: event => {\n        event.target.disabled = event.detail.readonly;\n      },\n      required: event => {\n        this._setRequired(event.target, event.detail.required);\n      },\n      bgColor: event => {\n        setColor(\"bgColor\", \"backgroundColor\", event);\n      },\n      fillColor: event => {\n        setColor(\"fillColor\", \"backgroundColor\", event);\n      },\n      fgColor: event => {\n        setColor(\"fgColor\", \"color\", event);\n      },\n      textColor: event => {\n        setColor(\"textColor\", \"color\", event);\n      },\n      borderColor: event => {\n        setColor(\"borderColor\", \"borderColor\", event);\n      },\n      strokeColor: event => {\n        setColor(\"strokeColor\", \"borderColor\", event);\n      },\n      rotation: event => {\n        const angle = event.detail.rotation;\n        this.setRotation(angle);\n        this.annotationStorage.setValue(this.data.id, {\n          rotation: angle\n        });\n      }\n    });\n  }\n  _dispatchEventFromSandbox(actions, jsEvent) {\n    const commonActions = this._commonActions;\n    for (const name of Object.keys(jsEvent.detail)) {\n      const action = actions[name] || commonActions[name];\n      action?.(jsEvent);\n    }\n  }\n  _setDefaultPropertiesFromJS(element) {\n    if (!this.enableScripting) {\n      return;\n    }\n    const storedData = this.annotationStorage.getRawValue(this.data.id);\n    if (!storedData) {\n      return;\n    }\n    const commonActions = this._commonActions;\n    for (const [actionName, detail] of Object.entries(storedData)) {\n      const action = commonActions[actionName];\n      if (action) {\n        const eventProxy = {\n          detail: {\n            [actionName]: detail\n          },\n          target: element\n        };\n        action(eventProxy);\n        delete storedData[actionName];\n      }\n    }\n  }\n  _createQuadrilaterals() {\n    if (!this.container) {\n      return;\n    }\n    const {\n      quadPoints\n    } = this.data;\n    if (!quadPoints) {\n      return;\n    }\n    const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map(x => Math.fround(x));\n    if (quadPoints.length === 8) {\n      const [trX, trY, blX, blY] = quadPoints.subarray(2, 6);\n      if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {\n        return;\n      }\n    }\n    const {\n      style\n    } = this.container;\n    let svgBuffer;\n    if (this.#hasBorder) {\n      const {\n        borderColor,\n        borderWidth\n      } = style;\n      style.borderWidth = 0;\n      svgBuffer = [\"url('data:image/svg+xml;utf8,\", `<svg xmlns=\"${SVG_NS}\" preserveAspectRatio=\"none\" viewBox=\"0 0 1 1\">`, `<g fill=\"transparent\" stroke=\"${borderColor}\" stroke-width=\"${borderWidth}\">`];\n      this.container.classList.add(\"hasBorder\");\n    }\n    const width = rectTrX - rectBlX;\n    const height = rectTrY - rectBlY;\n    const {\n      svgFactory\n    } = this;\n    const svg = svgFactory.createElement(\"svg\");\n    svg.classList.add(\"quadrilateralsContainer\");\n    svg.setAttribute(\"width\", 0);\n    svg.setAttribute(\"height\", 0);\n    svg.role = \"none\";\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const clipPath = svgFactory.createElement(\"clipPath\");\n    const id = `clippath_${this.data.id}`;\n    clipPath.setAttribute(\"id\", id);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    defs.append(clipPath);\n    for (let i = 2, ii = quadPoints.length; i < ii; i += 8) {\n      const trX = quadPoints[i];\n      const trY = quadPoints[i + 1];\n      const blX = quadPoints[i + 2];\n      const blY = quadPoints[i + 3];\n      const rect = svgFactory.createElement(\"rect\");\n      const x = (blX - rectBlX) / width;\n      const y = (rectTrY - trY) / height;\n      const rectWidth = (trX - blX) / width;\n      const rectHeight = (trY - blY) / height;\n      rect.setAttribute(\"x\", x);\n      rect.setAttribute(\"y\", y);\n      rect.setAttribute(\"width\", rectWidth);\n      rect.setAttribute(\"height\", rectHeight);\n      clipPath.append(rect);\n      svgBuffer?.push(`<rect vector-effect=\"non-scaling-stroke\" x=\"${x}\" y=\"${y}\" width=\"${rectWidth}\" height=\"${rectHeight}\"/>`);\n    }\n    if (this.#hasBorder) {\n      svgBuffer.push(`</g></svg>')`);\n      style.backgroundImage = svgBuffer.join(\"\");\n    }\n    this.container.append(svg);\n    this.container.style.clipPath = `url(#${id})`;\n  }\n  _createPopup(popupData = null) {\n    const {\n      data\n    } = this;\n    let contentsObj, modificationDate;\n    if (popupData) {\n      contentsObj = {\n        str: popupData.text\n      };\n      modificationDate = popupData.date;\n    } else {\n      contentsObj = data.contentsObj;\n      modificationDate = data.modificationDate;\n    }\n    this.#popupElement = new PopupAnnotationElement({\n      data: {\n        color: data.color,\n        titleObj: data.titleObj,\n        modificationDate,\n        contentsObj,\n        richText: data.richText,\n        parentRect: data.rect,\n        borderStyle: 0,\n        id: `popup_${data.id}`,\n        rotation: data.rotation,\n        noRotate: true\n      },\n      linkService: this.linkService,\n      parent: this.parent,\n      elements: [this]\n    });\n  }\n  get hasPopupElement() {\n    return !!(this.#popupElement || this.popup || this.data.popupRef);\n  }\n  get extraPopupElement() {\n    return this.#popupElement;\n  }\n  render() {\n    unreachable(\"Abstract method `AnnotationElement.render` called\");\n  }\n  _getElementsByName(name, skipId = null) {\n    const fields = [];\n    if (this._fieldObjects) {\n      const fieldObj = this._fieldObjects[name] || [];\n      for (const {\n        page,\n        id,\n        exportValues\n      } of fieldObj) {\n        if (page === -1) {\n          continue;\n        }\n        if (id === skipId) {\n          continue;\n        }\n        const exportValue = typeof exportValues === \"string\" ? exportValues : null;\n        const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n        if (domElement && !GetElementsByNameSet.has(domElement)) {\n          warn(`_getElementsByName - element not allowed: ${id}`);\n          continue;\n        }\n        fields.push({\n          id,\n          exportValue,\n          domElement\n        });\n      }\n      return fields;\n    }\n    for (const domElement of document.getElementsByName(name)) {\n      const {\n        exportValue\n      } = domElement;\n      const id = domElement.getAttribute(\"data-element-id\");\n      if (id === skipId) {\n        continue;\n      }\n      if (!GetElementsByNameSet.has(domElement)) {\n        continue;\n      }\n      fields.push({\n        id,\n        exportValue,\n        domElement\n      });\n    }\n    return fields;\n  }\n  show() {\n    if (this.container) {\n      this.container.hidden = false;\n    }\n    this.popup?.maybeShow();\n  }\n  hide() {\n    if (this.container) {\n      this.container.hidden = true;\n    }\n    this.popup?.forceHide();\n  }\n  getElementsToTriggerPopup() {\n    return this.container;\n  }\n  addHighlightArea() {\n    const triggers = this.getElementsToTriggerPopup();\n    if (Array.isArray(triggers)) {\n      for (const element of triggers) {\n        element.classList.add(\"highlightArea\");\n      }\n    } else {\n      triggers.classList.add(\"highlightArea\");\n    }\n  }\n  _editOnDoubleClick() {\n    if (!this._isEditable) {\n      return;\n    }\n    const {\n      annotationEditorType: mode,\n      data: {\n        id: editId\n      }\n    } = this;\n    this.container.addEventListener(\"dblclick\", () => {\n      this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n        source: this,\n        mode,\n        editId,\n        mustEnterInEditMode: true\n      });\n    });\n  }\n  updateOC(optionalContentConfig) {\n    if (!this.data.oc || !optionalContentConfig) {\n      return;\n    }\n    const isVisible = optionalContentConfig.isVisible(this.data.oc);\n    if (isVisible) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n  get width() {\n    return this.data.rect[2] - this.data.rect[0];\n  }\n  get height() {\n    return this.data.rect[3] - this.data.rect[1];\n  }\n  _setBackgroundColor(element) {\n    const color = this.data.backgroundColor || null;\n    element.style.backgroundColor = color === null ? \"transparent\" : Util.makeHexColor(...color);\n  }\n}\nclass EditorAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.editor = parameters.editor;\n  }\n  render() {\n    this.container.className = \"editorAnnotation\";\n    return this.container;\n  }\n  createOrUpdatePopup() {\n    const {\n      editor\n    } = this;\n    if (!editor.hasComment) {\n      return;\n    }\n    this._createPopup(editor.comment);\n  }\n  get hasCommentButton() {\n    return this.enableComment && this.editor.hasComment;\n  }\n  get commentButtonPosition() {\n    return this.editor.commentButtonPositionInPage;\n  }\n  get commentText() {\n    return this.editor.comment.text;\n  }\n  set commentText(text) {\n    this.editor.comment = text;\n    if (!text) {\n      this.removePopup();\n    }\n  }\n  get commentData() {\n    return this.editor.getData();\n  }\n  remove() {\n    this.parent.removeAnnotation(this.data.id);\n    this.container.remove();\n    this.container = null;\n    this.removePopup();\n  }\n}\nclass LinkAnnotationElement extends AnnotationElement {\n  constructor(parameters, options = null) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: !!options?.ignoreBorder,\n      createQuadrilaterals: true\n    });\n    this.isTooltipOnly = parameters.data.isTooltipOnly;\n  }\n  render() {\n    const {\n      data,\n      linkService\n    } = this;\n    const link = document.createElement(\"a\");\n    link.setAttribute(\"data-element-id\", data.id);\n    let isBound = false;\n    if (data.url) {\n      linkService.addLinkAttributes(link, data.url, data.newWindow);\n      isBound = true;\n    } else if (data.action) {\n      this._bindNamedAction(link, data.action, data.overlaidText);\n      isBound = true;\n    } else if (data.attachment) {\n      this.#bindAttachment(link, data.attachmentId, data.attachment, data.overlaidText, data.attachmentDest);\n      isBound = true;\n    } else if (data.setOCGState) {\n      this.#bindSetOCGState(link, data.setOCGState, data.overlaidText);\n      isBound = true;\n    } else if (data.dest) {\n      this._bindLink(link, data.dest, data.overlaidText);\n      isBound = true;\n    } else {\n      if (data.actions && (data.actions.Action || data.actions[\"Mouse Up\"] || data.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions) {\n        this._bindJSAction(link, data);\n        isBound = true;\n      }\n      if (data.resetForm) {\n        this._bindResetFormAction(link, data.resetForm);\n        isBound = true;\n      } else if (this.isTooltipOnly && !isBound) {\n        this._bindLink(link, \"\");\n        isBound = true;\n      }\n    }\n    this.container.classList.add(\"linkAnnotation\");\n    if (isBound) {\n      this.contentElement = link;\n      this.container.append(link);\n    }\n    return this.container;\n  }\n  #setInternalLink() {\n    this.container.setAttribute(\"data-internal-link\", \"\");\n  }\n  _bindLink(link, destination, overlaidText = \"\") {\n    link.href = this.linkService.getDestinationHash(destination);\n    link.onclick = () => {\n      if (destination) {\n        this.linkService.goToDestination(destination);\n      }\n      return false;\n    };\n    if (destination || destination === \"\") {\n      this.#setInternalLink();\n    }\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n  }\n  _bindNamedAction(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeNamedAction(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n  #bindAttachment(link, attachmentId, attachment, overlaidText = \"\", dest = null) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    if (attachment.description) {\n      link.title = attachment.description;\n    } else if (overlaidText) {\n      link.title = overlaidText;\n    }\n    const openAttachment = async () => {\n      const content = await this.linkService.getAttachmentContent(attachmentId);\n      if (content) {\n        this.downloadManager?.openOrDownloadData(content, attachment.filename, dest);\n      }\n    };\n    link.onclick = () => {\n      openAttachment();\n      return false;\n    };\n    this.#setInternalLink();\n  }\n  #bindSetOCGState(link, action, overlaidText = \"\") {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    link.onclick = () => {\n      this.linkService.executeSetOCGState(action);\n      return false;\n    };\n    if (overlaidText) {\n      link.title = overlaidText;\n    }\n    this.#setInternalLink();\n  }\n  _bindJSAction(link, data) {\n    link.href = this.linkService.getAnchorUrl(\"\");\n    const map = new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\n    for (const name of Object.keys(data.actions)) {\n      const jsName = map.get(name);\n      if (!jsName) {\n        continue;\n      }\n      link[jsName] = () => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: data.id,\n            name\n          }\n        });\n        return false;\n      };\n    }\n    if (data.overlaidText) {\n      link.title = data.overlaidText;\n    }\n    link.onclick ||= () => false;\n    this.#setInternalLink();\n  }\n  _bindResetFormAction(link, resetForm) {\n    const otherClickAction = link.onclick;\n    if (!otherClickAction) {\n      link.href = this.linkService.getAnchorUrl(\"\");\n    }\n    this.#setInternalLink();\n    if (!this._fieldObjects) {\n      warn(`_bindResetFormAction - \"resetForm\" action not supported, ` + \"ensure that the `fieldObjects` parameter is provided.\");\n      if (!otherClickAction) {\n        link.onclick = () => false;\n      }\n      return;\n    }\n    link.onclick = () => {\n      otherClickAction?.();\n      const {\n        fields: resetFormFields,\n        refs: resetFormRefs,\n        include\n      } = resetForm;\n      const allFields = [];\n      if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n        const fieldIds = new Set(resetFormRefs);\n        for (const fieldName of resetFormFields) {\n          const fields = this._fieldObjects[fieldName] || [];\n          for (const {\n            id\n          } of fields) {\n            fieldIds.add(id);\n          }\n        }\n        for (const fields of Object.values(this._fieldObjects)) {\n          for (const field of fields) {\n            if (fieldIds.has(field.id) === include) {\n              allFields.push(field);\n            }\n          }\n        }\n      } else {\n        for (const fields of Object.values(this._fieldObjects)) {\n          allFields.push(...fields);\n        }\n      }\n      const storage = this.annotationStorage;\n      const allIds = [];\n      for (const field of allFields) {\n        const {\n          id\n        } = field;\n        allIds.push(id);\n        switch (field.type) {\n          case \"text\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"checkbox\":\n          case \"radiobutton\":\n            {\n              const value = field.defaultValue === field.exportValues;\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          case \"combobox\":\n          case \"listbox\":\n            {\n              const value = field.defaultValue || \"\";\n              storage.setValue(id, {\n                value\n              });\n              break;\n            }\n          default:\n            continue;\n        }\n        const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n        if (!domElement) {\n          continue;\n        } else if (!GetElementsByNameSet.has(domElement)) {\n          warn(`_bindResetFormAction - element not allowed: ${id}`);\n          continue;\n        }\n        domElement.dispatchEvent(new Event(\"resetform\"));\n      }\n      if (this.enableScripting) {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: \"app\",\n            ids: allIds,\n            name: \"ResetForm\"\n          }\n        });\n      }\n      return false;\n    };\n  }\n}\nclass TextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"textAnnotation\");\n    const image = document.createElement(\"img\");\n    image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\n    image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n    image.setAttribute(\"data-l10n-args\", JSON.stringify({\n      type: this.data.name\n    }));\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.append(image);\n    return this.container;\n  }\n}\nclass WidgetAnnotationElement extends AnnotationElement {\n  render() {\n    return this.container;\n  }\n  _getKeyModifier(event) {\n    return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n  }\n  _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n    if (baseName.includes(\"mouse\")) {\n      element.addEventListener(baseName, event => {\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event),\n            shift: event.shiftKey,\n            modifier: this._getKeyModifier(event)\n          }\n        });\n      });\n    } else {\n      element.addEventListener(baseName, event => {\n        if (baseName === \"blur\") {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          elementData.focused = false;\n        } else if (baseName === \"focus\") {\n          if (elementData.focused) {\n            return;\n          }\n          elementData.focused = true;\n        }\n        if (!valueGetter) {\n          return;\n        }\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id: this.data.id,\n            name: eventName,\n            value: valueGetter(event)\n          }\n        });\n      });\n    }\n  }\n  _setEventListeners(element, elementData, names, getter) {\n    for (const [baseName, eventName] of names) {\n      if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n        if (eventName === \"Focus\" || eventName === \"Blur\") {\n          elementData ||= {\n            focused: false\n          };\n        }\n        this._setEventListener(element, elementData, baseName, eventName, getter);\n        if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n          this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n        } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n          this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n        }\n      }\n    }\n  }\n  _setTextStyle(element) {\n    const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n    const {\n      fontColor\n    } = this.data.defaultAppearanceData;\n    const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE;\n    const style = element.style;\n    let computedFontSize;\n    const BORDER_SIZE = 2;\n    const roundToOneDecimal = x => Math.round(10 * x) / 10;\n    if (this.data.multiLine) {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      const numberOfLines = Math.round(height / ((/* inlined export .LINE_FACTOR */1.35) * fontSize)) || 1;\n      const lineHeight = height / numberOfLines;\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / (/* inlined export .LINE_FACTOR */1.35)));\n    } else {\n      const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);\n      computedFontSize = Math.min(fontSize, roundToOneDecimal(height / (/* inlined export .LINE_FACTOR */1.35)));\n    }\n    style.fontSize = `calc(${computedFontSize}px * var(--total-scale-factor))`;\n    style.color = Util.makeHexColor(...fontColor);\n    if (this.data.textAlignment !== null && !this.data.comb) {\n      style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n    }\n  }\n  _setRequired(element, isRequired) {\n    if (isRequired) {\n      element.setAttribute(\"required\", true);\n    } else {\n      element.removeAttribute(\"required\");\n    }\n    element.setAttribute(\"aria-required\", isRequired);\n  }\n}\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\n    super(parameters, {\n      isRenderable\n    });\n  }\n  setPropertyOnSiblings(base, key, value, keyInStorage) {\n    const storage = this.annotationStorage;\n    for (const element of this._getElementsByName(base.name, base.id)) {\n      if (element.domElement) {\n        element.domElement[key] = value;\n      }\n      storage.setValue(element.id, {\n        [keyInStorage]: value\n      });\n    }\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    this.container.classList.add(\"textWidgetAnnotation\");\n    let element = null;\n    if (this.renderForms) {\n      const storedData = storage.getValue(id, {\n        value: this.data.fieldValue\n      });\n      let textContent = storedData.value || \"\";\n      const maxLen = storage.getValue(id, {\n        charLimit: this.data.maxLen\n      }).charLimit;\n      if (maxLen && textContent.length > maxLen) {\n        textContent = textContent.slice(0, maxLen);\n      }\n      let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n      if (fieldFormattedValues && this.data.comb) {\n        fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n      }\n      const elementData = {\n        userValue: textContent,\n        formattedValue: fieldFormattedValues,\n        lastCommittedValue: null,\n        commitKey: 1,\n        focused: false\n      };\n      if (this.data.multiLine) {\n        element = document.createElement(\"textarea\");\n        element.textContent = fieldFormattedValues ?? textContent;\n        if (this.data.doNotScroll) {\n          element.style.overflowY = \"hidden\";\n        }\n      } else {\n        element = document.createElement(\"input\");\n        element.type = this.data.password ? \"password\" : \"text\";\n        element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n        if (this.data.doNotScroll) {\n          element.style.overflowX = \"hidden\";\n        }\n      }\n      if (this.data.hasOwnCanvas) {\n        this.container.classList.add(\"hasOwnCanvas\");\n        if (storage.has(id)) {\n          this.container.classList.add(\"sandboxModified\");\n        }\n      }\n      GetElementsByNameSet.add(element);\n      this.contentElement = element;\n      element.setAttribute(\"data-element-id\", id);\n      element.disabled = this.data.readOnly;\n      element.name = this.data.fieldName;\n      element.tabIndex = 0;\n      const {\n        datetimeFormat,\n        datetimeType,\n        timeStep\n      } = this.data;\n      const hasDateOrTime = !!datetimeType && this.enableScripting;\n      if (datetimeFormat) {\n        element.title = datetimeFormat;\n      }\n      this._setRequired(element, this.data.required);\n      if (maxLen) {\n        element.maxLength = maxLen;\n      }\n      element.addEventListener(\"input\", event => {\n        storage.setValue(id, {\n          value: event.target.value\n        });\n        this.setPropertyOnSiblings(element, \"value\", event.target.value, \"value\");\n        elementData.formattedValue = null;\n      });\n      element.addEventListener(\"resetform\", event => {\n        const defaultValue = this.data.defaultFieldValue ?? \"\";\n        element.value = elementData.userValue = defaultValue;\n        elementData.formattedValue = null;\n      });\n      let blurListener = event => {\n        const {\n          formattedValue\n        } = elementData;\n        if (formattedValue !== null && formattedValue !== undefined) {\n          event.target.value = formattedValue;\n        }\n        event.target.scrollLeft = 0;\n      };\n      if (this.enableScripting && this.hasJSActions) {\n        element.addEventListener(\"focus\", event => {\n          if (elementData.focused) {\n            return;\n          }\n          const {\n            target\n          } = event;\n          if (hasDateOrTime) {\n            target.type = datetimeType;\n            if (timeStep) {\n              target.step = timeStep;\n            }\n          }\n          if (elementData.userValue) {\n            const value = elementData.userValue;\n            if (hasDateOrTime) {\n              if (datetimeType === \"time\") {\n                const date = new Date(value);\n                const parts = [date.getHours(), date.getMinutes(), date.getSeconds()];\n                target.value = parts.map(v => v.toString().padStart(2, \"0\")).join(\":\");\n              } else {\n                target.value = new Date(value - TIMEZONE_OFFSET).toISOString().split(datetimeType === \"date\" ? \"T\" : \".\", 1)[0];\n              }\n            } else {\n              target.value = value;\n            }\n          }\n          elementData.lastCommittedValue = target.value;\n          elementData.commitKey = 1;\n          if (!this.data.actions?.Focus) {\n            elementData.focused = true;\n          }\n        });\n        element.addEventListener(\"updatefromsandbox\", jsEvent => {\n          this.container.classList.add(\"sandboxModified\");\n          const actions = {\n            value(event) {\n              elementData.userValue = event.detail.value ?? \"\";\n              if (!hasDateOrTime) {\n                storage.setValue(id, {\n                  value: elementData.userValue.toString()\n                });\n              }\n              event.target.value = elementData.userValue;\n            },\n            formattedValue(event) {\n              const {\n                formattedValue\n              } = event.detail;\n              elementData.formattedValue = formattedValue;\n              if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {\n                event.target.value = formattedValue;\n              }\n              const data = {\n                formattedValue\n              };\n              if (hasDateOrTime) {\n                data.value = formattedValue;\n              }\n              storage.setValue(id, data);\n            },\n            selRange(event) {\n              event.target.setSelectionRange(...event.detail.selRange);\n            },\n            charLimit: event => {\n              const {\n                charLimit\n              } = event.detail;\n              const {\n                target\n              } = event;\n              if (charLimit === 0) {\n                target.removeAttribute(\"maxLength\");\n                return;\n              }\n              target.setAttribute(\"maxLength\", charLimit);\n              let value = elementData.userValue;\n              if (!value || value.length <= charLimit) {\n                return;\n              }\n              value = value.slice(0, charLimit);\n              target.value = elementData.userValue = value;\n              storage.setValue(id, {\n                value\n              });\n              this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n                source: this,\n                detail: {\n                  id,\n                  name: \"Keystroke\",\n                  value,\n                  willCommit: true,\n                  commitKey: 1,\n                  selStart: target.selectionStart,\n                  selEnd: target.selectionEnd\n                }\n              });\n            }\n          };\n          this._dispatchEventFromSandbox(actions, jsEvent);\n        });\n        element.addEventListener(\"keydown\", event => {\n          elementData.commitKey = 1;\n          let commitKey = -1;\n          if (event.key === \"Escape\") {\n            commitKey = 0;\n          } else if (event.key === \"Enter\" && !this.data.multiLine) {\n            commitKey = 2;\n          } else if (event.key === \"Tab\") {\n            elementData.commitKey = 3;\n          }\n          if (commitKey === -1) {\n            return;\n          }\n          const {\n            value\n          } = event.target;\n          if (elementData.lastCommittedValue === value) {\n            return;\n          }\n          elementData.lastCommittedValue = value;\n          elementData.userValue = value;\n          this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n            source: this,\n            detail: {\n              id,\n              name: \"Keystroke\",\n              value,\n              willCommit: true,\n              commitKey,\n              selStart: event.target.selectionStart,\n              selEnd: event.target.selectionEnd\n            }\n          });\n        });\n        const _blurListener = blurListener;\n        blurListener = null;\n        element.addEventListener(\"blur\", event => {\n          if (!elementData.focused || !event.relatedTarget) {\n            return;\n          }\n          if (!this.data.actions?.Blur) {\n            elementData.focused = false;\n          }\n          const {\n            target\n          } = event;\n          let {\n            value\n          } = target;\n          if (hasDateOrTime) {\n            if (value && datetimeType === \"time\") {\n              const parts = value.split(\":\").map(v => parseInt(v, 10));\n              value = new Date(2000, 0, 1, parts[0], parts[1], parts[2] || 0).valueOf();\n              target.step = \"\";\n            } else {\n              if (!value.includes(\"T\")) {\n                value = `${value}T00:00`;\n              }\n              value = new Date(value).valueOf();\n            }\n            target.type = \"text\";\n          }\n          elementData.userValue = value;\n          if (elementData.lastCommittedValue !== value) {\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                willCommit: true,\n                commitKey: elementData.commitKey,\n                selStart: event.target.selectionStart,\n                selEnd: event.target.selectionEnd\n              }\n            });\n          }\n          _blurListener(event);\n        });\n        if (this.data.actions?.Keystroke) {\n          element.addEventListener(\"beforeinput\", event => {\n            elementData.lastCommittedValue = null;\n            const {\n              data,\n              target\n            } = event;\n            const {\n              value,\n              selectionStart,\n              selectionEnd\n            } = target;\n            let selStart = selectionStart,\n              selEnd = selectionEnd;\n            switch (event.inputType) {\n              case \"deleteWordBackward\":\n                {\n                  const match = value.substring(0, selectionStart).match(/\\w*\\W*$/);\n                  if (match) {\n                    selStart -= match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteWordForward\":\n                {\n                  const match = value.substring(selectionStart).match(/^\\W*\\w*/);\n                  if (match) {\n                    selEnd += match[0].length;\n                  }\n                  break;\n                }\n              case \"deleteContentBackward\":\n                if (selectionStart === selectionEnd) {\n                  selStart -= 1;\n                }\n                break;\n              case \"deleteContentForward\":\n                if (selectionStart === selectionEnd) {\n                  selEnd += 1;\n                }\n                break;\n            }\n            event.preventDefault();\n            this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n              source: this,\n              detail: {\n                id,\n                name: \"Keystroke\",\n                value,\n                change: data || \"\",\n                willCommit: false,\n                selStart,\n                selEnd\n              }\n            });\n          });\n        }\n        this._setEventListeners(element, elementData, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.value);\n      }\n      if (blurListener) {\n        element.addEventListener(\"blur\", blurListener);\n      }\n      if (this.data.comb) {\n        const fieldWidth = this.data.rect[2] - this.data.rect[0];\n        const combWidth = fieldWidth / maxLen;\n        element.classList.add(\"comb\");\n        element.style.setProperty(\"--comb-width\", `calc(${combWidth}px * var(--total-scale-factor))`);\n        const alignment = this.data.textAlignment;\n        if (alignment === 1 || alignment === 2) {\n          const setCombOffset = () => {\n            const free = maxLen - element.value.length;\n            element.style.setProperty(\"--comb-offset\", `${alignment === 1 ? free >> 1 : free}`);\n          };\n          setCombOffset();\n          for (const evt of [\"input\", \"blur\", \"resetform\", \"updatefromsandbox\"]) {\n            element.addEventListener(evt, setCombOffset);\n          }\n        }\n      }\n    } else {\n      element = document.createElement(\"div\");\n      element.textContent = this.data.fieldValue;\n      element.style.verticalAlign = \"middle\";\n      element.style.display = \"table-cell\";\n      if (this.data.hasOwnCanvas) {\n        element.hidden = true;\n      }\n    }\n    this._setTextStyle(element);\n    this._setBackgroundColor(element);\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: !!parameters.data.hasOwnCanvas\n    });\n  }\n}\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.exportValue === data.fieldValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== \"Off\";\n      storage.setValue(id, {\n        value\n      });\n    }\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"checkbox\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.setAttribute(\"exportValue\", data.exportValue);\n    element.tabIndex = 0;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const checkbox of this._getElementsByName(name, id)) {\n        const curChecked = checked && checkbox.exportValue === data.exportValue;\n        if (checkbox.domElement) {\n          checkbox.domElement.checked = curChecked;\n        }\n        storage.setValue(checkbox.id, {\n          value: curChecked\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue || \"Off\";\n      event.target.checked = defaultValue === data.exportValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            event.target.checked = event.detail.value !== \"Off\";\n            storage.setValue(id, {\n              value: event.target.checked\n            });\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n    const storage = this.annotationStorage;\n    const data = this.data;\n    const id = data.id;\n    let value = storage.getValue(id, {\n      value: data.buttonValue !== null && data.fieldValue === data.buttonValue\n    }).value;\n    if (typeof value === \"string\") {\n      value = value !== data.buttonValue;\n      storage.setValue(id, {\n        value\n      });\n    }\n    if (value) {\n      for (const radio of this._getElementsByName(data.fieldName, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n    }\n    const element = document.createElement(\"input\");\n    GetElementsByNameSet.add(element);\n    element.setAttribute(\"data-element-id\", id);\n    element.disabled = data.readOnly;\n    this._setRequired(element, this.data.required);\n    element.type = \"radio\";\n    element.name = data.fieldName;\n    if (value) {\n      element.setAttribute(\"checked\", true);\n    }\n    element.tabIndex = 0;\n    element.addEventListener(\"change\", event => {\n      const {\n        name,\n        checked\n      } = event.target;\n      for (const radio of this._getElementsByName(name, id)) {\n        storage.setValue(radio.id, {\n          value: false\n        });\n      }\n      storage.setValue(id, {\n        value: checked\n      });\n    });\n    element.addEventListener(\"resetform\", event => {\n      const defaultValue = data.defaultFieldValue;\n      event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;\n    });\n    if (this.enableScripting && this.hasJSActions) {\n      const pdfButtonValue = data.buttonValue;\n      element.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value: event => {\n            const checked = pdfButtonValue === event.detail.value;\n            for (const radio of this._getElementsByName(event.target.name)) {\n              const curChecked = checked && radio.id === id;\n              if (radio.domElement) {\n                radio.domElement.checked = curChecked;\n              }\n              storage.setValue(radio.id, {\n                value: curChecked\n              });\n            }\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      this._setEventListeners(element, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], event => event.target.checked);\n    }\n    this._setDefaultPropertiesFromJS(element);\n    this.container.append(element);\n    return this.container;\n  }\n}\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      ignoreBorder: parameters.data.hasAppearance\n    });\n  }\n  render() {\n    const container = super.render();\n    container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n    const linkElement = container.lastChild;\n    if (this.enableScripting && this.hasJSActions && linkElement) {\n      this._setDefaultPropertiesFromJS(linkElement);\n      linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        this._dispatchEventFromSandbox({}, jsEvent);\n      });\n    }\n    return container;\n  }\n}\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n  render() {\n    this.container.classList.add(\"choiceWidgetAnnotation\");\n    const storage = this.annotationStorage;\n    const id = this.data.id;\n    const storedData = storage.getValue(id, {\n      value: this.data.fieldValue\n    });\n    const selectElement = document.createElement(\"select\");\n    GetElementsByNameSet.add(selectElement);\n    selectElement.setAttribute(\"data-element-id\", id);\n    selectElement.disabled = this.data.readOnly;\n    this._setRequired(selectElement, this.data.required);\n    selectElement.name = this.data.fieldName;\n    selectElement.tabIndex = 0;\n    let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n    if (!this.data.combo) {\n      selectElement.size = this.data.options.length;\n      if (this.data.multiSelect) {\n        selectElement.multiple = true;\n      }\n    }\n    selectElement.addEventListener(\"resetform\", event => {\n      const defaultValue = this.data.defaultFieldValue;\n      for (const option of selectElement.options) {\n        option.selected = option.value === defaultValue;\n      }\n    });\n    const fixDisplayValue = (option, value) => {\n      const newValue = value.replaceAll(\" \", \"\\u00A0\");\n      option.textContent = newValue;\n      if (newValue !== value) {\n        option.setAttribute(\"display-value\", value);\n      }\n    };\n    for (const option of this.data.options) {\n      const optionElement = document.createElement(\"option\");\n      fixDisplayValue(optionElement, option.displayValue);\n      optionElement.value = option.exportValue;\n      if (storedData.value.includes(option.exportValue)) {\n        optionElement.setAttribute(\"selected\", true);\n        addAnEmptyEntry = false;\n      }\n      selectElement.append(optionElement);\n    }\n    let removeEmptyEntry = null;\n    if (addAnEmptyEntry) {\n      const noneOptionElement = document.createElement(\"option\");\n      noneOptionElement.value = \" \";\n      noneOptionElement.setAttribute(\"hidden\", true);\n      noneOptionElement.setAttribute(\"selected\", true);\n      selectElement.prepend(noneOptionElement);\n      removeEmptyEntry = () => {\n        noneOptionElement.remove();\n        selectElement.removeEventListener(\"input\", removeEmptyEntry);\n        removeEmptyEntry = null;\n      };\n      selectElement.addEventListener(\"input\", removeEmptyEntry);\n    }\n    const getValue = isExport => {\n      const name = isExport ? \"value\" : \"textContent\";\n      const {\n        options,\n        multiple\n      } = selectElement;\n      if (!multiple) {\n        return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];\n      }\n      return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);\n    };\n    let selectedValues = getValue(false);\n    const getItems = event => {\n      const options = event.target.options;\n      return Array.prototype.map.call(options, option => ({\n        displayValue: option.getAttribute(\"display-value\") || option.textContent,\n        exportValue: option.value\n      }));\n    };\n    if (this.enableScripting && this.hasJSActions) {\n      selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n        const actions = {\n          value(event) {\n            removeEmptyEntry?.();\n            const value = event.detail.value;\n            const values = new Set(Array.isArray(value) ? value : [value]);\n            for (const option of selectElement.options) {\n              option.selected = values.has(option.value);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          multipleSelection(event) {\n            selectElement.multiple = true;\n          },\n          remove(event) {\n            const options = selectElement.options;\n            const index = event.detail.remove;\n            options[index].selected = false;\n            selectElement.remove(index);\n            if (options.length > 0) {\n              const i = Array.prototype.findIndex.call(options, option => option.selected);\n              if (i === -1) {\n                options[0].selected = true;\n              }\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          clear(event) {\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            storage.setValue(id, {\n              value: null,\n              items: []\n            });\n            selectedValues = getValue(false);\n          },\n          insert(event) {\n            const {\n              index,\n              displayValue,\n              exportValue\n            } = event.detail.insert;\n            const selectChild = selectElement.children[index];\n            const optionElement = document.createElement(\"option\");\n            fixDisplayValue(optionElement, displayValue);\n            optionElement.value = exportValue;\n            if (selectChild) {\n              selectChild.before(optionElement);\n            } else {\n              selectElement.append(optionElement);\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          items(event) {\n            const {\n              items\n            } = event.detail;\n            while (selectElement.length !== 0) {\n              selectElement.remove(0);\n            }\n            for (const item of items) {\n              const {\n                displayValue,\n                exportValue\n              } = item;\n              const optionElement = document.createElement(\"option\");\n              fixDisplayValue(optionElement, displayValue);\n              optionElement.value = exportValue;\n              selectElement.append(optionElement);\n            }\n            if (selectElement.options.length > 0) {\n              selectElement.options[0].selected = true;\n            }\n            storage.setValue(id, {\n              value: getValue(true),\n              items: getItems(event)\n            });\n            selectedValues = getValue(false);\n          },\n          indices(event) {\n            const indices = new Set(event.detail.indices);\n            for (const option of event.target.options) {\n              option.selected = indices.has(option.index);\n            }\n            storage.setValue(id, {\n              value: getValue(true)\n            });\n            selectedValues = getValue(false);\n          },\n          editable(event) {\n            event.target.disabled = !event.detail.editable;\n          }\n        };\n        this._dispatchEventFromSandbox(actions, jsEvent);\n      });\n      selectElement.addEventListener(\"input\", event => {\n        const exportValue = getValue(true);\n        const change = getValue(false);\n        storage.setValue(id, {\n          value: exportValue\n        });\n        event.preventDefault();\n        this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n          source: this,\n          detail: {\n            id,\n            name: \"Keystroke\",\n            value: selectedValues,\n            change,\n            changeEx: exportValue,\n            willCommit: false,\n            commitKey: 1,\n            keyDown: false\n          }\n        });\n      });\n      this._setEventListeners(selectElement, null, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"], [\"input\", \"Validate\"]], event => event.target.value);\n    } else {\n      selectElement.addEventListener(\"input\", function (event) {\n        storage.setValue(id, {\n          value: getValue(true)\n        });\n      });\n    }\n    if (this.data.combo) {\n      this._setTextStyle(selectElement);\n    } else {}\n    this._setBackgroundColor(selectElement);\n    this._setDefaultPropertiesFromJS(selectElement);\n    this.container.append(selectElement);\n    return this.container;\n  }\n}\nclass PopupAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    const {\n      data,\n      elements,\n      parent\n    } = parameters;\n    const hasCommentManager = !!parent._commentManager;\n    super(parameters, {\n      isRenderable: !hasCommentManager && AnnotationElement._hasPopupData(data)\n    });\n    this.elements = elements;\n    if (hasCommentManager && AnnotationElement._hasPopupData(data)) {\n      const popup = this.popup = this.#createPopup();\n      for (const element of elements) {\n        element.popup = popup;\n      }\n    } else {\n      this.popup = null;\n    }\n  }\n  #createPopup() {\n    return new PopupElement({\n      container: this.container,\n      color: this.data.color,\n      titleObj: this.data.titleObj,\n      modificationDate: this.data.modificationDate || this.data.creationDate,\n      contentsObj: this.data.contentsObj,\n      richText: this.data.richText,\n      rect: this.data.rect,\n      parentRect: this.data.parentRect || null,\n      parent: this.parent,\n      elements: this.elements,\n      open: this.data.open,\n      commentManager: this.parent._commentManager\n    });\n  }\n  render() {\n    const {\n      container\n    } = this;\n    container.classList.add(\"popupAnnotation\");\n    container.role = \"comment\";\n    const popup = this.popup = this.#createPopup();\n    const elementIds = [];\n    for (const element of this.elements) {\n      element.popup = popup;\n      element.container.ariaHasPopup = \"dialog\";\n      elementIds.push(element.data.id);\n      element.addHighlightArea();\n    }\n    this.container.setAttribute(\"aria-controls\", elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\"));\n    return this.container;\n  }\n}\nclass PopupElement {\n  #commentManager = null;\n  #boundKeyDown = this.#keyDown.bind(this);\n  #boundHide = this.#hide.bind(this);\n  #boundShow = this.#show.bind(this);\n  #boundToggle = this.#toggle.bind(this);\n  #color = null;\n  #container = null;\n  #contentsObj = null;\n  #dateObj = null;\n  #elements = null;\n  #parent = null;\n  #parentRect = null;\n  #pinned = false;\n  #popup = null;\n  #popupAbortController = null;\n  #position = null;\n  #commentButton = null;\n  #commentButtonPosition = null;\n  #popupPosition = null;\n  #rect = null;\n  #richText = null;\n  #titleObj = null;\n  #updates = null;\n  #wasVisible = false;\n  #firstElement = null;\n  #commentText = null;\n  constructor({\n    container,\n    color,\n    elements,\n    titleObj,\n    modificationDate,\n    contentsObj,\n    richText,\n    parent,\n    rect,\n    parentRect,\n    open,\n    commentManager = null\n  }) {\n    this.#container = container;\n    this.#titleObj = titleObj;\n    this.#contentsObj = contentsObj;\n    this.#richText = richText;\n    this.#parent = parent;\n    this.#color = color;\n    this.#rect = rect;\n    this.#parentRect = parentRect;\n    this.#elements = elements;\n    this.#commentManager = commentManager;\n    this.#firstElement = elements[0];\n    this.#dateObj = PDFDateString.toDateObject(modificationDate);\n    this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n    if (!commentManager) {\n      this.#addEventListeners();\n      this.#container.hidden = true;\n      if (open) {\n        this.#toggle();\n      }\n    }\n  }\n  #addEventListeners() {\n    if (this.#popupAbortController) {\n      return;\n    }\n    this.#popupAbortController = new AbortController();\n    const {\n      signal\n    } = this.#popupAbortController;\n    for (const element of this.trigger) {\n      element.addEventListener(\"click\", this.#boundToggle, {\n        signal\n      });\n      element.addEventListener(\"pointerenter\", this.#boundShow, {\n        signal\n      });\n      element.addEventListener(\"pointerleave\", this.#boundHide, {\n        signal\n      });\n      element.classList.add(\"popupTriggerArea\");\n    }\n    for (const element of this.#elements) {\n      element.container?.addEventListener(\"keydown\", this.#boundKeyDown, {\n        signal\n      });\n    }\n  }\n  #setCommentButtonPosition() {\n    const element = this.#elements.find(e => e.hasCommentButton);\n    if (!element) {\n      return;\n    }\n    this.#commentButtonPosition = element._normalizePoint(element.commentButtonPosition);\n  }\n  renderCommentButton() {\n    if (this.#commentButton) {\n      if (!this.#commentButton.parentNode) {\n        this.#firstElement.container.after(this.#commentButton);\n      }\n      return;\n    }\n    if (!this.#commentButtonPosition) {\n      this.#setCommentButtonPosition();\n    }\n    if (!this.#commentButtonPosition) {\n      return;\n    }\n    const {\n      signal\n    } = this.#popupAbortController = new AbortController();\n    const hasOwnButton = this.#firstElement.hasOwnCommentButton;\n    const togglePopup = () => {\n      this.#commentManager.toggleCommentPopup(this, true, undefined, !hasOwnButton);\n    };\n    const showPopup = () => {\n      this.#commentManager.toggleCommentPopup(this, false, true, !hasOwnButton);\n    };\n    const hidePopup = () => {\n      this.#commentManager.toggleCommentPopup(this, false, false);\n    };\n    if (!hasOwnButton) {\n      const button = this.#commentButton = document.createElement(\"button\");\n      button.className = \"annotationCommentButton\";\n      const parentContainer = this.#firstElement.container;\n      button.style.zIndex = parseInt(parentContainer.style.zIndex, 10) + 1;\n      button.tabIndex = 0;\n      button.ariaHasPopup = \"dialog\";\n      button.ariaControls = \"commentPopup\";\n      button.setAttribute(\"data-l10n-id\", \"pdfjs-show-comment-button\");\n      this.#updateColor();\n      this.#updateCommentButtonPosition();\n      button.addEventListener(\"keydown\", this.#boundKeyDown, {\n        signal\n      });\n      button.addEventListener(\"click\", togglePopup, {\n        signal\n      });\n      button.addEventListener(\"pointerenter\", showPopup, {\n        signal\n      });\n      button.addEventListener(\"pointerleave\", hidePopup, {\n        signal\n      });\n      parentContainer.after(button);\n    } else {\n      this.#commentButton = this.#firstElement.container;\n      for (const element of this.trigger) {\n        element.ariaHasPopup = \"dialog\";\n        element.ariaControls = \"commentPopup\";\n        element.addEventListener(\"keydown\", this.#boundKeyDown, {\n          signal\n        });\n        element.addEventListener(\"click\", togglePopup, {\n          signal\n        });\n        element.addEventListener(\"pointerenter\", showPopup, {\n          signal\n        });\n        element.addEventListener(\"pointerleave\", hidePopup, {\n          signal\n        });\n        element.classList.add(\"popupTriggerArea\");\n      }\n    }\n  }\n  #updateCommentButtonPosition() {\n    if (this.#firstElement.extraPopupElement && !this.#firstElement.editor) {\n      return;\n    }\n    if (!this.#commentButton) {\n      this.renderCommentButton();\n    }\n    const [x, y] = this.#commentButtonPosition;\n    const {\n      style\n    } = this.#commentButton;\n    style.left = `calc(${x}%)`;\n    style.top = `calc(${y}% - var(--comment-button-dim))`;\n  }\n  #updateColor() {\n    if (this.#firstElement.extraPopupElement) {\n      return;\n    }\n    if (!this.#commentButton) {\n      this.renderCommentButton();\n    }\n    this.#commentButton.style.backgroundColor = this.commentButtonColor || \"\";\n  }\n  get commentButtonColor() {\n    const {\n      color,\n      opacity\n    } = this.#firstElement.commentData;\n    if (!color) {\n      return null;\n    }\n    return this.#parent._commentManager.makeCommentColor(color, opacity);\n  }\n  focusCommentButton() {\n    setTimeout(() => {\n      this.#commentButton?.focus();\n    }, 0);\n  }\n  getData() {\n    const {\n      richText,\n      color,\n      opacity,\n      creationDate,\n      modificationDate\n    } = this.#firstElement.commentData;\n    return {\n      contentsObj: {\n        str: this.comment\n      },\n      richText,\n      color,\n      opacity,\n      creationDate,\n      modificationDate\n    };\n  }\n  get elementBeforePopup() {\n    return this.#commentButton;\n  }\n  get comment() {\n    this.#commentText ||= this.#firstElement.commentText;\n    return this.#commentText;\n  }\n  set comment(text) {\n    if (text === this.comment) {\n      return;\n    }\n    this.#firstElement.commentText = this.#commentText = text;\n  }\n  focus() {\n    this.#firstElement.container?.focus();\n  }\n  get parentBoundingClientRect() {\n    return this.#firstElement.layer.getBoundingClientRect();\n  }\n  setCommentButtonStates({\n    selected,\n    hasPopup\n  }) {\n    if (!this.#commentButton) {\n      return;\n    }\n    this.#commentButton.classList.toggle(\"selected\", selected);\n    this.#commentButton.ariaExpanded = hasPopup;\n  }\n  setSelectedCommentButton(selected) {\n    this.#commentButton.classList.toggle(\"selected\", selected);\n  }\n  get commentPopupPosition() {\n    if (this.#popupPosition) {\n      return this.#popupPosition;\n    }\n    const {\n      x,\n      y,\n      height\n    } = this.#commentButton.getBoundingClientRect();\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = this.#firstElement.layer.getBoundingClientRect();\n    return [(x - parentX) / parentWidth, (y + height - parentY) / parentHeight];\n  }\n  set commentPopupPosition(pos) {\n    this.#popupPosition = pos;\n  }\n  hasDefaultPopupPosition() {\n    return this.#popupPosition === null;\n  }\n  get commentButtonPosition() {\n    return this.#commentButtonPosition;\n  }\n  get commentButtonWidth() {\n    return this.#commentButton.getBoundingClientRect().width / this.parentBoundingClientRect.width;\n  }\n  editComment(options) {\n    const [posX, posY] = this.#popupPosition || this.commentButtonPosition.map(x => x / 100);\n    const parentDimensions = this.parentBoundingClientRect;\n    const {\n      x: parentX,\n      y: parentY,\n      width: parentWidth,\n      height: parentHeight\n    } = parentDimensions;\n    this.#commentManager.showDialog(null, this, parentX + posX * parentWidth, parentY + posY * parentHeight, {\n      ...options,\n      parentDimensions\n    });\n  }\n  render() {\n    if (this.#popup) {\n      return;\n    }\n    const popup = this.#popup = document.createElement(\"div\");\n    popup.className = \"popup\";\n    if (this.#color) {\n      const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color);\n      popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n    }\n    const header = document.createElement(\"span\");\n    header.className = \"header\";\n    if (this.#titleObj?.str) {\n      const title = document.createElement(\"span\");\n      title.className = \"title\";\n      header.append(title);\n      ({\n        dir: title.dir,\n        str: title.textContent\n      } = this.#titleObj);\n    }\n    popup.append(header);\n    if (this.#dateObj) {\n      const modificationDate = document.createElement(\"time\");\n      modificationDate.className = \"popupDate\";\n      modificationDate.setAttribute(\"data-l10n-id\", \"pdfjs-annotation-date-time-string\");\n      modificationDate.setAttribute(\"data-l10n-args\", JSON.stringify({\n        dateObj: this.#dateObj.valueOf()\n      }));\n      modificationDate.dateTime = this.#dateObj.toISOString();\n      header.append(modificationDate);\n    }\n    renderRichText({\n      html: this.#html || this.#contentsObj.str,\n      dir: this.#contentsObj?.dir,\n      className: \"popupContent\"\n    }, popup);\n    this.#container.append(popup);\n  }\n  get #html() {\n    const richText = this.#richText;\n    const contentsObj = this.#contentsObj;\n    if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {\n      return this.#richText.html || null;\n    }\n    return null;\n  }\n  get #fontSize() {\n    return this.#html?.attributes?.style?.fontSize || 0;\n  }\n  get #fontColor() {\n    return this.#html?.attributes?.style?.color || null;\n  }\n  #makePopupContent(text) {\n    const popupLines = [];\n    const popupContent = {\n      str: text,\n      html: {\n        name: \"div\",\n        attributes: {\n          dir: \"auto\"\n        },\n        children: [{\n          name: \"p\",\n          children: popupLines\n        }]\n      }\n    };\n    const lineAttributes = {\n      style: {\n        color: this.#fontColor,\n        fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : \"\"\n      }\n    };\n    for (const line of text.split(\"\\n\")) {\n      popupLines.push({\n        name: \"span\",\n        value: line,\n        attributes: lineAttributes\n      });\n    }\n    return popupContent;\n  }\n  #keyDown(event) {\n    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n    if (event.key === \"Enter\" || event.key === \"Escape\" && this.#pinned) {\n      this.#toggle();\n    }\n  }\n  updateEdited({\n    rect,\n    popup,\n    deleted\n  }) {\n    if (this.#commentManager) {\n      if (deleted) {\n        this.remove();\n        this.#commentText = null;\n      } else if (popup) {\n        if (popup.deleted) {\n          this.remove();\n        } else {\n          this.#updateColor();\n          this.#commentText = popup.text;\n        }\n      }\n      if (rect) {\n        this.#commentButtonPosition = null;\n        this.#setCommentButtonPosition();\n        this.#updateCommentButtonPosition();\n      }\n      return;\n    }\n    if (deleted || popup?.deleted) {\n      this.remove();\n      return;\n    }\n    this.#addEventListeners();\n    this.#updates ||= {\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    };\n    if (rect) {\n      this.#position = null;\n    }\n    if (popup && popup.text) {\n      this.#richText = this.#makePopupContent(popup.text);\n      this.#dateObj = PDFDateString.toDateObject(popup.date);\n      this.#contentsObj = null;\n    }\n    this.#popup?.remove();\n    this.#popup = null;\n  }\n  resetEdited() {\n    if (!this.#updates) {\n      return;\n    }\n    ({\n      contentsObj: this.#contentsObj,\n      richText: this.#richText\n    } = this.#updates);\n    this.#updates = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#position = null;\n  }\n  remove() {\n    this.#popupAbortController?.abort();\n    this.#popupAbortController = null;\n    this.#popup?.remove();\n    this.#popup = null;\n    this.#wasVisible = false;\n    this.#pinned = false;\n    this.#commentButton?.remove();\n    this.#commentButton = null;\n    if (this.trigger) {\n      for (const element of this.trigger) {\n        element.classList.remove(\"popupTriggerArea\");\n      }\n    }\n  }\n  #setPosition() {\n    if (this.#position !== null) {\n      return;\n    }\n    const {\n      page: {\n        view\n      },\n      viewport: {\n        rawDims: {\n          pageWidth,\n          pageHeight,\n          pageX,\n          pageY\n        }\n      }\n    } = this.#parent;\n    let useParentRect = !!this.#parentRect;\n    let rect = useParentRect ? this.#parentRect : this.#rect;\n    for (const element of this.#elements) {\n      if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n        rect = element.data.rect;\n        useParentRect = true;\n        break;\n      }\n    }\n    const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]);\n    const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n    const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;\n    const popupLeft = normalizedRect[0] + parentWidth;\n    const popupTop = normalizedRect[1];\n    this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight];\n    const {\n      style\n    } = this.#container;\n    style.left = `${this.#position[0]}%`;\n    style.top = `${this.#position[1]}%`;\n  }\n  #toggle() {\n    if (this.#commentManager) {\n      this.#commentManager.toggleCommentPopup(this, false);\n      return;\n    }\n    this.#pinned = !this.#pinned;\n    if (this.#pinned) {\n      this.#show();\n      this.#container.addEventListener(\"click\", this.#boundToggle);\n      this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n    } else {\n      this.#hide();\n      this.#container.removeEventListener(\"click\", this.#boundToggle);\n      this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n    }\n  }\n  #show() {\n    if (!this.#popup) {\n      this.render();\n    }\n    if (!this.isVisible) {\n      this.#setPosition();\n      this.#container.hidden = false;\n      this.#container.style.zIndex = parseInt(this.#container.style.zIndex, 10) + 1000;\n    } else if (this.#pinned) {\n      this.#container.classList.add(\"focused\");\n    }\n  }\n  #hide() {\n    this.#container.classList.remove(\"focused\");\n    if (this.#pinned || !this.isVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n    this.#container.style.zIndex = parseInt(this.#container.style.zIndex, 10) - 1000;\n  }\n  forceHide() {\n    this.#wasVisible = this.isVisible;\n    if (!this.#wasVisible) {\n      return;\n    }\n    this.#container.hidden = true;\n  }\n  maybeShow() {\n    if (this.#commentManager) {\n      return;\n    }\n    this.#addEventListeners();\n    if (!this.#wasVisible) {\n      return;\n    }\n    if (!this.#popup) {\n      this.#show();\n    }\n    this.#wasVisible = false;\n    this.#container.hidden = false;\n  }\n  get isVisible() {\n    if (this.#commentManager) {\n      return false;\n    }\n    return this.#container.hidden === false;\n  }\n}\nclass FreeTextAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.textContent = parameters.data.textContent;\n    this.textPosition = parameters.data.textPosition;\n    this.annotationEditorType = AnnotationEditorType.FREETEXT;\n  }\n  render() {\n    this.container.classList.add(\"freeTextAnnotation\");\n    if (this.textContent) {\n      const content = this.contentElement = document.createElement(\"div\");\n      content.classList.add(\"annotationTextContent\");\n      content.setAttribute(\"role\", \"comment\");\n      for (const line of this.textContent) {\n        const lineSpan = document.createElement(\"span\");\n        lineSpan.textContent = line;\n        content.append(lineSpan);\n      }\n      this.container.append(content);\n    }\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n    return this.container;\n  }\n}\nclass LineAnnotationElement extends AnnotationElement {\n  #line = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"lineAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const line = this.#line = this.svgFactory.createElement(\"svg:line\");\n    line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n    line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n    line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n    line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n    line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n    line.setAttribute(\"stroke\", \"transparent\");\n    line.setAttribute(\"fill\", \"transparent\");\n    svg.append(line);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#line;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass SquareAnnotationElement extends AnnotationElement {\n  #square = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"squareAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const square = this.#square = this.svgFactory.createElement(\"svg:rect\");\n    square.setAttribute(\"x\", borderWidth / 2);\n    square.setAttribute(\"y\", borderWidth / 2);\n    square.setAttribute(\"width\", width - borderWidth);\n    square.setAttribute(\"height\", height - borderWidth);\n    square.setAttribute(\"stroke-width\", borderWidth || 1);\n    square.setAttribute(\"stroke\", \"transparent\");\n    square.setAttribute(\"fill\", \"transparent\");\n    svg.append(square);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#square;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass CircleAnnotationElement extends AnnotationElement {\n  #circle = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"circleAnnotation\");\n    const {\n      data,\n      width,\n      height\n    } = this;\n    const svg = this.svgFactory.create(width, height, true);\n    const borderWidth = data.borderStyle.width;\n    const circle = this.#circle = this.svgFactory.createElement(\"svg:ellipse\");\n    circle.setAttribute(\"cx\", width / 2);\n    circle.setAttribute(\"cy\", height / 2);\n    circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n    circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n    circle.setAttribute(\"stroke-width\", borderWidth || 1);\n    circle.setAttribute(\"stroke\", \"transparent\");\n    circle.setAttribute(\"fill\", \"transparent\");\n    svg.append(circle);\n    this.container.append(svg);\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#circle;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolylineAnnotationElement extends AnnotationElement {\n  #polyline = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"polylineAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const {\n      data: {\n        rect,\n        vertices,\n        borderStyle,\n        popupRef\n      },\n      width,\n      height\n    } = this;\n    if (!vertices) {\n      return this.container;\n    }\n    const svg = this.svgFactory.create(width, height, true);\n    let points = [];\n    for (let i = 0, ii = vertices.length; i < ii; i += 2) {\n      const x = vertices[i] - rect[0];\n      const y = rect[3] - vertices[i + 1];\n      points.push(`${x},${y}`);\n    }\n    points = points.join(\" \");\n    const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName);\n    polyline.setAttribute(\"points\", points);\n    polyline.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    polyline.setAttribute(\"stroke\", \"transparent\");\n    polyline.setAttribute(\"fill\", \"transparent\");\n    svg.append(polyline);\n    this.container.append(svg);\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#polyline;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n  constructor(parameters) {\n    super(parameters);\n    this.containerClassName = \"polygonAnnotation\";\n    this.svgElementName = \"svg:polygon\";\n  }\n}\nclass CaretAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n  }\n  render() {\n    this.container.classList.add(\"caretAnnotation\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    return this.container;\n  }\n}\nclass InkAnnotationElement extends AnnotationElement {\n  #polylinesGroupElement = null;\n  #polylines = [];\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.containerClassName = \"inkAnnotation\";\n    this.svgElementName = \"svg:polyline\";\n    this.annotationEditorType = this.data.it === \"InkHighlight\" ? AnnotationEditorType.HIGHLIGHT : AnnotationEditorType.INK;\n  }\n  #getTransform(rotation, rect) {\n    switch (rotation) {\n      case 90:\n        return {\n          transform: `rotate(90) translate(${-rect[0]},${rect[1]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0]\n        };\n      case 180:\n        return {\n          transform: `rotate(180) translate(${-rect[2]},${rect[1]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1]\n        };\n      case 270:\n        return {\n          transform: `rotate(270) translate(${-rect[2]},${rect[3]}) scale(1,-1)`,\n          width: rect[3] - rect[1],\n          height: rect[2] - rect[0]\n        };\n      default:\n        return {\n          transform: `translate(${-rect[0]},${rect[3]}) scale(1,-1)`,\n          width: rect[2] - rect[0],\n          height: rect[3] - rect[1]\n        };\n    }\n  }\n  render() {\n    this.container.classList.add(this.containerClassName);\n    const {\n      data: {\n        rect,\n        rotation,\n        inkLists,\n        borderStyle,\n        popupRef\n      }\n    } = this;\n    const {\n      transform,\n      width,\n      height\n    } = this.#getTransform(rotation, rect);\n    const svg = this.svgFactory.create(width, height, true);\n    const g = this.#polylinesGroupElement = this.svgFactory.createElement(\"svg:g\");\n    svg.append(g);\n    g.setAttribute(\"stroke-width\", borderStyle.width || 1);\n    g.setAttribute(\"stroke-linecap\", \"round\");\n    g.setAttribute(\"stroke-linejoin\", \"round\");\n    g.setAttribute(\"stroke-miterlimit\", 10);\n    g.setAttribute(\"stroke\", \"transparent\");\n    g.setAttribute(\"fill\", \"transparent\");\n    g.setAttribute(\"transform\", transform);\n    for (const inkList of inkLists) {\n      const polyline = this.svgFactory.createElement(this.svgElementName);\n      this.#polylines.push(polyline);\n      polyline.setAttribute(\"points\", inkList.join(\",\"));\n      g.append(polyline);\n    }\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.append(svg);\n    this._editOnDoubleClick();\n    return this.container;\n  }\n  updateEdited(params) {\n    super.updateEdited(params);\n    const {\n      thickness,\n      points,\n      rect\n    } = params;\n    const g = this.#polylinesGroupElement;\n    if (thickness >= 0) {\n      g.setAttribute(\"stroke-width\", thickness || 1);\n    }\n    if (points) {\n      for (let i = 0, ii = this.#polylines.length; i < ii; i++) {\n        this.#polylines[i].setAttribute(\"points\", points[i].join(\",\"));\n      }\n    }\n    if (rect) {\n      const {\n        transform,\n        width,\n        height\n      } = this.#getTransform(this.data.rotation, rect);\n      const root = g.parentElement;\n      root.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n      g.setAttribute(\"transform\", transform);\n    }\n  }\n  getElementsToTriggerPopup() {\n    return this.#polylines;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n}\nclass HighlightAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n    this.annotationEditorType = AnnotationEditorType.HIGHLIGHT;\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"highlightAnnotation\");\n    this._editOnDoubleClick();\n    if (overlaidText) {\n      const mark = document.createElement(\"mark\");\n      mark.classList.add(\"overlaidText\");\n      mark.textContent = overlaidText;\n      this.container.append(mark);\n    }\n    return this.container;\n  }\n}\nclass UnderlineAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"underlineAnnotation\");\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n    return this.container;\n  }\n}\nclass SquigglyAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"squigglyAnnotation\");\n    if (overlaidText) {\n      const underline = document.createElement(\"u\");\n      underline.classList.add(\"overlaidText\");\n      underline.textContent = overlaidText;\n      this.container.append(underline);\n    }\n    return this.container;\n  }\n}\nclass StrikeOutAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n  render() {\n    const {\n      data: {\n        overlaidText,\n        popupRef\n      }\n    } = this;\n    if (!popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this.container.classList.add(\"strikeoutAnnotation\");\n    if (overlaidText) {\n      const strikeout = document.createElement(\"s\");\n      strikeout.classList.add(\"overlaidText\");\n      strikeout.textContent = overlaidText;\n      this.container.append(strikeout);\n    }\n    return this.container;\n  }\n}\nclass StampAnnotationElement extends AnnotationElement {\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true,\n      ignoreBorder: true\n    });\n    this.annotationEditorType = AnnotationEditorType.STAMP;\n  }\n  render() {\n    this.container.classList.add(\"stampAnnotation\");\n    this.container.setAttribute(\"role\", \"img\");\n    if (!this.data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    }\n    this._editOnDoubleClick();\n    return this.container;\n  }\n}\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n  #trigger = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: true\n    });\n    const {\n      fileId,\n      file\n    } = this.data;\n    this.filename = file.filename;\n    this.content = file.content;\n    this.fileId = fileId;\n    this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n      source: this,\n      attachmentId: this.fileId,\n      ...file\n    });\n  }\n  render() {\n    this.container.classList.add(\"fileAttachmentAnnotation\");\n    const {\n      container,\n      data\n    } = this;\n    let trigger;\n    if (data.hasAppearance || data.fillAlpha === 0) {\n      trigger = document.createElement(\"div\");\n    } else {\n      trigger = document.createElement(\"img\");\n      trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"}.svg`;\n      if (data.fillAlpha && data.fillAlpha < 1) {\n        trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;\n      }\n    }\n    trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n    this.#trigger = trigger;\n    const {\n      isMac\n    } = FeatureTest.platform;\n    container.addEventListener(\"keydown\", evt => {\n      if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n        this.#download();\n      }\n    });\n    if (!data.popupRef && this.hasPopupData) {\n      this.hasOwnCommentButton = true;\n      this._createPopup();\n    } else {\n      trigger.classList.add(\"popupTriggerArea\");\n    }\n    container.append(trigger);\n    return container;\n  }\n  getElementsToTriggerPopup() {\n    return this.#trigger;\n  }\n  addHighlightArea() {\n    this.container.classList.add(\"highlightArea\");\n  }\n  async #download() {\n    const {\n      fileId,\n      filename,\n      content: fallbackContent\n    } = this;\n    const content = (await this.linkService.getAttachmentContent(fileId)) || fallbackContent;\n    if (content) {\n      this.downloadManager?.openOrDownloadData(content, filename);\n    }\n  }\n}\nclass MediaAnnotationElement extends AnnotationElement {\n  #abortController = new AbortController();\n  #contentUrl = null;\n  #media = null;\n  constructor(parameters) {\n    super(parameters, {\n      isRenderable: !!parameters.data.richMedia\n    });\n  }\n  render() {\n    this.container.classList.add(\"mediaAnnotation\");\n    const {\n      filename\n    } = this.data.richMedia;\n    const button = document.createElement(\"button\");\n    button.className = \"mediaPlayButton\";\n    button.type = \"button\";\n    button.title = button.ariaLabel = filename;\n    button.addEventListener(\"click\", () => this.#load(button), {\n      signal: this.#abortController.signal\n    });\n    this.container.append(button);\n    return this.container;\n  }\n  async #load(button) {\n    const {\n      fileId,\n      filename,\n      contentType\n    } = this.data.richMedia;\n    button.disabled = true;\n    let content;\n    try {\n      content = await this.linkService.getAttachmentContent(fileId);\n    } catch {\n      return;\n    } finally {\n      button.disabled = false;\n    }\n    if (!content || !button.isConnected) {\n      return;\n    }\n    const {\n      signal\n    } = this.#abortController;\n    const url = URL.createObjectURL(new Blob([content], {\n      type: contentType\n    }));\n    this.#contentUrl = url;\n    const isAudio = contentType.startsWith(\"audio/\");\n    const media = document.createElement(isAudio ? \"audio\" : \"video\");\n    this.#media = media;\n    media.className = \"mediaContent\";\n    this._setBackgroundColor(media);\n    media.src = url;\n    media.title = filename;\n    media.controls = true;\n    media.autoplay = true;\n    media.tabIndex = 0;\n    if (isAudio) {\n      let hovered = false;\n      let focused = false;\n      const updateControls = () => {\n        media.controls = hovered || focused;\n      };\n      this.container.addEventListener(\"pointerenter\", () => {\n        hovered = true;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"pointerleave\", () => {\n        hovered = false;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"focusin\", () => {\n        focused = true;\n        updateControls();\n      }, {\n        signal\n      });\n      this.container.addEventListener(\"focusout\", () => {\n        focused = false;\n        updateControls();\n      }, {\n        signal\n      });\n    }\n    media.addEventListener(\"emptied\", () => this.#revokeContentUrl(url), {\n      once: true,\n      signal\n    });\n    button.replaceWith(media);\n    media.play().catch(() => {});\n  }\n  #revokeContentUrl(url = this.#contentUrl) {\n    if (url && url === this.#contentUrl) {\n      URL.revokeObjectURL(url);\n      this.#contentUrl = null;\n    }\n  }\n  destroy() {\n    this.#abortController.abort();\n    if (this.#media) {\n      this.#media.pause();\n      this.#media.removeAttribute(\"src\");\n      this.#media.load();\n      this.#media = null;\n    }\n    this.#revokeContentUrl();\n  }\n}\nclass AnnotationLayer {\n  #accessibilityManager = null;\n  #annotationCanvasMap = null;\n  #annotationStorage = null;\n  #editableAnnotations = new Map();\n  #structTreeLayer = null;\n  #linkService = null;\n  #elements = [];\n  #hasAriaAttributesFromStructTree = false;\n  zIndex = 0;\n  constructor({\n    div,\n    accessibilityManager,\n    annotationCanvasMap,\n    annotationEditorUIManager,\n    page,\n    viewport,\n    structTreeLayer,\n    commentManager,\n    linkService,\n    annotationStorage\n  }) {\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationCanvasMap = annotationCanvasMap;\n    this.#structTreeLayer = structTreeLayer || null;\n    this.#linkService = linkService || null;\n    this.#annotationStorage = annotationStorage || new AnnotationStorage();\n    this.page = page;\n    this.viewport = viewport;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n    this._commentManager = commentManager || null;\n  }\n  hasEditableAnnotations() {\n    return this.#editableAnnotations.size > 0;\n  }\n  async render(params) {\n    const {\n      annotations,\n      optionalContentConfig\n    } = params;\n    const layer = this.div;\n    setLayerDimensions(layer, this.viewport);\n    const popupToElements = new Map();\n    const popupAnnotations = [];\n    const elementParams = {\n      data: null,\n      layer,\n      linkService: this.#linkService,\n      downloadManager: params.downloadManager,\n      imageResourcesPath: params.imageResourcesPath || \"\",\n      renderForms: params.renderForms !== false,\n      svgFactory: new DOMSVGFactory(),\n      annotationStorage: this.#annotationStorage,\n      enableComment: params.enableComment === true,\n      enableScripting: params.enableScripting === true,\n      hasJSActions: params.hasJSActions,\n      fieldObjects: params.fieldObjects,\n      parent: this,\n      elements: null\n    };\n    for (const data of annotations) {\n      if (data.noHTML) {\n        continue;\n      }\n      const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n      if (!isPopupAnnotation) {\n        if (data.rect[2] === data.rect[0] || data.rect[3] === data.rect[1]) {\n          continue;\n        }\n      } else {\n        const elements = popupToElements.get(data.id);\n        if (!elements) {\n          continue;\n        }\n        if (!this._commentManager) {\n          popupAnnotations.push(data);\n          continue;\n        }\n        elementParams.elements = elements;\n      }\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      if (!isPopupAnnotation) {\n        this.#elements.push(element);\n        if (data.popupRef) {\n          popupToElements.getOrInsertComputed(data.popupRef, makeArr).push(element);\n        }\n      }\n      const rendered = element.render();\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      element.updateOC(optionalContentConfig);\n      if (element._isEditable) {\n        this.#editableAnnotations.set(element.data.id, element);\n        this._annotationEditorUIManager?.renderAnnotationElement(element);\n      }\n    }\n    await this.#addElementsToDOM();\n    for (const data of popupAnnotations) {\n      const elements = elementParams.elements = popupToElements.get(data.id);\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      const rendered = element.render();\n      element.contentElement.id = `${AnnotationPrefix}${data.id}`;\n      if (data.hidden) {\n        rendered.style.visibility = \"hidden\";\n      }\n      elements.at(-1).container.after(rendered);\n    }\n    this.#setAnnotationCanvasMap();\n  }\n  async #addElementsToDOM() {\n    if (this.#elements.length === 0) {\n      return;\n    }\n    this.div.replaceChildren();\n    const promises = [];\n    if (!this.#hasAriaAttributesFromStructTree) {\n      this.#hasAriaAttributesFromStructTree = true;\n      for (const {\n        contentElement,\n        data: {\n          id\n        }\n      } of this.#elements) {\n        const annotationId = contentElement.id = `${AnnotationPrefix}${id}`;\n        promises.push(this.#structTreeLayer?.getAriaAttributes(annotationId).then(ariaAttributes => {\n          if (ariaAttributes) {\n            for (const [key, value] of ariaAttributes) {\n              contentElement.setAttribute(key, value);\n            }\n          }\n        }));\n      }\n    }\n    this.#elements.sort(({\n      data: {\n        rect: [a0, a1, a2, a3]\n      }\n    }, {\n      data: {\n        rect: [b0, b1, b2, b3]\n      }\n    }) => {\n      if (a0 === a2 && a1 === a3) {\n        return +1;\n      }\n      if (b0 === b2 && b1 === b3) {\n        return -1;\n      }\n      const top1 = a3;\n      const bot1 = a1;\n      const mid1 = (a1 + a3) / 2;\n      const top2 = b3;\n      const bot2 = b1;\n      const mid2 = (b1 + b3) / 2;\n      if (mid1 >= top2 && mid2 <= bot1) {\n        return -1;\n      }\n      if (mid2 >= top1 && mid1 <= bot2) {\n        return +1;\n      }\n      const centerX1 = (a0 + a2) / 2;\n      const centerX2 = (b0 + b2) / 2;\n      return centerX1 - centerX2;\n    });\n    const fragment = document.createDocumentFragment();\n    for (const element of this.#elements) {\n      fragment.append(element.container);\n      if (this._commentManager) {\n        (element.extraPopupElement?.popup || element.popup)?.renderCommentButton();\n      } else if (element.extraPopupElement) {\n        fragment.append(element.extraPopupElement.render());\n      }\n    }\n    this.div.append(fragment);\n    await Promise.all(promises);\n    if (this.#accessibilityManager) {\n      for (const element of this.#elements) {\n        this.#accessibilityManager.addPointerInTextLayer(element.contentElement, false);\n      }\n    }\n  }\n  async addLinkAnnotations(annotations) {\n    const elementParams = {\n      data: null,\n      layer: this.div,\n      linkService: this.#linkService,\n      svgFactory: new DOMSVGFactory(),\n      parent: this\n    };\n    for (const data of annotations) {\n      data.borderStyle ||= AnnotationLayer._defaultBorderStyle;\n      elementParams.data = data;\n      const element = AnnotationElementFactory.create(elementParams);\n      if (!element.isRenderable) {\n        continue;\n      }\n      element.render();\n      element.contentElement.id = `${AnnotationPrefix}${data.id}`;\n      this.#elements.push(element);\n    }\n    await this.#addElementsToDOM();\n  }\n  update({\n    viewport,\n    optionalContentConfig\n  }) {\n    const layer = this.div;\n    this.viewport = viewport;\n    setLayerDimensions(layer, {\n      rotation: viewport.rotation\n    });\n    for (const element of this.#elements) {\n      element.updateOC(optionalContentConfig);\n    }\n    this.#setAnnotationCanvasMap();\n    layer.hidden = false;\n  }\n  destroy() {\n    for (const element of this.#elements) {\n      element.destroy?.();\n      this.#accessibilityManager?.removePointerInTextLayer(element.contentElement);\n    }\n    this.#elements.length = 0;\n    this.#editableAnnotations.clear();\n    this.div.replaceChildren();\n  }\n  #setAnnotationCanvasMap() {\n    if (!this.#annotationCanvasMap) {\n      return;\n    }\n    const layer = this.div;\n    for (const [id, canvas] of this.#annotationCanvasMap) {\n      const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n      if (!element) {\n        continue;\n      }\n      if (Array.isArray(canvas)) {\n        for (const cvs of canvas) {\n          cvs.className = \"annotationContent\";\n          cvs.ariaHidden = true;\n        }\n      } else {\n        canvas.className = \"annotationContent\";\n        canvas.ariaHidden = true;\n      }\n      const toRemove = [];\n      for (const child of element.children) {\n        if (child.nodeName === \"CANVAS\") {\n          toRemove.push(child);\n        }\n      }\n      for (const child of toRemove) {\n        child.remove();\n      }\n      const firstCanvas = Array.isArray(canvas) ? canvas[0] : canvas;\n      const {\n        firstChild\n      } = element;\n      if (!firstChild) {\n        element.append(firstCanvas);\n      } else if (!firstChild.classList.contains(\"annotationContent\")) {\n        firstChild.before(firstCanvas);\n      } else {\n        firstChild.after(firstCanvas);\n      }\n      if (Array.isArray(canvas)) {\n        let lastCanvas = firstCanvas;\n        for (let i = 1, ii = canvas.length; i < ii; i++) {\n          lastCanvas.after(canvas[i]);\n          lastCanvas = canvas[i];\n        }\n      }\n      this.#annotationCanvasMap.delete(id);\n      const editableAnnotation = this.#editableAnnotations.get(id);\n      if (!editableAnnotation) {\n        continue;\n      }\n      if (editableAnnotation._hasNoCanvas) {\n        this._annotationEditorUIManager?.setMissingCanvas(id, element.id, canvas);\n        editableAnnotation._hasNoCanvas = false;\n      } else {\n        editableAnnotation.canvas = canvas;\n      }\n    }\n  }\n  refreshCanvases() {\n    this.#setAnnotationCanvasMap();\n  }\n  getEditableAnnotations() {\n    return this.#editableAnnotations.values();\n  }\n  getEditableAnnotation(id) {\n    return this.#editableAnnotations.get(id);\n  }\n  addFakeAnnotation(editor) {\n    const {\n      div\n    } = this;\n    const {\n      id,\n      rotation\n    } = editor;\n    const element = new EditorAnnotationElement({\n      data: {\n        id,\n        rect: editor.getPDFRect(),\n        rotation\n      },\n      editor,\n      layer: div,\n      parent: this,\n      enableComment: !!this._commentManager,\n      linkService: this.#linkService,\n      annotationStorage: this.#annotationStorage\n    });\n    element.render();\n    element.contentElement.id = `${AnnotationPrefix}${id}`;\n    element.createOrUpdatePopup();\n    this.#elements.push(element);\n    return element;\n  }\n  removeAnnotation(id) {\n    const index = this.#elements.findIndex(el => el.data.id === id);\n    if (index < 0) {\n      return;\n    }\n    const [element] = this.#elements.splice(index, 1);\n    this.#accessibilityManager?.removePointerInTextLayer(element.contentElement);\n  }\n  updateFakeAnnotations(editors) {\n    if (editors.length === 0) {\n      return;\n    }\n    for (const editor of editors) {\n      editor.updateFakeAnnotationElement(this);\n    }\n    this.#addElementsToDOM();\n  }\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n  static get _defaultBorderStyle() {\n    return shadow(this, \"_defaultBorderStyle\", Object.freeze({\n      width: 1,\n      rawWidth: 1,\n      style: AnnotationBorderStyleType.SOLID,\n      dashArray: [3],\n      horizontalCornerRadius: 0,\n      verticalCornerRadius: 0\n    }));\n  }\n}\n\n;// ./src/display/editor/freetext.js\n\n\n\n\n\nconst EOL_PATTERN = /\\r\\n?|\\n/g;\nclass FreeTextEditor extends AnnotationEditor {\n  #content = \"\";\n  #editorDivId = `${this.id}-editor`;\n  #editModeAC = null;\n  #fontSize;\n  _colorPicker = null;\n  static _freeTextDefaultContent = \"\";\n  static _internalPadding = 0;\n  static _defaultColor = null;\n  static _defaultFontSize = 10;\n  static get _keyboardManager() {\n    const proto = FreeTextEditor.prototype;\n    const arrowChecker = self => self.isEmpty();\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ctrl+s\", \"mac+meta+s\", \"ctrl+p\", \"mac+meta+p\"], proto.commitOrRemove, {\n      bubbles: true\n    }], [[\"ctrl+Enter\", \"mac+meta+Enter\"], proto.commitOrRemove], [[\"Escape\"], proto.commitOrRemove], [[\"ArrowLeft\"], proto._translateEmpty, {\n      args: [-small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], proto._translateEmpty, {\n      args: [-big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowRight\"], proto._translateEmpty, {\n      args: [small, 0],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], proto._translateEmpty, {\n      args: [big, 0],\n      checker: arrowChecker\n    }], [[\"ArrowUp\"], proto._translateEmpty, {\n      args: [0, -small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], proto._translateEmpty, {\n      args: [0, -big],\n      checker: arrowChecker\n    }], [[\"ArrowDown\"], proto._translateEmpty, {\n      args: [0, small],\n      checker: arrowChecker\n    }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], proto._translateEmpty, {\n      args: [0, big],\n      checker: arrowChecker\n    }]]));\n  }\n  static _type = \"freetext\";\n  static _editorType = AnnotationEditorType.FREETEXT;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"freeTextEditor\"\n    });\n    this.color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor;\n    this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.freetext);\n    }\n    this.canAddComment = false;\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    const style = getComputedStyle(document.documentElement);\n    this._internalPadding = parseFloat(style.getPropertyValue(\"--freetext-padding\"));\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        FreeTextEditor._defaultFontSize = value;\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        FreeTextEditor._defaultColor = value;\n        break;\n    }\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.FREETEXT_SIZE:\n        this.#updateFontSize(value);\n        break;\n      case AnnotationEditorParamsType.FREETEXT_COLOR:\n        this.#updateColor(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.color]];\n  }\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n  get colorType() {\n    return AnnotationEditorParamsType.FREETEXT_COLOR;\n  }\n  #updateFontSize(fontSize) {\n    const setFontsize = size => {\n      this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`;\n      this.translate(0, -(size - this.#fontSize) * this.parentScale);\n      this.#fontSize = size;\n      this.#setEditorDimensions();\n    };\n    const savedFontsize = this.#fontSize;\n    this.addCommands({\n      cmd: setFontsize.bind(this, fontSize),\n      undo: setFontsize.bind(this, savedFontsize),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_SIZE,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  onUpdatedColor() {\n    this.editorDiv.style.color = this.color;\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n  #updateColor(color) {\n    const setColor = col => {\n      this.color = col;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    this.addCommands({\n      cmd: setColor.bind(this, color),\n      undo: setColor.bind(this, savedColor),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.FREETEXT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _translateEmpty(x, y) {\n    this._uiManager.translateSelectedEditors(x, y, true);\n  }\n  getInitialTranslation() {\n    const scale = this.parentScale;\n    return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale];\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  enableEditMode() {\n    if (!super.enableEditMode()) {\n      return false;\n    }\n    this.overlayDiv.classList.remove(\"enabled\");\n    this.editorDiv.contentEditable = true;\n    this._isDraggable = false;\n    this.div.removeAttribute(\"aria-activedescendant\");\n    this.#editModeAC = new AbortController();\n    const signal = this._uiManager.combinedSignal(this.#editModeAC);\n    this.editorDiv.addEventListener(\"keydown\", this.editorDivKeydown.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"focus\", this.editorDivFocus.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"blur\", this.editorDivBlur.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"input\", this.editorDivInput.bind(this), {\n      signal\n    });\n    this.editorDiv.addEventListener(\"paste\", this.editorDivPaste.bind(this), {\n      signal\n    });\n    return true;\n  }\n  disableEditMode() {\n    if (!super.disableEditMode()) {\n      return false;\n    }\n    this.overlayDiv.classList.add(\"enabled\");\n    this.editorDiv.contentEditable = false;\n    this.div.setAttribute(\"aria-activedescendant\", this.#editorDivId);\n    this._isDraggable = true;\n    this.#editModeAC?.abort();\n    this.#editModeAC = null;\n    this.div.focus({\n      preventScroll: true\n    });\n    this.isEditing = false;\n    this.parent.div.classList.add(\"freetextEditing\");\n    return true;\n  }\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    super.focusin(event);\n    if (event.target !== this.editorDiv) {\n      this.editorDiv.focus();\n    }\n  }\n  onceAdded(focus) {\n    if (this.width) {\n      return;\n    }\n    this.enableEditMode();\n    if (focus) {\n      this.editorDiv.focus();\n    }\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    }\n    this._initialOptions = null;\n  }\n  isEmpty() {\n    return !this.editorDiv || this.editorDiv.innerText.trim() === \"\";\n  }\n  remove() {\n    this.isEditing = false;\n    if (this.parent) {\n      this.parent.setEditingState(true);\n      this.parent.div.classList.add(\"freetextEditing\");\n    }\n    super.remove();\n  }\n  #extractText() {\n    const buffer = [];\n    this.editorDiv.normalize();\n    let prevChild = null;\n    for (const child of this.editorDiv.childNodes) {\n      if (prevChild?.nodeType === Node.TEXT_NODE && child.nodeName === \"BR\") {\n        continue;\n      }\n      buffer.push(FreeTextEditor.#getNodeContent(child));\n      prevChild = child;\n    }\n    return buffer.join(\"\\n\");\n  }\n  #setEditorDimensions() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    let rect;\n    if (this.isAttachedToDOM) {\n      rect = this.div.getBoundingClientRect();\n    } else {\n      const {\n        currentLayer,\n        div\n      } = this;\n      const savedDisplay = div.style.display;\n      const savedVisibility = div.classList.contains(\"hidden\");\n      div.classList.remove(\"hidden\");\n      div.style.display = \"hidden\";\n      currentLayer.div.append(this.div);\n      rect = div.getBoundingClientRect();\n      div.remove();\n      div.style.display = savedDisplay;\n      div.classList.toggle(\"hidden\", savedVisibility);\n    }\n    if (this.rotation % 180 === this.parentRotation % 180) {\n      this.width = rect.width / parentWidth;\n      this.height = rect.height / parentHeight;\n    } else {\n      this.width = rect.height / parentWidth;\n      this.height = rect.width / parentHeight;\n    }\n    this.fixAndSetPosition();\n  }\n  commit() {\n    if (!this.isInEditMode()) {\n      return;\n    }\n    super.commit();\n    this.disableEditMode();\n    const savedText = this.#content;\n    const newText = this.#content = this.#extractText().trimEnd();\n    if (savedText === newText) {\n      return;\n    }\n    const setText = text => {\n      this.#content = text;\n      if (!text) {\n        this.remove();\n        return;\n      }\n      this.#setContent();\n      this._uiManager.rebuild(this);\n      this.#setEditorDimensions();\n    };\n    this.addCommands({\n      cmd: () => {\n        setText(newText);\n      },\n      undo: () => {\n        setText(savedText);\n      },\n      mustExec: false\n    });\n    this.#setEditorDimensions();\n  }\n  shouldGetKeyboardEvents() {\n    return this.isInEditMode();\n  }\n  enterInEditMode() {\n    this.enableEditMode();\n    this.editorDiv.focus();\n  }\n  keydown(event) {\n    if (event.target === this.div && event.key === \"Enter\") {\n      this.enterInEditMode();\n      event.preventDefault();\n    }\n  }\n  editorDivKeydown(event) {\n    FreeTextEditor._keyboardManager.exec(this, event);\n  }\n  editorDivFocus(event) {\n    this.isEditing = true;\n  }\n  editorDivBlur(event) {\n    this.isEditing = false;\n  }\n  editorDivInput(event) {\n    this.parent.div.classList.toggle(\"freetextEditing\", this.isEmpty());\n  }\n  disableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"comment\");\n    this.editorDiv.removeAttribute(\"aria-multiline\");\n  }\n  enableEditing() {\n    this.editorDiv.setAttribute(\"role\", \"textbox\");\n    this.editorDiv.setAttribute(\"aria-multiline\", true);\n  }\n  get canChangeContent() {\n    return true;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy || this.annotationElementId) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.editorDiv = document.createElement(\"div\");\n    this.editorDiv.className = \"internal\";\n    this.editorDiv.setAttribute(\"id\", this.#editorDivId);\n    this.editorDiv.setAttribute(\"data-l10n-id\", \"pdfjs-free-text2\");\n    this.editorDiv.setAttribute(\"data-l10n-attrs\", \"default-content\");\n    this.enableEditing();\n    this.editorDiv.contentEditable = true;\n    const {\n      style\n    } = this.editorDiv;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n    this.div.append(this.editorDiv);\n    this.overlayDiv = document.createElement(\"div\");\n    this.overlayDiv.classList.add(\"overlay\", \"enabled\");\n    this.div.append(this.overlayDiv);\n    if (this._isCopy || this.annotationElementId) {\n      const [parentWidth, parentHeight] = this.parentDimensions;\n      if (this.annotationElementId) {\n        const {\n          position\n        } = this._initialData;\n        let [tx, ty] = this.getInitialTranslation();\n        [tx, ty] = this.pageTranslationToScreen(tx, ty);\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        const [pageX, pageY] = this.pageTranslation;\n        let posX, posY;\n        switch (this.rotation) {\n          case 0:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY + this.height - (position[1] - pageY) / pageHeight;\n            break;\n          case 90:\n            posX = baseX + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [ty, -tx];\n            break;\n          case 180:\n            posX = baseX - this.width + (position[0] - pageX) / pageWidth;\n            posY = baseY - (position[1] - pageY) / pageHeight;\n            [tx, ty] = [-tx, -ty];\n            break;\n          case 270:\n            posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;\n            posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;\n            [tx, ty] = [-ty, tx];\n            break;\n        }\n        this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);\n      } else {\n        this._moveAfterPaste(baseX, baseY);\n      }\n      this.#setContent();\n      this._isDraggable = true;\n      this.editorDiv.contentEditable = false;\n    } else {\n      this._isDraggable = false;\n      this.editorDiv.contentEditable = true;\n    }\n    return this.div;\n  }\n  static #getNodeContent(node) {\n    return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, \"\");\n  }\n  editorDivPaste(event) {\n    const clipboardData = event.clipboardData || window.clipboardData;\n    const {\n      types\n    } = clipboardData;\n    if (types.length === 1 && types[0] === \"text/plain\") {\n      return;\n    }\n    event.preventDefault();\n    const paste = FreeTextEditor.#deserializeContent(clipboardData.getData(\"text\") || \"\").replaceAll(EOL_PATTERN, \"\\n\");\n    if (!paste) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (!selection.rangeCount) {\n      return;\n    }\n    this.editorDiv.normalize();\n    selection.deleteFromDocument();\n    const range = selection.getRangeAt(0);\n    if (!paste.includes(\"\\n\")) {\n      range.insertNode(document.createTextNode(paste));\n      this.editorDiv.normalize();\n      selection.collapseToStart();\n      return;\n    }\n    const {\n      startContainer,\n      startOffset\n    } = range;\n    const bufferBefore = [];\n    const bufferAfter = [];\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      const parent = startContainer.parentElement;\n      bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, \"\"));\n      if (parent !== this.editorDiv) {\n        let buffer = bufferBefore;\n        for (const child of this.editorDiv.childNodes) {\n          if (child === parent) {\n            buffer = bufferAfter;\n            continue;\n          }\n          buffer.push(FreeTextEditor.#getNodeContent(child));\n        }\n      }\n      bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, \"\"));\n    } else if (startContainer === this.editorDiv) {\n      let buffer = bufferBefore;\n      let i = 0;\n      for (const child of this.editorDiv.childNodes) {\n        if (i++ === startOffset) {\n          buffer = bufferAfter;\n        }\n        buffer.push(FreeTextEditor.#getNodeContent(child));\n      }\n    }\n    this.#content = `${bufferBefore.join(\"\\n\")}${paste}${bufferAfter.join(\"\\n\")}`;\n    this.#setContent();\n    const newRange = new Range();\n    let beforeLength = Math.sumPrecise(bufferBefore.map(line => line.length));\n    for (const {\n      firstChild\n    } of this.editorDiv.childNodes) {\n      if (firstChild.nodeType === Node.TEXT_NODE) {\n        const length = firstChild.nodeValue.length;\n        if (beforeLength <= length) {\n          newRange.setStart(firstChild, beforeLength);\n          newRange.setEnd(firstChild, beforeLength);\n          break;\n        }\n        beforeLength -= length;\n      }\n    }\n    selection.removeAllRanges();\n    selection.addRange(newRange);\n  }\n  #setContent() {\n    this.editorDiv.replaceChildren();\n    if (!this.#content) {\n      return;\n    }\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      this.editorDiv.append(div);\n    }\n  }\n  #serializeContent() {\n    return this.#content.replaceAll(\"\\xa0\", \" \");\n  }\n  static #deserializeContent(content) {\n    return content.replaceAll(\" \", \"\\xa0\");\n  }\n  get contentDiv() {\n    return this.editorDiv;\n  }\n  getPDFRect() {\n    const padding = FreeTextEditor._internalPadding * this.parentScale;\n    return this.getRect(padding, padding);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof FreeTextAnnotationElement) {\n      const {\n        data: {\n          defaultAppearanceData: {\n            fontSize,\n            fontColor\n          },\n          rect,\n          rotation,\n          id,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        textContent,\n        textPosition,\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      if (!textContent?.length) {\n        return null;\n      }\n      initialData = data = {\n        annotationType: AnnotationEditorType.FREETEXT,\n        color: Array.from(fontColor),\n        fontSize,\n        value: textContent.join(\"\\n\"),\n        position: textPosition,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        comment: contentsObj?.str || null,\n        richText,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#fontSize = data.fontSize;\n    editor.color = Util.makeHexColor(...data.color);\n    editor.#content = FreeTextEditor.#deserializeContent(data.value);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.color);\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color,\n      fontSize: this.#fontSize,\n      value: this.#serializeContent()\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.isCopy = true;\n      return serialized;\n    }\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      value,\n      fontSize,\n      color,\n      pageIndex\n    } = this._initialData;\n    return this.hasEditedComment || this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;\n  }\n  renderAnnotationElement(annotation) {\n    const content = super.renderAnnotationElement(annotation);\n    if (!content) {\n      return null;\n    }\n    const {\n      style\n    } = content;\n    style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`;\n    style.color = this.color;\n    content.replaceChildren();\n    for (const line of this.#content.split(\"\\n\")) {\n      const div = document.createElement(\"div\");\n      div.append(line ? document.createTextNode(line) : document.createElement(\"br\"));\n      content.append(div);\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this._uiManager.hasCommentManager() || this.hasEditedComment ? this.comment : {\n        text: this.#content\n      }\n    });\n    return content;\n  }\n  resetAnnotationElement(annotation) {\n    super.resetAnnotationElement(annotation);\n    annotation.resetEdited();\n  }\n}\n\n;// ./src/display/editor/drawers/outline.js\n\nclass Outline {\n  static PRECISION = 1e-4;\n  toSVGPath() {\n    unreachable(\"Abstract method `toSVGPath` must be implemented.\");\n  }\n  get box() {\n    unreachable(\"Abstract getter `box` must be implemented.\");\n  }\n  serialize(_bbox, _rotation) {\n    unreachable(\"Abstract method `serialize` must be implemented.\");\n  }\n  static _rescale(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i] * sx;\n      dest[i + 1] = ty + src[i + 1] * sy;\n    }\n    return dest;\n  }\n  static _rescaleAndSwap(src, tx, ty, sx, sy, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i + 1] * sx;\n      dest[i + 1] = ty + src[i] * sy;\n    }\n    return dest;\n  }\n  static _translate(src, tx, ty, dest) {\n    dest ||= new Float32Array(src.length);\n    for (let i = 0, ii = src.length; i < ii; i += 2) {\n      dest[i] = tx + src[i];\n      dest[i + 1] = ty + src[i + 1];\n    }\n    return dest;\n  }\n  static svgRound(x) {\n    return Math.round(x * 10000);\n  }\n  static _normalizePoint(x, y, parentWidth, parentHeight, rotation) {\n    switch (rotation) {\n      case 90:\n        return [1 - y / parentWidth, x / parentHeight];\n      case 180:\n        return [1 - x / parentWidth, 1 - y / parentHeight];\n      case 270:\n        return [y / parentWidth, 1 - x / parentHeight];\n      default:\n        return [x / parentWidth, y / parentHeight];\n    }\n  }\n  static createBezierPoints(x1, y1, x2, y2, x3, y3) {\n    return [(x1 + 5 * x2) / 6, (y1 + 5 * y2) / 6, (5 * x2 + x3) / 6, (5 * y2 + y3) / 6, (x2 + x3) / 2, (y2 + y3) / 2];\n  }\n}\n\n;// ./src/display/editor/drawers/freedraw.js\n\n\nclass FreeDrawOutliner {\n  #box;\n  #bottom = [];\n  #innerMargin;\n  #isLTR;\n  #top = [];\n  #last = new Float32Array(18);\n  #lastX;\n  #lastY;\n  #min;\n  #min_dist;\n  #scaleFactor;\n  #thickness;\n  #points = [];\n  static #MIN_DIST = 8;\n  static #MIN_DIFF = 2;\n  static #MIN = FreeDrawOutliner.#MIN_DIST + FreeDrawOutliner.#MIN_DIFF;\n  constructor({\n    x,\n    y\n  }, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    this.#box = box;\n    this.#thickness = thickness * scaleFactor;\n    this.#isLTR = isLTR;\n    this.#last.set([NaN, NaN, NaN, NaN, x, y], 6);\n    this.#innerMargin = innerMargin;\n    this.#min_dist = FreeDrawOutliner.#MIN_DIST * scaleFactor;\n    this.#min = FreeDrawOutliner.#MIN * scaleFactor;\n    this.#scaleFactor = scaleFactor;\n    this.#points.push(x, y);\n  }\n  isEmpty() {\n    return isNaN(this.#last[8]);\n  }\n  #getLastCoords() {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [x, y, width, height] = this.#box;\n    return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height];\n  }\n  add({\n    x,\n    y\n  }) {\n    this.#lastX = x;\n    this.#lastY = y;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    let [x1, y1, x2, y2] = this.#last.subarray(8, 12);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(diffX, diffY);\n    if (d < this.#min) {\n      return false;\n    }\n    const diffD = d - this.#min_dist;\n    const K = diffD / d;\n    const shiftX = K * diffX;\n    const shiftY = K * diffY;\n    let x0 = x1;\n    let y0 = y1;\n    x1 = x2;\n    y1 = y2;\n    x2 += shiftX;\n    y2 += shiftY;\n    this.#points?.push(x, y);\n    const nX = -shiftY / diffD;\n    const nY = shiftX / diffD;\n    const thX = nX * this.#thickness;\n    const thY = nY * this.#thickness;\n    this.#last.set(this.#last.subarray(2, 8), 0);\n    this.#last.set([x2 + thX, y2 + thY], 4);\n    this.#last.set(this.#last.subarray(14, 18), 12);\n    this.#last.set([x2 - thX, y2 - thY], 16);\n    if (isNaN(this.#last[6])) {\n      if (this.#top.length === 0) {\n        this.#last.set([x1 + thX, y1 + thY], 2);\n        this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight);\n        this.#last.set([x1 - thX, y1 - thY], 14);\n        this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight);\n      }\n      this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n      return !this.isEmpty();\n    }\n    this.#last.set([x0, y0, x1, y1, x2, y2], 6);\n    const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX));\n    if (angle < Math.PI / 2) {\n      [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n      this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n      [x1, y1, x0, y0] = this.#last.subarray(14, 18);\n      this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight);\n      return true;\n    }\n    [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6);\n    this.#top.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    [x2, y2, x1, y1, x0, y0] = this.#last.subarray(12, 18);\n    this.#bottom.push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);\n    return true;\n  }\n  toSVGPath() {\n    if (this.isEmpty()) {\n      return \"\";\n    }\n    const top = this.#top;\n    const bottom = this.#bottom;\n    if (isNaN(this.#last[6]) && !this.isEmpty()) {\n      return this.#toSVGPathTwoPoints();\n    }\n    const buffer = [];\n    buffer.push(`M${top[4]} ${top[5]}`);\n    for (let i = 6; i < top.length; i += 6) {\n      if (isNaN(top[i])) {\n        buffer.push(`L${top[i + 4]} ${top[i + 5]}`);\n      } else {\n        buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`);\n      }\n    }\n    this.#toSVGPathEnd(buffer);\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      if (isNaN(bottom[i])) {\n        buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`);\n      } else {\n        buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`);\n      }\n    }\n    this.#toSVGPathStart(buffer);\n    return buffer.join(\" \");\n  }\n  #toSVGPathTwoPoints() {\n    const [x, y, width, height] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`;\n  }\n  #toSVGPathStart(buffer) {\n    const bottom = this.#bottom;\n    buffer.push(`L${bottom[4]} ${bottom[5]} Z`);\n  }\n  #toSVGPathEnd(buffer) {\n    const [x, y, width, height] = this.#box;\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`);\n  }\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR);\n  }\n  getOutlines() {\n    const top = this.#top;\n    const bottom = this.#bottom;\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const points = new Float32Array((this.#points?.length ?? 0) + 2);\n    for (let i = 0, ii = points.length - 2; i < ii; i += 2) {\n      points[i] = (this.#points[i] - layerX) / layerWidth;\n      points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;\n    }\n    points[points.length - 2] = (this.#lastX - layerX) / layerWidth;\n    points[points.length - 1] = (this.#lastY - layerY) / layerHeight;\n    if (isNaN(last[6]) && !this.isEmpty()) {\n      return this.#getOutlineTwoPoints(points);\n    }\n    const outline = new Float32Array(this.#top.length + 24 + this.#bottom.length);\n    let N = top.length;\n    for (let i = 0; i < N; i += 2) {\n      if (isNaN(top[i])) {\n        outline[i] = outline[i + 1] = NaN;\n        continue;\n      }\n      outline[i] = top[i];\n      outline[i + 1] = top[i + 1];\n    }\n    N = this.#getOutlineEnd(outline, N);\n    for (let i = bottom.length - 6; i >= 6; i -= 6) {\n      for (let j = 0; j < 6; j += 2) {\n        if (isNaN(bottom[i + j])) {\n          outline[N] = outline[N + 1] = NaN;\n          N += 2;\n          continue;\n        }\n        outline[N] = bottom[i + j];\n        outline[N + 1] = bottom[i + j + 1];\n        N += 2;\n      }\n    }\n    this.#getOutlineStart(outline, N);\n    return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n  }\n  #getOutlineTwoPoints(points) {\n    const last = this.#last;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    const outline = new Float32Array(36);\n    outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0);\n    return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);\n  }\n  #getOutlineStart(outline, pos) {\n    const bottom = this.#bottom;\n    outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos);\n    return pos += 6;\n  }\n  #getOutlineEnd(outline, pos) {\n    const lastTop = this.#last.subarray(4, 6);\n    const lastBottom = this.#last.subarray(16, 18);\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords();\n    outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], pos);\n    return pos += 24;\n  }\n}\nclass FreeDrawOutline extends Outline {\n  #box;\n  #bbox = new Float32Array(4);\n  #innerMargin;\n  #isLTR;\n  #points;\n  #scaleFactor;\n  #outline;\n  constructor(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    super();\n    this.#outline = outline;\n    this.#points = points;\n    this.#box = box;\n    this.#scaleFactor = scaleFactor;\n    this.#innerMargin = innerMargin;\n    this.#isLTR = isLTR;\n    this.firstPoint = [NaN, NaN];\n    this.lastPoint = [NaN, NaN];\n    this.#computeMinMax(isLTR);\n    const [x, y, width, height] = this.#bbox;\n    for (let i = 0, ii = outline.length; i < ii; i += 2) {\n      outline[i] = (outline[i] - x) / width;\n      outline[i + 1] = (outline[i + 1] - y) / height;\n    }\n    for (let i = 0, ii = points.length; i < ii; i += 2) {\n      points[i] = (points[i] - x) / width;\n      points[i + 1] = (points[i + 1] - y) / height;\n    }\n  }\n  toSVGPath() {\n    const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`];\n    for (let i = 6, ii = this.#outline.length; i < ii; i += 6) {\n      if (isNaN(this.#outline[i])) {\n        buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n        continue;\n      }\n      buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`);\n    }\n    buffer.push(\"Z\");\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], rotation) {\n    const width = trX - blX;\n    const height = trY - blY;\n    let outline;\n    let points;\n    switch (rotation) {\n      case 0:\n        outline = Outline._rescale(this.#outline, blX, trY, width, -height);\n        points = Outline._rescale(this.#points, blX, trY, width, -height);\n        break;\n      case 90:\n        outline = Outline._rescaleAndSwap(this.#outline, blX, blY, width, height);\n        points = Outline._rescaleAndSwap(this.#points, blX, blY, width, height);\n        break;\n      case 180:\n        outline = Outline._rescale(this.#outline, trX, blY, -width, height);\n        points = Outline._rescale(this.#points, trX, blY, -width, height);\n        break;\n      case 270:\n        outline = Outline._rescaleAndSwap(this.#outline, trX, trY, -width, -height);\n        points = Outline._rescaleAndSwap(this.#points, trX, trY, -width, -height);\n        break;\n    }\n    return {\n      outline: Array.from(outline),\n      points: [Array.from(points)]\n    };\n  }\n  #computeMinMax(isLTR) {\n    const outline = this.#outline;\n    let lastX = outline[4];\n    let lastY = outline[5];\n    const minMax = [lastX, lastY, lastX, lastY];\n    let firstPointX = lastX;\n    let firstPointY = lastY;\n    let lastPointX = lastX;\n    let lastPointY = lastY;\n    const ltrCallback = isLTR ? Math.max : Math.min;\n    const bezierBbox = new Float32Array(4);\n    for (let i = 6, ii = outline.length; i < ii; i += 6) {\n      const x = outline[i + 4],\n        y = outline[i + 5];\n      if (isNaN(outline[i])) {\n        Util.pointBoundingBox(x, y, minMax);\n        if (firstPointY > y) {\n          firstPointX = x;\n          firstPointY = y;\n        } else if (firstPointY === y) {\n          firstPointX = ltrCallback(firstPointX, x);\n        }\n        if (lastPointY < y) {\n          lastPointX = x;\n          lastPointY = y;\n        } else if (lastPointY === y) {\n          lastPointX = ltrCallback(lastPointX, x);\n        }\n      } else {\n        bezierBbox.set(BBOX_INIT, 0);\n        Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6), bezierBbox);\n        Util.rectBoundingBox(...bezierBbox, minMax);\n        if (firstPointY > bezierBbox[1]) {\n          firstPointX = bezierBbox[0];\n          firstPointY = bezierBbox[1];\n        } else if (firstPointY === bezierBbox[1]) {\n          firstPointX = ltrCallback(firstPointX, bezierBbox[0]);\n        }\n        if (lastPointY < bezierBbox[3]) {\n          lastPointX = bezierBbox[2];\n          lastPointY = bezierBbox[3];\n        } else if (lastPointY === bezierBbox[3]) {\n          lastPointX = ltrCallback(lastPointX, bezierBbox[2]);\n        }\n      }\n      lastX = x;\n      lastY = y;\n    }\n    const bbox = this.#bbox;\n    bbox[0] = minMax[0] - this.#innerMargin;\n    bbox[1] = minMax[1] - this.#innerMargin;\n    bbox[2] = minMax[2] - minMax[0] + 2 * this.#innerMargin;\n    bbox[3] = minMax[3] - minMax[1] + 2 * this.#innerMargin;\n    this.firstPoint = [firstPointX, firstPointY];\n    this.lastPoint = [lastPointX, lastPointY];\n  }\n  get box() {\n    return this.#bbox;\n  }\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeDrawOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);\n  }\n  getNewOutline(thickness, innerMargin) {\n    const [x, y, width, height] = this.#bbox;\n    const [layerX, layerY, layerWidth, layerHeight] = this.#box;\n    const sx = width * layerWidth;\n    const sy = height * layerHeight;\n    const tx = x * layerWidth + layerX;\n    const ty = y * layerHeight + layerY;\n    const outliner = this.newOutliner({\n      x: this.#points[0] * sx + tx,\n      y: this.#points[1] * sy + ty\n    }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin);\n    for (let i = 2; i < this.#points.length; i += 2) {\n      outliner.add({\n        x: this.#points[i] * sx + tx,\n        y: this.#points[i + 1] * sy + ty\n      });\n    }\n    return outliner.getOutlines();\n  }\n}\n\n;// ./src/display/editor/drawers/highlight.js\n\n\n\nclass HighlightOutliner {\n  #box;\n  #firstPoint;\n  #lastPoint;\n  #verticalEdges = [];\n  #intervals = [];\n  constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) {\n    const minMax = BBOX_INIT.slice();\n    const NUMBER_OF_DIGITS = 4;\n    const EPSILON = 10 ** -NUMBER_OF_DIGITS;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON;\n      const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON;\n      const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON;\n      const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON;\n      const left = [x1, y1, y2, true];\n      const right = [x2, y1, y2, false];\n      this.#verticalEdges.push(left, right);\n      Util.rectBoundingBox(x1, y1, x2, y2, minMax);\n    }\n    const bboxWidth = minMax[2] - minMax[0] + 2 * innerMargin;\n    const bboxHeight = minMax[3] - minMax[1] + 2 * innerMargin;\n    const shiftedMinX = minMax[0] - innerMargin;\n    const shiftedMinY = minMax[1] - innerMargin;\n    let firstPointX = isLTR ? -Infinity : Infinity;\n    let firstPointY = Infinity;\n    const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2);\n    const lastPoint = [lastEdge[0], lastEdge[2]];\n    for (const edge of this.#verticalEdges) {\n      const [x, y1, y2, left] = edge;\n      if (!left && isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.max(firstPointX, x);\n        }\n      } else if (left && !isLTR) {\n        if (y1 < firstPointY) {\n          firstPointY = y1;\n          firstPointX = x;\n        } else if (y1 === firstPointY) {\n          firstPointX = Math.min(firstPointX, x);\n        }\n      }\n      edge[0] = (x - shiftedMinX) / bboxWidth;\n      edge[1] = (y1 - shiftedMinY) / bboxHeight;\n      edge[2] = (y2 - shiftedMinY) / bboxHeight;\n    }\n    this.#box = new Float32Array([shiftedMinX, shiftedMinY, bboxWidth, bboxHeight]);\n    this.#firstPoint = [firstPointX, firstPointY];\n    this.#lastPoint = lastPoint;\n  }\n  getOutlines() {\n    this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);\n    const outlineVerticalEdges = [];\n    for (const edge of this.#verticalEdges) {\n      if (edge[3]) {\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n        this.#insert(edge);\n      } else {\n        this.#remove(edge);\n        outlineVerticalEdges.push(...this.#breakEdge(edge));\n      }\n    }\n    return this.#getOutlines(outlineVerticalEdges);\n  }\n  #getOutlines(outlineVerticalEdges) {\n    const edges = [];\n    const allEdges = new Set();\n    for (const edge of outlineVerticalEdges) {\n      const [x, y1, y2] = edge;\n      edges.push([x, y1, edge], [x, y2, edge]);\n    }\n    edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]);\n    for (let i = 0, ii = edges.length; i < ii; i += 2) {\n      const edge1 = edges[i][2];\n      const edge2 = edges[i + 1][2];\n      edge1.push(edge2);\n      edge2.push(edge1);\n      allEdges.add(edge1);\n      allEdges.add(edge2);\n    }\n    const outlines = [];\n    let outline;\n    while (allEdges.size > 0) {\n      const edge = allEdges.values().next().value;\n      let [x, y1, y2, edge1, edge2] = edge;\n      allEdges.delete(edge);\n      let lastPointX = x;\n      let lastPointY = y1;\n      outline = [x, y2];\n      outlines.push(outline);\n      while (true) {\n        let e;\n        if (allEdges.has(edge1)) {\n          e = edge1;\n        } else if (allEdges.has(edge2)) {\n          e = edge2;\n        } else {\n          break;\n        }\n        allEdges.delete(e);\n        [x, y1, y2, edge1, edge2] = e;\n        if (lastPointX !== x) {\n          outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2);\n          lastPointX = x;\n        }\n        lastPointY = lastPointY === y1 ? y2 : y1;\n      }\n      outline.push(lastPointX, lastPointY);\n    }\n    return new HighlightOutline(outlines, this.#box, this.#firstPoint, this.#lastPoint);\n  }\n  #binarySearch(y) {\n    const array = this.#intervals;\n    let start = 0;\n    let end = array.length - 1;\n    while (start <= end) {\n      const middle = start + end >> 1;\n      const y1 = array[middle][0];\n      if (y1 === y) {\n        return middle;\n      }\n      if (y1 < y) {\n        start = middle + 1;\n      } else {\n        end = middle - 1;\n      }\n    }\n    return end + 1;\n  }\n  #insert([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    this.#intervals.splice(index, 0, [y1, y2]);\n  }\n  #remove([, y1, y2]) {\n    const index = this.#binarySearch(y1);\n    for (let i = index; i < this.#intervals.length; i++) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n    for (let i = index - 1; i >= 0; i--) {\n      const [start, end] = this.#intervals[i];\n      if (start !== y1) {\n        break;\n      }\n      if (start === y1 && end === y2) {\n        this.#intervals.splice(i, 1);\n        return;\n      }\n    }\n  }\n  #breakEdge(edge) {\n    const [x, y1, y2] = edge;\n    const results = [[x, y1, y2]];\n    const index = this.#binarySearch(y2);\n    for (let i = 0; i < index; i++) {\n      const [start, end] = this.#intervals[i];\n      for (let j = 0, jj = results.length; j < jj; j++) {\n        const [, y3, y4] = results[j];\n        if (end <= y3 || y4 <= start) {\n          continue;\n        }\n        if (y3 >= start) {\n          if (y4 > end) {\n            results[j][1] = end;\n          } else {\n            if (jj === 1) {\n              return [];\n            }\n            results.splice(j, 1);\n            j--;\n            jj--;\n          }\n          continue;\n        }\n        results[j][2] = start;\n        if (y4 > end) {\n          results.push([x, end, y4]);\n        }\n      }\n    }\n    return results;\n  }\n}\nclass HighlightOutline extends Outline {\n  #box;\n  #outlines;\n  constructor(outlines, box, firstPoint, lastPoint) {\n    super();\n    this.#outlines = outlines;\n    this.#box = box;\n    this.firstPoint = firstPoint;\n    this.lastPoint = lastPoint;\n  }\n  toSVGPath() {\n    const buffer = [];\n    for (const polygon of this.#outlines) {\n      let [prevX, prevY] = polygon;\n      buffer.push(`M${prevX} ${prevY}`);\n      for (let i = 2; i < polygon.length; i += 2) {\n        const x = polygon[i];\n        const y = polygon[i + 1];\n        if (x === prevX) {\n          buffer.push(`V${y}`);\n          prevY = y;\n        } else if (y === prevY) {\n          buffer.push(`H${x}`);\n          prevX = x;\n        }\n      }\n      buffer.push(\"Z\");\n    }\n    return buffer.join(\" \");\n  }\n  serialize([blX, blY, trX, trY], _rotation) {\n    const outlines = [];\n    const width = trX - blX;\n    const height = trY - blY;\n    for (const outline of this.#outlines) {\n      const points = new Array(outline.length);\n      for (let i = 0; i < outline.length; i += 2) {\n        points[i] = blX + outline[i] * width;\n        points[i + 1] = trY - outline[i + 1] * height;\n      }\n      outlines.push(points);\n    }\n    return outlines;\n  }\n  get box() {\n    return this.#box;\n  }\n}\nclass FreeHighlightOutliner extends FreeDrawOutliner {\n  newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {\n    return new FreeHighlightOutline(outline, points, box, scaleFactor, innerMargin, isLTR);\n  }\n}\nclass FreeHighlightOutline extends FreeDrawOutline {\n  newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) {\n    return new FreeHighlightOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);\n  }\n}\n\n;// ./src/display/editor/highlight.js\n\n\n\n\n\n\n\nclass HighlightEditor extends AnnotationEditor {\n  #anchorNode = null;\n  #anchorOffset = 0;\n  #boxes;\n  #clipPathId = null;\n  #colorPicker = null;\n  #focusOutlines = null;\n  #focusNode = null;\n  #focusOffset = 0;\n  #highlightDiv = null;\n  #highlightOutlines = null;\n  #id = null;\n  #isFreeHighlight = false;\n  #firstPoint = null;\n  #lastPoint = null;\n  #outlineId = null;\n  #text = \"\";\n  #thickness;\n  #methodOfCreation = \"\";\n  static _defaultColor = null;\n  static _defaultOpacity = 1;\n  static _defaultThickness = 12;\n  static _type = \"highlight\";\n  static _editorType = AnnotationEditorType.HIGHLIGHT;\n  static _freeHighlightId = -1;\n  static _freeHighlight = null;\n  static _freeHighlightClipId = \"\";\n  static get _keyboardManager() {\n    const proto = HighlightEditor.prototype;\n    return shadow(this, \"_keyboardManager\", new KeyboardManager([[[\"ArrowLeft\"], proto._moveCaret, {\n      args: [0]\n    }], [[\"ArrowRight\"], proto._moveCaret, {\n      args: [1]\n    }], [[\"ArrowUp\"], proto._moveCaret, {\n      args: [2]\n    }], [[\"ArrowDown\"], proto._moveCaret, {\n      args: [3]\n    }]]));\n  }\n  constructor(params) {\n    super({\n      ...params,\n      name: \"highlightEditor\"\n    });\n    this.color = params.color || HighlightEditor._defaultColor;\n    this.#thickness = params.thickness || HighlightEditor._defaultThickness;\n    this.opacity = params.opacity || HighlightEditor._defaultOpacity;\n    this.#boxes = params.boxes || null;\n    this.#methodOfCreation = params.methodOfCreation || \"\";\n    this.#text = params.text || \"\";\n    this._isDraggable = false;\n    this.defaultL10nId = \"pdfjs-editor-highlight-editor\";\n    if (params.highlightId > -1) {\n      this.#isFreeHighlight = true;\n      this.#createFreeOutlines(params);\n      this.#addToDrawLayer();\n    } else if (this.#boxes) {\n      this.#anchorNode = params.anchorNode;\n      this.#anchorOffset = params.anchorOffset;\n      this.#focusNode = params.focusNode;\n      this.#focusOffset = params.focusOffset;\n      this.#createOutlines();\n      this.#addToDrawLayer();\n      this.rotate(this.rotation);\n    }\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.highlight);\n    }\n  }\n  get telemetryInitialData() {\n    return {\n      action: \"added\",\n      type: this.#isFreeHighlight ? \"free_highlight\" : \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color),\n      thickness: this.#thickness,\n      methodOfCreation: this.#methodOfCreation\n    };\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"highlight\",\n      color: this._uiManager.getNonHCMColorName(this.color)\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    return {\n      numberOfColors: data.get(\"color\").size\n    };\n  }\n  #createOutlines() {\n    const outliner = new HighlightOutliner(this.#boxes, 0.001);\n    this.#highlightOutlines = outliner.getOutlines();\n    [this.x, this.y, this.width, this.height] = this.#highlightOutlines.box;\n    const outlinerForOutline = new HighlightOutliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === \"ltr\");\n    this.#focusOutlines = outlinerForOutline.getOutlines();\n    const {\n      firstPoint\n    } = this.#highlightOutlines;\n    this.#firstPoint = [(firstPoint[0] - this.x) / this.width, (firstPoint[1] - this.y) / this.height];\n    const {\n      lastPoint\n    } = this.#focusOutlines;\n    this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height];\n  }\n  #createFreeOutlines({\n    highlightOutlines,\n    highlightId,\n    clipPathId\n  }) {\n    this.#highlightOutlines = highlightOutlines;\n    const extraThickness = 1.5;\n    this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025);\n    if (highlightId >= 0) {\n      this.#id = highlightId;\n      this.#clipPathId = clipPathId;\n      this.parent.drawLayer.finalizeDraw(highlightId, {\n        bbox: highlightOutlines.box,\n        path: {\n          d: highlightOutlines.toSVGPath()\n        }\n      });\n      this.#outlineId = this.parent.drawLayer.drawOutline({\n        rootClass: {\n          highlightOutline: true,\n          free: true\n        },\n        bbox: this.#focusOutlines.box,\n        path: {\n          d: this.#focusOutlines.toSVGPath()\n        }\n      }, true);\n    } else if (this.parent) {\n      const angle = this.parent.viewport.rotation;\n      this.parent.drawLayer.updateProperties(this.#id, {\n        bbox: HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360),\n        path: {\n          d: highlightOutlines.toSVGPath()\n        }\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n        path: {\n          d: this.#focusOutlines.toSVGPath()\n        }\n      });\n    }\n    const [x, y, width, height] = highlightOutlines.box;\n    switch (this.rotation) {\n      case 0:\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 90:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = y;\n          this.y = 1 - x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n      case 180:\n        this.x = 1 - x;\n        this.y = 1 - y;\n        this.width = width;\n        this.height = height;\n        break;\n      case 270:\n        {\n          const [pageWidth, pageHeight] = this.parentDimensions;\n          this.x = 1 - y;\n          this.y = x;\n          this.width = width * pageHeight / pageWidth;\n          this.height = height * pageWidth / pageHeight;\n          break;\n        }\n    }\n    const {\n      firstPoint\n    } = highlightOutlines;\n    this.#firstPoint = [(firstPoint[0] - x) / width, (firstPoint[1] - y) / height];\n    const {\n      lastPoint\n    } = this.#focusOutlines;\n    this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height];\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || \"#fff066\";\n  }\n  static updateDefaultParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        HighlightEditor._defaultColor = value;\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        HighlightEditor._defaultThickness = value;\n        break;\n    }\n  }\n  translateInPage(x, y) {}\n  get toolbarPosition() {\n    return this.#lastPoint;\n  }\n  get commentButtonPosition() {\n    return this.#firstPoint;\n  }\n  updateParams(type, value) {\n    switch (type) {\n      case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n        this.#updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n        this.#updateThickness(value);\n        break;\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]];\n  }\n  get propertiesToUpdate() {\n    return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]];\n  }\n  onUpdatedColor() {\n    this.parent?.drawLayer.updateProperties(this.#id, {\n      root: {\n        fill: this.color,\n        \"fill-opacity\": this.opacity\n      }\n    });\n    this.#colorPicker?.updateColor(this.color);\n    super.onUpdatedColor();\n  }\n  #updateColor(color) {\n    const setColorAndOpacity = (col, opa) => {\n      this.color = col;\n      this.opacity = opa;\n      this.onUpdatedColor();\n    };\n    const savedColor = this.color;\n    const savedOpacity = this.opacity;\n    this.addCommands({\n      cmd: setColorAndOpacity.bind(this, color, HighlightEditor._defaultOpacity),\n      undo: setColorAndOpacity.bind(this, savedColor, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"color_changed\",\n      color: this._uiManager.getNonHCMColorName(color)\n    }, true);\n  }\n  #updateThickness(thickness) {\n    const savedThickness = this.#thickness;\n    const setThickness = th => {\n      this.#thickness = th;\n      this.#changeThickness(th);\n    };\n    this.addCommands({\n      cmd: setThickness.bind(this, thickness),\n      undo: setThickness.bind(this, savedThickness),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_THICKNESS,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n    this._reportTelemetry({\n      action: \"thickness_changed\",\n      thickness\n    }, true);\n  }\n  get toolbarButtons() {\n    if (this._uiManager.highlightColors) {\n      const colorPicker = this.#colorPicker = new ColorPicker({\n        editor: this\n      });\n      return [[\"colorPicker\", colorPicker]];\n    }\n    return super.toolbarButtons;\n  }\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n  fixAndSetPosition() {\n    return super.fixAndSetPosition(this.#getRotation());\n  }\n  getBaseTranslation() {\n    return [0, 0];\n  }\n  getRect(tx, ty) {\n    return super.getRect(tx, ty, this.#getRotation());\n  }\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    if (focus) {\n      this.div.focus();\n    }\n  }\n  remove() {\n    this.#cleanDrawLayer();\n    this._reportTelemetry({\n      action: \"deleted\"\n    });\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    this.#addToDrawLayer();\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this.#addToDrawLayer(parent);\n      mustBeSelected = !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    this.show(this._isVisible);\n    if (mustBeSelected) {\n      this.select();\n    }\n  }\n  #changeThickness(thickness) {\n    if (!this.#isFreeHighlight) {\n      return;\n    }\n    this.#createFreeOutlines({\n      highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2)\n    });\n    this.fixAndSetPosition();\n    this.setDims();\n  }\n  #cleanDrawLayer() {\n    if (this.#id === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this.#id);\n    this.#id = null;\n    this.parent.drawLayer.remove(this.#outlineId);\n    this.#outlineId = null;\n  }\n  #addToDrawLayer(parent = this.parent) {\n    if (this.#id !== null) {\n      return;\n    }\n    ({\n      id: this.#id,\n      clipPathId: this.#clipPathId\n    } = parent.drawLayer.draw({\n      bbox: this.#highlightOutlines.box,\n      root: {\n        viewBox: \"0 0 1 1\",\n        fill: this.color,\n        \"fill-opacity\": this.opacity\n      },\n      rootClass: {\n        highlight: true,\n        free: this.#isFreeHighlight\n      },\n      path: {\n        d: this.#highlightOutlines.toSVGPath()\n      }\n    }, false, true));\n    this.#outlineId = parent.drawLayer.drawOutline({\n      rootClass: {\n        highlightOutline: true,\n        free: this.#isFreeHighlight\n      },\n      bbox: this.#focusOutlines.box,\n      path: {\n        d: this.#focusOutlines.toSVGPath()\n      }\n    }, this.#isFreeHighlight);\n    if (this.#highlightDiv) {\n      this.#highlightDiv.style.clipPath = this.#clipPathId;\n    }\n  }\n  static #rotateBbox([x, y, width, height], angle) {\n    switch (angle) {\n      case 90:\n        return [1 - y - height, x, height, width];\n      case 180:\n        return [1 - x - width, 1 - y - height, width, height];\n      case 270:\n        return [y, 1 - x - width, height, width];\n    }\n    return [x, y, width, height];\n  }\n  rotate(angle) {\n    const {\n      drawLayer\n    } = this.parent;\n    let box;\n    if (this.#isFreeHighlight) {\n      angle = (angle - this.rotation + 360) % 360;\n      box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle);\n    } else {\n      box = HighlightEditor.#rotateBbox([this.x, this.y, this.width, this.height], angle);\n    }\n    drawLayer.updateProperties(this.#id, {\n      bbox: box,\n      root: {\n        \"data-main-rotation\": angle\n      }\n    });\n    drawLayer.updateProperties(this.#outlineId, {\n      bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle),\n      root: {\n        \"data-main-rotation\": angle\n      }\n    });\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    const div = super.render();\n    if (this.#text) {\n      div.setAttribute(\"aria-label\", this.#text);\n      div.setAttribute(\"role\", \"mark\");\n    }\n    if (this.#isFreeHighlight) {\n      div.classList.add(\"free\");\n    } else {\n      this.div.addEventListener(\"keydown\", this.#keydown.bind(this), {\n        signal: this._uiManager._signal\n      });\n    }\n    const highlightDiv = this.#highlightDiv = document.createElement(\"div\");\n    div.append(highlightDiv);\n    highlightDiv.setAttribute(\"aria-hidden\", \"true\");\n    highlightDiv.className = \"internal\";\n    highlightDiv.style.clipPath = this.#clipPathId;\n    this.setDims();\n    bindEvents(this, this.#highlightDiv, [\"pointerover\", \"pointerleave\"]);\n    this.enableEditing();\n    return div;\n  }\n  pointerover() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: true\n        }\n      });\n    }\n  }\n  pointerleave() {\n    if (!this.isSelected) {\n      this.parent?.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hovered: false\n        }\n      });\n    }\n  }\n  #keydown(event) {\n    HighlightEditor._keyboardManager.exec(this, event);\n  }\n  _moveCaret(direction) {\n    this.parent.unselect(this);\n    switch (direction) {\n      case 0:\n      case 2:\n        this.#setCaret(true);\n        break;\n      case 1:\n      case 3:\n        this.#setCaret(false);\n        break;\n    }\n  }\n  #setCaret(start) {\n    if (!this.#anchorNode) {\n      return;\n    }\n    const selection = window.getSelection();\n    if (start) {\n      selection.setPosition(this.#anchorNode, this.#anchorOffset);\n    } else {\n      selection.setPosition(this.#focusNode, this.#focusOffset);\n    }\n  }\n  select() {\n    super.select();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        hovered: false,\n        selected: true\n      }\n    });\n  }\n  unselect() {\n    super.unselect();\n    if (!this.#outlineId) {\n      return;\n    }\n    this.parent?.drawLayer.updateProperties(this.#outlineId, {\n      rootClass: {\n        selected: false\n      }\n    });\n    if (!this.#isFreeHighlight) {\n      this.#setCaret(false);\n    }\n  }\n  get _mustFixPosition() {\n    return !this.#isFreeHighlight;\n  }\n  show(visible = this._isVisible) {\n    super.show(visible);\n    if (this.parent) {\n      this.parent.drawLayer.updateProperties(this.#id, {\n        rootClass: {\n          hidden: !visible\n        }\n      });\n      this.parent.drawLayer.updateProperties(this.#outlineId, {\n        rootClass: {\n          hidden: !visible\n        }\n      });\n    }\n  }\n  #getRotation() {\n    return this.#isFreeHighlight ? this.rotation : 0;\n  }\n  #serializeBoxes() {\n    if (this.#isFreeHighlight) {\n      return null;\n    }\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const boxes = this.#boxes;\n    const quadPoints = new Float32Array(boxes.length * 8);\n    let i = 0;\n    for (const {\n      x,\n      y,\n      width,\n      height\n    } of boxes) {\n      const sx = x * pageWidth + pageX;\n      const sy = (1 - y) * pageHeight + pageY;\n      quadPoints[i] = quadPoints[i + 4] = sx;\n      quadPoints[i + 1] = quadPoints[i + 3] = sy;\n      quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth;\n      quadPoints[i + 5] = quadPoints[i + 7] = sy - height * pageHeight;\n      i += 8;\n    }\n    return quadPoints;\n  }\n  #serializeOutlines(rect) {\n    return this.#highlightOutlines.serialize(rect, this.#getRotation());\n  }\n  static startHighlighting(parent, isLTR, {\n    target: textLayer,\n    x,\n    y\n  }) {\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight\n    } = textLayer.getBoundingClientRect();\n    const ac = new AbortController();\n    const signal = parent.combinedSignal(ac);\n    const pointerUpCallback = e => {\n      ac.abort();\n      this.#endHighlight(parent, e);\n    };\n    window.addEventListener(\"blur\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"pointerup\", pointerUpCallback, {\n      signal\n    });\n    window.addEventListener(\"pointerdown\", stopEvent, {\n      capture: true,\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    textLayer.addEventListener(\"pointermove\", this.#highlightMove.bind(this, parent), {\n      signal\n    });\n    this._freeHighlight = new FreeHighlightOutliner({\n      x,\n      y\n    }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001);\n    ({\n      id: this._freeHighlightId,\n      clipPathId: this._freeHighlightClipId\n    } = parent.drawLayer.draw({\n      bbox: [0, 0, 1, 1],\n      root: {\n        viewBox: \"0 0 1 1\",\n        fill: this._defaultColor,\n        \"fill-opacity\": this._defaultOpacity\n      },\n      rootClass: {\n        highlight: true,\n        free: true\n      },\n      path: {\n        d: this._freeHighlight.toSVGPath()\n      }\n    }, true, true));\n  }\n  static #highlightMove(parent, event) {\n    if (this._freeHighlight.add(event)) {\n      parent.drawLayer.updateProperties(this._freeHighlightId, {\n        path: {\n          d: this._freeHighlight.toSVGPath()\n        }\n      });\n    }\n  }\n  static #endHighlight(parent, event) {\n    if (!this._freeHighlight.isEmpty()) {\n      parent.createAndAddNewEditor(event, false, {\n        highlightId: this._freeHighlightId,\n        highlightOutlines: this._freeHighlight.getOutlines(),\n        clipPathId: this._freeHighlightClipId,\n        methodOfCreation: \"main_toolbar\"\n      });\n    } else {\n      parent.drawLayer.remove(this._freeHighlightId);\n    }\n    this._freeHighlightId = -1;\n    this._freeHighlight = null;\n    this._freeHighlightClipId = \"\";\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof HighlightAnnotationElement) {\n      const {\n        data: {\n          quadPoints,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        opacity,\n        quadPoints,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    } else if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          borderStyle: {\n            rawWidth: thickness\n          },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.HIGHLIGHT,\n        color: Array.from(color),\n        thickness,\n        inkLists,\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const {\n      color,\n      quadPoints,\n      inkLists,\n      outlines,\n      opacity\n    } = data;\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.color = Util.makeHexColor(...color);\n    editor.opacity = opacity || 1;\n    if (inkLists) {\n      editor.#thickness = data.thickness;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [pageX, pageY] = editor.pageTranslation;\n    if (quadPoints) {\n      const boxes = editor.#boxes = [];\n      for (let i = 0; i < quadPoints.length; i += 8) {\n        boxes.push({\n          x: (quadPoints[i] - pageX) / pageWidth,\n          y: 1 - (quadPoints[i + 1] - pageY) / pageHeight,\n          width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,\n          height: (quadPoints[i + 1] - quadPoints[i + 5]) / pageHeight\n        });\n      }\n      editor.#createOutlines();\n      editor.#addToDrawLayer();\n      editor.rotate(editor.rotation);\n    } else if (inkLists || outlines) {\n      editor.#isFreeHighlight = true;\n      const points = (inkLists || outlines.points)[0];\n      const point = {\n        x: points[0] - pageX,\n        y: pageHeight - (points[1] - pageY)\n      };\n      const outliner = new FreeHighlightOutliner(point, [0, 0, pageWidth, pageHeight], 1, editor.#thickness / 2, true, 0.001);\n      for (let i = 0, ii = points.length; i < ii; i += 2) {\n        point.x = points[i] - pageX;\n        point.y = pageHeight - (points[i + 1] - pageY);\n        outliner.add(point);\n      }\n      const {\n        id,\n        clipPathId\n      } = parent.drawLayer.draw({\n        bbox: [0, 0, 1, 1],\n        root: {\n          viewBox: \"0 0 1 1\",\n          fill: editor.color,\n          \"fill-opacity\": editor._defaultOpacity\n        },\n        rootClass: {\n          highlight: true,\n          free: true\n        },\n        path: {\n          d: outliner.toSVGPath()\n        }\n      }, true, true);\n      editor.#createFreeOutlines({\n        highlightOutlines: outliner.getOutlines(),\n        highlightId: id,\n        clipPathId\n      });\n      editor.#addToDrawLayer();\n      editor.rotate(editor.parentRotation);\n    }\n    return editor;\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty() || isForCopying) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const color = AnnotationEditor._colorManager.convert(this._uiManager.getNonHCMColor(this.color));\n    const serialized = super.serialize(isForCopying);\n    Object.assign(serialized, {\n      color,\n      opacity: this.opacity,\n      thickness: this.#thickness,\n      quadPoints: this.#serializeBoxes(),\n      outlines: this.#serializeOutlines(serialized.rect)\n    });\n    this.addComment(serialized);\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      color\n    } = this._initialData;\n    return this.hasEditedComment || serialized.color.some((c, i) => c !== color[i]);\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment\n    });\n    return null;\n  }\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\n;// ./src/display/editor/draw.js\n\n\n\n\nclass DrawingOptions {\n  #svgProperties = Object.create(null);\n  updateProperty(name, value) {\n    this[name] = value;\n    this.updateSVGProperty(name, value);\n  }\n  updateProperties(properties) {\n    if (!properties) {\n      return;\n    }\n    for (const [name, value] of Object.entries(properties)) {\n      if (!name.startsWith(\"_\")) {\n        this.updateProperty(name, value);\n      }\n    }\n  }\n  updateSVGProperty(name, value) {\n    this.#svgProperties[name] = value;\n  }\n  toSVGProperties() {\n    const root = this.#svgProperties;\n    this.#svgProperties = Object.create(null);\n    return {\n      root\n    };\n  }\n  reset() {\n    this.#svgProperties = Object.create(null);\n  }\n  updateAll(options = this) {\n    this.updateProperties(options);\n  }\n  clone() {\n    unreachable(\"Not implemented\");\n  }\n}\nclass DrawingEditor extends AnnotationEditor {\n  #drawOutlines = null;\n  #mustBeCommitted;\n  _colorPicker = null;\n  _drawId = null;\n  static _currentDrawId = -1;\n  static _currentParent = null;\n  static #currentDraw = null;\n  static #currentDrawingAC = null;\n  static #currentDrawingOptions = null;\n  static _INNER_MARGIN = 3;\n  constructor(params) {\n    super(params);\n    this.#mustBeCommitted = params.mustBeCommitted || false;\n    this._addOutlines(params);\n  }\n  onUpdatedColor() {\n    this._colorPicker?.update(this.color);\n    super.onUpdatedColor();\n  }\n  onUpdatedOpacity() {\n    this._colorPicker?.updateOpacity?.(this.opacity);\n  }\n  _addOutlines(params) {\n    if (params.drawOutlines) {\n      this.#createDrawOutlines(params);\n      this.#addToDrawLayer();\n    }\n  }\n  #createDrawOutlines({\n    drawOutlines,\n    drawId,\n    drawingOptions\n  }) {\n    this.#drawOutlines = drawOutlines;\n    this._drawingOptions ||= drawingOptions;\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert[this.editorType]);\n    }\n    if (drawId >= 0) {\n      this._drawId = drawId;\n      this.parent.drawLayer.finalizeDraw(drawId, drawOutlines.defaultProperties);\n    } else {\n      this._drawId = this.#createDrawing(drawOutlines, this.parent);\n    }\n    this.#updateBbox(drawOutlines.box);\n  }\n  #createDrawing(drawOutlines, parent) {\n    const {\n      id\n    } = parent.drawLayer.draw(DrawingEditor._mergeSVGProperties(this._drawingOptions.toSVGProperties(), drawOutlines.defaultSVGProperties), false, false);\n    return id;\n  }\n  static _mergeSVGProperties(p1, p2) {\n    const p1Keys = new Set(Object.keys(p1));\n    for (const [key, value] of Object.entries(p2)) {\n      if (p1Keys.has(key)) {\n        Object.assign(p1[key], value);\n      } else {\n        p1[key] = value;\n      }\n    }\n    return p1;\n  }\n  static getDefaultDrawingOptions(_options) {\n    unreachable(\"Not implemented\");\n  }\n  static get typesMap() {\n    unreachable(\"Not implemented\");\n  }\n  static get isDrawer() {\n    return true;\n  }\n  static get supportMultipleDrawings() {\n    return false;\n  }\n  static updateDefaultParams(type, value) {\n    const propertyName = this.typesMap.get(type);\n    if (propertyName) {\n      this._defaultDrawingOptions.updateProperty(propertyName, value);\n    }\n    if (this._currentParent) {\n      DrawingEditor.#currentDraw.updateProperty(propertyName, value);\n      this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());\n    }\n  }\n  updateParams(type, value) {\n    const propertyName = this.constructor.typesMap.get(type);\n    if (propertyName) {\n      this._updateProperty(type, propertyName, value);\n    }\n  }\n  static get defaultPropertiesToUpdate() {\n    const properties = [];\n    const options = this._defaultDrawingOptions;\n    for (const [type, name] of this.typesMap) {\n      properties.push([type, options[name]]);\n    }\n    return properties;\n  }\n  get propertiesToUpdate() {\n    const properties = [];\n    const {\n      _drawingOptions\n    } = this;\n    for (const [type, name] of this.constructor.typesMap) {\n      properties.push([type, _drawingOptions[name]]);\n    }\n    return properties;\n  }\n  _updateProperty(type, name, value) {\n    const options = this._drawingOptions;\n    const savedValue = options[name];\n    const setter = val => {\n      options.updateProperty(name, val);\n      const bbox = this.#drawOutlines.updateProperty(name, val);\n      if (bbox) {\n        this.#updateBbox(bbox);\n      }\n      this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties());\n      if (type === this.colorType) {\n        this.onUpdatedColor();\n      } else if (type === this.opacityType) {\n        this.onUpdatedOpacity();\n      }\n    };\n    this.addCommands({\n      cmd: setter.bind(this, value),\n      undo: setter.bind(this, savedValue),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _updateColorAndOpacity(color, opacity) {\n    const colorName = this.constructor.typesMap.get(this.colorType);\n    const opacityName = this.constructor.typesMap.get(this.opacityType);\n    const options = this._drawingOptions;\n    const savedColor = options[colorName];\n    const savedOpacity = options[opacityName];\n    const setter = (c, op) => {\n      options.updateProperty(colorName, c);\n      options.updateProperty(opacityName, op);\n      this.#drawOutlines.updateProperty(colorName, c);\n      this.#drawOutlines.updateProperty(opacityName, op);\n      this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties());\n      this.onUpdatedColor();\n      this.onUpdatedOpacity();\n    };\n    this.addCommands({\n      cmd: setter.bind(this, color, opacity),\n      undo: setter.bind(this, savedColor, savedOpacity),\n      post: this._uiManager.updateUI.bind(this._uiManager, this),\n      mustExec: true,\n      type: AnnotationEditorParamsType.INK_COLOR_AND_OPACITY,\n      overwriteIfSameType: true,\n      keepUndo: true\n    });\n  }\n  _onResizing() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizingSVGProperties(this.#convertToDrawSpace()), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onResized() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizedSVGProperties(this.#convertToDrawSpace()), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onTranslating(_x, _y) {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      bbox: this.#rotateBox()\n    });\n  }\n  _onTranslated() {\n    this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathTranslatedSVGProperties(this.#convertToDrawSpace(), this.parentDimensions), {\n      bbox: this.#rotateBox()\n    }));\n  }\n  _onStartDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: true\n      }\n    });\n  }\n  _onStopDragging() {\n    this.parent?.drawLayer.updateProperties(this._drawId, {\n      rootClass: {\n        moving: false\n      }\n    });\n  }\n  commit() {\n    super.commit();\n    this.disableEditMode();\n    this.disableEditing();\n  }\n  disableEditing() {\n    super.disableEditing();\n    this.div.classList.toggle(\"disabled\", true);\n  }\n  enableEditing() {\n    super.enableEditing();\n    this.div.classList.toggle(\"disabled\", false);\n  }\n  getBaseTranslation() {\n    return [0, 0];\n  }\n  get isResizable() {\n    return true;\n  }\n  onceAdded(focus) {\n    if (!this.annotationElementId) {\n      this.parent.addUndoableEditor(this);\n    }\n    this._isDraggable = true;\n    if (this.#mustBeCommitted) {\n      this.#mustBeCommitted = false;\n      this.commit();\n      this.parent.setSelected(this);\n      if (focus && this.isOnScreen) {\n        this.div.focus();\n      }\n    }\n  }\n  remove() {\n    this.#cleanDrawLayer();\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    this.#addToDrawLayer();\n    this.#updateBbox(this.#drawOutlines.box);\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  setParent(parent) {\n    let mustBeSelected = false;\n    if (this.parent && !parent) {\n      this._uiManager.removeShouldRescale(this);\n      this.#cleanDrawLayer();\n    } else if (parent) {\n      this._uiManager.addShouldRescale(this);\n      this.#addToDrawLayer(parent);\n      mustBeSelected = !this.parent && this.div?.classList.contains(\"selectedEditor\");\n    }\n    super.setParent(parent);\n    if (mustBeSelected) {\n      this.select();\n    }\n  }\n  #cleanDrawLayer() {\n    if (this._drawId === null || !this.parent) {\n      return;\n    }\n    this.parent.drawLayer.remove(this._drawId);\n    this._drawId = null;\n    this._drawingOptions.reset();\n  }\n  #addToDrawLayer(parent = this.parent) {\n    if (this._drawId !== null && this.parent === parent) {\n      return;\n    }\n    if (this._drawId !== null) {\n      this.parent.drawLayer.updateParent(this._drawId, parent.drawLayer);\n      return;\n    }\n    this._drawingOptions.updateAll();\n    this._drawId = this.#createDrawing(this.#drawOutlines, parent);\n  }\n  #convertToParentSpace([x, y, width, height]) {\n    const {\n      parentDimensions: [pW, pH],\n      rotation\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [y, 1 - x, width * (pH / pW), height * (pW / pH)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [1 - y, x, width * (pH / pW), height * (pW / pH)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  #convertToDrawSpace() {\n    const {\n      x,\n      y,\n      width,\n      height,\n      parentDimensions: [pW, pH],\n      rotation\n    } = this;\n    switch (rotation) {\n      case 90:\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 180:\n        return [1 - x, 1 - y, width, height];\n      case 270:\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  #updateBbox(bbox) {\n    [this.x, this.y, this.width, this.height] = this.#convertToParentSpace(bbox);\n    if (this.div) {\n      this.fixAndSetPosition();\n      this.setDims();\n    }\n    this._onResized();\n  }\n  #rotateBox() {\n    const {\n      x,\n      y,\n      width,\n      height,\n      rotation,\n      parentRotation,\n      parentDimensions: [pW, pH]\n    } = this;\n    switch ((rotation * 4 + parentRotation) / 90) {\n      case 1:\n        return [1 - y - height, x, height, width];\n      case 2:\n        return [1 - x - width, 1 - y - height, width, height];\n      case 3:\n        return [y, 1 - x - width, height, width];\n      case 4:\n        return [x, y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];\n      case 5:\n        return [1 - y, x, width * (pW / pH), height * (pH / pW)];\n      case 6:\n        return [1 - x - height * (pH / pW), 1 - y, height * (pH / pW), width * (pW / pH)];\n      case 7:\n        return [y - width * (pW / pH), 1 - x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];\n      case 8:\n        return [x - width, y - height, width, height];\n      case 9:\n        return [1 - y, x - width, height, width];\n      case 10:\n        return [1 - x, 1 - y, width, height];\n      case 11:\n        return [y - height, 1 - x, height, width];\n      case 12:\n        return [x - height * (pH / pW), y, height * (pH / pW), width * (pW / pH)];\n      case 13:\n        return [1 - y - width * (pW / pH), x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];\n      case 14:\n        return [1 - x, 1 - y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];\n      case 15:\n        return [y, 1 - x, width * (pW / pH), height * (pH / pW)];\n      default:\n        return [x, y, width, height];\n    }\n  }\n  rotate() {\n    if (!this.parent) {\n      return;\n    }\n    this.parent.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties({\n      bbox: this.#rotateBox()\n    }, this.#drawOutlines.updateRotation((this.parentRotation - this.rotation + 360) % 360)));\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    this.#updateBbox(this.#drawOutlines.updateParentDimensions(this.parentDimensions, this.parent.scale));\n  }\n  static onScaleChangingWhenDrawing() {}\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    const div = super.render();\n    div.classList.add(\"draw\");\n    const drawDiv = document.createElement(\"div\");\n    div.append(drawDiv);\n    drawDiv.setAttribute(\"aria-hidden\", \"true\");\n    drawDiv.className = \"internal\";\n    this.setDims();\n    this._uiManager.addShouldRescale(this);\n    this.disableEditing();\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n    return div;\n  }\n  static createDrawerInstance(_x, _y, _parentWidth, _parentHeight, _rotation) {\n    unreachable(\"Not implemented\");\n  }\n  static startDrawing(parent, uiManager, _isLTR, event) {\n    const {\n      target,\n      offsetX: x,\n      offsetY: y,\n      pointerId,\n      pointerType\n    } = event;\n    if (CurrentPointers.isInitializedAndDifferentPointerType(pointerType)) {\n      return;\n    }\n    const {\n      viewport: {\n        rotation\n      }\n    } = parent;\n    const {\n      width: parentWidth,\n      height: parentHeight\n    } = target.getBoundingClientRect();\n    const ac = DrawingEditor.#currentDrawingAC = new AbortController();\n    const signal = parent.combinedSignal(ac);\n    CurrentPointers.setPointer(pointerType, pointerId);\n    window.addEventListener(\"pointerup\", e => {\n      if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) {\n        this._endDraw(e);\n      }\n    }, {\n      signal\n    });\n    window.addEventListener(\"pointercancel\", e => {\n      if (CurrentPointers.isSamePointerIdOrRemove(e.pointerId)) {\n        this._currentParent.endDrawingSession();\n      }\n    }, {\n      signal\n    });\n    window.addEventListener(\"pointerdown\", e => {\n      if (!CurrentPointers.isSamePointerType(e.pointerType)) {\n        return;\n      }\n      CurrentPointers.initializeAndAddPointerId(e.pointerId);\n      if (DrawingEditor.#currentDraw.isCancellable()) {\n        DrawingEditor.#currentDraw.removeLastElement();\n        if (DrawingEditor.#currentDraw.isEmpty()) {\n          this._currentParent.endDrawingSession(true);\n        } else {\n          this._endDraw(null);\n        }\n      }\n    }, {\n      capture: true,\n      passive: false,\n      signal\n    });\n    window.addEventListener(\"contextmenu\", noContextMenu, {\n      signal\n    });\n    target.addEventListener(\"pointermove\", this._drawMove.bind(this), {\n      signal\n    });\n    target.addEventListener(\"touchmove\", e => {\n      if (CurrentPointers.isSameTimeStamp(e.timeStamp)) {\n        stopEvent(e);\n      }\n    }, {\n      signal\n    });\n    parent.toggleDrawing();\n    uiManager._editorUndoBar?.hide();\n    if (DrawingEditor.#currentDraw) {\n      parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.startNew(x, y, parentWidth, parentHeight, rotation));\n      return;\n    }\n    uiManager.updateUIForDefaultProperties(this);\n    DrawingEditor.#currentDraw = this.createDrawerInstance(x, y, parentWidth, parentHeight, rotation);\n    DrawingEditor.#currentDrawingOptions = this.getDefaultDrawingOptions();\n    this._currentParent = parent;\n    ({\n      id: this._currentDrawId\n    } = parent.drawLayer.draw(this._mergeSVGProperties(DrawingEditor.#currentDrawingOptions.toSVGProperties(), DrawingEditor.#currentDraw.defaultSVGProperties), true, false));\n  }\n  static _drawMove(event) {\n    CurrentPointers.isSameTimeStamp(event.timeStamp);\n    if (!DrawingEditor.#currentDraw) {\n      return;\n    }\n    const {\n      offsetX,\n      offsetY,\n      pointerId\n    } = event;\n    if (!CurrentPointers.isSamePointerId(pointerId)) {\n      return;\n    }\n    if (CurrentPointers.isUsingMultiplePointers()) {\n      this._endDraw(event);\n      return;\n    }\n    this._currentParent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.add(offsetX, offsetY));\n    CurrentPointers.setTimeStamp(event.timeStamp);\n    stopEvent(event);\n  }\n  static _cleanup(all) {\n    if (all) {\n      this._currentDrawId = -1;\n      this._currentParent = null;\n      DrawingEditor.#currentDraw = null;\n      DrawingEditor.#currentDrawingOptions = null;\n      CurrentPointers.clearTimeStamp();\n    }\n    if (DrawingEditor.#currentDrawingAC) {\n      DrawingEditor.#currentDrawingAC.abort();\n      DrawingEditor.#currentDrawingAC = null;\n      CurrentPointers.clearPointerIds();\n    }\n  }\n  static _endDraw(event) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n    parent.toggleDrawing(true);\n    this._cleanup(false);\n    if (event?.target === parent.div) {\n      parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.end(event.offsetX, event.offsetY));\n    }\n    if (this.supportMultipleDrawings) {\n      const draw = DrawingEditor.#currentDraw;\n      const drawId = this._currentDrawId;\n      const lastElement = draw.getLastElement();\n      parent.addCommands({\n        cmd: () => {\n          parent.drawLayer.updateProperties(drawId, draw.setLastElement(lastElement));\n        },\n        undo: () => {\n          parent.drawLayer.updateProperties(drawId, draw.removeLastElement());\n        },\n        mustExec: false,\n        type: AnnotationEditorParamsType.DRAW_STEP\n      });\n      return;\n    }\n    this.endDrawing(false);\n  }\n  static endDrawing(isAborted) {\n    const parent = this._currentParent;\n    if (!parent) {\n      return null;\n    }\n    parent.toggleDrawing(true);\n    parent.cleanUndoStack(AnnotationEditorParamsType.DRAW_STEP);\n    if (!DrawingEditor.#currentDraw.isEmpty()) {\n      const {\n        pageDimensions: [pageWidth, pageHeight],\n        scale\n      } = parent;\n      const editor = parent.createAndAddNewEditor({\n        offsetX: 0,\n        offsetY: 0\n      }, false, {\n        drawId: this._currentDrawId,\n        drawOutlines: DrawingEditor.#currentDraw.getOutlines(pageWidth * scale, pageHeight * scale, scale, this._INNER_MARGIN),\n        drawingOptions: DrawingEditor.#currentDrawingOptions,\n        mustBeCommitted: !isAborted\n      });\n      this._cleanup(true);\n      return editor;\n    }\n    parent.drawLayer.remove(this._currentDrawId);\n    this._cleanup(true);\n    return null;\n  }\n  createDrawingOptions(_data) {}\n  static deserializeDraw(_pageX, _pageY, _pageWidth, _pageHeight, _innerWidth, _data) {\n    unreachable(\"Not implemented\");\n  }\n  static async deserialize(data, parent, uiManager) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight,\n        pageX,\n        pageY\n      }\n    } = parent.viewport;\n    const drawOutlines = this.deserializeDraw(pageX, pageY, pageWidth, pageHeight, this._INNER_MARGIN, data);\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.createDrawingOptions(data);\n    editor.#createDrawOutlines({\n      drawOutlines\n    });\n    editor.#addToDrawLayer();\n    editor.onScaleChanging();\n    editor.rotate();\n    return editor;\n  }\n  serializeDraw(isForCopying) {\n    const [pageX, pageY] = this.pageTranslation;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    return this.#drawOutlines.serialize([pageX, pageY, pageWidth, pageHeight], isForCopying);\n  }\n  renderAnnotationElement(annotation) {\n    annotation.updateEdited({\n      rect: this.getPDFRect()\n    });\n    return null;\n  }\n  static canCreateNewEmptyEditor() {\n    return false;\n  }\n}\n\n;// ./src/display/editor/drawers/inkdraw.js\n\n\n\nclass InkDrawOutliner {\n  #last = new Float64Array(6);\n  #line;\n  #lines;\n  #rotation;\n  #thickness;\n  #points;\n  #lastSVGPath = \"\";\n  #lastIndex = 0;\n  #outlines = new InkDrawOutline();\n  #parentWidth;\n  #parentHeight;\n  constructor(x, y, parentWidth, parentHeight, rotation, thickness) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n    [x, y] = this.#normalizePoint(x, y);\n    const line = this.#line = [NaN, NaN, NaN, NaN, x, y];\n    this.#points = [x, y];\n    this.#lines = [{\n      line,\n      points: this.#points\n    }];\n    this.#last.set(line, 0);\n  }\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      this.#thickness = value;\n    }\n  }\n  #normalizePoint(x, y) {\n    return Outline._normalizePoint(x, y, this.#parentWidth, this.#parentHeight, this.#rotation);\n  }\n  isEmpty() {\n    return !this.#lines?.length;\n  }\n  isCancellable() {\n    return this.#points.length <= 10;\n  }\n  add(x, y) {\n    [x, y] = this.#normalizePoint(x, y);\n    const [x1, y1, x2, y2] = this.#last.subarray(2, 6);\n    const diffX = x - x2;\n    const diffY = y - y2;\n    const d = Math.hypot(this.#parentWidth * diffX, this.#parentHeight * diffY);\n    if (d <= 2) {\n      return null;\n    }\n    this.#points.push(x, y);\n    if (isNaN(x1)) {\n      this.#last.set([x2, y2, x, y], 2);\n      this.#line.push(NaN, NaN, NaN, NaN, x, y);\n      return {\n        path: {\n          d: this.toSVGPath()\n        }\n      };\n    }\n    if (isNaN(this.#last[0])) {\n      this.#line.splice(6, 6);\n    }\n    this.#last.set([x1, y1, x2, y2, x, y], 0);\n    this.#line.push(...Outline.createBezierPoints(x1, y1, x2, y2, x, y));\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  end(x, y) {\n    const change = this.add(x, y);\n    if (change) {\n      return change;\n    }\n    if (this.#points.length === 2) {\n      return {\n        path: {\n          d: this.toSVGPath()\n        }\n      };\n    }\n    return null;\n  }\n  startNew(x, y, parentWidth, parentHeight, rotation) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#rotation = rotation;\n    [x, y] = this.#normalizePoint(x, y);\n    const line = this.#line = [NaN, NaN, NaN, NaN, x, y];\n    this.#points = [x, y];\n    const last = this.#lines.at(-1);\n    if (last) {\n      last.line = new Float32Array(last.line);\n      last.points = new Float32Array(last.points);\n    }\n    this.#lines.push({\n      line,\n      points: this.#points\n    });\n    this.#last.set(line, 0);\n    this.#lastIndex = 0;\n    this.toSVGPath();\n    return null;\n  }\n  getLastElement() {\n    return this.#lines.at(-1);\n  }\n  setLastElement(element) {\n    if (!this.#lines) {\n      return this.#outlines.setLastElement(element);\n    }\n    this.#lines.push(element);\n    this.#line = element.line;\n    this.#points = element.points;\n    this.#lastIndex = 0;\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  removeLastElement() {\n    if (!this.#lines) {\n      return this.#outlines.removeLastElement();\n    }\n    this.#lines.pop();\n    this.#lastSVGPath = \"\";\n    for (let i = 0, ii = this.#lines.length; i < ii; i++) {\n      const {\n        line,\n        points\n      } = this.#lines[i];\n      this.#line = line;\n      this.#points = points;\n      this.#lastIndex = 0;\n      this.toSVGPath();\n    }\n    return {\n      path: {\n        d: this.#lastSVGPath\n      }\n    };\n  }\n  toSVGPath() {\n    const firstX = Outline.svgRound(this.#line[4]);\n    const firstY = Outline.svgRound(this.#line[5]);\n    if (this.#points.length === 2) {\n      this.#lastSVGPath = `${this.#lastSVGPath} M ${firstX} ${firstY} Z`;\n      return this.#lastSVGPath;\n    }\n    if (this.#points.length <= 6) {\n      const i = this.#lastSVGPath.lastIndexOf(\"M\");\n      this.#lastSVGPath = `${this.#lastSVGPath.slice(0, i)} M ${firstX} ${firstY}`;\n      this.#lastIndex = 6;\n    }\n    if (this.#points.length === 4) {\n      const secondX = Outline.svgRound(this.#line[10]);\n      const secondY = Outline.svgRound(this.#line[11]);\n      this.#lastSVGPath = `${this.#lastSVGPath} L ${secondX} ${secondY}`;\n      this.#lastIndex = 12;\n      return this.#lastSVGPath;\n    }\n    const buffer = [];\n    if (this.#lastIndex === 0) {\n      buffer.push(`M ${firstX} ${firstY}`);\n      this.#lastIndex = 6;\n    }\n    for (let i = this.#lastIndex, ii = this.#line.length; i < ii; i += 6) {\n      const [c1x, c1y, c2x, c2y, x, y] = this.#line.slice(i, i + 6).map(Outline.svgRound);\n      buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n    }\n    this.#lastSVGPath += buffer.join(\" \");\n    this.#lastIndex = this.#line.length;\n    return this.#lastSVGPath;\n  }\n  getOutlines(parentWidth, parentHeight, scale, innerMargin) {\n    const last = this.#lines.at(-1);\n    last.line = new Float32Array(last.line);\n    last.points = new Float32Array(last.points);\n    this.#outlines.build(this.#lines, parentWidth, parentHeight, scale, this.#rotation, this.#thickness, innerMargin);\n    this.#last = null;\n    this.#line = null;\n    this.#lines = null;\n    this.#lastSVGPath = null;\n    return this.#outlines;\n  }\n  get defaultSVGProperties() {\n    return {\n      root: {\n        viewBox: \"0 0 10000 10000\"\n      },\n      rootClass: {\n        draw: true\n      },\n      bbox: [0, 0, 1, 1]\n    };\n  }\n}\nclass InkDrawOutline extends Outline {\n  #bbox;\n  #currentRotation = 0;\n  #innerMargin;\n  #lines;\n  #parentWidth;\n  #parentHeight;\n  #parentScale;\n  #rotation;\n  #thickness;\n  build(lines, parentWidth, parentHeight, parentScale, rotation, thickness, innerMargin) {\n    this.#parentWidth = parentWidth;\n    this.#parentHeight = parentHeight;\n    this.#parentScale = parentScale;\n    this.#rotation = rotation;\n    this.#thickness = thickness;\n    this.#innerMargin = innerMargin ?? 0;\n    this.#lines = lines;\n    this.#computeBbox();\n  }\n  get thickness() {\n    return this.#thickness;\n  }\n  setLastElement(element) {\n    this.#lines.push(element);\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  removeLastElement() {\n    this.#lines.pop();\n    return {\n      path: {\n        d: this.toSVGPath()\n      }\n    };\n  }\n  toSVGPath() {\n    const buffer = [];\n    for (const {\n      line\n    } of this.#lines) {\n      buffer.push(`M${Outline.svgRound(line[4])} ${Outline.svgRound(line[5])}`);\n      if (line.length === 6) {\n        buffer.push(\"Z\");\n        continue;\n      }\n      if (line.length === 12 && isNaN(line[6])) {\n        buffer.push(`L${Outline.svgRound(line[10])} ${Outline.svgRound(line[11])}`);\n        continue;\n      }\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6).map(Outline.svgRound);\n        buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);\n      }\n    }\n    return buffer.join(\"\");\n  }\n  serialize([pageX, pageY, pageWidth, pageHeight], isForCopying) {\n    const serializedLines = [];\n    const serializedPoints = [];\n    const [x, y, width, height] = this.#getBBoxWithNoMargin();\n    let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn;\n    switch (this.#rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = pageX;\n        ty = pageY + pageHeight;\n        sx = pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + x * pageWidth;\n        y1 = pageY + (1 - y - height) * pageHeight;\n        x2 = pageX + (x + width) * pageWidth;\n        y2 = pageY + (1 - y) * pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX;\n        ty = pageY;\n        sx = pageWidth;\n        sy = pageHeight;\n        x1 = pageX + y * pageWidth;\n        y1 = pageY + x * pageHeight;\n        x2 = pageX + (y + height) * pageWidth;\n        y2 = pageY + (x + width) * pageHeight;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX + pageWidth;\n        ty = pageY;\n        sx = -pageWidth;\n        sy = pageHeight;\n        x1 = pageX + (1 - x - width) * pageWidth;\n        y1 = pageY + y * pageHeight;\n        x2 = pageX + (1 - x) * pageWidth;\n        y2 = pageY + (y + height) * pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageX + pageWidth;\n        ty = pageY + pageHeight;\n        sx = -pageWidth;\n        sy = -pageHeight;\n        x1 = pageX + (1 - y - height) * pageWidth;\n        y1 = pageY + (1 - x - width) * pageHeight;\n        x2 = pageX + (1 - y) * pageWidth;\n        y2 = pageY + (1 - x) * pageHeight;\n        break;\n    }\n    for (const {\n      line,\n      points\n    } of this.#lines) {\n      serializedLines.push(rescaleFn(line, tx, ty, sx, sy, isForCopying ? new Array(line.length) : null));\n      serializedPoints.push(rescaleFn(points, tx, ty, sx, sy, isForCopying ? new Array(points.length) : null));\n    }\n    return {\n      lines: serializedLines,\n      points: serializedPoints,\n      rect: [x1, y1, x2, y2]\n    };\n  }\n  static deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, {\n    paths: {\n      lines,\n      points\n    },\n    rotation,\n    thickness\n  }) {\n    const newLines = [];\n    let tx, ty, sx, sy, rescaleFn;\n    switch (rotation) {\n      case 0:\n        rescaleFn = Outline._rescale;\n        tx = -pageX / pageWidth;\n        ty = pageY / pageHeight + 1;\n        sx = 1 / pageWidth;\n        sy = -1 / pageHeight;\n        break;\n      case 90:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = -pageY / pageHeight;\n        ty = -pageX / pageWidth;\n        sx = 1 / pageHeight;\n        sy = 1 / pageWidth;\n        break;\n      case 180:\n        rescaleFn = Outline._rescale;\n        tx = pageX / pageWidth + 1;\n        ty = -pageY / pageHeight;\n        sx = -1 / pageWidth;\n        sy = 1 / pageHeight;\n        break;\n      case 270:\n        rescaleFn = Outline._rescaleAndSwap;\n        tx = pageY / pageHeight + 1;\n        ty = pageX / pageWidth + 1;\n        sx = -1 / pageHeight;\n        sy = -1 / pageWidth;\n        break;\n    }\n    if (!lines) {\n      lines = [];\n      for (const point of points) {\n        const len = point.length;\n        if (len === 2) {\n          lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1]]));\n          continue;\n        }\n        if (len === 4) {\n          lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1], NaN, NaN, NaN, NaN, point[2], point[3]]));\n          continue;\n        }\n        const line = new Float32Array(3 * (len - 2));\n        lines.push(line);\n        let [x1, y1, x2, y2] = point.subarray(0, 4);\n        line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n        for (let i = 4; i < len; i += 2) {\n          const x = point[i];\n          const y = point[i + 1];\n          line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);\n          [x1, y1, x2, y2] = [x2, y2, x, y];\n        }\n      }\n    }\n    for (let i = 0, ii = lines.length; i < ii; i++) {\n      newLines.push({\n        line: rescaleFn(lines[i].map(x => x ?? NaN), tx, ty, sx, sy),\n        points: rescaleFn(points[i].map(x => x ?? NaN), tx, ty, sx, sy)\n      });\n    }\n    const outlines = new this.prototype.constructor();\n    outlines.build(newLines, pageWidth, pageHeight, 1, rotation, thickness, innerMargin);\n    return outlines;\n  }\n  #getMarginComponents(thickness = this.#thickness) {\n    const margin = this.#innerMargin + thickness / 2 * this.#parentScale;\n    return this.#rotation % 180 === 0 ? [margin / this.#parentWidth, margin / this.#parentHeight] : [margin / this.#parentHeight, margin / this.#parentWidth];\n  }\n  #getBBoxWithNoMargin() {\n    const [x, y, width, height] = this.#bbox;\n    const [marginX, marginY] = this.#getMarginComponents(0);\n    return [x + marginX, y + marginY, width - 2 * marginX, height - 2 * marginY];\n  }\n  #computeBbox() {\n    const bbox = this.#bbox = F32_BBOX_INIT.slice();\n    for (const {\n      line\n    } of this.#lines) {\n      if (line.length <= 12) {\n        for (let i = 4, ii = line.length; i < ii; i += 6) {\n          Util.pointBoundingBox(line[i], line[i + 1], bbox);\n        }\n        continue;\n      }\n      let lastX = line[4],\n        lastY = line[5];\n      for (let i = 6, ii = line.length; i < ii; i += 6) {\n        const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6);\n        Util.bezierBoundingBox(lastX, lastY, c1x, c1y, c2x, c2y, x, y, bbox);\n        lastX = x;\n        lastY = y;\n      }\n    }\n    const [marginX, marginY] = this.#getMarginComponents();\n    bbox[0] = MathClamp(bbox[0] - marginX, 0, 1);\n    bbox[1] = MathClamp(bbox[1] - marginY, 0, 1);\n    bbox[2] = MathClamp(bbox[2] + marginX, 0, 1);\n    bbox[3] = MathClamp(bbox[3] + marginY, 0, 1);\n    bbox[2] -= bbox[0];\n    bbox[3] -= bbox[1];\n  }\n  get box() {\n    return this.#bbox;\n  }\n  updateProperty(name, value) {\n    if (name === \"stroke-width\") {\n      return this.#updateThickness(value);\n    }\n    return null;\n  }\n  #updateThickness(thickness) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#thickness = thickness;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const [diffMarginX, diffMarginY] = [newMarginX - oldMarginX, newMarginY - oldMarginY];\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n    return bbox;\n  }\n  updateParentDimensions([width, height], scale) {\n    const [oldMarginX, oldMarginY] = this.#getMarginComponents();\n    this.#parentWidth = width;\n    this.#parentHeight = height;\n    this.#parentScale = scale;\n    const [newMarginX, newMarginY] = this.#getMarginComponents();\n    const diffMarginX = newMarginX - oldMarginX;\n    const diffMarginY = newMarginY - oldMarginY;\n    const bbox = this.#bbox;\n    bbox[0] -= diffMarginX;\n    bbox[1] -= diffMarginY;\n    bbox[2] += 2 * diffMarginX;\n    bbox[3] += 2 * diffMarginY;\n    return bbox;\n  }\n  updateRotation(rotation) {\n    this.#currentRotation = rotation;\n    return {\n      path: {\n        transform: this.rotationTransform\n      }\n    };\n  }\n  get viewBox() {\n    return this.#bbox.map(Outline.svgRound).join(\" \");\n  }\n  get defaultProperties() {\n    const [x, y] = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`\n      }\n    };\n  }\n  get rotationTransform() {\n    const [,, width, height] = this.#bbox;\n    let a = 0,\n      b = 0,\n      c = 0,\n      d = 0,\n      e = 0,\n      f = 0;\n    switch (this.#currentRotation) {\n      case 90:\n        b = height / width;\n        c = -width / height;\n        e = width;\n        break;\n      case 180:\n        a = -1;\n        d = -1;\n        e = width;\n        f = height;\n        break;\n      case 270:\n        b = -height / width;\n        c = width / height;\n        f = height;\n        break;\n      default:\n        return \"\";\n    }\n    return `matrix(${a} ${b} ${c} ${d} ${Outline.svgRound(e)} ${Outline.svgRound(f)})`;\n  }\n  getPathResizingSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const [x, y, width, height] = this.#bbox;\n    if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      return {\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: `${this.rotationTransform} translate(${tx} ${ty})`\n        }\n      };\n    }\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const s2x = width / newWidth;\n    const s2y = height / newHeight;\n    return {\n      path: {\n        \"transform-origin\": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`,\n        transform: `${this.rotationTransform} scale(${s2x} ${s2y}) ` + `translate(${Outline.svgRound(marginX)} ${Outline.svgRound(marginY)}) scale(${s1x} ${s1y}) ` + `translate(${Outline.svgRound(-marginX)} ${Outline.svgRound(-marginY)})`\n      }\n    };\n  }\n  getPathResizedSVGProperties([newX, newY, newWidth, newHeight]) {\n    const [marginX, marginY] = this.#getMarginComponents();\n    const bbox = this.#bbox;\n    const [x, y, width, height] = bbox;\n    bbox[0] = newX;\n    bbox[1] = newY;\n    bbox[2] = newWidth;\n    bbox[3] = newHeight;\n    if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {\n      const tx = newX + newWidth / 2 - (x + width / 2);\n      const ty = newY + newHeight / 2 - (y + height / 2);\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n      return {\n        root: {\n          viewBox: this.viewBox\n        },\n        path: {\n          \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n          transform: this.rotationTransform || null,\n          d: this.toSVGPath()\n        }\n      };\n    }\n    const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);\n    const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);\n    const tx = -s1x * (x + marginX) + newX + marginX;\n    const ty = -s1y * (y + marginY) + newY + marginY;\n    if (s1x !== 1 || s1y !== 1 || tx !== 0 || ty !== 0) {\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._rescale(line, tx, ty, s1x, s1y, line);\n        Outline._rescale(points, tx, ty, s1x, s1y, points);\n      }\n    }\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,\n        transform: this.rotationTransform || null,\n        d: this.toSVGPath()\n      }\n    };\n  }\n  getPathTranslatedSVGProperties([newX, newY], parentDimensions) {\n    const [newParentWidth, newParentHeight] = parentDimensions;\n    const bbox = this.#bbox;\n    const tx = newX - bbox[0];\n    const ty = newY - bbox[1];\n    if (this.#parentWidth === newParentWidth && this.#parentHeight === newParentHeight) {\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._translate(line, tx, ty, line);\n        Outline._translate(points, tx, ty, points);\n      }\n    } else {\n      const sx = this.#parentWidth / newParentWidth;\n      const sy = this.#parentHeight / newParentHeight;\n      this.#parentWidth = newParentWidth;\n      this.#parentHeight = newParentHeight;\n      for (const {\n        line,\n        points\n      } of this.#lines) {\n        Outline._rescale(line, tx, ty, sx, sy, line);\n        Outline._rescale(points, tx, ty, sx, sy, points);\n      }\n      bbox[2] *= sx;\n      bbox[3] *= sy;\n    }\n    bbox[0] = newX;\n    bbox[1] = newY;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`\n      }\n    };\n  }\n  get defaultSVGProperties() {\n    const bbox = this.#bbox;\n    return {\n      root: {\n        viewBox: this.viewBox\n      },\n      rootClass: {\n        draw: true\n      },\n      path: {\n        d: this.toSVGPath(),\n        \"transform-origin\": `${Outline.svgRound(bbox[0])} ${Outline.svgRound(bbox[1])}`,\n        transform: this.rotationTransform || null\n      },\n      bbox\n    };\n  }\n}\n\n;// ./src/display/editor/ink.js\n\n\n\n\n\n\nclass InkDrawingOptions extends DrawingOptions {\n  constructor(viewerParameters) {\n    super();\n    this._viewParameters = viewerParameters;\n    super.updateProperties({\n      fill: \"none\",\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-opacity\": 1,\n      \"stroke-width\": 1,\n      \"stroke-linecap\": \"round\",\n      \"stroke-linejoin\": \"round\",\n      \"stroke-miterlimit\": 10\n    });\n  }\n  updateSVGProperty(name, value) {\n    if (name === \"stroke-width\") {\n      value ??= this[\"stroke-width\"];\n      value *= this._viewParameters.realScale;\n    }\n    super.updateSVGProperty(name, value);\n  }\n  clone() {\n    const clone = new InkDrawingOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass InkEditor extends DrawingEditor {\n  static _type = \"ink\";\n  static _editorType = AnnotationEditorType.INK;\n  static _defaultDrawingOptions = null;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"inkEditor\"\n    });\n    this._willKeepAspectRatio = true;\n    this.defaultL10nId = \"pdfjs-editor-ink-editor\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    this._defaultDrawingOptions = new InkDrawingOptions(uiManager.viewParameters);\n  }\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n  static get supportMultipleDrawings() {\n    return true;\n  }\n  static get typesMap() {\n    return shadow(this, \"typesMap\", new Map([[AnnotationEditorParamsType.INK_THICKNESS, \"stroke-width\"], [AnnotationEditorParamsType.INK_COLOR, \"stroke\"], [AnnotationEditorParamsType.INK_OPACITY, \"stroke-opacity\"]]));\n  }\n  static createDrawerInstance(x, y, parentWidth, parentHeight, rotation) {\n    return new InkDrawOutliner(x, y, parentWidth, parentHeight, rotation, this._defaultDrawingOptions[\"stroke-width\"]);\n  }\n  static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {\n    return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    if (data instanceof InkAnnotationElement) {\n      const {\n        data: {\n          inkLists,\n          rect,\n          rotation,\n          id,\n          color,\n          opacity,\n          borderStyle: {\n            rawWidth: thickness\n          },\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        parent: {\n          page: {\n            pageNumber\n          }\n        }\n      } = data;\n      initialData = data = {\n        annotationType: AnnotationEditorType.INK,\n        color: Array.from(color),\n        thickness,\n        opacity,\n        paths: {\n          points: inkLists\n        },\n        boxes: null,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    return editor;\n  }\n  get toolbarButtons() {\n    this._colorPicker ||= new BasicColorPicker(this);\n    return [[\"colorPicker\", this._colorPicker]];\n  }\n  get colorType() {\n    return AnnotationEditorParamsType.INK_COLOR;\n  }\n  get colorAndOpacityType() {\n    return AnnotationEditorParamsType.INK_COLOR_AND_OPACITY;\n  }\n  get opacityType() {\n    return AnnotationEditorParamsType.INK_OPACITY;\n  }\n  updateParams(type, value) {\n    if (type === AnnotationEditorParamsType.INK_COLOR_AND_OPACITY) {\n      this._updateColorAndOpacity(value.color, value.opacity);\n      return;\n    }\n    super.updateParams(type, value);\n  }\n  static updateDefaultParams(type, value) {\n    if (type === AnnotationEditorParamsType.INK_COLOR_AND_OPACITY) {\n      super.updateDefaultParams(AnnotationEditorParamsType.INK_COLOR, value.color);\n      super.updateDefaultParams(AnnotationEditorParamsType.INK_OPACITY, value.opacity);\n      return;\n    }\n    super.updateDefaultParams(type, value);\n  }\n  get color() {\n    return this._drawingOptions.stroke;\n  }\n  get opacity() {\n    return this._drawingOptions[\"stroke-opacity\"];\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    super.onScaleChanging();\n    const {\n      _drawId,\n      _drawingOptions,\n      parent\n    } = this;\n    _drawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(_drawId, _drawingOptions.toSVGProperties());\n  }\n  static onScaleChangingWhenDrawing() {\n    const parent = this._currentParent;\n    if (!parent) {\n      return;\n    }\n    super.onScaleChangingWhenDrawing();\n    this._defaultDrawingOptions.updateSVGProperty(\"stroke-width\");\n    parent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());\n  }\n  createDrawingOptions({\n    color,\n    thickness,\n    opacity\n  }) {\n    this._drawingOptions = InkEditor.getDefaultDrawingOptions({\n      stroke: Util.makeHexColor(...color),\n      \"stroke-width\": thickness,\n      \"stroke-opacity\": opacity\n    });\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const {\n      lines,\n      points\n    } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: {\n        stroke,\n        \"stroke-opacity\": opacity,\n        \"stroke-width\": thickness\n      }\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      color: AnnotationEditor._colorManager.convert(stroke),\n      opacity,\n      thickness,\n      paths: {\n        lines,\n        points\n      }\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.isCopy = true;\n      return serialized;\n    }\n    if (this.annotationElementId && !this.#hasElementChanged(serialized)) {\n      return null;\n    }\n    serialized.id = this.annotationElementId;\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      color,\n      thickness,\n      opacity,\n      pageIndex\n    } = this._initialData;\n    return this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized || serialized.color.some((c, i) => c !== color[i]) || serialized.thickness !== thickness || serialized.opacity !== opacity || serialized.pageIndex !== pageIndex;\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    const {\n      points,\n      rect\n    } = this.serializeDraw(false);\n    annotation.updateEdited({\n      rect,\n      thickness: this._drawingOptions[\"stroke-width\"],\n      points,\n      popup: this.comment\n    });\n    return null;\n  }\n}\n\n;// ./src/display/editor/drawers/contour.js\n\nclass ContourDrawOutline extends InkDrawOutline {\n  toSVGPath() {\n    let path = super.toSVGPath();\n    if (!path.endsWith(\"Z\")) {\n      path += \"Z\";\n    }\n    return path;\n  }\n}\n\n;// ./src/display/editor/drawers/signaturedraw.js\n\n\n\n\nconst BASE_HEADER_LENGTH = 8;\nconst POINTS_PROPERTIES_NUMBER = 3;\nclass SignatureExtractor {\n  static #PARAMETERS = {\n    maxDim: 512,\n    sigmaSFactor: 0.02,\n    sigmaR: 25,\n    kernelSize: 16\n  };\n  static #neighborIndexToId(i0, j0, i, j) {\n    i -= i0;\n    j -= j0;\n    if (i === 0) {\n      return j > 0 ? 0 : 4;\n    }\n    if (i === 1) {\n      return j + 6;\n    }\n    return 2 - j;\n  }\n  static #neighborIdToIndex = new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1]);\n  static #clockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (-k + id - offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n  static #counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) {\n    const id = this.#neighborIndexToId(i0, j0, i, j);\n    for (let k = 0; k < 8; k++) {\n      const kk = (k + id + offset + 16) % 8;\n      const shiftI = this.#neighborIdToIndex[2 * kk];\n      const shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n      if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {\n        return kk;\n      }\n    }\n    return -1;\n  }\n  static #findContours(buf, width, height, threshold) {\n    const N = buf.length;\n    const types = new Int32Array(N);\n    for (let i = 0; i < N; i++) {\n      types[i] = buf[i] <= threshold ? 1 : 0;\n    }\n    for (let i = 1; i < height - 1; i++) {\n      types[i * width] = types[i * width + width - 1] = 0;\n    }\n    for (let i = 0; i < width; i++) {\n      types[i] = types[width * height - 1 - i] = 0;\n    }\n    let nbd = 1;\n    let lnbd;\n    const contours = [];\n    for (let i = 1; i < height - 1; i++) {\n      lnbd = 1;\n      for (let j = 1; j < width - 1; j++) {\n        const ij = i * width + j;\n        const pix = types[ij];\n        if (pix === 0) {\n          continue;\n        }\n        let i2 = i;\n        let j2 = j;\n        if (pix === 1 && types[ij - 1] === 0) {\n          nbd += 1;\n          j2 -= 1;\n        } else if (pix >= 1 && types[ij + 1] === 0) {\n          nbd += 1;\n          j2 += 1;\n          if (pix > 1) {\n            lnbd = pix;\n          }\n        } else {\n          if (pix !== 1) {\n            lnbd = Math.abs(pix);\n          }\n          continue;\n        }\n        const points = [j, i];\n        const isHole = j2 === j + 1;\n        const contour = {\n          isHole,\n          points,\n          id: nbd,\n          parent: 0\n        };\n        contours.push(contour);\n        let contour0;\n        for (const c of contours) {\n          if (c.id === lnbd) {\n            contour0 = c;\n            break;\n          }\n        }\n        if (!contour0) {\n          contour.parent = isHole ? lnbd : 0;\n        } else if (contour0.isHole) {\n          contour.parent = isHole ? contour0.parent : lnbd;\n        } else {\n          contour.parent = isHole ? lnbd : contour0.parent;\n        }\n        const k = this.#clockwiseNonZero(types, width, i, j, i2, j2, 0);\n        if (k === -1) {\n          types[ij] = -nbd;\n          if (types[ij] !== 1) {\n            lnbd = Math.abs(types[ij]);\n          }\n          continue;\n        }\n        let shiftI = this.#neighborIdToIndex[2 * k];\n        let shiftJ = this.#neighborIdToIndex[2 * k + 1];\n        const i1 = i + shiftI;\n        const j1 = j + shiftJ;\n        i2 = i1;\n        j2 = j1;\n        let i3 = i;\n        let j3 = j;\n        while (true) {\n          const kk = this.#counterClockwiseNonZero(types, width, i3, j3, i2, j2, 1);\n          shiftI = this.#neighborIdToIndex[2 * kk];\n          shiftJ = this.#neighborIdToIndex[2 * kk + 1];\n          const i4 = i3 + shiftI;\n          const j4 = j3 + shiftJ;\n          points.push(j4, i4);\n          const ij3 = i3 * width + j3;\n          if (types[ij3 + 1] === 0) {\n            types[ij3] = -nbd;\n          } else if (types[ij3] === 1) {\n            types[ij3] = nbd;\n          }\n          if (i4 === i && j4 === j && i3 === i1 && j3 === j1) {\n            if (types[ij] !== 1) {\n              lnbd = Math.abs(types[ij]);\n            }\n            break;\n          } else {\n            i2 = i3;\n            j2 = j3;\n            i3 = i4;\n            j3 = j4;\n          }\n        }\n      }\n    }\n    return contours;\n  }\n  static #douglasPeuckerHelper(points, start, end, output) {\n    if (end - start <= 4) {\n      for (let i = start; i < end - 2; i += 2) {\n        output.push(points[i], points[i + 1]);\n      }\n      return;\n    }\n    const ax = points[start];\n    const ay = points[start + 1];\n    const abx = points[end - 4] - ax;\n    const aby = points[end - 3] - ay;\n    const dist = Math.hypot(abx, aby);\n    const nabx = abx / dist;\n    const naby = aby / dist;\n    const aa = nabx * ay - naby * ax;\n    const m = aby / abx;\n    const invS = 1 / dist;\n    const phi = Math.atan(m);\n    const cosPhi = Math.cos(phi);\n    const sinPhi = Math.sin(phi);\n    const tmax = invS * (Math.abs(cosPhi) + Math.abs(sinPhi));\n    const poly = invS * (1 - tmax + tmax ** 2);\n    const partialPhi = Math.max(Math.atan(Math.abs(sinPhi + cosPhi) * poly), Math.atan(Math.abs(sinPhi - cosPhi) * poly));\n    let dmax = 0;\n    let index = start;\n    for (let i = start + 2; i < end - 2; i += 2) {\n      const d = Math.abs(aa - nabx * points[i + 1] + naby * points[i]);\n      if (d > dmax) {\n        index = i;\n        dmax = d;\n      }\n    }\n    if (dmax > (dist * partialPhi) ** 2) {\n      this.#douglasPeuckerHelper(points, start, index + 2, output);\n      this.#douglasPeuckerHelper(points, index, end, output);\n    } else {\n      output.push(ax, ay);\n    }\n  }\n  static #douglasPeucker(points) {\n    const output = [];\n    const len = points.length;\n    this.#douglasPeuckerHelper(points, 0, len, output);\n    output.push(points[len - 2], points[len - 1]);\n    return output.length <= 4 ? null : output;\n  }\n  static #bilateralFilter(buf, width, height, sigmaS, sigmaR, kernelSize) {\n    const kernel = new Float32Array(kernelSize ** 2);\n    const sigmaS2 = -2 * sigmaS ** 2;\n    const halfSize = kernelSize >> 1;\n    for (let i = 0; i < kernelSize; i++) {\n      const x = (i - halfSize) ** 2;\n      for (let j = 0; j < kernelSize; j++) {\n        kernel[i * kernelSize + j] = Math.exp((x + (j - halfSize) ** 2) / sigmaS2);\n      }\n    }\n    const rangeValues = new Float32Array(256);\n    const sigmaR2 = -2 * sigmaR ** 2;\n    for (let i = 0; i < 256; i++) {\n      rangeValues[i] = Math.exp(i ** 2 / sigmaR2);\n    }\n    const N = buf.length;\n    const out = new Uint8Array(N);\n    const histogram = new Uint32Array(256);\n    for (let i = 0; i < height; i++) {\n      for (let j = 0; j < width; j++) {\n        const ij = i * width + j;\n        const center = buf[ij];\n        let sum = 0;\n        let norm = 0;\n        for (let k = 0; k < kernelSize; k++) {\n          const y = i + k - halfSize;\n          if (y < 0 || y >= height) {\n            continue;\n          }\n          for (let l = 0; l < kernelSize; l++) {\n            const x = j + l - halfSize;\n            if (x < 0 || x >= width) {\n              continue;\n            }\n            const neighbour = buf[y * width + x];\n            const w = kernel[k * kernelSize + l] * rangeValues[Math.abs(neighbour - center)];\n            sum += neighbour * w;\n            norm += w;\n          }\n        }\n        const pix = out[ij] = Math.round(sum / norm);\n        histogram[pix]++;\n      }\n    }\n    return [out, histogram];\n  }\n  static #getHistogram(buf) {\n    const histogram = new Uint32Array(256);\n    for (const g of buf) {\n      histogram[g]++;\n    }\n    return histogram;\n  }\n  static #toUint8(buf) {\n    const N = buf.length;\n    const out = new Uint8ClampedArray(N >> 2);\n    let max = -Infinity;\n    let min = Infinity;\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      const pix = out[i] = buf[i << 2];\n      max = Math.max(max, pix);\n      min = Math.min(min, pix);\n    }\n    const ratio = 255 / (max - min);\n    for (let i = 0, ii = out.length; i < ii; i++) {\n      out[i] = (out[i] - min) * ratio;\n    }\n    return out;\n  }\n  static #guessThreshold(histogram) {\n    let i;\n    let M = -Infinity;\n    let L = -Infinity;\n    const min = histogram.findIndex(v => v !== 0);\n    let pos = min;\n    let spos = min;\n    for (i = min; i < 256; i++) {\n      const v = histogram[i];\n      if (v > M) {\n        if (i - pos > L) {\n          L = i - pos;\n          spos = i - 1;\n        }\n        M = v;\n        pos = i;\n      }\n    }\n    for (i = spos - 1; i >= 0; i--) {\n      if (histogram[i] > histogram[i + 1]) {\n        break;\n      }\n    }\n    return i;\n  }\n  static #getGrayPixels(bitmap) {\n    const originalBitmap = bitmap;\n    const {\n      width,\n      height\n    } = bitmap;\n    const {\n      maxDim\n    } = this.#PARAMETERS;\n    let newWidth = width;\n    let newHeight = height;\n    if (width > maxDim || height > maxDim) {\n      let prevWidth = width;\n      let prevHeight = height;\n      let steps = Math.log2(Math.max(width, height) / maxDim);\n      const isteps = Math.floor(steps);\n      steps = steps === isteps ? isteps - 1 : isteps;\n      for (let i = 0; i < steps; i++) {\n        newWidth = Math.ceil(prevWidth / 2);\n        newHeight = Math.ceil(prevHeight / 2);\n        const offscreen = new OffscreenCanvas(newWidth, newHeight);\n        const ctx = offscreen.getContext(\"2d\");\n        ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n        prevWidth = newWidth;\n        prevHeight = newHeight;\n        if (bitmap !== originalBitmap) {\n          bitmap.close();\n        }\n        bitmap = offscreen.transferToImageBitmap();\n      }\n      const ratio = Math.min(maxDim / newWidth, maxDim / newHeight);\n      newWidth = Math.round(newWidth * ratio);\n      newHeight = Math.round(newHeight * ratio);\n    }\n    const offscreen = new OffscreenCanvas(newWidth, newHeight);\n    const ctx = offscreen.getContext(\"2d\", {\n      willReadFrequently: true\n    });\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, newWidth, newHeight);\n    ctx.filter = \"grayscale(1)\";\n    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, newWidth, newHeight);\n    const grayImage = ctx.getImageData(0, 0, newWidth, newHeight).data;\n    const uint8Buf = this.#toUint8(grayImage);\n    return [uint8Buf, newWidth, newHeight];\n  }\n  static extractContoursFromText(text, {\n    fontFamily,\n    fontStyle,\n    fontWeight\n  }, pageWidth, pageHeight, rotation, innerMargin) {\n    let canvas = new OffscreenCanvas(1, 1);\n    let ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const fontSize = 200;\n    const font = ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;\n    const {\n      actualBoundingBoxLeft,\n      actualBoundingBoxRight,\n      actualBoundingBoxAscent,\n      actualBoundingBoxDescent,\n      fontBoundingBoxAscent,\n      fontBoundingBoxDescent,\n      width\n    } = ctx.measureText(text);\n    const SCALE = 1.5;\n    const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE);\n    const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE);\n    canvas = new OffscreenCanvas(canvasWidth, canvasHeight);\n    ctx = canvas.getContext(\"2d\", {\n      alpha: true,\n      willReadFrequently: true\n    });\n    ctx.font = font;\n    ctx.filter = \"grayscale(1)\";\n    ctx.fillStyle = \"white\";\n    ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n    ctx.fillStyle = \"black\";\n    ctx.fillText(text, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2);\n    const uint8Buf = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data);\n    const histogram = this.#getHistogram(uint8Buf);\n    const threshold = this.#guessThreshold(histogram);\n    const contourList = this.#findContours(uint8Buf, canvasWidth, canvasHeight, threshold);\n    return this.processDrawnLines({\n      lines: {\n        curves: contourList,\n        width: canvasWidth,\n        height: canvasHeight\n      },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true\n    });\n  }\n  static process(bitmap, pageWidth, pageHeight, rotation, innerMargin) {\n    const [uint8Buf, width, height] = this.#getGrayPixels(bitmap);\n    const [buffer, histogram] = this.#bilateralFilter(uint8Buf, width, height, Math.hypot(width, height) * this.#PARAMETERS.sigmaSFactor, this.#PARAMETERS.sigmaR, this.#PARAMETERS.kernelSize);\n    const threshold = this.#guessThreshold(histogram);\n    const contourList = this.#findContours(buffer, width, height, threshold);\n    return this.processDrawnLines({\n      lines: {\n        curves: contourList,\n        width,\n        height\n      },\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin,\n      mustSmooth: true,\n      areContours: true\n    });\n  }\n  static processDrawnLines({\n    lines,\n    pageWidth,\n    pageHeight,\n    rotation,\n    innerMargin,\n    mustSmooth,\n    areContours\n  }) {\n    if (rotation % 180 !== 0) {\n      [pageWidth, pageHeight] = [pageHeight, pageWidth];\n    }\n    const {\n      curves,\n      width,\n      height\n    } = lines;\n    const thickness = lines.thickness ?? 0;\n    const linesAndPoints = [];\n    const ratio = Math.min(pageWidth / width, pageHeight / height);\n    const xScale = ratio / pageWidth;\n    const yScale = ratio / pageHeight;\n    const newCurves = [];\n    for (const {\n      points\n    } of curves) {\n      const reducedPoints = mustSmooth ? this.#douglasPeucker(points) : points;\n      if (!reducedPoints) {\n        continue;\n      }\n      newCurves.push(reducedPoints);\n      const len = reducedPoints.length;\n      const newPoints = new Float32Array(len);\n      const line = new Float32Array(3 * (len === 2 ? 2 : len - 2));\n      linesAndPoints.push({\n        line,\n        points: newPoints\n      });\n      if (len === 2) {\n        newPoints[0] = reducedPoints[0] * xScale;\n        newPoints[1] = reducedPoints[1] * yScale;\n        line.set([NaN, NaN, NaN, NaN, newPoints[0], newPoints[1]], 0);\n        continue;\n      }\n      let [x1, y1, x2, y2] = reducedPoints;\n      x1 *= xScale;\n      y1 *= yScale;\n      x2 *= xScale;\n      y2 *= yScale;\n      newPoints.set([x1, y1, x2, y2], 0);\n      line.set([NaN, NaN, NaN, NaN, x1, y1], 0);\n      for (let i = 4; i < len; i += 2) {\n        const x = newPoints[i] = reducedPoints[i] * xScale;\n        const y = newPoints[i + 1] = reducedPoints[i + 1] * yScale;\n        line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);\n        [x1, y1, x2, y2] = [x2, y2, x, y];\n      }\n    }\n    if (linesAndPoints.length === 0) {\n      return null;\n    }\n    const outline = areContours ? new ContourDrawOutline() : new InkDrawOutline();\n    outline.build(linesAndPoints, pageWidth, pageHeight, 1, rotation, areContours ? 0 : thickness, innerMargin);\n    return {\n      outline,\n      newCurves,\n      areContours,\n      thickness,\n      width,\n      height\n    };\n  }\n  static async compressSignature({\n    outlines,\n    areContours,\n    thickness,\n    width,\n    height\n  }) {\n    let minDiff = Infinity;\n    let maxDiff = -Infinity;\n    let outlinesLength = 0;\n    for (const points of outlines) {\n      outlinesLength += points.length;\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        const dx = points[i] - points[i - 2];\n        minDiff = Math.min(minDiff, dx);\n        maxDiff = Math.max(maxDiff, dx);\n      }\n    }\n    let bufferType;\n    if (minDiff >= -128 && maxDiff <= 127) {\n      bufferType = Int8Array;\n    } else if (minDiff >= -32768 && maxDiff <= 32767) {\n      bufferType = Int16Array;\n    } else {\n      bufferType = Int32Array;\n    }\n    const len = outlines.length;\n    const headerLength = BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * len;\n    const header = new Uint32Array(headerLength);\n    let offset = 0;\n    header[offset++] = headerLength * Uint32Array.BYTES_PER_ELEMENT + (outlinesLength - 2 * len) * bufferType.BYTES_PER_ELEMENT;\n    header[offset++] = 0;\n    header[offset++] = width;\n    header[offset++] = height;\n    header[offset++] = areContours ? 0 : 1;\n    header[offset++] = Math.max(0, Math.floor(thickness ?? 0));\n    header[offset++] = len;\n    header[offset++] = bufferType.BYTES_PER_ELEMENT;\n    for (const points of outlines) {\n      header[offset++] = points.length - 2;\n      header[offset++] = points[0];\n      header[offset++] = points[1];\n    }\n    const cs = new CompressionStream(\"deflate-raw\");\n    const writer = cs.writable.getWriter();\n    await writer.ready;\n    writer.write(header);\n    const BufferCtor = bufferType.prototype.constructor;\n    for (const points of outlines) {\n      const diffs = new BufferCtor(points.length - 2);\n      for (let i = 2, ii = points.length; i < ii; i++) {\n        diffs[i - 2] = points[i] - points[i - 2];\n      }\n      writer.write(diffs);\n    }\n    writer.close();\n    const bytes = await new Response(cs.readable).bytes();\n    return bytes.toBase64();\n  }\n  static async decompressSignature(signatureData) {\n    try {\n      const bytes = Uint8Array.fromBase64(signatureData);\n      const {\n        readable,\n        writable\n      } = new DecompressionStream(\"deflate-raw\");\n      const writer = writable.getWriter();\n      await writer.ready;\n      writer.write(bytes).then(async () => {\n        await writer.ready;\n        await writer.close();\n      }).catch(() => {});\n      let data = null;\n      let offset = 0;\n      for await (const chunk of readable) {\n        data ||= new Uint8Array(new Uint32Array(chunk.buffer, 0, 4)[0]);\n        data.set(chunk, offset);\n        offset += chunk.length;\n      }\n      const header = new Uint32Array(data.buffer, 0, data.length >> 2);\n      const version = header[1];\n      if (version !== 0) {\n        throw new Error(`Invalid version: ${version}`);\n      }\n      const width = header[2];\n      const height = header[3];\n      const areContours = header[4] === 0;\n      const thickness = header[5];\n      const numberOfDrawings = header[6];\n      const bufferType = header[7];\n      const outlines = [];\n      const diffsOffset = (BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * numberOfDrawings) * Uint32Array.BYTES_PER_ELEMENT;\n      let diffs;\n      switch (bufferType) {\n        case Int8Array.BYTES_PER_ELEMENT:\n          diffs = new Int8Array(data.buffer, diffsOffset);\n          break;\n        case Int16Array.BYTES_PER_ELEMENT:\n          diffs = new Int16Array(data.buffer, diffsOffset);\n          break;\n        case Int32Array.BYTES_PER_ELEMENT:\n          diffs = new Int32Array(data.buffer, diffsOffset);\n          break;\n      }\n      offset = 0;\n      for (let i = 0; i < numberOfDrawings; i++) {\n        const len = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH];\n        const points = new Float32Array(len + 2);\n        outlines.push(points);\n        for (let j = 0; j < POINTS_PROPERTIES_NUMBER - 1; j++) {\n          points[j] = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH + j + 1];\n        }\n        for (let j = 0; j < len; j++) {\n          points[j + 2] = points[j] + diffs[offset++];\n        }\n      }\n      return {\n        areContours,\n        thickness,\n        outlines,\n        width,\n        height\n      };\n    } catch (e) {\n      warn(`decompressSignature: ${e}`);\n      return null;\n    }\n  }\n}\n\n;// ./src/display/editor/signature.js\n\n\n\n\n\n\n\nclass SignatureOptions extends DrawingOptions {\n  constructor() {\n    super();\n    super.updateProperties({\n      fill: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 0\n    });\n  }\n  clone() {\n    const clone = new SignatureOptions();\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass DrawnSignatureOptions extends InkDrawingOptions {\n  constructor(viewerParameters) {\n    super(viewerParameters);\n    super.updateProperties({\n      stroke: AnnotationEditor._defaultLineColor,\n      \"stroke-width\": 1\n    });\n  }\n  clone() {\n    const clone = new DrawnSignatureOptions(this._viewParameters);\n    clone.updateAll(this);\n    return clone;\n  }\n}\nclass SignatureEditor extends DrawingEditor {\n  #isExtracted = false;\n  #description = null;\n  #signatureData = null;\n  #signatureUUID = null;\n  static _type = \"signature\";\n  static _editorType = AnnotationEditorType.SIGNATURE;\n  static _defaultDrawingOptions = null;\n  constructor(params) {\n    super({\n      ...params,\n      mustBeCommitted: true,\n      name: \"signatureEditor\"\n    });\n    this._willKeepAspectRatio = true;\n    this.#signatureData = params.signatureData || null;\n    this.#description = null;\n    this.defaultL10nId = \"pdfjs-editor-signature-editor1\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n    this._defaultDrawingOptions = new SignatureOptions();\n    this._defaultDrawnSignatureOptions = new DrawnSignatureOptions(uiManager.viewParameters);\n  }\n  static getDefaultDrawingOptions(options) {\n    const clone = this._defaultDrawingOptions.clone();\n    clone.updateProperties(options);\n    return clone;\n  }\n  static get supportMultipleDrawings() {\n    return false;\n  }\n  static get typesMap() {\n    return shadow(this, \"typesMap\", new Map());\n  }\n  static get isDrawer() {\n    return false;\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"signature\",\n      hasDescription: !!this.#description\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    const hasDescriptionStats = data.get(\"hasDescription\");\n    return {\n      hasAltText: hasDescriptionStats.get(true) ?? 0,\n      hasNoAltText: hasDescriptionStats.get(false) ?? 0\n    };\n  }\n  get isResizable() {\n    return true;\n  }\n  onScaleChanging() {\n    if (this._drawId === null) {\n      return;\n    }\n    super.onScaleChanging();\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    const {\n      _isCopy\n    } = this;\n    if (_isCopy) {\n      this._isCopy = false;\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    if (this._drawId === null) {\n      if (this.#signatureData) {\n        const {\n          lines,\n          mustSmooth,\n          areContours,\n          description,\n          uuid,\n          heightInPage\n        } = this.#signatureData;\n        const {\n          rawDims: {\n            pageWidth,\n            pageHeight\n          },\n          rotation\n        } = this.parent.viewport;\n        const outline = SignatureExtractor.processDrawnLines({\n          lines,\n          pageWidth,\n          pageHeight,\n          rotation,\n          innerMargin: SignatureEditor._INNER_MARGIN,\n          mustSmooth,\n          areContours\n        });\n        this.addSignature(outline, heightInPage, description, uuid);\n      } else {\n        this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n          description: \"\"\n        }));\n        this.div.hidden = true;\n        this._uiManager.getSignature(this);\n      }\n    } else {\n      this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n        description: this.#description || \"\"\n      }));\n    }\n    if (_isCopy) {\n      this._isCopy = true;\n      this._moveAfterPaste(baseX, baseY);\n    }\n    return this.div;\n  }\n  setUuid(uuid) {\n    this.#signatureUUID = uuid;\n    this.addEditToolbar();\n  }\n  getUuid() {\n    return this.#signatureUUID;\n  }\n  get description() {\n    return this.#description;\n  }\n  set description(description) {\n    this.#description = description;\n    if (!this.div) {\n      return;\n    }\n    this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n      description\n    }));\n    super.addEditToolbar().then(toolbar => {\n      toolbar?.updateEditSignatureButton(description);\n    });\n  }\n  getSignaturePreview() {\n    const {\n      newCurves,\n      areContours,\n      thickness,\n      width,\n      height\n    } = this.#signatureData;\n    const maxDim = Math.max(width, height);\n    const outlineData = SignatureExtractor.processDrawnLines({\n      lines: {\n        curves: newCurves.map(points => ({\n          points\n        })),\n        thickness,\n        width,\n        height\n      },\n      pageWidth: maxDim,\n      pageHeight: maxDim,\n      rotation: 0,\n      innerMargin: 0,\n      mustSmooth: false,\n      areContours\n    });\n    return {\n      areContours,\n      outline: outlineData.outline\n    };\n  }\n  get toolbarButtons() {\n    if (this._uiManager.signatureManager) {\n      return [[\"editSignature\", this._uiManager.signatureManager]];\n    }\n    return super.toolbarButtons;\n  }\n  addSignature(data, heightInPage, description, uuid) {\n    const {\n      x: savedX,\n      y: savedY\n    } = this;\n    const {\n      outline\n    } = this.#signatureData = data;\n    this.#isExtracted = outline instanceof ContourDrawOutline;\n    this.description = description;\n    let drawingOptions;\n    if (this.#isExtracted) {\n      drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();\n      drawingOptions.updateProperties({\n        \"stroke-width\": outline.thickness\n      });\n    }\n    this._addOutlines({\n      drawOutlines: outline,\n      drawingOptions\n    });\n    const [, pageHeight] = this.pageDimensions;\n    let newHeight = heightInPage / pageHeight;\n    newHeight = newHeight >= 1 ? 0.5 : newHeight;\n    this.width *= newHeight / this.height;\n    if (this.width >= 1) {\n      newHeight *= 0.9 / this.width;\n      this.width = 0.9;\n    }\n    this.height = newHeight;\n    this.setDims();\n    this.x = savedX;\n    this.y = savedY;\n    this.center();\n    this._onResized();\n    this.onScaleChanging();\n    this.rotate();\n    this._uiManager.addToAnnotationStorage(this);\n    this.setUuid(uuid);\n    this._reportTelemetry({\n      action: \"pdfjs.signature.inserted\",\n      data: {\n        hasBeenSaved: !!uuid,\n        hasDescription: !!description\n      }\n    });\n    this.div.hidden = false;\n  }\n  getFromImage(bitmap) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);\n  }\n  getFromText(text, fontInfo) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.extractContoursFromText(text, fontInfo, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);\n  }\n  getDrawnSignature(curves) {\n    const {\n      rawDims: {\n        pageWidth,\n        pageHeight\n      },\n      rotation\n    } = this.parent.viewport;\n    return SignatureExtractor.processDrawnLines({\n      lines: curves,\n      pageWidth,\n      pageHeight,\n      rotation,\n      innerMargin: SignatureEditor._INNER_MARGIN,\n      mustSmooth: false,\n      areContours: false\n    });\n  }\n  createDrawingOptions({\n    areContours,\n    thickness\n  }) {\n    if (areContours) {\n      this._drawingOptions = SignatureEditor.getDefaultDrawingOptions();\n    } else {\n      this._drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();\n      this._drawingOptions.updateProperties({\n        \"stroke-width\": thickness\n      });\n    }\n  }\n  serialize(isForCopying = false) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    const {\n      lines,\n      points\n    } = this.serializeDraw(isForCopying);\n    const {\n      _drawingOptions: {\n        \"stroke-width\": thickness\n      }\n    } = this;\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      isSignature: true,\n      areContours: this.#isExtracted,\n      color: [0, 0, 0],\n      thickness: this.#isExtracted ? 0 : thickness\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.paths = {\n        lines,\n        points\n      };\n      serialized.uuid = this.#signatureUUID;\n      serialized.isCopy = true;\n    } else {\n      serialized.lines = lines;\n    }\n    if (this.#description) {\n      serialized.accessibilityData = {\n        type: \"Figure\",\n        alt: this.#description\n      };\n    }\n    return serialized;\n  }\n  static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {\n    if (data.areContours) {\n      return ContourDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n    }\n    return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);\n  }\n  static async deserialize(data, parent, uiManager) {\n    const editor = await super.deserialize(data, parent, uiManager);\n    editor.#isExtracted = data.areContours;\n    editor.description = data.accessibilityData?.alt || \"\";\n    editor.#signatureUUID = data.uuid;\n    return editor;\n  }\n}\n\n;// ./src/display/editor/stamp.js\n\n\n\n\nclass StampEditor extends AnnotationEditor {\n  #bitmap = null;\n  #bitmapId = null;\n  #bitmapPromise = null;\n  #bitmapUrl = null;\n  #bitmapFile = null;\n  #bitmapFileName = \"\";\n  #canvas = null;\n  #missingCanvas = false;\n  #resizeTimeoutId = null;\n  #isSvg = false;\n  #hasBeenAddedInUndoStack = false;\n  static _type = \"stamp\";\n  static _editorType = AnnotationEditorType.STAMP;\n  constructor(params) {\n    super({\n      ...params,\n      name: \"stampEditor\"\n    });\n    this.#bitmapUrl = params.bitmapUrl;\n    this.#bitmapFile = params.bitmapFile;\n    this.defaultL10nId = \"pdfjs-editor-stamp-editor\";\n  }\n  static initialize(l10n, uiManager) {\n    AnnotationEditor.initialize(l10n, uiManager);\n  }\n  static isHandlingMimeForPasting(mime) {\n    return SupportedImageMimeTypes.includes(mime);\n  }\n  static paste(item, parent) {\n    parent.pasteEditor({\n      mode: AnnotationEditorType.STAMP\n    }, {\n      bitmapFile: item.getAsFile()\n    });\n  }\n  altTextFinish() {\n    if (this._uiManager.useNewAltTextFlow) {\n      this.div.hidden = false;\n    }\n    super.altTextFinish();\n  }\n  get telemetryFinalData() {\n    return {\n      type: \"stamp\",\n      hasAltText: !!this.altTextData?.altText\n    };\n  }\n  static computeTelemetryFinalData(data) {\n    const hasAltTextStats = data.get(\"hasAltText\");\n    return {\n      hasAltText: hasAltTextStats.get(true) ?? 0,\n      hasNoAltText: hasAltTextStats.get(false) ?? 0\n    };\n  }\n  #getBitmapFetched(data, fromId = false) {\n    if (!data) {\n      this.remove();\n      return;\n    }\n    this.#bitmap = data.bitmap;\n    if (!fromId) {\n      this.#bitmapId = data.id;\n      this.#isSvg = data.isSvg;\n    }\n    if (data.file) {\n      this.#bitmapFileName = data.file.name;\n    }\n    this.#createCanvas();\n  }\n  #getBitmapDone() {\n    this.#bitmapPromise = null;\n    this._uiManager.enableWaiting(false);\n    if (!this.#canvas) {\n      return;\n    }\n    if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) {\n      this.addEditToolbar().then(() => {\n        this._editToolbar.hide();\n        this._uiManager.editAltText(this, true);\n      });\n      return;\n    }\n    if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) {\n      this._reportTelemetry({\n        action: \"pdfjs.image.image_added\",\n        data: {\n          alt_text_modal: false,\n          alt_text_type: \"empty\"\n        }\n      });\n      try {\n        this.mlGuessAltText();\n      } catch {}\n    }\n    this.div.focus();\n  }\n  async mlGuessAltText(imageData = null, updateAltTextData = true) {\n    if (this.hasAltTextData()) {\n      return null;\n    }\n    const {\n      mlManager\n    } = this._uiManager;\n    if (!mlManager) {\n      throw new Error(\"No ML.\");\n    }\n    if (!(await mlManager.isEnabledFor(\"altText\"))) {\n      throw new Error(\"ML isn't enabled for alt text.\");\n    }\n    const {\n      data,\n      width,\n      height\n    } = imageData || this.copyCanvas(null, null, true).imageData;\n    const response = await mlManager.guess({\n      name: \"altText\",\n      request: {\n        data,\n        width,\n        height,\n        channels: data.length / (width * height)\n      }\n    });\n    if (!response) {\n      throw new Error(\"No response from the AI service.\");\n    }\n    if (response.error) {\n      throw new Error(\"Error from the AI service.\");\n    }\n    if (response.cancel) {\n      return null;\n    }\n    if (!response.output) {\n      throw new Error(\"No valid response from the AI service.\");\n    }\n    const altText = response.output;\n    await this.setGuessedAltText(altText);\n    if (updateAltTextData && !this.hasAltTextData()) {\n      this.altTextData = {\n        alt: altText,\n        decorative: false\n      };\n    }\n    return altText;\n  }\n  #getBitmap() {\n    if (this.#bitmapId) {\n      this._uiManager.enableWaiting(true);\n      this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapUrl) {\n      const url = this.#bitmapUrl;\n      this.#bitmapUrl = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    if (this.#bitmapFile) {\n      const file = this.#bitmapFile;\n      this.#bitmapFile = null;\n      this._uiManager.enableWaiting(true);\n      this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone());\n      return;\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.accept = SupportedImageMimeTypes.join(\",\");\n    const signal = this._uiManager._signal;\n    this.#bitmapPromise = new Promise(resolve => {\n      input.addEventListener(\"change\", async () => {\n        if (!input.files || input.files.length === 0) {\n          this.remove();\n        } else {\n          this._uiManager.enableWaiting(true);\n          const data = await this._uiManager.imageManager.getFromFile(input.files[0]);\n          this._reportTelemetry({\n            action: \"pdfjs.image.image_selected\",\n            data: {\n              alt_text_modal: this._uiManager.useNewAltTextFlow\n            }\n          });\n          this.#getBitmapFetched(data);\n        }\n        resolve();\n      }, {\n        signal\n      });\n      input.addEventListener(\"cancel\", () => {\n        this.remove();\n        resolve();\n      }, {\n        signal\n      });\n    }).finally(() => this.#getBitmapDone());\n    input.click();\n  }\n  remove() {\n    if (this.#bitmapId) {\n      this.#bitmap = null;\n      this._uiManager.imageManager.deleteId(this.#bitmapId);\n      this.#canvas?.remove();\n      this.#canvas = null;\n      if (this.#resizeTimeoutId) {\n        clearTimeout(this.#resizeTimeoutId);\n        this.#resizeTimeoutId = null;\n      }\n    }\n    super.remove();\n  }\n  rebuild() {\n    if (!this.parent) {\n      if (this.#bitmapId) {\n        this.#getBitmap();\n      }\n      return;\n    }\n    super.rebuild();\n    if (this.div === null) {\n      return;\n    }\n    if (this.#bitmapId && this.#canvas === null) {\n      this.#getBitmap();\n    }\n    if (!this.isAttachedToDOM) {\n      this.parent.add(this);\n    }\n  }\n  onceAdded(focus) {\n    this._isDraggable = true;\n    if (focus) {\n      this.div.focus();\n    }\n  }\n  isEmpty() {\n    return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId || this.#missingCanvas);\n  }\n  get toolbarButtons() {\n    return [[\"altText\", this.createAltText()]];\n  }\n  get isResizable() {\n    return true;\n  }\n  render() {\n    if (this.div) {\n      return this.div;\n    }\n    let baseX, baseY;\n    if (this._isCopy) {\n      baseX = this.x;\n      baseY = this.y;\n    }\n    super.render();\n    this.div.hidden = true;\n    this.createAltText();\n    if (!this.#missingCanvas) {\n      if (this.#bitmap) {\n        this.#createCanvas();\n      } else {\n        this.#getBitmap();\n      }\n    }\n    if (this._isCopy) {\n      this._moveAfterPaste(baseX, baseY);\n    }\n    this._uiManager.addShouldRescale(this);\n    return this.div;\n  }\n  setCanvas(annotationElementId, canvas) {\n    const {\n      id: bitmapId,\n      bitmap\n    } = this._uiManager.imageManager.getFromCanvas(annotationElementId, canvas);\n    canvas.remove();\n    if (bitmapId && this._uiManager.imageManager.isValidId(bitmapId)) {\n      this.#bitmapId = bitmapId;\n      if (bitmap) {\n        this.#bitmap = bitmap;\n      }\n      this.#missingCanvas = false;\n      this.#createCanvas();\n    }\n  }\n  _onResized() {\n    this.onScaleChanging();\n  }\n  onScaleChanging() {\n    if (!this.parent) {\n      return;\n    }\n    if (this.#resizeTimeoutId !== null) {\n      clearTimeout(this.#resizeTimeoutId);\n    }\n    const TIME_TO_WAIT = 200;\n    this.#resizeTimeoutId = setTimeout(() => {\n      this.#resizeTimeoutId = null;\n      this.#drawBitmap();\n    }, TIME_TO_WAIT);\n  }\n  #createCanvas() {\n    const {\n      div\n    } = this;\n    let {\n      width,\n      height\n    } = this.#bitmap;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const MAX_RATIO = 0.75;\n    if (this.width) {\n      width = this.width * pageWidth;\n      height = this.height * pageHeight;\n    } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {\n      const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);\n      width *= factor;\n      height *= factor;\n    }\n    this._uiManager.enableWaiting(false);\n    const canvas = this.#canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\"role\", \"img\");\n    this.addContainer(canvas);\n    this.width = width / pageWidth;\n    this.height = height / pageHeight;\n    this.setDims();\n    if (this._initialOptions?.isCentered) {\n      this.center();\n    } else {\n      this.fixAndSetPosition();\n    }\n    this._initialOptions = null;\n    if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) {\n      div.hidden = false;\n    }\n    this.#drawBitmap();\n    if (!this.#hasBeenAddedInUndoStack) {\n      this.parent.addUndoableEditor(this);\n      this.#hasBeenAddedInUndoStack = true;\n    }\n    this._reportTelemetry({\n      action: \"inserted_image\"\n    });\n    if (this.#bitmapFileName) {\n      this.div.setAttribute(\"aria-description\", this.#bitmapFileName);\n    }\n    if (!this.annotationElementId) {\n      this._uiManager.a11yAlert(AnnotationEditor._l10nAlert.stamp);\n    }\n  }\n  copyCanvas(maxDataDimension, maxPreviewDimension, createImageData = false) {\n    maxDataDimension ||= 224;\n    const {\n      width: bitmapWidth,\n      height: bitmapHeight\n    } = this.#bitmap;\n    const outputScale = new OutputScale();\n    let bitmap = this.#bitmap;\n    let width = bitmapWidth,\n      height = bitmapHeight;\n    let canvas = null;\n    if (maxPreviewDimension) {\n      if (bitmapWidth > maxPreviewDimension || bitmapHeight > maxPreviewDimension) {\n        const ratio = Math.min(maxPreviewDimension / bitmapWidth, maxPreviewDimension / bitmapHeight);\n        width = Math.floor(bitmapWidth * ratio);\n        height = Math.floor(bitmapHeight * ratio);\n      }\n      canvas = document.createElement(\"canvas\");\n      const scaledWidth = canvas.width = Math.ceil(width * outputScale.sx);\n      const scaledHeight = canvas.height = Math.ceil(height * outputScale.sy);\n      if (!this.#isSvg) {\n        bitmap = this.#scaleBitmap(scaledWidth, scaledHeight);\n      }\n      const ctx = canvas.getContext(\"2d\");\n      ctx.filter = this._uiManager.hcmFilter;\n      let white = \"white\",\n        black = \"#cfcfd8\";\n      if (this._uiManager.hcmFilter !== \"none\") {\n        black = \"black\";\n      } else if (ColorScheme.isDarkMode) {\n        white = \"#8f8f9d\";\n        black = \"#42414d\";\n      }\n      const boxDim = 15;\n      const boxDimWidth = boxDim * outputScale.sx;\n      const boxDimHeight = boxDim * outputScale.sy;\n      const pattern = new OffscreenCanvas(boxDimWidth * 2, boxDimHeight * 2);\n      const patternCtx = pattern.getContext(\"2d\");\n      patternCtx.fillStyle = white;\n      patternCtx.fillRect(0, 0, boxDimWidth * 2, boxDimHeight * 2);\n      patternCtx.fillStyle = black;\n      patternCtx.fillRect(0, 0, boxDimWidth, boxDimHeight);\n      patternCtx.fillRect(boxDimWidth, boxDimHeight, boxDimWidth, boxDimHeight);\n      ctx.fillStyle = ctx.createPattern(pattern, \"repeat\");\n      ctx.fillRect(0, 0, scaledWidth, scaledHeight);\n      ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);\n    }\n    let imageData = null;\n    if (createImageData) {\n      let dataWidth, dataHeight;\n      if (outputScale.symmetric && bitmap.width < maxDataDimension && bitmap.height < maxDataDimension) {\n        dataWidth = bitmap.width;\n        dataHeight = bitmap.height;\n      } else {\n        bitmap = this.#bitmap;\n        if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) {\n          const ratio = Math.min(maxDataDimension / bitmapWidth, maxDataDimension / bitmapHeight);\n          dataWidth = Math.floor(bitmapWidth * ratio);\n          dataHeight = Math.floor(bitmapHeight * ratio);\n          if (!this.#isSvg) {\n            bitmap = this.#scaleBitmap(dataWidth, dataHeight);\n          }\n        }\n      }\n      const offscreen = new OffscreenCanvas(dataWidth, dataHeight);\n      const offscreenCtx = offscreen.getContext(\"2d\", {\n        willReadFrequently: true\n      });\n      offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, dataWidth, dataHeight);\n      imageData = {\n        width: dataWidth,\n        height: dataHeight,\n        data: offscreenCtx.getImageData(0, 0, dataWidth, dataHeight).data\n      };\n    }\n    return {\n      canvas,\n      width,\n      height,\n      imageData\n    };\n  }\n  #scaleBitmap(width, height) {\n    const {\n      width: bitmapWidth,\n      height: bitmapHeight\n    } = this.#bitmap;\n    let newWidth = bitmapWidth;\n    let newHeight = bitmapHeight;\n    let bitmap = this.#bitmap;\n    while (newWidth > 2 * width || newHeight > 2 * height) {\n      const prevWidth = newWidth;\n      const prevHeight = newHeight;\n      if (newWidth > 2 * width) {\n        newWidth = Math.ceil(newWidth / 2);\n      }\n      if (newHeight > 2 * height) {\n        newHeight = Math.ceil(newHeight / 2);\n      }\n      const offscreen = new OffscreenCanvas(newWidth, newHeight);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);\n      bitmap = offscreen.transferToImageBitmap();\n    }\n    return bitmap;\n  }\n  #drawBitmap() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const {\n      width,\n      height\n    } = this;\n    const outputScale = new OutputScale();\n    const scaledWidth = Math.ceil(width * parentWidth * outputScale.sx);\n    const scaledHeight = Math.ceil(height * parentHeight * outputScale.sy);\n    const canvas = this.#canvas;\n    if (!canvas || canvas.width === scaledWidth && canvas.height === scaledHeight) {\n      return;\n    }\n    canvas.width = scaledWidth;\n    canvas.height = scaledHeight;\n    const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(scaledWidth, scaledHeight);\n    const ctx = canvas.getContext(\"2d\");\n    ctx.filter = this._uiManager.hcmFilter;\n    ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);\n  }\n  #serializeBitmap(toUrl) {\n    if (toUrl) {\n      if (this.#isSvg) {\n        const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId);\n        if (url) {\n          return url;\n        }\n      }\n      const canvas = document.createElement(\"canvas\");\n      ({\n        width: canvas.width,\n        height: canvas.height\n      } = this.#bitmap);\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0);\n      return canvas.toDataURL();\n    }\n    if (this.#isSvg) {\n      const [pageWidth, pageHeight] = this.pageDimensions;\n      const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS);\n      const offscreen = new OffscreenCanvas(width, height);\n      const ctx = offscreen.getContext(\"2d\");\n      ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height);\n      return offscreen.transferToImageBitmap();\n    }\n    return structuredClone(this.#bitmap);\n  }\n  static async deserialize(data, parent, uiManager) {\n    let initialData = null;\n    let missingCanvas = false;\n    if (data instanceof StampAnnotationElement) {\n      const {\n        data: {\n          rect,\n          rotation,\n          id,\n          structParent,\n          popupRef,\n          richText,\n          contentsObj,\n          creationDate,\n          modificationDate\n        },\n        container,\n        parent: {\n          page: {\n            pageNumber\n          }\n        },\n        canvas\n      } = data;\n      let bitmapId, bitmap;\n      if (canvas) {\n        delete data.canvas;\n        ({\n          id: bitmapId,\n          bitmap\n        } = uiManager.imageManager.getFromCanvas(container.id, canvas));\n        canvas.remove();\n      } else {\n        missingCanvas = true;\n        data._hasNoCanvas = true;\n      }\n      const altText = (await parent._structTree.getAriaAttributes(`${AnnotationPrefix}${id}`))?.get(\"aria-label\") || \"\";\n      initialData = data = {\n        annotationType: AnnotationEditorType.STAMP,\n        bitmapId,\n        bitmap,\n        pageIndex: pageNumber - 1,\n        rect: rect.slice(0),\n        rotation,\n        annotationElementId: id,\n        id,\n        deleted: false,\n        accessibilityData: {\n          decorative: false,\n          altText\n        },\n        isSvg: false,\n        structParent,\n        popupRef,\n        richText,\n        comment: contentsObj?.str || null,\n        creationDate,\n        modificationDate\n      };\n    }\n    const editor = await super.deserialize(data, parent, uiManager);\n    const {\n      rect,\n      bitmap,\n      bitmapUrl,\n      bitmapId,\n      isSvg,\n      accessibilityData\n    } = data;\n    if (missingCanvas) {\n      uiManager.addMissingCanvas(data.id, editor);\n      editor.#missingCanvas = true;\n    } else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {\n      editor.#bitmapId = bitmapId;\n      if (bitmap) {\n        editor.#bitmap = bitmap;\n      }\n    } else {\n      editor.#bitmapUrl = bitmapUrl;\n    }\n    editor.#isSvg = isSvg;\n    const [parentWidth, parentHeight] = editor.pageDimensions;\n    editor.width = (rect[2] - rect[0]) / parentWidth;\n    editor.height = (rect[3] - rect[1]) / parentHeight;\n    if (accessibilityData) {\n      editor.altTextData = accessibilityData;\n    }\n    editor._initialData = initialData;\n    if (data.comment) {\n      editor.setCommentData(data);\n    }\n    editor.#hasBeenAddedInUndoStack = !!initialData;\n    return editor;\n  }\n  serialize(isForCopying = false, context = null) {\n    if (this.isEmpty()) {\n      return null;\n    }\n    if (this.deleted) {\n      return this.serializeDeleted();\n    }\n    const serialized = Object.assign(super.serialize(isForCopying), {\n      bitmapId: this.#bitmapId,\n      isSvg: this.#isSvg\n    });\n    this.addComment(serialized);\n    if (isForCopying) {\n      serialized.bitmapUrl = this.#serializeBitmap(true);\n      serialized.accessibilityData = this.serializeAltText(true);\n      serialized.isCopy = true;\n      return serialized;\n    }\n    const {\n      decorative,\n      altText\n    } = this.serializeAltText(false);\n    if (!decorative && altText) {\n      serialized.accessibilityData = {\n        type: \"Figure\",\n        alt: altText\n      };\n    }\n    if (this.annotationElementId) {\n      const changes = this.#hasElementChanged(serialized);\n      if (changes.isSame) {\n        return null;\n      }\n      if (changes.isSameAltText) {\n        delete serialized.accessibilityData;\n      } else {\n        serialized.accessibilityData.structParent = this._initialData.structParent ?? -1;\n      }\n      serialized.id = this.annotationElementId;\n      delete serialized.bitmapId;\n      return serialized;\n    }\n    if (context === null) {\n      return serialized;\n    }\n    context.stamps ||= new Map();\n    const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;\n    if (!context.stamps.has(this.#bitmapId)) {\n      context.stamps.set(this.#bitmapId, {\n        area,\n        serialized\n      });\n      serialized.bitmap = this.#serializeBitmap(false);\n    } else if (this.#isSvg) {\n      const prevData = context.stamps.get(this.#bitmapId);\n      if (area > prevData.area) {\n        prevData.area = area;\n        prevData.serialized.bitmap.close();\n        prevData.serialized.bitmap = this.#serializeBitmap(false);\n      }\n    }\n    return serialized;\n  }\n  #hasElementChanged(serialized) {\n    const {\n      pageIndex,\n      accessibilityData: {\n        altText\n      }\n    } = this._initialData;\n    const isSamePageIndex = serialized.pageIndex === pageIndex;\n    const isSameAltText = (serialized.accessibilityData?.alt || \"\") === altText;\n    return {\n      isSame: !this.hasEditedComment && !this._hasBeenMoved && !this._hasBeenResized && isSamePageIndex && isSameAltText,\n      isSameAltText\n    };\n  }\n  renderAnnotationElement(annotation) {\n    if (this.deleted) {\n      annotation.hide();\n      return null;\n    }\n    annotation.updateEdited({\n      rect: this.getPDFRect(),\n      popup: this.comment\n    });\n    return null;\n  }\n}\n\n;// ./src/display/editor/annotation_editor_layer.js\n\n\n\n\n\n\n\n\nclass AnnotationEditorLayer {\n  #accessibilityManager;\n  #allowClick = false;\n  #annotationLayer = null;\n  #clickAC = null;\n  #editorFocusTimeoutId = null;\n  #editors = new Map();\n  #hadPointerDown = false;\n  #isDisabling = false;\n  #isEnabling = false;\n  #drawingAC = null;\n  #focusedElement = null;\n  #textLayer = null;\n  #textSelectionAC = null;\n  #textLayerDblClickAC = null;\n  #lastPointerDownTimestamp = -1;\n  #uiManager;\n  static _initialized = false;\n  static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor, SignatureEditor].map(type => [type._editorType, type]));\n  constructor({\n    uiManager,\n    pageIndex,\n    div,\n    structTreeLayer,\n    accessibilityManager,\n    annotationLayer,\n    drawLayer,\n    textLayer,\n    viewport,\n    l10n\n  }) {\n    const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()];\n    if (!AnnotationEditorLayer._initialized) {\n      AnnotationEditorLayer._initialized = true;\n      for (const editorType of editorTypes) {\n        editorType.initialize(l10n, uiManager);\n      }\n    }\n    uiManager.registerEditorTypes(editorTypes);\n    this.#uiManager = uiManager;\n    this.pageIndex = pageIndex;\n    this.div = div;\n    this.#accessibilityManager = accessibilityManager;\n    this.#annotationLayer = annotationLayer;\n    this.viewport = viewport;\n    this.#textLayer = textLayer;\n    this.drawLayer = drawLayer;\n    this._structTree = structTreeLayer;\n    this.#uiManager.addLayer(this);\n  }\n  get isEmpty() {\n    return this.#editors.size === 0;\n  }\n  get isInvisible() {\n    return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE;\n  }\n  updateToolbar(options) {\n    this.#uiManager.updateToolbar(options);\n  }\n  updateMode(mode = this.#uiManager.getMode()) {\n    this.#cleanup();\n    switch (mode) {\n      case AnnotationEditorType.NONE:\n        this.div.classList.toggle(\"nonEditing\", true);\n        this.disableTextSelection();\n        this.togglePointerEvents(false);\n        this.toggleAnnotationLayerPointerEvents(true);\n        this.disableClick();\n        return;\n      case AnnotationEditorType.INK:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n        break;\n      case AnnotationEditorType.HIGHLIGHT:\n        this.enableTextSelection();\n        this.togglePointerEvents(false);\n        this.disableClick();\n        break;\n      default:\n        this.disableTextSelection();\n        this.togglePointerEvents(true);\n        this.enableClick();\n    }\n    this.toggleAnnotationLayerPointerEvents(false);\n    const {\n      classList\n    } = this.div;\n    classList.toggle(\"nonEditing\", false);\n    if (mode === AnnotationEditorType.POPUP) {\n      classList.toggle(\"commentEditing\", true);\n    } else {\n      classList.toggle(\"commentEditing\", false);\n      for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n        classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType);\n      }\n    }\n    this.div.hidden = false;\n  }\n  hasTextLayer(textLayer) {\n    return textLayer === this.#textLayer?.div;\n  }\n  setEditingState(isEditing) {\n    this.#uiManager.setEditingState(isEditing);\n  }\n  addCommands(params) {\n    this.#uiManager.addCommands(params);\n  }\n  cleanUndoStack(type) {\n    this.#uiManager.cleanUndoStack(type);\n  }\n  toggleDrawing(enabled = false) {\n    this.div.classList.toggle(\"drawing\", !enabled);\n  }\n  togglePointerEvents(enabled = false) {\n    this.div.classList.toggle(\"disabled\", !enabled);\n  }\n  toggleAnnotationLayerPointerEvents(enabled = false) {\n    this.#annotationLayer?.togglePointerEvents(enabled);\n  }\n  get #allEditorsIterator() {\n    return this.#editors.size !== 0 ? this.#editors.values() : this.#uiManager.getEditors(this.pageIndex);\n  }\n  async enable() {\n    this.#isEnabling = true;\n    this.div.tabIndex = 0;\n    this.togglePointerEvents(true);\n    this.div.classList.toggle(\"nonEditing\", false);\n    this.#textLayerDblClickAC?.abort();\n    this.#textLayerDblClickAC = null;\n    const annotationElementIds = new Set();\n    for (const editor of this.#allEditorsIterator) {\n      editor.enableEditing();\n      editor.show(true);\n      if (editor.annotationElementId) {\n        this.#uiManager.removeChangedExistingAnnotation(editor);\n        annotationElementIds.add(editor.annotationElementId);\n      }\n    }\n    const annotationLayer = this.#annotationLayer;\n    if (annotationLayer) {\n      for (const editable of annotationLayer.getEditableAnnotations()) {\n        editable.hide();\n        if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) {\n          continue;\n        }\n        if (annotationElementIds.has(editable.data.id)) {\n          continue;\n        }\n        const editor = await this.deserialize(editable);\n        if (!editor) {\n          continue;\n        }\n        this.addOrRebuild(editor);\n        editor.enableEditing();\n      }\n    }\n    this.#isEnabling = false;\n    this.#uiManager._eventBus.dispatch(\"editorsrendered\", {\n      source: this,\n      pageNumber: this.pageIndex + 1\n    });\n  }\n  disable() {\n    this.#isDisabling = true;\n    this.div.tabIndex = -1;\n    this.togglePointerEvents(false);\n    this.div.classList.toggle(\"nonEditing\", true);\n    if (this.#textLayer && !this.#textLayerDblClickAC) {\n      this.#textLayerDblClickAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textLayerDblClickAC);\n      this.#textLayer.div.addEventListener(\"pointerdown\", e => {\n        const DBL_CLICK_THRESHOLD = 500;\n        const {\n          clientX,\n          clientY,\n          timeStamp\n        } = e;\n        const lastPointerDownTimestamp = this.#lastPointerDownTimestamp;\n        if (timeStamp - lastPointerDownTimestamp > DBL_CLICK_THRESHOLD) {\n          this.#lastPointerDownTimestamp = timeStamp;\n          return;\n        }\n        this.#lastPointerDownTimestamp = -1;\n        const {\n          classList\n        } = this.div;\n        classList.toggle(\"getElements\", true);\n        const elements = document.elementsFromPoint(clientX, clientY);\n        classList.toggle(\"getElements\", false);\n        if (!this.div.contains(elements[0])) {\n          return;\n        }\n        let id;\n        const regex = new RegExp(`^${AnnotationEditorPrefix}[0-9]+$`);\n        for (const element of elements) {\n          if (regex.test(element.id)) {\n            id = element.id;\n            break;\n          }\n        }\n        if (!id) {\n          return;\n        }\n        const editor = this.#editors.get(id);\n        if (editor?.annotationElementId === null) {\n          stopEvent(e);\n          editor.dblclick(e);\n        }\n      }, {\n        signal,\n        capture: true\n      });\n    }\n    const annotationLayer = this.#annotationLayer;\n    const needFakeAnnotation = [];\n    if (annotationLayer) {\n      const changedAnnotations = new Map();\n      const resetAnnotations = new Map();\n      for (const editor of this.#allEditorsIterator) {\n        editor.disableEditing();\n        if (!editor.annotationElementId) {\n          needFakeAnnotation.push(editor);\n          continue;\n        }\n        if (editor.serialize() !== null) {\n          changedAnnotations.set(editor.annotationElementId, editor);\n          continue;\n        } else {\n          resetAnnotations.set(editor.annotationElementId, editor);\n        }\n        this.getEditableAnnotation(editor.annotationElementId)?.show();\n        editor.remove();\n      }\n      for (const editable of annotationLayer.getEditableAnnotations()) {\n        const {\n          id\n        } = editable.data;\n        if (this.#uiManager.isDeletedAnnotationElement(id)) {\n          editable.updateEdited({\n            deleted: true\n          });\n          continue;\n        }\n        let editor = resetAnnotations.get(id);\n        if (editor) {\n          editor.resetAnnotationElement(editable);\n          editor.show(false);\n          editable.show();\n          continue;\n        }\n        editor = changedAnnotations.get(id);\n        if (editor) {\n          this.#uiManager.addChangedExistingAnnotation(editor);\n          if (editor.renderAnnotationElement(editable)) {\n            editor.show(false);\n          }\n        }\n        editable.show();\n      }\n    }\n    this.#cleanup();\n    if (this.isEmpty) {\n      this.div.hidden = true;\n    }\n    const {\n      classList\n    } = this.div;\n    for (const editorType of AnnotationEditorLayer.#editorTypes.values()) {\n      classList.remove(`${editorType._type}Editing`);\n    }\n    this.disableTextSelection();\n    this.toggleAnnotationLayerPointerEvents(true);\n    annotationLayer?.updateFakeAnnotations(needFakeAnnotation);\n    this.#isDisabling = false;\n  }\n  getEditableAnnotation(id) {\n    return this.#annotationLayer?.getEditableAnnotation(id) || null;\n  }\n  setActiveEditor(editor) {\n    const currentActive = this.#uiManager.getActive();\n    if (currentActive === editor) {\n      return;\n    }\n    this.#uiManager.setActiveEditor(editor);\n  }\n  enableTextSelection() {\n    this.div.tabIndex = -1;\n    if (this.#textLayer?.div && !this.#textSelectionAC) {\n      this.#textSelectionAC = new AbortController();\n      const signal = this.#uiManager.combinedSignal(this.#textSelectionAC);\n      this.#textLayer.div.addEventListener(\"pointerdown\", this.#textLayerPointerDown.bind(this), {\n        signal\n      });\n      this.#textLayer.div.classList.add(\"highlighting\");\n    }\n  }\n  disableTextSelection() {\n    this.div.tabIndex = 0;\n    if (this.#textLayer?.div && this.#textSelectionAC) {\n      this.#textSelectionAC.abort();\n      this.#textSelectionAC = null;\n      this.#textLayer.div.classList.remove(\"highlighting\");\n    }\n  }\n  #textLayerPointerDown(event) {\n    this.#uiManager.unselectAll();\n    const {\n      target\n    } = event;\n    if (target === this.#textLayer.div || (target.getAttribute(\"role\") === \"img\" || target.classList.contains(\"endOfContent\") || target.classList.contains(\"textLayerImages\") || target.classList.contains(\"textLayerImagePlaceholder\")) && this.#textLayer.div.contains(target)) {\n      const {\n        isMac\n      } = FeatureTest.platform;\n      if (event.button !== 0 || event.ctrlKey && isMac) {\n        return;\n      }\n      this.#uiManager.showAllEditors(\"highlight\", true, true);\n      this.#textLayer.div.classList.add(\"free\");\n      this.toggleDrawing();\n      HighlightEditor.startHighlighting(this, this.#uiManager.direction === \"ltr\", {\n        target: this.#textLayer.div,\n        x: event.x,\n        y: event.y\n      });\n      this.#textLayer.div.addEventListener(\"pointerup\", () => {\n        this.#textLayer.div.classList.remove(\"free\");\n        this.toggleDrawing(true);\n      }, {\n        once: true,\n        signal: this.#uiManager._signal\n      });\n      event.preventDefault();\n    }\n  }\n  enableClick() {\n    if (this.#clickAC) {\n      return;\n    }\n    this.#clickAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#clickAC);\n    this.div.addEventListener(\"pointerdown\", this.pointerdown.bind(this), {\n      signal\n    });\n    const pointerup = this.pointerup.bind(this);\n    this.div.addEventListener(\"pointerup\", pointerup, {\n      signal\n    });\n    this.div.addEventListener(\"pointercancel\", pointerup, {\n      signal\n    });\n  }\n  disableClick() {\n    this.#clickAC?.abort();\n    this.#clickAC = null;\n  }\n  attach(editor) {\n    this.#editors.set(editor.id, editor);\n    const {\n      annotationElementId\n    } = editor;\n    if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) {\n      this.#uiManager.removeDeletedAnnotationElement(editor);\n    }\n  }\n  detach(editor) {\n    this.#editors.delete(editor.id);\n    this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n    if (!this.#isDisabling && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n    }\n  }\n  remove(editor) {\n    this.detach(editor);\n    this.#uiManager.removeEditor(editor);\n    editor.div.remove();\n    editor.isAttachedToDOM = false;\n  }\n  changeParent(editor) {\n    if (editor.parent === this) {\n      return;\n    }\n    if (editor.parent && editor.annotationElementId) {\n      this.#uiManager.addDeletedAnnotationElement(editor);\n      AnnotationEditor.deleteAnnotationElement(editor);\n      editor.annotationElementId = null;\n    }\n    this.attach(editor);\n    editor.parent?.detach(editor);\n    editor.setParent(this);\n    if (editor.div && editor.isAttachedToDOM) {\n      editor.div.remove();\n      this.div.append(editor.div);\n    }\n  }\n  add(editor) {\n    if (editor.parent === this && editor.isAttachedToDOM) {\n      return;\n    }\n    this.changeParent(editor);\n    this.#uiManager.addEditor(editor);\n    this.attach(editor);\n    if (!editor.isAttachedToDOM) {\n      const div = editor.render();\n      this.div.append(div);\n      editor.isAttachedToDOM = true;\n    }\n    editor.fixAndSetPosition();\n    editor.onceAdded(!this.#isEnabling);\n    this.#uiManager.addToAnnotationStorage(editor);\n    editor._reportTelemetry(editor.telemetryInitialData);\n  }\n  moveEditorInDOM(editor) {\n    if (!editor.isAttachedToDOM) {\n      return;\n    }\n    const {\n      activeElement\n    } = document;\n    if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) {\n      editor._focusEventsAllowed = false;\n      this.#editorFocusTimeoutId = setTimeout(() => {\n        this.#editorFocusTimeoutId = null;\n        if (!editor.div.contains(document.activeElement)) {\n          editor.div.addEventListener(\"focusin\", () => {\n            editor._focusEventsAllowed = true;\n          }, {\n            once: true,\n            signal: this.#uiManager._signal\n          });\n          activeElement.focus();\n        } else {\n          editor._focusEventsAllowed = true;\n        }\n      }, 0);\n    }\n    editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);\n  }\n  addOrRebuild(editor) {\n    if (editor.needsToBeRebuilt()) {\n      editor.parent ||= this;\n      editor.rebuild();\n      editor.show();\n    } else {\n      this.add(editor);\n    }\n  }\n  addUndoableEditor(editor) {\n    const cmd = () => editor._uiManager.rebuild(editor);\n    const undo = () => {\n      editor.remove();\n    };\n    this.addCommands({\n      cmd,\n      undo,\n      mustExec: false\n    });\n  }\n  getEditorByUID(uid) {\n    for (const editor of this.#editors.values()) {\n      if (editor.uid === uid) {\n        return editor;\n      }\n    }\n    return null;\n  }\n  get #currentEditorType() {\n    return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode());\n  }\n  combinedSignal(ac) {\n    return this.#uiManager.combinedSignal(ac);\n  }\n  #createNewEditor(params) {\n    const editorType = this.#currentEditorType;\n    return editorType ? new editorType.prototype.constructor(params) : null;\n  }\n  canCreateNewEmptyEditor() {\n    return this.#currentEditorType?.canCreateNewEmptyEditor();\n  }\n  async pasteEditor(options, params) {\n    this.updateToolbar(options);\n    await this.#uiManager.updateMode(options.mode);\n    const {\n      offsetX,\n      offsetY\n    } = this.#getCenterPoint();\n    const id = this.#uiManager.getId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: offsetX,\n      y: offsetY,\n      uiManager: this.#uiManager,\n      isCentered: true,\n      ...params\n    });\n    if (editor) {\n      this.add(editor);\n    }\n  }\n  async deserialize(data) {\n    return (await AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager)) || null;\n  }\n  createAndAddNewEditor(event, isCentered, data = {}) {\n    const id = this.#uiManager.getId();\n    const editor = this.#createNewEditor({\n      parent: this,\n      id,\n      x: event.offsetX,\n      y: event.offsetY,\n      uiManager: this.#uiManager,\n      isCentered,\n      ...data\n    });\n    if (editor) {\n      this.add(editor);\n    }\n    return editor;\n  }\n  get boundingClientRect() {\n    return this.div.getBoundingClientRect();\n  }\n  #getCenterPoint() {\n    const {\n      x,\n      y,\n      width,\n      height\n    } = this.boundingClientRect;\n    const tlX = Math.max(0, x);\n    const tlY = Math.max(0, y);\n    const brX = Math.min(window.innerWidth, x + width);\n    const brY = Math.min(window.innerHeight, y + height);\n    const centerX = (tlX + brX) / 2 - x;\n    const centerY = (tlY + brY) / 2 - y;\n    const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];\n    return {\n      offsetX,\n      offsetY\n    };\n  }\n  addNewEditor(data = {}) {\n    this.createAndAddNewEditor(this.#getCenterPoint(), true, data);\n  }\n  setSelected(editor) {\n    this.#uiManager.setSelected(editor);\n  }\n  toggleSelected(editor) {\n    this.#uiManager.toggleSelected(editor);\n  }\n  unselect(editor) {\n    this.#uiManager.unselect(editor);\n  }\n  pointerup(event) {\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    if (!this.#hadPointerDown) {\n      return;\n    }\n    this.#hadPointerDown = false;\n    if (this.#currentEditorType?.isDrawer && this.#currentEditorType.supportMultipleDrawings) {\n      return;\n    }\n    if (!this.#allowClick) {\n      this.#allowClick = true;\n      return;\n    }\n    const currentMode = this.#uiManager.getMode();\n    if (currentMode === AnnotationEditorType.STAMP || currentMode === AnnotationEditorType.POPUP || currentMode === AnnotationEditorType.SIGNATURE) {\n      this.#uiManager.unselectAll();\n      return;\n    }\n    this.createAndAddNewEditor(event, false);\n  }\n  pointerdown(event) {\n    if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) {\n      this.enableTextSelection();\n    }\n    if (this.#hadPointerDown) {\n      this.#hadPointerDown = false;\n      return;\n    }\n    const {\n      isMac\n    } = FeatureTest.platform;\n    if (event.button !== 0 || event.ctrlKey && isMac) {\n      return;\n    }\n    if (event.target !== this.div) {\n      return;\n    }\n    this.#hadPointerDown = true;\n    if (this.#currentEditorType?.isDrawer) {\n      this.startDrawingSession(event);\n      return;\n    }\n    const editor = this.#uiManager.getActive();\n    this.#allowClick = !editor || editor.isEmpty();\n  }\n  startDrawingSession(event) {\n    this.div.focus({\n      preventScroll: true\n    });\n    if (this.#drawingAC) {\n      this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n      return;\n    }\n    this.#uiManager.setCurrentDrawingSession(this);\n    this.#drawingAC = new AbortController();\n    const signal = this.#uiManager.combinedSignal(this.#drawingAC);\n    this.div.addEventListener(\"blur\", ({\n      relatedTarget\n    }) => {\n      if (relatedTarget && !this.div.contains(relatedTarget)) {\n        this.#focusedElement = null;\n        this.commitOrRemove();\n      }\n    }, {\n      signal\n    });\n    this.#currentEditorType.startDrawing(this, this.#uiManager, false, event);\n  }\n  pause(on) {\n    if (on) {\n      const {\n        activeElement\n      } = document;\n      if (this.div.contains(activeElement)) {\n        this.#focusedElement = activeElement;\n      }\n      return;\n    }\n    if (this.#focusedElement) {\n      setTimeout(() => {\n        this.#focusedElement?.focus();\n        this.#focusedElement = null;\n      }, 0);\n    }\n  }\n  endDrawingSession(isAborted = false) {\n    if (!this.#drawingAC) {\n      return null;\n    }\n    this.#uiManager.setCurrentDrawingSession(null);\n    this.#drawingAC.abort();\n    this.#drawingAC = null;\n    this.#focusedElement = null;\n    return this.#currentEditorType.endDrawing(isAborted);\n  }\n  findNewParent(editor, x, y) {\n    const layer = this.#uiManager.findParent(x, y);\n    if (layer === null || layer === this) {\n      return false;\n    }\n    layer.changeParent(editor);\n    return true;\n  }\n  commitOrRemove() {\n    if (this.#drawingAC) {\n      this.endDrawingSession();\n      return true;\n    }\n    return false;\n  }\n  onScaleChanging() {\n    if (!this.#drawingAC) {\n      return;\n    }\n    this.#currentEditorType.onScaleChangingWhenDrawing(this);\n  }\n  destroy() {\n    this.commitOrRemove();\n    if (this.#uiManager.getActive()?.parent === this) {\n      this.#uiManager.commitOrRemove();\n      this.#uiManager.setActiveEditor(null);\n    }\n    if (this.#editorFocusTimeoutId) {\n      clearTimeout(this.#editorFocusTimeoutId);\n      this.#editorFocusTimeoutId = null;\n    }\n    for (const editor of this.#editors.values()) {\n      this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv);\n      editor.setParent(null);\n      editor.isAttachedToDOM = false;\n      editor.div.remove();\n    }\n    this.div = null;\n    this.#editors.clear();\n    this.#uiManager.removeLayer(this);\n  }\n  #cleanup() {\n    for (const editor of this.#editors.values()) {\n      if (editor.isEmpty()) {\n        editor.remove();\n      }\n    }\n  }\n  async render({\n    viewport\n  }) {\n    this.viewport = viewport;\n    setLayerDimensions(this.div, viewport);\n    for (const editor of this.#uiManager.getEditors(this.pageIndex)) {\n      this.add(editor);\n      editor.rebuild();\n    }\n    await this.#uiManager.findClonesForPage(this);\n    this.div.hidden = this.isEmpty;\n    this.updateMode();\n  }\n  update({\n    viewport\n  }) {\n    this.#uiManager.commitOrRemove();\n    this.#cleanup();\n    const oldRotation = this.viewport.rotation;\n    const rotation = viewport.rotation;\n    this.viewport = viewport;\n    setLayerDimensions(this.div, {\n      rotation\n    });\n    if (oldRotation !== rotation) {\n      for (const editor of this.#editors.values()) {\n        editor.rotate(rotation);\n      }\n    }\n  }\n  get pageDimensions() {\n    const {\n      pageWidth,\n      pageHeight\n    } = this.viewport.rawDims;\n    return [pageWidth, pageHeight];\n  }\n  get scale() {\n    return this.#uiManager.viewParameters.realScale;\n  }\n}\n\n;// ./src/display/draw_layer.js\n\n\nfunction compareTextLayers(a, b) {\n  if (a === b) {\n    return 0;\n  }\n  return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\nfunction getTextLayer(node) {\n  if (!node) {\n    return null;\n  }\n  if (node.nodeType === Node.ELEMENT_NODE) {\n    return node.closest(\".textLayer\");\n  }\n  return node.parentElement?.closest(\".textLayer\") || null;\n}\nfunction isPointBefore(nodeA, offsetA, nodeB, offsetB) {\n  if (nodeA === nodeB) {\n    return offsetA <= offsetB;\n  }\n  const relation = nodeA.compareDocumentPosition(nodeB);\n  if (relation & Node.DOCUMENT_POSITION_FOLLOWING) {\n    return true;\n  }\n  if (relation & Node.DOCUMENT_POSITION_PRECEDING) {\n    return false;\n  }\n  return null;\n}\nfunction normalizeEdgeBoundary(container, offset, textLayer) {\n  if (container.nodeType !== Node.ELEMENT_NODE || !container.classList.contains(\"textLayer\") || offset !== container.childNodes.length) {\n    return {\n      container,\n      offset\n    };\n  }\n  let lastNode = container.lastChild;\n  if (lastNode?.nodeType === Node.ELEMENT_NODE && lastNode.classList.contains(\"endOfContent\")) {\n    lastNode = lastNode.previousSibling;\n  }\n  if (!lastNode || !textLayer.contains(lastNode)) {\n    return null;\n  }\n  if (lastNode.nodeType === Node.TEXT_NODE) {\n    return {\n      container: lastNode,\n      offset: lastNode.textContent.length\n    };\n  }\n  return {\n    container: lastNode,\n    offset: lastNode.childNodes.length\n  };\n}\nclass DrawLayer {\n  #parent = null;\n  #mapping = new Map();\n  #textLayer = null;\n  #filterFactory = null;\n  #pageColors = null;\n  #textLayerObserver = null;\n  #toUpdate = new Map();\n  static #id = 0;\n  static #selectionId = 0;\n  static #selectionChangeAC = null;\n  static #selections = new Set();\n  static #isSelecting = false;\n  static #textLayerSet = new Set();\n  static #textLayers = new WeakMap();\n  constructor({\n    filterFactory = null,\n    pageColors = null,\n    pageIndex,\n    textLayer = null\n  }) {\n    this.pageIndex = pageIndex;\n    this.#filterFactory = filterFactory;\n    this.#pageColors = pageColors;\n    if (textLayer) {\n      const previousData = DrawLayer.#textLayers.get(textLayer);\n      if (previousData?.selectionDiv) {\n        previousData.selectionDiv.remove();\n        DrawLayer.#selections.delete(previousData.selectionDiv);\n      }\n      DrawLayer.#textLayers.set(textLayer, {\n        drawLayer: this\n      });\n      DrawLayer.#textLayerSet.add(textLayer);\n      this.#textLayer = textLayer;\n      this.#textLayerObserver = new MutationObserver(records => {\n        if (!this.#parent || !this.#textLayer?.isConnected || !DrawLayer.#hasSelection()) {\n          return;\n        }\n        for (const {\n          addedNodes\n        } of records) {\n          for (const node of addedNodes) {\n            if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains(\"endOfContent\")) {\n              DrawLayer.#selectionChange();\n              return;\n            }\n          }\n        }\n      });\n      this.#textLayerObserver.observe(textLayer, {\n        childList: true\n      });\n      if (DrawLayer.#selectionChangeAC === null) {\n        DrawLayer.#selectionChangeAC = new AbortController();\n        const {\n          signal\n        } = DrawLayer.#selectionChangeAC;\n        document.addEventListener(\"selectionchange\", DrawLayer.#selectionChange.bind(DrawLayer), {\n          signal\n        });\n        document.addEventListener(\"pointerdown\", () => {\n          DrawLayer.#isSelecting = true;\n        }, {\n          signal\n        });\n        document.addEventListener(\"pointerup\", () => {\n          DrawLayer.#isSelecting = false;\n        }, {\n          signal\n        });\n        window.addEventListener(\"blur\", () => {\n          DrawLayer.#isSelecting = false;\n        }, {\n          signal\n        });\n      }\n    }\n  }\n  setParent(parent) {\n    if (!this.#parent) {\n      this.#parent = parent;\n      if (this.#textLayer?.isConnected && DrawLayer.#hasSelection()) {\n        DrawLayer.#selectionChange();\n      }\n      return;\n    }\n    if (this.#parent !== parent) {\n      if (this.#mapping.size > 0) {\n        for (const root of this.#mapping.values()) {\n          root.remove();\n          parent.append(root);\n        }\n      }\n      this.#parent = parent;\n    }\n  }\n  static #cleanupTextLayerSelection(textLayer) {\n    const textLayerData = this.#textLayers.get(textLayer);\n    if (!textLayerData?.selectionDiv) {\n      return;\n    }\n    textLayerData.selectionDiv.remove();\n    this.#selections.delete(textLayerData.selectionDiv);\n    textLayerData.selectionDiv = null;\n    textLayerData.path = null;\n  }\n  static #hasSelection() {\n    const selection = document.getSelection();\n    return !!selection && !selection.isCollapsed;\n  }\n  static #getOrderedTextLayers() {\n    return this.#textLayerSet.keys().filter(textLayer => textLayer.isConnected).toArray().sort(compareTextLayers);\n  }\n  static #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      for (const root of this.#selections) {\n        root.remove();\n      }\n      this.#selections.clear();\n      return;\n    }\n    const rotators = new WeakMap();\n    const orderedTextLayers = this.#getOrderedTextLayers();\n    const ranges = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      let {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      } = range;\n      let startTextLayer = getTextLayer(startContainer);\n      let endTextLayer = getTextLayer(endContainer);\n      const startMissing = startTextLayer === null;\n      const endMissing = endTextLayer === null;\n      if (this.#isSelecting && startMissing !== endMissing) {\n        return;\n      }\n      if (selection.rangeCount === 1) {\n        const {\n          anchorNode,\n          anchorOffset,\n          focusNode,\n          focusOffset\n        } = selection;\n        const anchorLayer = getTextLayer(anchorNode);\n        const focusLayer = getTextLayer(focusNode);\n        const anchorBeforeFocus = isPointBefore(anchorNode, anchorOffset, focusNode, focusOffset);\n        if (anchorLayer && focusLayer && anchorBeforeFocus !== null) {\n          if (anchorBeforeFocus) {\n            startContainer = anchorNode;\n            startOffset = anchorOffset;\n            startTextLayer = anchorLayer;\n            endContainer = focusNode;\n            endOffset = focusOffset;\n            endTextLayer = focusLayer;\n          } else {\n            startContainer = focusNode;\n            startOffset = focusOffset;\n            startTextLayer = focusLayer;\n            endContainer = anchorNode;\n            endOffset = anchorOffset;\n            endTextLayer = anchorLayer;\n          }\n        }\n      }\n      const activeTextLayers = orderedTextLayers.filter(textLayer => range.intersectsNode(textLayer));\n      if (activeTextLayers.length === 0) {\n        continue;\n      }\n      let boundarySubstituted = false;\n      if (!startTextLayer) {\n        startTextLayer = activeTextLayers[0];\n        startContainer = startTextLayer;\n        startOffset = 0;\n        boundarySubstituted = true;\n      }\n      if (!endTextLayer) {\n        endTextLayer = activeTextLayers.at(-1);\n        endContainer = endTextLayer;\n        endOffset = endTextLayer.childNodes.length;\n        boundarySubstituted = true;\n      }\n      if (endContainer.nodeType === Node.ELEMENT_NODE) {\n        if (endContainer.classList.contains(\"endOfContent\")) {\n          const previousNode = endContainer.previousSibling;\n          if (!previousNode) {\n            continue;\n          }\n          endContainer = previousNode;\n          endOffset = previousNode.nodeType === Node.TEXT_NODE ? previousNode.textContent.length : previousNode.childNodes.length;\n        } else if (endContainer.classList.contains(\"textLayer\") && endContainer.childNodes.length === endOffset) {\n          const normalizedEnd = normalizeEdgeBoundary(endContainer, endOffset, endTextLayer);\n          if (!normalizedEnd) {\n            continue;\n          }\n          endContainer = normalizedEnd.container;\n          endOffset = normalizedEnd.offset;\n        }\n      }\n      if (startContainer.nodeType === Node.ELEMENT_NODE) {\n        const normalizedStart = normalizeEdgeBoundary(startContainer, startOffset, startTextLayer);\n        if (!normalizedStart) {\n          continue;\n        }\n        startContainer = normalizedStart.container;\n        startOffset = normalizedStart.offset;\n      }\n      if (startTextLayer === endTextLayer && !boundarySubstituted && activeTextLayers.includes(startTextLayer)) {\n        ranges.push([range, startTextLayer]);\n        continue;\n      }\n      for (const textLayer of activeTextLayers) {\n        const firstNode = textLayer.firstChild;\n        if (!firstNode) {\n          continue;\n        }\n        const subRange = document.createRange();\n        if (textLayer === startTextLayer) {\n          subRange.setStart(startContainer, startOffset);\n        } else {\n          subRange.setStartBefore(firstNode);\n        }\n        if (textLayer === endTextLayer) {\n          subRange.setEnd(endContainer, endOffset);\n        } else {\n          const lastNode = textLayer.lastChild;\n          if (!lastNode) {\n            continue;\n          }\n          if (lastNode.nodeType === Node.ELEMENT_NODE && lastNode.classList.contains(\"endOfContent\")) {\n            const lastTextNode = lastNode.previousSibling;\n            if (!lastTextNode) {\n              continue;\n            }\n            subRange.setEndAfter(lastTextNode);\n          } else {\n            subRange.setEndAfter(lastNode);\n          }\n        }\n        if (!subRange.collapsed) {\n          ranges.push([subRange, textLayer]);\n        }\n      }\n    }\n    const selectedTextLayers = new Set(ranges.map(range => range[1]));\n    for (const textLayer of this.#textLayerSet) {\n      if (!selectedTextLayers.has(textLayer)) {\n        this.#cleanupTextLayerSelection(textLayer);\n      }\n    }\n    for (const [range, textLayer] of ranges) {\n      const textLayerData = DrawLayer.#textLayers.get(textLayer);\n      if (!textLayerData) {\n        continue;\n      }\n      let rotator = rotators.get(textLayer);\n      if (!rotator) {\n        const clientRect = textLayer.getBoundingClientRect();\n        rotator = (x, y, w, h) => ({\n          x: (x - clientRect.x) / clientRect.width,\n          y: (y - clientRect.y) / clientRect.height,\n          width: w / clientRect.width,\n          height: h / clientRect.height\n        });\n        rotators.set(textLayer, rotator);\n      }\n      const boxes = [];\n      for (let {\n        x,\n        y,\n        width,\n        height\n      } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        ({\n          x,\n          y,\n          width,\n          height\n        } = rotator(x, y, width, height));\n        if (width === 1 && height === 1) {\n          continue;\n        }\n        boxes.push(`M${x} ${y} h${width} v${height} h-${width} Z`);\n      }\n      if (boxes.length === 0) {\n        continue;\n      }\n      const drawLayer = textLayerData.drawLayer;\n      let div = textLayerData.selectionDiv;\n      let path = textLayerData.path;\n      if (!div) {\n        const clipPathId = `clip_selection_${DrawLayer.#selectionId++}`;\n        div = document.createElement(\"div\");\n        div.className = \"selection\";\n        div.style.clipPath = `url(#${clipPathId})`;\n        const selectionStyle = drawLayer.#filterFactory?.createSelectionStyle(drawLayer.#pageColors);\n        if (selectionStyle) {\n          for (const [name, value] of Object.entries(selectionStyle)) {\n            div.style.setProperty(name, value);\n          }\n        }\n        const svg = DrawLayer._svgFactory.create(1, 1, true);\n        svg.setAttribute(\"aria-hidden\", \"true\");\n        svg.setAttribute(\"width\", \"100%\");\n        svg.setAttribute(\"height\", \"100%\");\n        const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n        clipPath.setAttribute(\"id\", clipPathId);\n        clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n        path = DrawLayer._svgFactory.createElement(\"path\");\n        clipPath.append(path);\n        svg.append(clipPath);\n        div.append(svg);\n        textLayerData.path = path;\n        textLayerData.selectionDiv = div;\n      }\n      if (!div.parentNode && drawLayer.#parent) {\n        drawLayer.#parent.append(div);\n        this.#selections.add(div);\n      }\n      path.setAttribute(\"d\", boxes.join(\" \"));\n    }\n  }\n  static get _svgFactory() {\n    return shadow(this, \"_svgFactory\", new DOMSVGFactory());\n  }\n  static #setBox(element, [x, y, width, height]) {\n    const {\n      style\n    } = element;\n    style.top = `${100 * y}%`;\n    style.left = `${100 * x}%`;\n    style.width = `${100 * width}%`;\n    style.height = `${100 * height}%`;\n  }\n  #createSVG() {\n    const svg = DrawLayer._svgFactory.create(1, 1, true);\n    this.#parent.append(svg);\n    svg.setAttribute(\"aria-hidden\", \"true\");\n    return svg;\n  }\n  #createClipPath(defs, pathId) {\n    const clipPath = DrawLayer._svgFactory.createElement(\"clipPath\");\n    defs.append(clipPath);\n    const clipPathId = `clip_${pathId}`;\n    clipPath.setAttribute(\"id\", clipPathId);\n    clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n    const clipPathUse = DrawLayer._svgFactory.createElement(\"use\");\n    clipPath.append(clipPathUse);\n    clipPathUse.setAttribute(\"href\", `#${pathId}`);\n    clipPathUse.classList.add(\"clip\");\n    return clipPathId;\n  }\n  #updateProperties(element, properties) {\n    for (const [key, value] of Object.entries(properties)) {\n      if (value === null) {\n        element.removeAttribute(key);\n      } else {\n        element.setAttribute(key, value);\n      }\n    }\n  }\n  draw(properties, isPathUpdatable = false, hasClip = false) {\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n    if (isPathUpdatable) {\n      this.#toUpdate.set(id, path);\n    }\n    const clipPathId = hasClip ? this.#createClipPath(defs, pathId) : null;\n    const use = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use);\n    use.setAttribute(\"href\", `#${pathId}`);\n    this.updateProperties(root, properties);\n    this.#mapping.set(id, root);\n    return {\n      id,\n      clipPathId: `url(#${clipPathId})`\n    };\n  }\n  drawOutline(properties, mustRemoveSelfIntersections) {\n    const id = DrawLayer.#id++;\n    const root = this.#createSVG();\n    const defs = DrawLayer._svgFactory.createElement(\"defs\");\n    root.append(defs);\n    const path = DrawLayer._svgFactory.createElement(\"path\");\n    defs.append(path);\n    const pathId = `path_${id}`;\n    path.setAttribute(\"id\", pathId);\n    path.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n    let maskId;\n    if (mustRemoveSelfIntersections) {\n      const mask = DrawLayer._svgFactory.createElement(\"mask\");\n      defs.append(mask);\n      maskId = `mask_${id}`;\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"objectBoundingBox\");\n      const rect = DrawLayer._svgFactory.createElement(\"rect\");\n      mask.append(rect);\n      rect.setAttribute(\"width\", \"1\");\n      rect.setAttribute(\"height\", \"1\");\n      rect.setAttribute(\"fill\", \"white\");\n      const use = DrawLayer._svgFactory.createElement(\"use\");\n      mask.append(use);\n      use.setAttribute(\"href\", `#${pathId}`);\n      use.setAttribute(\"stroke\", \"none\");\n      use.setAttribute(\"fill\", \"black\");\n      use.setAttribute(\"fill-rule\", \"nonzero\");\n      use.classList.add(\"mask\");\n    }\n    const use1 = DrawLayer._svgFactory.createElement(\"use\");\n    root.append(use1);\n    use1.setAttribute(\"href\", `#${pathId}`);\n    if (maskId) {\n      use1.setAttribute(\"mask\", `url(#${maskId})`);\n    }\n    const use2 = use1.cloneNode();\n    root.append(use2);\n    use1.classList.add(\"mainOutline\");\n    use2.classList.add(\"secondaryOutline\");\n    this.updateProperties(root, properties);\n    this.#mapping.set(id, root);\n    return id;\n  }\n  finalizeDraw(id, properties) {\n    this.#toUpdate.delete(id);\n    this.updateProperties(id, properties);\n  }\n  updateProperties(elementOrId, properties) {\n    if (!properties) {\n      return;\n    }\n    const {\n      root,\n      bbox,\n      rootClass,\n      path\n    } = properties;\n    const element = typeof elementOrId === \"number\" ? this.#mapping.get(elementOrId) : elementOrId;\n    if (!element) {\n      return;\n    }\n    if (root) {\n      this.#updateProperties(element, root);\n    }\n    if (bbox) {\n      DrawLayer.#setBox(element, bbox);\n    }\n    if (rootClass) {\n      const {\n        classList\n      } = element;\n      for (const [className, value] of Object.entries(rootClass)) {\n        classList.toggle(className, value);\n      }\n    }\n    if (path) {\n      const defs = element.firstElementChild;\n      const pathElement = defs.firstElementChild;\n      this.#updateProperties(pathElement, path);\n    }\n  }\n  updateParent(id, layer) {\n    if (layer === this) {\n      return;\n    }\n    const root = this.#mapping.get(id);\n    if (!root) {\n      return;\n    }\n    layer.#parent.append(root);\n    this.#mapping.delete(id);\n    layer.#mapping.set(id, root);\n  }\n  remove(id) {\n    this.#toUpdate.delete(id);\n    if (this.#parent === null) {\n      return;\n    }\n    this.#mapping.get(id).remove();\n    this.#mapping.delete(id);\n  }\n  destroy() {\n    this.#parent = null;\n    for (const root of this.#mapping.values()) {\n      root.remove();\n    }\n    this.#mapping.clear();\n    this.#toUpdate.clear();\n    this.#textLayerObserver?.disconnect();\n    this.#textLayerObserver = null;\n    if (this.#textLayer) {\n      const data = DrawLayer.#textLayers.get(this.#textLayer);\n      if (data?.drawLayer === this) {\n        DrawLayer.#cleanupTextLayerSelection(this.#textLayer);\n        DrawLayer.#textLayers.delete(this.#textLayer);\n        DrawLayer.#textLayerSet.delete(this.#textLayer);\n        if (DrawLayer.#textLayerSet.size === 0) {\n          DrawLayer.#selectionChangeAC?.abort();\n          DrawLayer.#selectionChangeAC = null;\n          DrawLayer.#isSelecting = false;\n        }\n      }\n      this.#textLayer = null;\n    }\n  }\n}\n\n;// ./src/display/text_layer_images.js\n\nfunction percentage(value) {\n  return `${(value * 100).toFixed(2)}%`;\n}\nclass TextLayerImages {\n  #coordinates = [];\n  #coordinatesByElement = new Map();\n  #getPageCanvas = null;\n  #minSize = 0;\n  #pageWidth = 0;\n  #pageHeight = 0;\n  static #activeImage = null;\n  constructor(minSize, coordinates, viewport, getPageCanvas) {\n    this.#minSize = minSize;\n    this.#coordinates = coordinates;\n    this.#pageWidth = viewport.rawDims.pageWidth;\n    this.#pageHeight = viewport.rawDims.pageHeight;\n    this.#getPageCanvas = getPageCanvas;\n  }\n  render() {\n    const container = document.createElement(\"div\");\n    container.className = \"textLayerImages\";\n    for (let i = 0; i < this.#coordinates.length; i += 6) {\n      const el = this.#createImagePlaceholder(this.#coordinates.subarray(i, i + 6));\n      if (el) {\n        container.append(el);\n      }\n    }\n    container.addEventListener(\"contextmenu\", event => {\n      if (!(event.target instanceof HTMLCanvasElement)) {\n        return;\n      }\n      const imgElement = event.target;\n      const coords = this.#coordinatesByElement.get(imgElement);\n      if (!coords) {\n        return;\n      }\n      const activeImage = TextLayerImages.#activeImage?.deref();\n      if (activeImage === imgElement) {\n        return;\n      }\n      if (activeImage) {\n        activeImage.width = 0;\n        activeImage.height = 0;\n      }\n      TextLayerImages.#activeImage = new WeakRef(imgElement);\n      const {\n        inverseTransform,\n        x1,\n        y1,\n        width,\n        height\n      } = coords;\n      const pageCanvas = this.#getPageCanvas();\n      const imageX1 = Math.ceil(x1 * pageCanvas.width);\n      const imageY1 = Math.ceil(y1 * pageCanvas.height);\n      const imageX2 = Math.floor((x1 + width / this.#pageWidth) * pageCanvas.width);\n      const imageY2 = Math.floor((y1 + height / this.#pageHeight) * pageCanvas.height);\n      imgElement.width = imageX2 - imageX1;\n      imgElement.height = imageY2 - imageY1;\n      const ctx = imgElement.getContext(\"2d\");\n      ctx.setTransform(...inverseTransform);\n      ctx.translate(-imageX1, -imageY1);\n      ctx.drawImage(pageCanvas, 0, 0);\n    });\n    return container;\n  }\n  #createImagePlaceholder([x1, y1, x2, y2, x3, y3]) {\n    const width = Math.hypot((x3 - x1) * this.#pageWidth, (y3 - y1) * this.#pageHeight);\n    const height = Math.hypot((x2 - x1) * this.#pageWidth, (y2 - y1) * this.#pageHeight);\n    if (width < this.#minSize || height < this.#minSize) {\n      return null;\n    }\n    const transform = [(x3 - x1) * this.#pageWidth / width, (y3 - y1) * this.#pageHeight / width, (x2 - x1) * this.#pageWidth / height, (y2 - y1) * this.#pageHeight / height, 0, 0];\n    const inverseTransform = Util.inverseTransform(transform);\n    const imgElement = document.createElement(\"canvas\");\n    imgElement.className = \"textLayerImagePlaceholder\";\n    imgElement.width = 0;\n    imgElement.height = 0;\n    Object.assign(imgElement.style, {\n      opacity: 0,\n      position: \"absolute\",\n      left: percentage(x1),\n      top: percentage(y1),\n      width: percentage(width / this.#pageWidth),\n      height: percentage(height / this.#pageHeight),\n      transformOrigin: \"0% 0%\",\n      transform: `matrix(${transform.join(\",\")})`\n    });\n    this.#coordinatesByElement.set(imgElement, {\n      inverseTransform,\n      width,\n      height,\n      x1,\n      y1\n    });\n    return imgElement;\n  }\n}\n\n;// ./src/pdf.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\n  globalThis._pdfjsTestingUtils = {\n    HighlightOutliner: HighlightOutliner\n  };\n}\nglobalThis.pdfjsLib = {\n  AbortException: AbortException,\n  AnnotationEditorLayer: AnnotationEditorLayer,\n  AnnotationEditorParamsType: AnnotationEditorParamsType,\n  AnnotationEditorType: AnnotationEditorType,\n  AnnotationEditorUIManager: AnnotationEditorUIManager,\n  AnnotationLayer: AnnotationLayer,\n  AnnotationMode: AnnotationMode,\n  AnnotationType: AnnotationType,\n  applyOpacity: applyOpacity,\n  build: build,\n  ColorPicker: ColorPicker,\n  createValidAbsoluteUrl: createValidAbsoluteUrl,\n  CSSConstants: CSSConstants,\n  DOMSVGFactory: DOMSVGFactory,\n  DrawLayer: DrawLayer,\n  FeatureTest: FeatureTest,\n  fetchData: fetchData,\n  findContrastColor: findContrastColor,\n  getDocument: getDocument,\n  getFilenameFromUrl: getFilenameFromUrl,\n  getPdfFilenameFromUrl: getPdfFilenameFromUrl,\n  getRGB: getRGB,\n  getRGBA: getRGBA,\n  getUuid: getUuid,\n  GlobalWorkerOptions: GlobalWorkerOptions,\n  ImageKind: ImageKind,\n  InvalidPDFException: InvalidPDFException,\n  isDataScheme: isDataScheme,\n  isPdfFile: isPdfFile,\n  isValidExplicitDest: isValidExplicitDest,\n  makeArr: makeArr,\n  makeMap: makeMap,\n  makeObj: makeObj,\n  makeSet: makeSet,\n  MathClamp: MathClamp,\n  noContextMenu: noContextMenu,\n  normalizeUnicode: normalizeUnicode,\n  OPS: OPS,\n  OutputScale: OutputScale,\n  PasswordException: PasswordException,\n  PasswordResponses: PasswordResponses,\n  PDFDataRangeTransport: PDFDataRangeTransport,\n  PDFDateString: PDFDateString,\n  PDFWorker: PDFWorker,\n  PermissionFlag: PermissionFlag,\n  PixelsPerInch: PixelsPerInch,\n  RenderingCancelledException: RenderingCancelledException,\n  renderRichText: renderRichText,\n  ResponseException: ResponseException,\n  setLayerDimensions: setLayerDimensions,\n  shadow: shadow,\n  SignatureExtractor: SignatureExtractor,\n  stopEvent: stopEvent,\n  SupportedImageMimeTypes: SupportedImageMimeTypes,\n  TextLayer: TextLayer,\n  TextLayerImages: TextLayerImages,\n  TouchManager: TouchManager,\n  updateUrlHash: updateUrlHash,\n  Util: Util,\n  VerbosityLevel: VerbosityLevel,\n  version: version,\n  XfaLayer: XfaLayer\n};\n\nexport { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, CSSConstants, ColorPicker, DOMSVGFactory, DrawLayer, FeatureTest, GlobalWorkerOptions, ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PasswordException, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TextLayerImages, TouchManager, Util, VerbosityLevel, XfaLayer, applyOpacity, build, createValidAbsoluteUrl, fetchData, findContrastColor, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getRGB, getRGBA, getUuid, isDataScheme, isPdfFile, isValidExplicitDest, makeArr, makeMap, makeObj, makeSet, noContextMenu, normalizeUnicode, renderRichText, setLayerDimensions, shadow, stopEvent, updateUrlHash, version };\n\n//# sourceMappingURL=pdf.mjs.map"],"file":"pdf-D4jkaVTy.js"}