{"version":3,"file":"index.cjs","sources":["../lib/intrinsicclass.ts","../lib/slots.ts","../lib/regex.ts","../lib/ecmascript.ts","../lib/intl.ts","../lib/instant.ts","../lib/calendar.ts","../lib/plaindate.ts","../lib/plaindatetime.ts","../lib/duration.ts","../lib/plainmonthday.ts","../lib/now.ts","../lib/plaintime.ts","../lib/timezone.ts","../lib/plainyearmonth.ts","../lib/zoneddatetime.ts","../lib/legacydate.ts","../lib/index.ts"],"sourcesContent":["import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\n\nimport { DEBUG } from './debug';\n\ntype OmitConstructor<T> = { [P in keyof T as T[P] extends new (...args: any[]) => any ? P : never]: T[P] };\n\ntype TemporalIntrinsics = Omit<typeof Temporal, 'Now' | 'Instant' | 'ZonedDateTime'> & {\n  Instant: OmitConstructor<Temporal.Instant> &\n    (new (epochNanoseconds: JSBI) => Temporal.Instant) & { prototype: typeof Temporal.Instant.prototype };\n  ZonedDateTime: OmitConstructor<Temporal.ZonedDateTime> &\n    (new (\n      epochNanoseconds: JSBI,\n      timeZone: string | Temporal.TimeZoneProtocol,\n      calendar?: string | Temporal.CalendarProtocol\n    ) => Temporal.ZonedDateTime) & {\n      prototype: typeof Temporal.ZonedDateTime.prototype;\n      from: typeof Temporal.ZonedDateTime.from;\n      compare: typeof Temporal.ZonedDateTime.compare;\n    };\n};\ntype TemporalIntrinsicRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}`]: TemporalIntrinsics[key];\n};\ntype TemporalIntrinsicPrototypeRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}.prototype`]: TemporalIntrinsics[key]['prototype'];\n};\ntype TemporalIntrinsicRegisteredKeys = {\n  [key in keyof TemporalIntrinsicRegistrations as `%${key}%`]: TemporalIntrinsicRegistrations[key];\n};\ntype TemporalIntrinsicPrototypeRegisteredKeys = {\n  [key in keyof TemporalIntrinsicPrototypeRegistrations as `%${key}%`]: TemporalIntrinsicPrototypeRegistrations[key];\n};\n\ntype CalendarPrototypeKeys = keyof Omit<Temporal.Calendar, typeof Symbol.toStringTag>;\ntype TemporalCalendarIntrinsicRegistrations = {\n  [key in CalendarPrototypeKeys as `Temporal.Calendar.prototype.${key}`]: Temporal.Calendar[key];\n} & {\n  'Temporal.Calendar.from': typeof Temporal.Calendar.from;\n};\ntype TemporalCalendarIntrinsicRegisteredKeys = {\n  [key in keyof TemporalCalendarIntrinsicRegistrations as `%${key}%`]: TemporalCalendarIntrinsicRegistrations[key];\n};\n\ntype TimeZonePrototypeKeys = 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor';\ntype TemporalTimeZoneIntrinsicRegistrations = {\n  [key in TimeZonePrototypeKeys as `Temporal.TimeZone.prototype.${key}`]: Temporal.TimeZone[key];\n} & {\n  'Temporal.TimeZone.from': typeof Temporal.TimeZone.from;\n};\ntype TemporalTimeZoneIntrinsicRegisteredKeys = {\n  [key in keyof TemporalTimeZoneIntrinsicRegistrations as `%${key}%`]: TemporalTimeZoneIntrinsicRegistrations[key];\n};\n\nconst INTRINSICS = {} as TemporalIntrinsicRegisteredKeys &\n  TemporalIntrinsicPrototypeRegisteredKeys &\n  TemporalTimeZoneIntrinsicRegisteredKeys &\n  TemporalCalendarIntrinsicRegisteredKeys;\n\ntype customFormatFunction<T> = (\n  this: T,\n  depth: number,\n  options: { stylize: (value: unknown, type: 'number' | 'special') => string }\n) => string;\nconst customUtilInspectFormatters: Partial<{\n  [key in keyof TemporalIntrinsicRegistrations]: customFormatFunction<\n    InstanceType<TemporalIntrinsicRegistrations[key]>\n  >;\n}> = {\n  ['Temporal.Duration'](depth, options) {\n    const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n    if (depth < 1) return descr;\n    const entries = [];\n    for (const prop of [\n      'years',\n      'months',\n      'weeks',\n      'days',\n      'hours',\n      'minutes',\n      'seconds',\n      'milliseconds',\n      'microseconds',\n      'nanoseconds'\n    ] as const) {\n      if (this[prop] !== 0) entries.push(`  ${prop}: ${options.stylize(this[prop], 'number')}`);\n    }\n    return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n  }\n};\n\ntype InspectFormatterOptions = { stylize: (str: string, styleType: string) => string };\nfunction defaultUtilInspectFormatter(this: any, depth: number, options: InspectFormatterOptions) {\n  return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\n\nexport function MakeIntrinsicClass(\n  Class: TemporalIntrinsicRegistrations[typeof name],\n  name: keyof TemporalIntrinsicRegistrations\n) {\n  Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n    value: name,\n    writable: false,\n    enumerable: false,\n    configurable: true\n  });\n  if (DEBUG) {\n    Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n      value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  for (const prop of Object.getOwnPropertyNames(Class)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class, prop, desc);\n  }\n  for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class.prototype, prop, desc);\n  }\n\n  DefineIntrinsic(name, Class);\n  DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\n\ntype IntrinsicDefinitionKeys =\n  | keyof TemporalIntrinsicRegistrations\n  | keyof TemporalIntrinsicPrototypeRegistrations\n  | keyof TemporalCalendarIntrinsicRegistrations\n  | keyof TemporalTimeZoneIntrinsicRegistrations;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicPrototypeRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicPrototypeRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalCalendarIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalCalendarIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalTimeZoneIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalTimeZoneIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT>(name: KeyT, value: never): void;\nexport function DefineIntrinsic<KeyT extends IntrinsicDefinitionKeys>(name: KeyT, value: unknown): void {\n  const key: `%${IntrinsicDefinitionKeys}%` = `%${name}%`;\n  if (INTRINSICS[key] !== undefined) throw new Error(`intrinsic ${name} already exists`);\n  INTRINSICS[key] = value;\n}\nexport function GetIntrinsic<KeyT extends keyof typeof INTRINSICS>(intrinsic: KeyT): (typeof INTRINSICS)[KeyT] {\n  return INTRINSICS[intrinsic];\n}\n","import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { BuiltinCalendarId, AnyTemporalType, CalendarSlot, TimeZoneSlot } from './internaltypes';\n\n// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\n\ninterface SlotInfo<ValueType, UsedByType extends AnyTemporalType> {\n  value: ValueType;\n  usedBy: UsedByType;\n}\n\ninterface SlotInfoRecord {\n  [k: string]: SlotInfo<unknown, AnyTemporalType>;\n}\n\ninterface Slots extends SlotInfoRecord {\n  // Instant\n  [EPOCHNANOSECONDS]: SlotInfo<JSBI, Temporal.Instant | Temporal.ZonedDateTime>; // number? JSBI?\n\n  // TimeZone\n  [TIMEZONE_ID]: SlotInfo<string, Temporal.TimeZone>;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MONTH]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_DAY]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_HOUR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MINUTE]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_SECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MILLISECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MICROSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_NANOSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [CALENDAR]: SlotInfo<CalendarSlot, TypesWithCalendarUnits>;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: SlotInfo<true, Temporal.PlainDate>;\n  [YEAR_MONTH_BRAND]: SlotInfo<true, Temporal.PlainYearMonth>;\n  [MONTH_DAY_BRAND]: SlotInfo<true, Temporal.PlainMonthDay>;\n\n  // ZonedDateTime\n  [INSTANT]: SlotInfo<Temporal.Instant, Temporal.ZonedDateTime>;\n  [TIME_ZONE]: SlotInfo<TimeZoneSlot, Temporal.ZonedDateTime>;\n\n  // Duration\n  [YEARS]: SlotInfo<number, Temporal.Duration>;\n  [MONTHS]: SlotInfo<number, Temporal.Duration>;\n  [WEEKS]: SlotInfo<number, Temporal.Duration>;\n  [DAYS]: SlotInfo<number, Temporal.Duration>;\n  [HOURS]: SlotInfo<number, Temporal.Duration>;\n  [MINUTES]: SlotInfo<number, Temporal.Duration>;\n  [SECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MILLISECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MICROSECONDS]: SlotInfo<number, Temporal.Duration>;\n  [NANOSECONDS]: SlotInfo<number, Temporal.Duration>;\n\n  // Calendar\n  [CALENDAR_ID]: SlotInfo<BuiltinCalendarId, Temporal.Calendar>;\n}\n\ntype TypesWithCalendarUnits =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime;\n\ninterface SlotsToTypes {\n  // Instant\n  [EPOCHNANOSECONDS]: Temporal.Instant;\n\n  // TimeZone\n  [TIMEZONE_ID]: Temporal.TimeZone;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: TypesWithCalendarUnits;\n  [ISO_MONTH]: TypesWithCalendarUnits;\n  [ISO_DAY]: TypesWithCalendarUnits;\n  [ISO_HOUR]: TypesWithCalendarUnits;\n  [ISO_MINUTE]: TypesWithCalendarUnits;\n  [ISO_SECOND]: TypesWithCalendarUnits;\n  [ISO_MILLISECOND]: TypesWithCalendarUnits;\n  [ISO_MICROSECOND]: TypesWithCalendarUnits;\n  [ISO_NANOSECOND]: TypesWithCalendarUnits;\n  [CALENDAR]: TypesWithCalendarUnits;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: Temporal.PlainDate;\n  [YEAR_MONTH_BRAND]: Temporal.PlainYearMonth;\n  [MONTH_DAY_BRAND]: Temporal.PlainMonthDay;\n\n  // ZonedDateTime\n  [INSTANT]: Temporal.ZonedDateTime;\n  [TIME_ZONE]: Temporal.ZonedDateTime;\n\n  // Duration\n  [YEARS]: Temporal.Duration;\n  [MONTHS]: Temporal.Duration;\n  [WEEKS]: Temporal.Duration;\n  [DAYS]: Temporal.Duration;\n  [HOURS]: Temporal.Duration;\n  [MINUTES]: Temporal.Duration;\n  [SECONDS]: Temporal.Duration;\n  [MILLISECONDS]: Temporal.Duration;\n  [MICROSECONDS]: Temporal.Duration;\n  [NANOSECONDS]: Temporal.Duration;\n\n  // Calendar\n  [CALENDAR_ID]: Temporal.Calendar;\n}\n\ntype SlotKey = keyof SlotsToTypes;\n\nconst globalSlots = new WeakMap<Slots[keyof Slots]['usedBy'], Record<keyof Slots, Slots[keyof Slots]['value']>>();\n\nfunction _GetSlots(container: Slots[keyof Slots]['usedBy']) {\n  return globalSlots.get(container);\n}\n\nconst GetSlotsSymbol = Symbol.for('@@Temporal__GetSlots');\n\n// expose GetSlots to avoid dual package hazards\n(globalThis as any)[GetSlotsSymbol] ||= _GetSlots;\n\nconst GetSlots = (globalThis as any)[GetSlotsSymbol] as typeof _GetSlots;\n\nfunction _CreateSlots(container: Slots[keyof Slots]['usedBy']): void {\n  globalSlots.set(container, Object.create(null));\n}\n\nconst CreateSlotsSymbol = Symbol.for('@@Temporal__CreateSlots');\n\n// expose CreateSlots to avoid dual package hazards\n(globalThis as any)[CreateSlotsSymbol] ||= _CreateSlots;\n\nexport const CreateSlots = (globalThis as any)[CreateSlotsSymbol] as typeof _CreateSlots;\n\n// TODO: is there a better way than 9 overloads to make HasSlot into a type\n// guard that takes a variable number of parameters?\nexport function HasSlot<ID1 extends SlotKey>(container: unknown, id1: ID1): container is Slots[ID1]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'] | Slots[ID3]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey, ID4 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4\n): container is Slots[ID1 | ID2 | ID3 | ID4]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey,\n  ID9 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8,\n  id9: ID9\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8 | ID9]['usedBy'];\nexport function HasSlot(container: unknown, ...ids: (keyof Slots)[]): boolean {\n  if (!container || 'object' !== typeof container) return false;\n  const myslots = GetSlots(container as AnyTemporalType);\n  return !!myslots && ids.every((id) => id in myslots);\n}\nexport function GetSlot<KeyT extends keyof Slots>(\n  container: Slots[typeof id]['usedBy'],\n  id: KeyT\n): Slots[KeyT]['value'] {\n  const value = GetSlots(container)?.[id];\n  if (value === undefined) throw new TypeError(`Missing internal slot ${id}`);\n  return value;\n}\nexport function SetSlot<KeyT extends SlotKey>(\n  container: Slots[KeyT]['usedBy'],\n  id: KeyT,\n  value: Slots[KeyT]['value']\n): void {\n  const slots = GetSlots(container);\n\n  if (slots === undefined) throw new TypeError('Missing slots for the given container');\n\n  const existingSlot = slots[id];\n\n  if (existingSlot) throw new TypeError(`${id} already has set`);\n\n  slots[id] = value;\n}\n","const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nexport const timeZoneID = new RegExp(\n  '(?:' +\n    [\n      `(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*`,\n      'Etc/GMT(?:0|[-+]\\\\d{1,2})',\n      'GMT[-+]?0',\n      'EST5EDT',\n      'CST6CDT',\n      'MST7MDT',\n      'PST8PDT',\n      offsetNoCapture.source\n    ].join('|') +\n    ')'\n);\n\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(\n  `(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`\n);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst offsetpart = new RegExp(`([zZ])|${offset.source}?`);\nexport const annotation = /\\[(!)?([a-z_][a-z0-9_-]*)=([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\\]/g;\n\nexport const zoneddatetime = new RegExp(\n  [\n    `^${datesplit.source}`,\n    `(?:(?:T|\\\\s+)${timesplit.source}(?:${offsetpart.source})?)?`,\n    `(?:\\\\[!?(${timeZoneID.source})\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\nexport const time = new RegExp(\n  [\n    `^T?${timesplit.source}`,\n    `(?:${offsetpart.source})?`,\n    `(?:\\\\[!?${timeZoneID.source}\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\n// The short forms of YearMonth and MonthDay are only for the ISO calendar, but\n// annotations are still allowed, and will throw if the calendar annotation is\n// not ISO.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\n// UTC offsets are not allowed, because they are not allowed with any date-only\n// format; also, YYYY-MM-UU is ambiguous with YYYY-MM-DD\nexport const yearmonth = new RegExp(\n  `^(${yearpart.source})-?(${monthpart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\nexport const monthday = new RegExp(\n  `^(?:--)?(${monthpart.source})-?(${daypart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\n\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\n\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n","const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathMax = Math.max;\nconst MathMin = Math.min;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ReflectApply = Reflect.apply;\nconst ReflectOwnKeys = Reflect.ownKeys;\nconst NumberIsNaN = Number.isNaN;\n\nimport { DEBUG, ENABLE_ASSERTS } from './debug';\nimport JSBI from 'jsbi';\n\nimport type { Temporal } from '..';\nimport type {\n  AnyTemporalLikeType,\n  UnitSmallerThanOrEqualTo,\n  CalendarProtocolParams,\n  TimeZoneProtocolParams,\n  InstantParams,\n  PlainMonthDayParams,\n  ZonedDateTimeParams,\n  CalendarParams,\n  TimeZoneParams,\n  PlainDateParams,\n  PlainTimeParams,\n  DurationParams,\n  PlainDateTimeParams,\n  PlainYearMonthParams,\n  PrimitiveFieldsOf,\n  BuiltinCalendarId,\n  Keys,\n  AnyTemporalKey,\n  CalendarSlot,\n  TimeZoneSlot\n} from './internaltypes';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot,\n  EPOCHNANOSECONDS,\n  TIMEZONE_ID,\n  CALENDAR_ID,\n  INSTANT,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  DATE_BRAND,\n  YEAR_MONTH_BRAND,\n  MONTH_DAY_BRAND,\n  TIME_ZONE,\n  CALENDAR,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS\n} from './slots';\n\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nconst TWENTY_FOUR = JSBI.BigInt(24);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst HOUR_SECONDS = 3600;\nexport const HOUR_NANOS = JSBI.multiply(JSBI.BigInt(HOUR_SECONDS), BILLION);\nconst MINUTE_NANOS = JSBI.multiply(SIXTY, BILLION);\nconst DAY_NANOS = JSBI.multiply(HOUR_NANOS, TWENTY_FOUR);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\n\nconst BUILTIN_CALENDAR_IDS = [\n  'iso8601',\n  'hebrew',\n  'islamic',\n  'islamic-umalqura',\n  'islamic-tbla',\n  'islamic-civil',\n  'islamic-rgsa',\n  'islamicc',\n  'persian',\n  'ethiopic',\n  'ethioaa',\n  'coptic',\n  'chinese',\n  'dangi',\n  'roc',\n  'indian',\n  'buddhist',\n  'japanese',\n  'gregory'\n];\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n/**\n * uncheckedAssertNarrowedType forces TypeScript to change the type of the argument to the one given in\n * the type parameter. This should only be used to help TS understand when variables change types,\n * but TS can't or won't infer this automatically. They should be used sparingly, because\n * if used incorrectly can lead to difficult-to-diagnose problems.\n * */\nexport function uncheckedAssertNarrowedType<T = unknown>(\n  arg: unknown,\n  justification: string\n): asserts arg is T extends typeof arg ? T : never {}\n/* eslint-enable */\n\ntype ArrayElement<ArrayType> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\ntype ArrayWithNewKeys<T, Keys> = Array<ArrayElement<T> | Keys>;\n\n/**\n * In debug builds, this function verifies that the given argument \"exists\" (is not\n * null or undefined). This function becomes a no-op in the final bundles distributed via NPM.\n * @param arg\n */\nexport function assertExists<A>(arg: A): asserts arg is NonNullable<A> {\n  if (ENABLE_ASSERTS) {\n    if (arg == null) {\n      throw new Error('Expected arg to be set.');\n    }\n  }\n}\n\n/** Similar to assertExists, but returns the argument. */\nfunction castExists<A>(arg: A): NonNullable<A> {\n  assertExists(arg);\n  return arg;\n}\n\nfunction isZero(value: JSBI): boolean {\n  return JSBI.equal(value, ZERO);\n}\n\ntype Stringless<T> = Exclude<T, string>;\n\nfunction GetMethod<T extends { [s in M]?: (...args: any[]) => unknown }, M extends string & keyof T>(\n  obj: T,\n  methodName: M\n): T[M];\nfunction GetMethod<\n  T extends string | { [s in M]?: (...args: any[]) => unknown },\n  M extends string & keyof Stringless<T>\n>(obj: T, methodName: M): Stringless<T>[M] | undefined;\nfunction GetMethod<\n  T extends string | { [s in M]?: undefined | ((...args: any[]) => unknown) },\n  M extends string & keyof T\n>(obj: T, methodName: M): T[M] | undefined {\n  const result = obj[methodName];\n  if (result === undefined) return undefined;\n  if (ENABLE_ASSERTS) {\n    if (typeof result !== 'function') throw new TypeError(`'${methodName}' must be a function`);\n  }\n  return result;\n}\n\nexport function Call<T, A extends readonly any[], R>(\n  target: (this: T, ...args: A) => R,\n  thisArgument: T,\n  argumentsList: Readonly<A>\n): R {\n  const args = arguments.length > 2 ? argumentsList : [];\n  if (ENABLE_ASSERTS) {\n    if (!Array.isArray(argumentsList)) {\n      throw new TypeError('Assertion failed: optional `argumentsList`, if provided, must be an array');\n    }\n  }\n  return ReflectApply(target, thisArgument, args);\n}\n\n// For unknown values, this narrows the result to a Record. But for union types\n// like `Temporal.DurationLike | string`, it'll strip the primitive types while\n// leaving the object type(s) unchanged.\nexport function IsObject<T>(\n  value: T\n): value is Exclude<T, string | null | undefined | number | bigint | symbol | boolean>;\nexport function IsObject(value: unknown): value is Record<string | number | symbol, unknown> {\n  return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\n\nexport function ToNumber(value: unknown): number {\n  // ES 2022's es-abstract made minor changes to ToNumber, but polyfilling these\n  // changes adds zero benefit to Temporal and brings in a lot of extra code. So\n  // we'll leave ToNumber as-is.\n  // See https://github.com/ljharb/es-abstract/blob/main/2022/ToNumber.js\n  if (typeof value === 'bigint') throw new TypeError('Cannot convert BigInt to number');\n  return NumberCtor(value);\n}\n\nfunction ToIntegerOrInfinity(value: unknown) {\n  const number = ToNumber(value);\n  if (NumberIsNaN(number) || number === 0) {\n    return 0;\n  }\n  if (!NumberIsFinite(number)) {\n    return number;\n  }\n  const integer = MathFloor(MathAbs(number));\n  if (integer === 0) {\n    return 0;\n  }\n  return MathSign(number) * integer;\n}\n\nfunction IsIntegralNumber(argument: unknown) {\n  if (typeof argument !== 'number' || NumberIsNaN(argument) || !NumberIsFinite(argument)) {\n    return false;\n  }\n  const absValue = MathAbs(argument);\n  return MathFloor(absValue) === absValue;\n}\n\nexport function ToString(value: unknown): string {\n  if (typeof value === 'symbol') {\n    throw new TypeError('Cannot convert a Symbol value to a String');\n  }\n  return StringCtor(value);\n}\n\nexport function ToIntegerWithTruncation(value: unknown): number {\n  const number = ToNumber(value);\n  if (number === 0) return 0;\n  if (NumberIsNaN(number) || !NumberIsFinite(number)) {\n    throw new RangeError('invalid number value');\n  }\n  const integer = MathTrunc(number);\n  if (integer === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return integer;\n}\n\nfunction ToPositiveIntegerWithTruncation(valueParam: unknown, property?: string): number {\n  const integer = ToIntegerWithTruncation(valueParam);\n  if (integer <= 0) {\n    if (property !== undefined) {\n      throw new RangeError(`property '${property}' cannot be a a number less than one`);\n    }\n    throw new RangeError('Cannot convert a number less than one to a positive integer');\n  }\n  return integer;\n}\n\nexport function ToIntegerIfIntegral(valueParam: unknown): number {\n  const number = ToNumber(valueParam);\n  if (!NumberIsFinite(number)) throw new RangeError('infinity is out of range');\n  if (!IsIntegralNumber(number)) throw new RangeError(`unsupported fractional value ${valueParam}`);\n  if (number === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return number;\n}\n\nfunction ToZeroPaddedDecimalString(n: number, minLength: number) {\n  if (DEBUG) {\n    if (!IsIntegralNumber(n) || n < 0) {\n      throw new RangeError('Assertion failed: `${n}` must be a non-negative integer');\n    }\n  }\n  const s = String(n);\n  return s.padStart(minLength, '0');\n}\n\nfunction divmod(x: JSBI, y: JSBI): { quotient: JSBI; remainder: JSBI } {\n  const quotient = JSBI.divide(x, y);\n  const remainder = JSBI.remainder(x, y);\n  return { quotient, remainder };\n}\n\nfunction isNegativeJSBI(value: JSBI): boolean {\n  return JSBI.lessThan(value, ZERO);\n}\n\nfunction signJSBI(value: JSBI): 1 | 0 | -1 {\n  if (isZero(value)) return 0;\n  if (isNegativeJSBI(value)) return -1;\n  return 1;\n}\nfunction abs(x: JSBI): JSBI {\n  if (JSBI.lessThan(x, ZERO)) return JSBI.multiply(x, NEGATIVE_ONE);\n  return x;\n}\n\ntype BuiltinCastFunction = (v: unknown) => string | number;\nconst BUILTIN_CASTS = new Map<AnyTemporalKey, BuiltinCastFunction>([\n  ['year', ToIntegerWithTruncation],\n  ['month', ToPositiveIntegerWithTruncation],\n  ['monthCode', ToString],\n  ['day', ToPositiveIntegerWithTruncation],\n  ['hour', ToIntegerWithTruncation],\n  ['minute', ToIntegerWithTruncation],\n  ['second', ToIntegerWithTruncation],\n  ['millisecond', ToIntegerWithTruncation],\n  ['microsecond', ToIntegerWithTruncation],\n  ['nanosecond', ToIntegerWithTruncation],\n  ['years', ToIntegerIfIntegral],\n  ['months', ToIntegerIfIntegral],\n  ['weeks', ToIntegerIfIntegral],\n  ['days', ToIntegerIfIntegral],\n  ['hours', ToIntegerIfIntegral],\n  ['minutes', ToIntegerIfIntegral],\n  ['seconds', ToIntegerIfIntegral],\n  ['milliseconds', ToIntegerIfIntegral],\n  ['microseconds', ToIntegerIfIntegral],\n  ['nanoseconds', ToIntegerIfIntegral],\n  ['era', ToString],\n  ['eraYear', ToIntegerOrInfinity],\n  ['offset', ToString]\n]);\n\nconst BUILTIN_DEFAULTS = new Map([\n  ['hour', 0],\n  ['minute', 0],\n  ['second', 0],\n  ['millisecond', 0],\n  ['microsecond', 0],\n  ['nanosecond', 0]\n]);\n\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n  ['years', 'year', 'date'],\n  ['months', 'month', 'date'],\n  ['weeks', 'week', 'date'],\n  ['days', 'day', 'date'],\n  ['hours', 'hour', 'time'],\n  ['minutes', 'minute', 'time'],\n  ['seconds', 'second', 'time'],\n  ['milliseconds', 'millisecond', 'time'],\n  ['microseconds', 'microsecond', 'time'],\n  ['nanoseconds', 'nanosecond', 'time']\n] as const;\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]] as const));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\n\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\n\nimport * as PARSE from './regex';\n\nconst IntlDateTimeFormatEnUsCache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier: string) {\n  const lowercaseIdentifier = ASCIILowercase(timeZoneIdentifier);\n  let instance = IntlDateTimeFormatEnUsCache.get(lowercaseIdentifier);\n  if (instance === undefined) {\n    instance = new IntlDateTimeFormat('en-us', {\n      timeZone: lowercaseIdentifier,\n      hour12: false,\n      era: 'short',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n    IntlDateTimeFormatEnUsCache.set(lowercaseIdentifier, instance);\n  }\n  return instance;\n}\n\nfunction ToObject<T>(value: T): T extends Record<string, unknown> ? T : Record<PropertyKey, unknown> {\n  if (typeof value === 'undefined' || value === null) {\n    throw new TypeError(`Expected object not ${value}`);\n  }\n  return Object(value);\n}\n\n// Adapted from https://github.com/ljharb/es-abstract/blob/main/2022/CopyDataProperties.js\n// but simplified (e.g. removed assertions) for this polyfill to reduce bundle size.\nexport function CopyDataProperties<K extends PropertyKey, T extends Record<K, unknown>>(\n  target: T,\n  source: T | undefined,\n  excludedKeys: K[],\n  excludedValues?: unknown[]\n) {\n  if (typeof source === 'undefined' || source === null) return;\n\n  const keys = ReflectOwnKeys(source) as (keyof T)[];\n  for (const nextKey of keys) {\n    if (excludedKeys.some((e) => Object.is(e, nextKey))) continue;\n    if (Object.prototype.propertyIsEnumerable.call(source, nextKey)) {\n      const propValue = source[nextKey];\n      if (excludedValues && excludedValues.some((e) => Object.is(e, propValue))) continue;\n\n      target[nextKey] = propValue;\n    }\n  }\n}\n\nexport function IsTemporalInstant(item: unknown): item is Temporal.Instant {\n  return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\n\nexport function IsTemporalTimeZone(item: unknown): item is Temporal.TimeZone {\n  return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item: unknown): item is Temporal.Calendar {\n  return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item: unknown): item is Temporal.Duration {\n  return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item: unknown): item is Temporal.PlainDate {\n  return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item: unknown): item is Temporal.PlainTime {\n  return (\n    HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n    !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)\n  );\n}\nexport function IsTemporalDateTime(item: unknown): item is Temporal.PlainDateTime {\n  return HasSlot(\n    item,\n    ISO_YEAR,\n    ISO_MONTH,\n    ISO_DAY,\n    ISO_HOUR,\n    ISO_MINUTE,\n    ISO_SECOND,\n    ISO_MILLISECOND,\n    ISO_MICROSECOND,\n    ISO_NANOSECOND\n  );\n}\nexport function IsTemporalYearMonth(item: unknown): item is Temporal.PlainYearMonth {\n  return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item: unknown): item is Temporal.PlainMonthDay {\n  return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item: unknown): item is Temporal.ZonedDateTime {\n  return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectTemporalLikeObject(item: AnyTemporalLikeType) {\n  if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n    throw new TypeError('with() does not support a calendar or timeZone property');\n  }\n  if (IsTemporalTime(item)) {\n    throw new TypeError('with() does not accept Temporal.PlainTime, use withPlainTime() instead');\n  }\n  if ((item as { calendar: unknown }).calendar !== undefined) {\n    throw new TypeError('with() does not support a calendar property');\n  }\n  if ((item as { timeZone: unknown }).timeZone !== undefined) {\n    throw new TypeError('with() does not support a timeZone property');\n  }\n}\n\nexport function CanonicalizeTimeZoneOffsetString(offsetString: string) {\n  const offsetNs = ParseTimeZoneOffsetString(offsetString);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nfunction ParseTemporalTimeZone(stringIdent: string) {\n  const { tzName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n  if (tzName) {\n    if (IsTimeZoneOffsetString(tzName)) return CanonicalizeTimeZoneOffsetString(tzName);\n    return GetCanonicalTimeZoneIdentifier(tzName);\n  }\n  if (z) return 'UTC';\n  // if !tzName && !z then offset must be present\n  uncheckedAssertNarrowedType<string>(offset, 'if !tzName && !z then offset must be present');\n  return CanonicalizeTimeZoneOffsetString(offset);\n}\n\nfunction MaybeFormatCalendarAnnotation(\n  calendar: CalendarSlot,\n  showCalendar: Temporal.ShowCalendarOption['calendarName']\n): string {\n  if (showCalendar === 'never') return '';\n  return FormatCalendarAnnotation(ToTemporalCalendarIdentifier(calendar), showCalendar);\n}\n\nfunction FormatCalendarAnnotation(id: string, showCalendar: Temporal.ShowCalendarOption['calendarName']) {\n  if (showCalendar === 'never') return '';\n  if (showCalendar === 'auto' && id === 'iso8601') return '';\n  const flag = showCalendar === 'critical' ? '!' : '';\n  return `[${flag}u-ca=${id}]`;\n}\n\n// Not a separate abstract operation in the spec, because it only occurs in one\n// place: ParseISODateTime. In the code it's more convenient to split up\n// ParseISODateTime for the YYYY-MM, MM-DD, and THH:MM:SS parse goals, so it's\n// repeated four times.\nfunction processAnnotations(annotations: string) {\n  let calendar;\n  let calendarWasCritical = false;\n  for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n    if (key === 'u-ca') {\n      if (calendar === undefined) {\n        calendar = value;\n        calendarWasCritical = critical === '!';\n      } else if (critical === '!' || calendarWasCritical) {\n        throw new RangeError(`Invalid annotations in ${annotations}: more than one u-ca present with critical flag`);\n      }\n    } else if (critical === '!') {\n      throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n    }\n  }\n  return calendar;\n}\n\nfunction ParseISODateTime(isoString: string) {\n  // ZDT is the superset of fields for every other Temporal type\n  const match = PARSE.zoneddatetime.exec(isoString);\n  if (!match) throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  let yearString = match[1];\n  if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n  if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  const year = ToIntegerOrInfinity(yearString);\n  const month = ToIntegerOrInfinity(match[2] || match[4]);\n  const day = ToIntegerOrInfinity(match[3] || match[5]);\n  const hour = ToIntegerOrInfinity(match[6]);\n  const hasTime = match[6] !== undefined;\n  const minute = ToIntegerOrInfinity(match[7] || match[10]);\n  let second = ToIntegerOrInfinity(match[8] || match[11]);\n  if (second === 60) second = 59;\n  const fraction = (match[9] || match[12]) + '000000000';\n  const millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n  const microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n  const nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n  let offset;\n  let z = false;\n  if (match[13]) {\n    offset = undefined;\n    z = true;\n  } else if (match[14] && match[15]) {\n    const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n    const offsetHours = match[15] || '00';\n    const offsetMinutes = match[16] || '00';\n    const offsetSeconds = match[17] || '00';\n    let offsetFraction = match[18] || '0';\n    offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n    if (+offsetFraction) {\n      while (offsetFraction.endsWith('0')) offsetFraction = offsetFraction.slice(0, -1);\n      offset += `:${offsetSeconds}.${offsetFraction}`;\n    } else if (+offsetSeconds) {\n      offset += `:${offsetSeconds}`;\n    }\n    if (offset === '-00:00') offset = '+00:00';\n  }\n  const tzName = match[19];\n  const calendar = processAnnotations(match[20]);\n  RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  return {\n    year,\n    month,\n    day,\n    hasTime,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    tzName,\n    offset,\n    z,\n    calendar\n  };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.z && !result.offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.tzName) throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString: string) {\n  const match = PARSE.time.exec(isoString);\n  let hour, minute, second, millisecond, microsecond, nanosecond;\n  if (match) {\n    hour = ToIntegerOrInfinity(match[1]);\n    minute = ToIntegerOrInfinity(match[2] || match[5]);\n    second = ToIntegerOrInfinity(match[3] || match[6]);\n    if (second === 60) second = 59;\n    const fraction = (match[4] || match[7]) + '000000000';\n    millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n    microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n    nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n    processAnnotations(match[14]); // for validation only; ignore found calendar\n    if (match[8]) throw new RangeError('Z designator not supported for PlainTime');\n  } else {\n    let z, hasTime;\n    ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, z } = ParseISODateTime(isoString));\n    if (!hasTime) throw new RangeError(`time is missing in string: ${isoString}`);\n    if (z) throw new RangeError('Z designator not supported for PlainTime');\n  }\n  // if it's a date-time string, OK\n  if (/[tT ][0-9][0-9]/.test(isoString)) {\n    return { hour, minute, second, millisecond, microsecond, nanosecond };\n  }\n  try {\n    const { month, day } = ParseTemporalMonthDayString(isoString);\n    RejectISODate(1972, month, day);\n  } catch {\n    try {\n      const { year, month } = ParseTemporalYearMonthString(isoString);\n      RejectISODate(year, month, 1);\n    } catch {\n      return { hour, minute, second, millisecond, microsecond, nanosecond };\n    }\n  }\n  throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString: string) {\n  const match = PARSE.yearmonth.exec(isoString);\n  let year, month, calendar, referenceISODay;\n  if (match) {\n    let yearString = match[1];\n    if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n    if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n    year = ToIntegerOrInfinity(yearString);\n    month = ToIntegerOrInfinity(match[2]);\n    calendar = processAnnotations(match[3]);\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('YYYY-MM format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainYearMonth');\n  }\n  return { year, month, calendar, referenceISODay };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString: string) {\n  const match = PARSE.monthday.exec(isoString);\n  let month, day, calendar, referenceISOYear;\n  if (match) {\n    month = ToIntegerOrInfinity(match[1]);\n    day = ToIntegerOrInfinity(match[2]);\n    calendar = processAnnotations(match[3]);\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('MM-DD format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainMonthDay');\n  }\n  return { month, day, calendar, referenceISOYear };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent: string): Partial<{\n  tzName: string | undefined;\n  offset: string | undefined;\n  z: boolean | undefined;\n}> {\n  const bareID = new RegExp(`^${PARSE.timeZoneID.source}$`, 'i');\n  if (bareID.test(stringIdent)) return { tzName: stringIdent };\n  try {\n    // Try parsing ISO string instead\n    const result = ParseISODateTime(stringIdent);\n    if (result.z || result.offset || result.tzName) {\n      return result;\n    }\n  } catch {\n    // fall through\n  }\n  throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString: string) {\n  const match = PARSE.duration.exec(isoString);\n  if (!match) throw new RangeError(`invalid duration: ${isoString}`);\n  if (match.slice(2).every((element) => element === undefined)) {\n    throw new RangeError(`invalid duration: ${isoString}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n  const years = match[2] === undefined ? 0 : ToIntegerWithTruncation(match[2]) * sign;\n  const months = match[3] === undefined ? 0 : ToIntegerWithTruncation(match[3]) * sign;\n  const weeks = match[4] === undefined ? 0 : ToIntegerWithTruncation(match[4]) * sign;\n  const days = match[5] === undefined ? 0 : ToIntegerWithTruncation(match[5]) * sign;\n  const hours = match[6] === undefined ? 0 : ToIntegerWithTruncation(match[6]) * sign;\n  const fHours = match[7];\n  const minutesStr = match[8];\n  const fMinutes = match[9];\n  const secondsStr = match[10];\n  const fSeconds = match[11];\n  let minutes = 0;\n  let seconds = 0;\n  // fractional hours, minutes, or seconds, expressed in whole nanoseconds:\n  let excessNanoseconds = 0;\n\n  if (fHours !== undefined) {\n    if (minutesStr ?? fMinutes ?? secondsStr ?? fSeconds ?? false) {\n      throw new RangeError('only the smallest unit can be fractional');\n    }\n    excessNanoseconds = ToIntegerOrInfinity((fHours + '000000000').slice(0, 9)) * 3600 * sign;\n  } else {\n    minutes = minutesStr === undefined ? 0 : ToIntegerWithTruncation(minutesStr) * sign;\n    if (fMinutes !== undefined) {\n      if (secondsStr ?? fSeconds ?? false) {\n        throw new RangeError('only the smallest unit can be fractional');\n      }\n      excessNanoseconds = ToIntegerOrInfinity((fMinutes + '000000000').slice(0, 9)) * 60 * sign;\n    } else {\n      seconds = secondsStr === undefined ? 0 : ToIntegerWithTruncation(secondsStr) * sign;\n      if (fSeconds !== undefined) {\n        excessNanoseconds = ToIntegerOrInfinity((fSeconds + '000000000').slice(0, 9)) * sign;\n      }\n    }\n  }\n\n  const nanoseconds = excessNanoseconds % 1000;\n  const microseconds = MathTrunc(excessNanoseconds / 1000) % 1000;\n  const milliseconds = MathTrunc(excessNanoseconds / 1e6) % 1000;\n  seconds += MathTrunc(excessNanoseconds / 1e9) % 60;\n  minutes += MathTrunc(excessNanoseconds / 6e10);\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString: string) {\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } =\n    ParseTemporalInstantString(isoString);\n\n  if (!z && !offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  // At least one of z or offset is defined, but TS doesn't seem to understand\n  // that we only use offset if z is not defined (and thus offset must be defined).\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n  const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset!);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond - offsetNs\n  ));\n\n  const epochNs = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n  return epochNs;\n}\n\nexport function RegulateISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, day);\n      break;\n    case 'constrain':\n      ({ year, month, day } = ConstrainISODate(year, month, day));\n      break;\n  }\n  return { year, month, day };\n}\n\nexport function RegulateTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  switch (overflow) {\n    case 'reject':\n      RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n      break;\n    case 'constrain':\n      ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond\n      ));\n      break;\n  }\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RegulateISOYearMonth(\n  yearParam: number,\n  monthParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  const referenceISODay = 1;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, referenceISODay);\n      break;\n    case 'constrain':\n      ({ year, month } = ConstrainISODate(year, month));\n      break;\n  }\n  return { year, month };\n}\n\nfunction ToTemporalDurationRecord(item: Temporal.DurationLike | string) {\n  if (!IsObject(item)) {\n    return ParseTemporalDurationString(ToString(item));\n  }\n  if (IsTemporalDuration(item)) {\n    return {\n      years: GetSlot(item, YEARS),\n      months: GetSlot(item, MONTHS),\n      weeks: GetSlot(item, WEEKS),\n      days: GetSlot(item, DAYS),\n      hours: GetSlot(item, HOURS),\n      minutes: GetSlot(item, MINUTES),\n      seconds: GetSlot(item, SECONDS),\n      milliseconds: GetSlot(item, MILLISECONDS),\n      microseconds: GetSlot(item, MICROSECONDS),\n      nanoseconds: GetSlot(item, NANOSECONDS)\n    };\n  }\n  const result = {\n    years: 0,\n    months: 0,\n    weeks: 0,\n    days: 0,\n    hours: 0,\n    minutes: 0,\n    seconds: 0,\n    milliseconds: 0,\n    microseconds: 0,\n    nanoseconds: 0\n  };\n  let partial = ToTemporalPartialDurationRecord(item);\n  for (const property of DURATION_FIELDS) {\n    const value = partial[property];\n    if (value !== undefined) {\n      result[property] = value;\n    }\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction ToTemporalPartialDurationRecord(temporalDurationLike: Temporal.DurationLike | string) {\n  if (!IsObject(temporalDurationLike)) {\n    throw new TypeError('invalid duration-like');\n  }\n  const result: Record<(typeof DURATION_FIELDS)[number], number | undefined> = {\n    years: undefined,\n    months: undefined,\n    weeks: undefined,\n    days: undefined,\n    hours: undefined,\n    minutes: undefined,\n    seconds: undefined,\n    milliseconds: undefined,\n    microseconds: undefined,\n    nanoseconds: undefined\n  };\n  let any = false;\n  for (const property of DURATION_FIELDS) {\n    const value = temporalDurationLike[property];\n    if (value !== undefined) {\n      any = true;\n      result[property] = ToIntegerIfIntegral(value);\n    }\n  }\n  if (!any) {\n    throw new TypeError('invalid duration-like');\n  }\n  return result;\n}\n\nfunction ToLimitedTemporalDuration(\n  item: Temporal.DurationLike | string,\n  disallowedProperties: (keyof Temporal.DurationLike)[]\n) {\n  let record = ToTemporalDurationRecord(item);\n  for (const property of disallowedProperties) {\n    if (record[property] !== 0) {\n      throw new RangeError(\n        `Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`\n      );\n    }\n  }\n  return record;\n}\n\nexport function ToTemporalOverflow(options: Temporal.AssignmentOptions | undefined) {\n  if (options === undefined) return 'constrain';\n  return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\n\nexport function ToTemporalDisambiguation(options: Temporal.ToInstantOptions | undefined) {\n  if (options === undefined) return 'compatible';\n  return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\n\nexport function ToTemporalRoundingMode(\n  options: { roundingMode?: Temporal.RoundingMode },\n  fallback: Temporal.RoundingMode\n) {\n  return GetOption(\n    options,\n    'roundingMode',\n    ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'],\n    fallback\n  );\n}\n\nfunction NegateTemporalRoundingMode(roundingMode: Temporal.RoundingMode) {\n  switch (roundingMode) {\n    case 'ceil':\n      return 'floor';\n    case 'floor':\n      return 'ceil';\n    case 'halfCeil':\n      return 'halfFloor';\n    case 'halfFloor':\n      return 'halfCeil';\n    default:\n      return roundingMode;\n  }\n}\n\nexport function ToTemporalOffset(\n  options: Temporal.OffsetDisambiguationOptions | undefined,\n  fallback: Required<Temporal.OffsetDisambiguationOptions>['offset']\n) {\n  if (options === undefined) return fallback;\n  return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\n\nexport function ToCalendarNameOption(options: Temporal.ShowCalendarOption) {\n  return GetOption(options, 'calendarName', ['auto', 'always', 'never', 'critical'], 'auto');\n}\n\nexport function ToTimeZoneNameOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'timeZoneName', ['auto', 'never', 'critical'], 'auto');\n}\n\nexport function ToShowOffsetOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\n\nexport function ToTemporalRoundingIncrement(options: { roundingIncrement?: number }) {\n  let increment = options.roundingIncrement;\n  if (increment === undefined) return 1;\n  increment = ToNumber(increment);\n  if (!NumberIsFinite(increment)) {\n    throw new RangeError('roundingIncrement must be finite');\n  }\n  const integerIncrement = MathTrunc(increment);\n  if (integerIncrement < 1 || integerIncrement > 1e9) {\n    throw new RangeError(`roundingIncrement must be at least 1 and at most 1e9, not ${increment}`);\n  }\n  return integerIncrement;\n}\nexport function ValidateTemporalRoundingIncrement(increment: number, dividend: number, inclusive: boolean) {\n  const maximum = inclusive ? dividend : dividend - 1;\n  if (increment > maximum) {\n    throw new RangeError(`roundingIncrement must be at least 1 and less than ${maximum}, not ${increment}`);\n  }\n  if (dividend % increment !== 0) {\n    throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n  }\n}\n\nexport function ToFractionalSecondDigits(\n  normalizedOptions: Temporal.ToStringPrecisionOptions\n): Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] {\n  const digitsValue = normalizedOptions.fractionalSecondDigits;\n  if (digitsValue === undefined) return 'auto';\n  if (typeof digitsValue !== 'number') {\n    if (ToString(digitsValue) !== 'auto') {\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n    }\n    return 'auto';\n  }\n  const digitCount = MathFloor(digitsValue);\n  if (!NumberIsFinite(digitCount) || digitCount < 0 || digitCount > 9) {\n    throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n  }\n  return digitCount as Exclude<Temporal.ToStringPrecisionOptions['fractionalSecondDigits'], 'auto'>;\n}\n\nexport function ToSecondsStringPrecisionRecord(\n  smallestUnit: Temporal.ToStringPrecisionOptions['smallestUnit'],\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits']\n): {\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] | 'minute';\n  unit: UnitSmallerThanOrEqualTo<'minute'>;\n  increment: number;\n} {\n  switch (smallestUnit) {\n    case 'minute':\n      return { precision: 'minute', unit: 'minute', increment: 1 };\n    case 'second':\n      return { precision: 0, unit: 'second', increment: 1 };\n    case 'millisecond':\n      return { precision: 3, unit: 'millisecond', increment: 1 };\n    case 'microsecond':\n      return { precision: 6, unit: 'microsecond', increment: 1 };\n    case 'nanosecond':\n      return { precision: 9, unit: 'nanosecond', increment: 1 };\n    default: // fall through if option not given\n  }\n  switch (precision) {\n    case 'auto':\n      return { precision, unit: 'nanosecond', increment: 1 };\n    case 0:\n      return { precision, unit: 'second', increment: 1 };\n    case 1:\n    case 2:\n    case 3:\n      return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n    case 4:\n    case 5:\n    case 6:\n      return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n    case 7:\n    case 8:\n    case 9:\n      return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n    default:\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${precision}`);\n  }\n}\n\nexport const REQUIRED = Symbol('~required~');\n\ninterface TemporalUnitOptionsBag {\n  smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n  largestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';\n  unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n}\ntype UnitTypeMapping = {\n  date: Temporal.DateUnit;\n  time: Temporal.TimeUnit;\n  datetime: Temporal.DateTimeUnit;\n};\n// This type specifies the allowed defaults for each unit key type.\ntype AllowedGetTemporalUnitDefaultValues = {\n  smallestUnit: undefined;\n  largestUnit: 'auto' | undefined;\n  unit: undefined;\n};\n\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  R extends Exclude<D, typeof REQUIRED> | UnitTypeMapping[T]\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D): R;\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D, extraValues: ReadonlyArray<E>): R;\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit<\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(\n  options: TemporalUnitOptionsBag,\n  key: keyof typeof options,\n  unitGroup: T,\n  requiredOrDefault: D,\n  extraValues: ReadonlyArray<E> | never[] = []\n): R {\n  const allowedSingular: Array<Temporal.DateTimeUnit | 'auto'> = [];\n  for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n    if (unitGroup === 'datetime' || unitGroup === category) {\n      allowedSingular.push(singular);\n    }\n  }\n  allowedSingular.push(...extraValues);\n  let defaultVal: typeof REQUIRED | Temporal.DateTimeUnit | 'auto' | undefined = requiredOrDefault;\n  if (defaultVal === REQUIRED) {\n    defaultVal = undefined;\n  } else if (defaultVal !== undefined) {\n    allowedSingular.push(defaultVal);\n  }\n  const allowedValues: Array<Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit> | 'auto'> = [\n    ...allowedSingular\n  ];\n  for (const singular of allowedSingular) {\n    const plural = PLURAL_FOR.get(singular as Parameters<typeof PLURAL_FOR.get>[0]);\n    if (plural !== undefined) allowedValues.push(plural);\n  }\n  let retval = GetOption(options, key, allowedValues, defaultVal);\n  if (retval === undefined && requiredOrDefault === REQUIRED) {\n    throw new RangeError(`${key} is required`);\n  }\n  // Coerce any plural units into their singular form\n  if (SINGULAR_FOR.has(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)) {\n    // We just has-checked this, but tsc doesn't understand that.\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return SINGULAR_FOR.get(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)! as R;\n  }\n  return retval as R;\n}\n\nexport function ToRelativeTemporalObject(options: {\n  relativeTo?:\n    | Temporal.ZonedDateTime\n    | Temporal.PlainDateTime\n    | Temporal.ZonedDateTimeLike\n    | Temporal.PlainDateTimeLike\n    | string\n    | undefined;\n}): Temporal.ZonedDateTime | Temporal.PlainDate | undefined {\n  const relativeTo = options.relativeTo;\n  if (relativeTo === undefined) return relativeTo;\n\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  let matchMinutes = false;\n  let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n  if (IsObject(relativeTo)) {\n    if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) return relativeTo;\n    if (IsTemporalDateTime(relativeTo)) return TemporalDateTimeToDate(relativeTo);\n    calendar = GetTemporalCalendarSlotValueWithISODefault(relativeTo);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    type FieldNamesWithTimeZoneAndOffset = ArrayWithNewKeys<typeof fieldNames, 'timeZone' | 'offset'>;\n    (fieldNames as FieldNamesWithTimeZoneAndOffset).push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n    const dateOptions = ObjectCreate(null) as Temporal.AssignmentOptions;\n    dateOptions.overflow = 'constrain';\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      dateOptions\n    ));\n    offset = fields.offset;\n    if (offset === undefined) offsetBehaviour = 'wall';\n    timeZone = fields.timeZone;\n    if (timeZone !== undefined) timeZone = ToTemporalTimeZoneSlotValue(timeZone);\n  } else {\n    let tzName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, tzName, offset, z } =\n      ParseISODateTime(ToString(relativeTo)));\n    if (tzName) {\n      timeZone = ToTemporalTimeZoneSlotValue(tzName);\n      if (z) {\n        offsetBehaviour = 'exact';\n      } else if (!offset) {\n        offsetBehaviour = 'wall';\n      }\n      matchMinutes = true;\n    } else if (z) {\n      throw new RangeError(\n        'Z designator not supported for PlainDate relativeTo; either remove the Z or add a bracketed time zone'\n      );\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  if (timeZone === undefined) return CreateTemporalDate(year, month, day, calendar);\n  // If offset is missing here, then offsetBehavior will never be be 'option'.\n  const offsetNs = offsetBehaviour === 'option' ? ParseTimeZoneOffsetString(castExists(offset)) : 0;\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    'compatible',\n    'reject',\n    matchMinutes\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function DefaultTemporalLargestUnit(\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n): Temporal.DateTimeUnit {\n  for (const [prop, v] of [\n    ['years', years],\n    ['months', months],\n    ['weeks', weeks],\n    ['days', days],\n    ['hours', hours],\n    ['minutes', minutes],\n    ['seconds', seconds],\n    ['milliseconds', milliseconds],\n    ['microseconds', microseconds],\n    ['nanoseconds', nanoseconds]\n  ] as const) {\n    if (v !== 0) {\n      // All the above keys are definitely in SINGULAR_FOR\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return SINGULAR_FOR.get(prop)!;\n    }\n  }\n  return 'nanosecond';\n}\n\nexport function LargerOfTwoTemporalUnits<T1 extends Temporal.DateTimeUnit, T2 extends Temporal.DateTimeUnit>(\n  unit1: T1,\n  unit2: T2\n) {\n  if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) return unit2;\n  return unit1;\n}\n\ntype FieldCompleteness = 'complete' | 'partial';\ninterface FieldPrepareOptions {\n  emptySourceErrorMessage: string;\n}\n\n// Returns all potential owners from all Temporal Like-types for a given union\n// of keys in K.\n// e.g.\n// Owner<'nanosecond'> => PlainDateTimeLike | ZonedDateTimeLike | PlainDateTimeLike | ZonedDateTimeLike\n// Owner<'nanoseconds'> => Duration (the only type with plural keys)\ntype Owner<K extends AnyTemporalKey> =\n  // Conditional typing maps over all of the types given in AnyTemporalLikeType\n  // union\n  K extends unknown ? OwnerOf<K, AnyTemporalLikeType> : 'ThisShouldNeverHappen';\n\n// Returns T iff T has K as all of the key(s) (even if those keys are optional\n// in T), never otherwise. This is a private type for use only in the Owner type\n// above.\ntype OwnerOf<K extends AnyTemporalKey, T> =\n  // Distribute the union before passing to Required\n  // Without distributing, this is\n  // Required<ZonedDateTimeLike | DurationLike> extends Record\n  // vs (with distribution)\n  // Required<ZonedDateTimeLike> extends Record<....> | Required<DurationLike> extends Record<....>\n  T extends unknown\n    ? // All the keys in the Like-types are optional, so in order for them to\n      // 'extend Record<K,...>', where K indicates the required fields, we pass T\n      // through Required to make all the keys non-optional.\n      // Note this doesn't work the other way around: using Partial<Record<K, ..>>\n      // will always be extended by any object (as all the keys are optional).\n      Required<T> extends Record<K, unknown>\n      ? T\n      : // never is the 'identity' type for unions - nothing will be added or\n        // removed from the union.\n        never\n    : 'ThisShouldNeverHappen';\n\ntype Prop<T, K> = T extends unknown ? (K extends keyof T ? T[K] : undefined) : 'ThisShouldNeverHappen';\n\n// Resolve copies the keys and values of a given object type so that TS will\n// stop using type names in error messages / autocomplete. Generally, those\n// names can be more useful, but sometimes having the primitive object shape is\n// significantly easier to reason about (e.g. deeply-nested types).\n// Resolve is an identity function for function types.\ntype Resolve<T> =\n  // Re-mapping doesn't work very well for functions, so exclude them\n  T extends (...args: never[]) => unknown\n    ? T\n    : // Re-map all the keys in T to the same value. This forces TS into no longer\n      // using type aliases, etc.\n      { [K in keyof T]: T[K] };\n\ntype FieldObjectFromOwners<OwnerT, FieldKeys extends AnyTemporalKey> = Resolve<\n  // The resulting object type contains:\n  // - All keys in FieldKeys, which are required properties and their values\n  //   don't include undefined.\n  // - All the other keys in OwnerT that aren't in FieldKeys, which are optional\n  //   properties and their value types explicitly include undefined.\n  {\n    -readonly [k in FieldKeys]: Exclude<Prop<OwnerT, k>, undefined>;\n  } & {\n    -readonly [k in Exclude<Keys<OwnerT>, FieldKeys>]?: Prop<OwnerT, k> | undefined;\n  }\n>;\n\ntype PrepareTemporalFieldsReturn<\n  FieldKeys extends AnyTemporalKey,\n  RequiredFieldsOpt extends ReadonlyArray<FieldKeys> | FieldCompleteness,\n  OwnerT extends Owner<FieldKeys>\n> = RequiredFieldsOpt extends 'partial' ? Partial<OwnerT> : FieldObjectFromOwners<OwnerT, FieldKeys>;\nexport function PrepareTemporalFields<\n  FieldKeys extends AnyTemporalKey,\n  // Constrains the Required keys to be a subset of the given field keys\n  // This could have been written directly into the parameter type, but that\n  // causes an unintended effect where the required fields are added to the list\n  // of field keys, even if that key isn't present in 'fields'.\n  // RequiredFieldKeys extends FieldKeys,\n  RequiredFields extends ReadonlyArray<FieldKeys> | FieldCompleteness\n>(\n  bag: Partial<Record<FieldKeys, unknown>>,\n  fields: Array<FieldKeys>,\n  requiredFields: RequiredFields,\n  { emptySourceErrorMessage }: FieldPrepareOptions = { emptySourceErrorMessage: 'no supported properties found' }\n): PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>> {\n  const result: Partial<Record<AnyTemporalKey, unknown>> = ObjectCreate(null);\n  let any = false;\n  fields.sort();\n  for (const property of fields) {\n    let value = bag[property];\n    if (value !== undefined) {\n      any = true;\n      if (BUILTIN_CASTS.has(property)) {\n        // We just has-checked this map access, so there will definitely be a\n        // value.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        value = BUILTIN_CASTS.get(property)!(value);\n      }\n      result[property] = value;\n    } else if (requiredFields !== 'partial') {\n      // TODO: using .call in this way is not correctly type-checked by tsc.\n      // We might need a type-safe Call wrapper?\n      if (ArrayIncludes.call(requiredFields, property)) {\n        throw new TypeError(`required property '${property}' missing or undefined`);\n      }\n      value = BUILTIN_DEFAULTS.get(property);\n      result[property] = value;\n    }\n  }\n  if (requiredFields === 'partial' && !any) {\n    throw new TypeError(emptySourceErrorMessage);\n  }\n  return result as unknown as PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>>;\n}\n\ninterface TimeRecord {\n  hour?: number;\n  minute?: number;\n  second?: number;\n  microsecond?: number;\n  millisecond?: number;\n  nanosecond?: number;\n}\nexport function ToTemporalTimeRecord(bag: Partial<Record<keyof TimeRecord, string | number>>): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: 'partial'\n): Partial<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number>>,\n  completeness: 'complete'\n): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: FieldCompleteness = 'complete'\n): Partial<TimeRecord> {\n  // NOTE: Field order is sorted to make the sort in PrepareTemporalFields more efficient.\n  const fields: (keyof TimeRecord)[] = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n  const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n  const result: Partial<TimeRecord> = {};\n  for (const field of fields) {\n    const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n    if (valueDesc !== undefined) {\n      result[field] = valueDesc.value;\n    } else if (completeness === 'complete') {\n      result[field] = 0;\n    }\n  }\n  return result;\n}\n\nexport function ToTemporalDate(\n  itemParam: PlainDateParams['from'][0],\n  options?: PlainDateParams['from'][1]\n): Temporal.PlainDate {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalDate(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarDateFromFields(calendar, fields, options);\n  }\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n  if (z) throw new RangeError('Z designator not supported for PlainDate');\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n  return CreateTemporalDate(year, month, day, calendar);\n}\n\nexport function InterpretTemporalDateTimeFields(\n  calendar: CalendarSlot,\n  fields: PrimitiveFieldsOf<Temporal.PlainDateTimeLike> & Parameters<typeof CalendarDateFromFields>[1],\n  options?: Temporal.AssignmentOptions\n) {\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n  const overflow = ToTemporalOverflow(options);\n  const date = CalendarDateFromFields(calendar, fields, options);\n  const year = GetSlot(date, ISO_YEAR);\n  const month = GetSlot(date, ISO_MONTH);\n  const day = GetSlot(date, ISO_DAY);\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    overflow\n  ));\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function ToTemporalDateTime(item: PlainDateTimeParams['from'][0], options?: PlainDateTimeParams['from'][1]) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    calendar;\n  if (IsObject(item)) {\n    if (IsTemporalDateTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDate(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        GetSlot(item, CALENDAR)\n      );\n    }\n\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    ToTemporalOverflow(options); // validate and ignore\n    let z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n      ParseTemporalDateTimeString(ToString(item)));\n    if (z) throw new RangeError('Z designator not supported for PlainDateTime');\n    RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function ToTemporalDuration(item: DurationParams['from'][0]) {\n  if (IsTemporalDuration(item)) return item;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(item);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n}\n\nexport function ToTemporalInstant(item: InstantParams['from'][0]) {\n  if (IsTemporalInstant(item)) return item;\n  if (IsTemporalZonedDateTime(item)) {\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n  }\n  const ns = ParseTemporalInstant(ToString(item));\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  return new TemporalInstant(ns);\n}\n\nexport function ToTemporalMonthDay(\n  itemParam: PlainMonthDayParams['from'][0],\n  options?: PlainMonthDayParams['from'][1]\n) {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalMonthDay(item)) return item;\n    let calendar: CalendarSlot, calendarAbsent: boolean;\n    if (HasSlot(item, CALENDAR)) {\n      calendar = GetSlot(item, CALENDAR);\n      calendarAbsent = false;\n    } else {\n      let calendarFromItem = item.calendar;\n      calendarAbsent = calendarFromItem === undefined;\n      if (calendarFromItem === undefined) calendarFromItem = 'iso8601';\n      calendar = ToTemporalCalendarSlotValue(calendarFromItem);\n    }\n    // HasSlot above adjusts the type of 'item' to include\n    // TypesWithCalendarUnits, which causes type-inference failures below.\n    // This is probably indicative of problems with HasSlot's typing.\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    // Callers who omit the calendar are not writing calendar-independent\n    // code. In that case, `monthCode`/`year` can be omitted; `month` and\n    // `day` are sufficient. Add a `year` to satisfy calendar validation.\n    if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n      fields.year = 1972;\n    }\n    return CalendarMonthDayFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { month, day, referenceISOYear, calendar } = ParseTemporalMonthDayString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISOYear === undefined) {\n    RejectISODate(1972, month, day);\n    return CreateTemporalMonthDay(month, day, calendar);\n  }\n  const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n  return CalendarMonthDayFromFields(calendar, result);\n}\n\nexport function ToTemporalTime(\n  itemParam: PlainTimeParams['from'][0],\n  overflow: NonNullable<PlainTimeParams['from'][1]>['overflow'] = 'constrain'\n) {\n  let item = itemParam;\n  let hour, minute, second, millisecond, microsecond, nanosecond;\n  if (IsObject(item)) {\n    if (IsTemporalTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n      return new TemporalPlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n  } else {\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ParseTemporalTimeString(ToString(item)));\n    RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function ToTemporalYearMonth(\n  item: PlainYearMonthParams['from'][0],\n  options?: PlainYearMonthParams['from'][1]\n): Temporal.PlainYearMonth {\n  if (IsObject(item)) {\n    if (IsTemporalYearMonth(item)) return item;\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarYearMonthFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, referenceISODay, calendar } = ParseTemporalYearMonthString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISODay === undefined) {\n    RejectISODate(year, month, 1);\n    return CreateTemporalYearMonth(year, month, calendar);\n  }\n  const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n  return CalendarYearMonthFromFields(calendar, result);\n}\n\ntype OffsetBehaviour = 'wall' | 'exact' | 'option';\n\nexport function InterpretISODateTimeOffset(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  offsetBehaviour: OffsetBehaviour,\n  offsetNs: number,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>,\n  offsetOpt: Temporal.OffsetDisambiguationOptions['offset'],\n  matchMinute: boolean\n) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n\n  if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n    // Simple case: ISO string without a TZ offset (or caller wants to ignore\n    // the offset), so just convert DateTime to Instant in the given time zone\n    const instant = GetInstantFor(timeZone, dt, disambiguation);\n    return GetSlot(instant, EPOCHNANOSECONDS);\n  }\n\n  // The caller wants the offset to always win ('use') OR the caller is OK\n  // with the offset winning ('prefer' or 'reject') as long as it's valid\n  // for this timezone and date/time.\n  if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n    // Calculate the instant for the input's date/time and offset\n    const epochNs = GetUTCEpochNanoseconds(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond\n    );\n    if (epochNs === null) throw new RangeError('ZonedDateTime outside of supported range');\n    return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n  }\n\n  // \"prefer\" or \"reject\"\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n  for (const candidate of possibleInstants) {\n    const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n    const roundedCandidateOffset = JSBI.toNumber(\n      RoundNumberToIncrement(JSBI.BigInt(candidateOffset), MINUTE_NANOS, 'halfExpand')\n    );\n    if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n      return GetSlot(candidate, EPOCHNANOSECONDS);\n    }\n  }\n\n  // the user-provided offset doesn't match any instants for this time\n  // zone and date/time.\n  if (offsetOpt === 'reject') {\n    const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n    const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n    // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n    // toString (which is invoked by Node when using template literals directly).\n    // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n    throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n  }\n  // fall through: offsetOpt === 'prefer', but the offset doesn't match\n  // so fall back to use the time zone instead.\n  const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n  return GetSlot(instant, EPOCHNANOSECONDS);\n}\n\nexport function ToTemporalZonedDateTime(\n  item: ZonedDateTimeParams['from'][0],\n  options?: ZonedDateTimeParams['from'][1]\n) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    timeZone,\n    offset: string | undefined,\n    calendar: string | Temporal.CalendarProtocol | undefined;\n  let disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>;\n  let offsetOpt: NonNullable<Temporal.OffsetDisambiguationOptions['offset']>;\n  let matchMinute = false;\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  if (IsObject(item)) {\n    if (IsTemporalZonedDateTime(item)) return item;\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(item, fieldNames, ['timeZone']);\n    timeZone = ToTemporalTimeZoneSlotValue(fields.timeZone);\n    offset = fields.offset;\n    if (offset === undefined) {\n      offsetBehaviour = 'wall';\n    }\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    let tzName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, tzName, offset, z, calendar } =\n      ParseTemporalZonedDateTimeString(ToString(item)));\n    timeZone = ToTemporalTimeZoneSlotValue(tzName);\n    if (z) {\n      offsetBehaviour = 'exact';\n    } else if (!offset) {\n      offsetBehaviour = 'wall';\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n    matchMinute = true; // ISO strings may specify offset with less precision\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ToTemporalOverflow(options); // validate and ignore\n  }\n  let offsetNs = 0;\n  // The code above guarantees that if offsetBehaviour === 'option', then\n  // `offset` is not undefined.\n  if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(offset as string);\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    disambiguation,\n    offsetOpt,\n    matchMinute\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function CreateTemporalDateSlots(\n  result: Temporal.PlainDate,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot\n) {\n  RejectISODate(isoYear, isoMonth, isoDay);\n  RejectDateRange(isoYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, DATE_BRAND, true);\n\n  if (DEBUG) {\n    ObjectDefineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDate(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n  const result = ObjectCreate(TemporalPlainDate.prototype);\n  CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n  return result;\n}\n\nexport function CreateTemporalDateTimeSlots(\n  result: Temporal.PlainDateTime,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot\n) {\n  RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n  RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_HOUR, h);\n  SetSlot(result, ISO_MINUTE, min);\n  SetSlot(result, ISO_SECOND, s);\n  SetSlot(result, ISO_MILLISECOND, ms);\n  SetSlot(result, ISO_MICROSECOND, µs);\n  SetSlot(result, ISO_NANOSECOND, ns);\n  SetSlot(result, CALENDAR, calendar);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDateTime(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const result = ObjectCreate(TemporalPlainDateTime.prototype);\n  CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n  return result as Temporal.PlainDateTime;\n}\n\nexport function CreateTemporalMonthDaySlots(\n  result: Temporal.PlainMonthDay,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot,\n  referenceISOYear: number\n) {\n  RejectISODate(referenceISOYear, isoMonth, isoDay);\n  RejectDateRange(referenceISOYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_YEAR, referenceISOYear);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, MONTH_DAY_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalMonthDay(\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISOYear = 1972\n) {\n  const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n  const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n  CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n  return result;\n}\n\nexport function CreateTemporalYearMonthSlots(\n  result: Temporal.PlainYearMonth,\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot,\n  referenceISODay: number\n) {\n  RejectISODate(isoYear, isoMonth, referenceISODay);\n  RejectYearMonthRange(isoYear, isoMonth);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, referenceISODay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, YEAR_MONTH_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalYearMonth(\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISODay = 1\n) {\n  const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n  const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n  CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n  return result;\n}\n\nexport function CreateTemporalZonedDateTimeSlots(\n  result: Temporal.ZonedDateTime,\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot\n) {\n  ValidateEpochNanoseconds(epochNanoseconds);\n\n  CreateSlots(result);\n  SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n  SetSlot(result, TIME_ZONE, timeZone);\n  SetSlot(result, CALENDAR, calendar);\n\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n  SetSlot(result, INSTANT, instant);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalZonedDateTime(\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n  const result = ObjectCreate(TemporalZonedDateTime.prototype);\n  CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n  return result;\n}\n\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields<K extends AnyTemporalKey>(calendar: CalendarSlot, fieldNamesParam: ReadonlyArray<K>) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.fields%'), calendarObj, [fieldNamesParam]) as K[];\n  }\n  const fields = GetMethod(calendar, 'fields');\n  const fieldNames = Call(fields, calendar, [fieldNamesParam]);\n  const result: K[] = [];\n  for (const name of fieldNames) {\n    if (typeof name !== 'string') throw new TypeError('bad return from calendar.fields()');\n    ArrayPrototypePush.call(result, name);\n  }\n  return result;\n}\n\nexport function CalendarMergeFields<Base extends Record<string, unknown>, ToAdd extends Record<string, unknown>>(\n  calendar: CalendarSlot,\n  fields: Base,\n  additionalFields: ToAdd\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.mergeFields%'), calendarObj, [\n      fields,\n      additionalFields\n    ]) as Base & ToAdd;\n  }\n  const mergeFields = GetMethod(calendar, 'mergeFields');\n  const result = Call(mergeFields, calendar, [fields, additionalFields]);\n  if (!IsObject(result)) throw new TypeError('bad return from calendar.mergeFields()');\n  return result as Base & ToAdd;\n}\n\nexport function CalendarDateAdd(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateAdd'][0],\n  duration: CalendarProtocolParams['dateAdd'][1],\n  options: CalendarProtocolParams['dateAdd'][2],\n  dateAddParam?: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  let dateAdd = dateAddParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateAdd%'), calendarObj, [date, duration, options]);\n  }\n  if (dateAdd === undefined) {\n    dateAdd = GetMethod(calendar, 'dateAdd');\n  }\n  const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nfunction CalendarDateUntil(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateUntil'][0],\n  otherDate: CalendarProtocolParams['dateUntil'][1],\n  options: CalendarProtocolParams['dateUntil'][2],\n  dateUntilParam?: Temporal.CalendarProtocol['dateUntil'] | undefined\n) {\n  let dateUntil = dateUntilParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateUntil%'), calendarObj, [date, otherDate, options]);\n  }\n  if (dateUntil === undefined) {\n    dateUntil = GetMethod(calendar, 'dateUntil');\n  }\n  const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n  if (!IsTemporalDuration(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['year'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.year%'), calendarObj, [dateLike]);\n  }\n  const year = GetMethod(calendar, 'year');\n  let result = Call(year, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar year result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar year result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['month'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.month%'), calendarObj, [dateLike]);\n  }\n  const month = GetMethod(calendar, 'month');\n  let result = Call(month, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar month result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar month result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthCode(calendar: CalendarSlot, dateLike: CalendarProtocolParams['monthCode'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthCode%'), calendarObj, [dateLike]);\n  }\n  const monthCode = GetMethod(calendar, 'monthCode');\n  let result = Call(monthCode, calendar, [dateLike]);\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar monthCode result must be a string');\n  }\n  return result;\n}\n\nexport function CalendarDay(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.day%'), calendarObj, [dateLike]);\n  }\n  const day = GetMethod(calendar, 'day');\n  const result = Call(day, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar day result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar day result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarEra(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.era%'), calendarObj, [dateLike]);\n  }\n  const era = GetMethod(calendar, 'era');\n  let result = Call(era, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar era result must be a string or undefined');\n  }\n  return result;\n}\n\nexport function CalendarEraYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.eraYear%'), calendarObj, [dateLike]);\n  }\n  const eraYear = GetMethod(calendar, 'eraYear');\n  let result = Call(eraYear, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar eraYear result must be an integer or undefined');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar eraYear result must be an integer or undefined');\n  }\n  return result;\n}\n\nexport function CalendarDayOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfWeek%'), calendarObj, [dateLike]);\n  }\n  const dayOfWeek = GetMethod(calendar, 'dayOfWeek');\n  const result = Call(dayOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDayOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfYear%'), calendarObj, [dateLike]);\n  }\n  const dayOfYear = GetMethod(calendar, 'dayOfYear');\n  const result = Call(dayOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarWeekOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.weekOfYear%'), calendarObj, [dateLike]);\n  }\n  const weekOfYear = GetMethod(calendar, 'weekOfYear');\n  const result = Call(weekOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar weekOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar weekOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarYearOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearOfWeek%'), calendarObj, [dateLike]);\n  }\n  const yearOfWeek = GetMethod(calendar, 'yearOfWeek');\n  const result = Call(yearOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar yearOfWeek result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar yearOfWeek result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInWeek%'), calendarObj, [dateLike]);\n  }\n  const daysInWeek = GetMethod(calendar, 'daysInWeek');\n  const result = Call(daysInWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInMonth%'), calendarObj, [dateLike]);\n  }\n  const daysInMonth = GetMethod(calendar, 'daysInMonth');\n  const result = Call(daysInMonth, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInMonth result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInMonth result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInYear%'), calendarObj, [dateLike]);\n  }\n  const daysInYear = GetMethod(calendar, 'daysInYear');\n  const result = Call(daysInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthsInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthsInYear%'), calendarObj, [dateLike]);\n  }\n  const monthsInYear = GetMethod(calendar, 'monthsInYear');\n  const result = Call(monthsInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar monthsInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar monthsInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarInLeapYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.inLeapYear%'), calendarObj, [dateLike]);\n  }\n  const inLeapYear = GetMethod(calendar, 'inLeapYear');\n  const result = Call(inLeapYear, calendar, [dateLike]);\n  if (typeof result !== 'boolean') {\n    throw new TypeError('calendar inLeapYear result must be a boolean');\n  }\n  return result;\n}\n\ntype MaybeCalendarProtocol = Partial<Omit<Temporal.CalendarProtocol, 'toString' | 'toJSON'>>;\nfunction ObjectImplementsTemporalCalendarProtocol(object: MaybeCalendarProtocol) {\n  if (IsTemporalCalendar(object)) return true;\n  return (\n    'dateAdd' in object &&\n    'dateFromFields' in object &&\n    'dateUntil' in object &&\n    'day' in object &&\n    'dayOfWeek' in object &&\n    'dayOfYear' in object &&\n    'daysInMonth' in object &&\n    'daysInWeek' in object &&\n    'daysInYear' in object &&\n    'fields' in object &&\n    'id' in object &&\n    'inLeapYear' in object &&\n    'mergeFields' in object &&\n    'month' in object &&\n    'monthCode' in object &&\n    'monthDayFromFields' in object &&\n    'monthsInYear' in object &&\n    'weekOfYear' in object &&\n    'year' in object &&\n    'yearMonthFromFields' in object &&\n    'yearOfWeek' in object\n  );\n}\n\nexport function ToTemporalCalendarSlotValue(calendarLike: string): string;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarProtocol): Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarLike): string | Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: CalendarParams['from'][0]) {\n  if (IsObject(calendarLike)) {\n    if (HasSlot(calendarLike, CALENDAR)) return GetSlot(calendarLike, CALENDAR);\n    if (!ObjectImplementsTemporalCalendarProtocol(calendarLike)) {\n      throw new TypeError('expected a Temporal.Calendar or object implementing the Temporal.Calendar protocol');\n    }\n    return calendarLike;\n  }\n  const identifier = ToString(calendarLike);\n  if (IsBuiltinCalendar(identifier)) return ASCIILowercase(identifier);\n  let calendar;\n  try {\n    ({ calendar } = ParseISODateTime(identifier));\n  } catch {\n    try {\n      ({ calendar } = ParseTemporalYearMonthString(identifier));\n    } catch {\n      ({ calendar } = ParseTemporalMonthDayString(identifier));\n    }\n  }\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  return ASCIILowercase(calendar);\n}\n\nfunction GetTemporalCalendarSlotValueWithISODefault(item: { calendar?: Temporal.CalendarLike }): CalendarSlot {\n  if (HasSlot(item, CALENDAR)) return GetSlot(item, CALENDAR);\n  const { calendar } = item;\n  if (calendar === undefined) return 'iso8601';\n  return ToTemporalCalendarSlotValue(calendar);\n}\n\nexport function ToTemporalCalendarIdentifier(slotValue: CalendarSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('calendar.id should be a string');\n  return result;\n}\n\nexport function ToTemporalCalendarObject(slotValue: CalendarSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n  return new TemporalCalendar(slotValue);\n}\n\nexport function CalendarEquals(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return true;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  return cal1 === cal2;\n}\n\n// This operation is not in the spec, it implements the following:\n// \"If ? CalendarEquals(one, two) is false, throw a RangeError exception.\"\n// This is so that we can build an informative error message without\n// re-getting the .id properties.\nfunction ThrowIfCalendarsNotEqual(one: CalendarSlot, two: CalendarSlot, errorMessageAction: string) {\n  if (one === two) return;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  if (cal1 !== cal2) {\n    throw new RangeError(`cannot ${errorMessageAction} of ${cal1} and ${cal2} calendars`);\n  }\n}\n\nexport function ConsolidateCalendars(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return two;\n  const sOne = ToTemporalCalendarIdentifier(one);\n  const sTwo = ToTemporalCalendarIdentifier(two);\n  if (sOne === sTwo || sOne === 'iso8601') {\n    return two;\n  } else if (sTwo === 'iso8601') {\n    return one;\n  } else {\n    throw new RangeError('irreconcilable calendars');\n  }\n}\n\nexport function CalendarDateFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['dateFromFields'][0],\n  options?: Partial<CalendarProtocolParams['dateFromFields'][1]>,\n  dateFromFieldsParam?: Temporal.CalendarProtocol['dateFromFields']\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateFromFields%'), calendarObj, [fields, options]);\n  }\n  const dateFromFields = dateFromFieldsParam ?? GetMethod(calendar, 'dateFromFields');\n  const result = Call(dateFromFields, calendar, [fields, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYearMonthFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['yearMonthFromFields'][0],\n  options?: CalendarProtocolParams['yearMonthFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearMonthFromFields%'), calendarObj, [fields, options]);\n  }\n  const yearMonthFromFields = GetMethod(calendar, 'yearMonthFromFields');\n  let result = Call(yearMonthFromFields, calendar, [fields, options]);\n  if (!IsTemporalYearMonth(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarMonthDayFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['monthDayFromFields'][0],\n  options?: CalendarProtocolParams['monthDayFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthDayFromFields%'), calendarObj, [fields, options]);\n  }\n  const monthDayFromFields = GetMethod(calendar, 'monthDayFromFields');\n  let result = Call(monthDayFromFields, calendar, [fields, options]);\n  if (!IsTemporalMonthDay(result)) throw new TypeError('invalid result');\n  return result;\n}\n\ntype MaybeTimeZoneProtocol = Partial<\n  Pick<Temporal.TimeZoneProtocol, 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor'>\n>;\nfunction ObjectImplementsTemporalTimeZoneProtocol(object: MaybeTimeZoneProtocol) {\n  if (IsTemporalTimeZone(object)) return true;\n  return 'getOffsetNanosecondsFor' in object && 'getPossibleInstantsFor' in object && 'id' in object;\n}\n\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: string): string;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: Temporal.TimeZoneProtocol): Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(\n  temporalTimeZoneLike: Temporal.TimeZoneLike\n): string | Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: TimeZoneParams['from'][0]) {\n  if (IsObject(temporalTimeZoneLike)) {\n    if (IsTemporalZonedDateTime(temporalTimeZoneLike)) return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n    if (!ObjectImplementsTemporalTimeZoneProtocol(temporalTimeZoneLike)) {\n      throw new TypeError('expected a Temporal.TimeZone or object implementing the Temporal.TimeZone protocol');\n    }\n    return temporalTimeZoneLike;\n  }\n  const identifier = ToString(temporalTimeZoneLike);\n  return ParseTemporalTimeZone(identifier);\n}\n\nexport function ToTemporalTimeZoneIdentifier(slotValue: TimeZoneSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('timeZone.id should be a string');\n  return result;\n}\n\nexport function ToTemporalTimeZoneObject(slotValue: TimeZoneSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n  return new TemporalTimeZone(slotValue);\n}\n\nexport function TimeZoneEquals(one: string | Temporal.TimeZoneProtocol, two: string | Temporal.TimeZoneProtocol) {\n  if (one === two) return true;\n  const tz1 = ToTemporalTimeZoneIdentifier(one);\n  const tz2 = ToTemporalTimeZoneIdentifier(two);\n  return tz1 === tz2;\n}\n\nexport function TemporalDateTimeToDate(dateTime: Temporal.PlainDateTime) {\n  return CreateTemporalDate(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, CALENDAR)\n  );\n}\n\nexport function TemporalDateTimeToTime(dateTime: Temporal.PlainDateTime) {\n  const Time = GetIntrinsic('%Temporal.PlainTime%');\n  return new Time(\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND)\n  );\n}\n\nexport function GetOffsetNanosecondsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: TimeZoneProtocolParams['getOffsetNanosecondsFor'][0],\n  getOffsetNanosecondsForParam?: Temporal.TimeZoneProtocol['getOffsetNanosecondsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getOffsetNanosecondsFor%'), timeZoneObject, [instant]);\n  }\n  const getOffsetNanosecondsFor = getOffsetNanosecondsForParam ?? GetMethod(timeZone, 'getOffsetNanosecondsFor');\n  const offsetNs = Call(getOffsetNanosecondsFor, timeZone, [instant]);\n  if (typeof offsetNs !== 'number') {\n    throw new TypeError('bad return from getOffsetNanosecondsFor');\n  }\n  if (!IsIntegralNumber(offsetNs) || MathAbs(offsetNs) >= 86400e9) {\n    throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n  }\n  return offsetNs;\n}\n\nexport function GetOffsetStringFor(timeZone: string | Temporal.TimeZoneProtocol, instant: Temporal.Instant) {\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nexport function GetPlainDateTimeFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: Temporal.Instant,\n  calendar: CalendarSlot\n) {\n  const ns = GetSlot(instant, EPOCHNANOSECONDS);\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond + offsetNs\n  ));\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function GetInstantFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n  return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\n\nfunction DisambiguatePossibleInstants(\n  possibleInstants: Temporal.Instant[],\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  const numInstants = possibleInstants.length;\n\n  if (numInstants === 1) return possibleInstants[0];\n  if (numInstants) {\n    switch (disambiguation) {\n      case 'compatible':\n      // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n      case 'earlier':\n        return possibleInstants[0];\n      case 'later':\n        return possibleInstants[numInstants - 1];\n      case 'reject': {\n        throw new RangeError('multiple instants found');\n      }\n    }\n  }\n\n  const year = GetSlot(dateTime, ISO_YEAR);\n  const month = GetSlot(dateTime, ISO_MONTH);\n  const day = GetSlot(dateTime, ISO_DAY);\n  const hour = GetSlot(dateTime, ISO_HOUR);\n  const minute = GetSlot(dateTime, ISO_MINUTE);\n  const second = GetSlot(dateTime, ISO_SECOND);\n  const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n  const utcns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (utcns === null) throw new RangeError('DateTime outside of supported range');\n  const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n  const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n  const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n  const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n  const nanoseconds = offsetAfter - offsetBefore;\n  switch (disambiguation) {\n    case 'earlier': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const earlier = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        -nanoseconds,\n        undefined\n      );\n      const earlierPlainDateTime = new PlainDateTime(\n        earlier.year,\n        earlier.month,\n        earlier.day,\n        earlier.hour,\n        earlier.minute,\n        earlier.second,\n        earlier.millisecond,\n        earlier.microsecond,\n        earlier.nanosecond,\n        calendar\n      );\n      return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n    }\n    case 'compatible':\n    // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n    case 'later': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const later = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        nanoseconds,\n        undefined\n      );\n      const laterPlainDateTime = new PlainDateTime(\n        later.year,\n        later.month,\n        later.day,\n        later.hour,\n        later.minute,\n        later.second,\n        later.millisecond,\n        later.microsecond,\n        later.nanosecond,\n        calendar\n      );\n      const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n      return possible[possible.length - 1];\n    }\n    case 'reject': {\n      throw new RangeError('no such instant found');\n    }\n  }\n}\n\nfunction GetPossibleInstantsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: TimeZoneProtocolParams['getPossibleInstantsFor'][0],\n  getPossibleInstantsForParam?: Temporal.TimeZoneProtocol['getPossibleInstantsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getPossibleInstantsFor%'), timeZoneObject, [dateTime]);\n  }\n  const getPossibleInstantsFor = getPossibleInstantsForParam ?? GetMethod(timeZone, 'getPossibleInstantsFor');\n  const possibleInstants = Call(getPossibleInstantsFor, timeZone, [dateTime]);\n  const result: Temporal.Instant[] = [];\n  for (const instant of possibleInstants) {\n    if (!IsTemporalInstant(instant)) {\n      throw new TypeError('bad return from getPossibleInstantsFor');\n    }\n    ArrayPrototypePush.call(result, instant);\n  }\n  return result;\n}\n\nexport function ISOYearString(year: number) {\n  let yearString;\n  if (year < 0 || year > 9999) {\n    const sign = year < 0 ? '-' : '+';\n    const yearNumber = MathAbs(year);\n    yearString = sign + `000000${yearNumber}`.slice(-6);\n  } else {\n    yearString = `0000${year}`.slice(-4);\n  }\n  return yearString;\n}\n\nexport function ISODateTimePartString(part: number) {\n  return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  if (precision === 'minute') return '';\n\n  const secs = `:${ISODateTimePartString(second)}`;\n  let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n  let fraction: string;\n\n  if (precision === 'auto') {\n    if (fractionNumber === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n  } else {\n    if (precision === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n  }\n  return `${secs}.${fraction}`;\n}\n\nexport function TemporalInstantToString(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol | undefined,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  let outputTimeZone = timeZone;\n  if (outputTimeZone === undefined) outputTimeZone = 'UTC';\n  const dateTime = GetPlainDateTimeFor(outputTimeZone, instant, 'iso8601');\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let timeZoneString = 'Z';\n  if (timeZone !== undefined) {\n    const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n    timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\n\ninterface ToStringOptions {\n  unit: ReturnType<typeof ToSecondsStringPrecisionRecord>['unit'];\n  increment: number;\n  roundingMode: ReturnType<typeof ToTemporalRoundingMode>;\n}\n\nfunction formatAsDecimalNumber(num: number) {\n  if (num <= NumberMaxSafeInteger) return num.toString(10);\n  return JSBI.BigInt(num).toString();\n}\n\nexport function TemporalDurationToString(\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  precision: number | 'auto' = 'auto'\n) {\n  const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n\n  let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n  let nsBigInt: JSBI, µsBigInt: JSBI, msBigInt: JSBI, secondsBigInt: JSBI;\n  ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n\n  let datePart = '';\n  if (years !== 0) datePart += `${formatAsDecimalNumber(MathAbs(years))}Y`;\n  if (months !== 0) datePart += `${formatAsDecimalNumber(MathAbs(months))}M`;\n  if (weeks !== 0) datePart += `${formatAsDecimalNumber(MathAbs(weeks))}W`;\n  if (days !== 0) datePart += `${formatAsDecimalNumber(MathAbs(days))}D`;\n\n  let timePart = '';\n  if (hours !== 0) timePart += `${formatAsDecimalNumber(MathAbs(hours))}H`;\n  if (minutes !== 0) timePart += `${formatAsDecimalNumber(MathAbs(minutes))}M`;\n\n  if (\n    !isZero(secondsBigInt) ||\n    !isZero(msBigInt) ||\n    !isZero(µsBigInt) ||\n    !isZero(nsBigInt) ||\n    (years === 0 && months === 0 && weeks === 0 && days === 0 && hours === 0 && minutes === 0) ||\n    precision !== 'auto'\n  ) {\n    const fraction =\n      MathAbs(JSBI.toNumber(msBigInt)) * 1e6 +\n      MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 +\n      MathAbs(JSBI.toNumber(nsBigInt));\n    let decimalPart = ToZeroPaddedDecimalString(fraction, 9);\n    if (precision === 'auto') {\n      while (decimalPart[decimalPart.length - 1] === '0') {\n        decimalPart = decimalPart.slice(0, -1);\n      }\n    } else if (precision === 0) {\n      decimalPart = '';\n    } else {\n      decimalPart = decimalPart.slice(0, precision);\n    }\n    let secondsPart = abs(secondsBigInt).toString();\n    if (decimalPart) secondsPart += `.${decimalPart}`;\n    timePart += `${secondsPart}S`;\n  }\n  let result = `${sign < 0 ? '-' : ''}P${datePart}`;\n  if (timePart) result = `${result}T${timePart}`;\n  return result;\n}\n\nexport function TemporalDateToString(\n  date: Temporal.PlainDate,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(date, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(date, CALENDAR), showCalendar);\n  return `${year}-${month}-${day}${calendar}`;\n}\n\nexport function TemporalDateTimeToString(\n  dateTime: Temporal.PlainDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let year = GetSlot(dateTime, ISO_YEAR);\n  let month = GetSlot(dateTime, ISO_MONTH);\n  let day = GetSlot(dateTime, ISO_DAY);\n  let hour = GetSlot(dateTime, ISO_HOUR);\n  let minute = GetSlot(dateTime, ISO_MINUTE);\n  let second = GetSlot(dateTime, ISO_SECOND);\n  let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const yearString = ISOYearString(year);\n  const monthString = ISODateTimePartString(month);\n  const dayString = ISODateTimePartString(day);\n  const hourString = ISODateTimePartString(hour);\n  const minuteString = ISODateTimePartString(minute);\n  const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(dateTime, CALENDAR), showCalendar);\n  return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\n\nexport function TemporalMonthDayToString(\n  monthDay: Temporal.PlainMonthDay,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n  let resultString = `${month}-${day}`;\n  const calendar = GetSlot(monthDay, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n    resultString = `${year}-${resultString}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalYearMonthToString(\n  yearMonth: Temporal.PlainYearMonth,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n  let resultString = `${year}-${month}`;\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n    resultString += `-${day}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalZonedDateTimeToString(\n  zdt: Temporal.ZonedDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  showTimeZone: ReturnType<typeof ToTimeZoneNameOption> = 'auto',\n  showOffset: ReturnType<typeof ToShowOffsetOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let instant = GetSlot(zdt, INSTANT);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    instant = new TemporalInstant(ns);\n  }\n\n  const tz = GetSlot(zdt, TIME_ZONE);\n  const dateTime = GetPlainDateTimeFor(tz, instant, 'iso8601');\n\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n  if (showOffset !== 'never') {\n    const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n    result += FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  if (showTimeZone !== 'never') {\n    const identifier = ToTemporalTimeZoneIdentifier(tz);\n    const flag = showTimeZone === 'critical' ? '!' : '';\n    result += `[${flag}${identifier}]`;\n  }\n  result += MaybeFormatCalendarAnnotation(GetSlot(zdt, CALENDAR), showCalendar);\n  return result;\n}\n\nexport function IsTimeZoneOffsetString(string: string) {\n  return OFFSET.test(string);\n}\n\nexport function ParseTimeZoneOffsetString(string: string) {\n  const match = OFFSET.exec(string);\n  if (!match) {\n    throw new RangeError(`invalid time zone offset: ${string}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n  const hours = +match[2];\n  const minutes = +(match[3] || 0);\n  const seconds = +(match[4] || 0);\n  const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n  return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\n\n// In the spec, GetCanonicalTimeZoneIdentifier is infallible and is always\n// preceded by a call to IsAvailableTimeZoneName. However in the polyfill,\n// we don't (yet) have a way to check if a time zone ID is valid without\n// also canonicalizing it. So we combine both operations into one function,\n// which will return the canonical ID if the ID is valid, and will throw\n// if it's not.\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier: string): string {\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier);\n  return formatter.resolvedOptions().timeZone;\n}\n\nexport function GetNamedTimeZoneOffsetNanoseconds(id: string, epochNanoseconds: JSBI) {\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n    GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. To avoid overflowing at the edges of the range, we reduce the year\n  // to the remainder after dividing by 400, and then add back all the\n  // nanoseconds from the multiples of 400 years at the end.\n  const reducedYear = year % 400;\n  const yearCycles = (year - reducedYear) / 400;\n  const nsIn400YearCycle = JSBI.multiply(JSBI.BigInt(400 * 365 + 97), DAY_NANOS);\n\n  const reducedUTC = GetUTCEpochNanoseconds(\n    reducedYear,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  );\n  assertExists(reducedUTC);\n  const utc = JSBI.add(reducedUTC, JSBI.multiply(nsIn400YearCycle, JSBI.BigInt(yearCycles)));\n  return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\n\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n  const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n  const nanoseconds = offsetNanoseconds % 1e9;\n  const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n  const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  const secondString = ISODateTimePartString(seconds);\n  let post = '';\n  if (nanoseconds) {\n    let fraction = `${nanoseconds}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n    post = `:${secondString}.${fraction}`;\n  } else if (seconds) {\n    post = `:${secondString}`;\n  }\n  return `${sign}${hourString}:${minuteString}${post}`;\n}\n\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  let offsetNanoseconds = JSBI.toNumber(\n    RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), MINUTE_NANOS, 'halfExpand')\n  );\n  const sign = offsetNanoseconds < 0 ? '-' : '+';\n  offsetNanoseconds = MathAbs(offsetNanoseconds);\n  const minutes = (offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetUTCEpochNanoseconds(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  // Note: Date.UTC() interprets one and two-digit years as being in the\n  // 20th century, so don't use it\n  const legacyDate = new Date();\n  legacyDate.setUTCHours(hour, minute, second, millisecond);\n  legacyDate.setUTCFullYear(year, month - 1, day);\n  const ms = legacyDate.getTime();\n  if (NumberIsNaN(ms)) return null;\n  let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n  ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n  ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n  if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) return null;\n  return ns;\n}\n\nfunction GetISOPartsFromEpoch(epochNanoseconds: JSBI) {\n  const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n  let epochMilliseconds = JSBI.toNumber(quotient);\n  let nanos = JSBI.toNumber(remainder);\n  if (nanos < 0) {\n    nanos += 1e6;\n    epochMilliseconds -= 1;\n  }\n  const microsecond = MathFloor(nanos / 1e3) % 1e3;\n  const nanosecond = nanos % 1e3;\n\n  const item = new Date(epochMilliseconds);\n  const year = item.getUTCFullYear();\n  const month = item.getUTCMonth() + 1;\n  const day = item.getUTCDate();\n  const hour = item.getUTCHours();\n  const minute = item.getUTCMinutes();\n  const second = item.getUTCSeconds();\n  const millisecond = item.getUTCMilliseconds();\n\n  return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetNamedTimeZoneDateTimeParts(id: string, epochNanoseconds: JSBI) {\n  const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n  const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n  return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction maxJSBI(one: JSBI, two: JSBI) {\n  return JSBI.lessThan(one, two) ? two : one;\n}\n\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n  return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\n\nexport function GetNamedTimeZoneNextTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  if (JSBI.lessThan(epochNanoseconds, BEFORE_FIRST_OFFSET_TRANSITION)) {\n    return GetNamedTimeZoneNextTransition(id, BEFORE_FIRST_OFFSET_TRANSITION);\n  }\n  // Decide how far in the future after `epochNanoseconds` we'll look for an\n  // offset change. There are two cases:\n  // 1. If it's a past date (or a date in the near future) then it's possible\n  //    that the time zone may have newly added DST in the next few years. So\n  //    we'll have to look from the provided time until a few years after the\n  //    current system time. (Changes to DST policy are usually announced a few\n  //    years in the future.) Note that the first DST anywhere started in 1847,\n  //    so we'll start checks in 1847 instead of wasting cycles on years where\n  //    there will never be transitions.\n  // 2. If it's a future date beyond the next few years, then we'll just assume\n  //    that the latest DST policy in TZDB will still be in effect.  In this\n  //    case, we only need to look one year in the future to see if there are\n  //    any DST transitions.  We actually only need to look 9-10 months because\n  //    DST has two transitions per year, but we'll use a year just to be safe.\n  const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n  const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n  // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n  // start there if an earlier date is supplied.\n  let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n  const leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n  let rightNanos = leftNanos;\n  let rightOffsetNs = leftOffsetNs;\n  while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n    rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n    if (JSBI.greaterThan(rightNanos, NS_MAX)) return null;\n    rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n    if (leftOffsetNs === rightOffsetNs) {\n      leftNanos = rightNanos;\n    }\n  }\n  if (leftOffsetNs === rightOffsetNs) return null;\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\nexport function GetNamedTimeZonePreviousTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n  // have to look back one year to find a transition. But if it doesn't use DST,\n  // then we need to look all the way back to 1847 (the earliest rule in the\n  // TZDB) to see if it had other offset transitions in the past. Looping back\n  // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n  // also unnecessary because DST rules aren't put into the TZDB more than a few\n  // years in the future because the political changes in time zones happen with\n  // only a few years' warning. Therefore, if a far-future date is provided,\n  // then we'll run the check in two parts:\n  // 1. First, we'll look back for up to one year to see if the latest TZDB\n  //    rules have DST.\n  // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n  //    current system time, and then look back to 1847. This reduces the\n  //    worst-case loop from 273K years to 175 years, for a ~1500x improvement\n  //    in worst-case perf.\n  const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n  const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n  const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n\n  // TODO: proposal-temporal polyfill has different code for very similar\n  // optimizations as above, as well as in GetNamedTimeZonePreviousTransition.\n  // We should figure out if we should change one polyfill to match the other.\n\n  // We assume most time zones either have regular DST rules that extend\n  // indefinitely into the future, or they have no DST transitions between now\n  // and next year. Africa/Casablanca and Africa/El_Aaiun are unique cases\n  // that fit neither of these. Their irregular DST transitions are\n  // precomputed until 2087 in the current time zone database, so requesting\n  // the previous transition for an instant far in the future may take an\n  // extremely long time as it loops backward 2 weeks at a time.\n  if (id === 'Africa/Casablanca' || id === 'Africa/El_Aaiun') {\n    const lastPrecomputed = GetSlot(ToTemporalInstant('2088-01-01T00Z'), EPOCHNANOSECONDS);\n    if (JSBI.lessThan(lastPrecomputed, epochNanoseconds)) {\n      return GetNamedTimeZonePreviousTransition(id, lastPrecomputed);\n    }\n  }\n\n  let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n  if (JSBI.lessThan(rightNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n  const rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n  let leftNanos = rightNanos;\n  let leftOffsetNs = rightOffsetNs;\n  while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n    leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n    if (JSBI.lessThan(leftNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n    leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n    if (rightOffsetNs === leftOffsetNs) {\n      rightNanos = leftNanos;\n    }\n  }\n  if (rightOffsetNs === leftOffsetNs) {\n    if (isFarFuture) {\n      // There was no DST after looking back one year, which means that the most\n      // recent TZDB rules don't have any recurring transitions. To check for\n      // transitions in older rules, back up to a few years after the current\n      // date and then look all the way back to 1847. Note that we move back one\n      // day from the latest possible rule so that when the recursion runs it\n      // won't consider the new time to be \"far future\" because the system clock\n      // has advanced in the meantime.\n      const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n      return GetNamedTimeZonePreviousTransition(id, newTimeToCheck);\n    }\n    return null;\n  }\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime: string) {\n  const parts = datetime.split(/[^\\w]+/);\n\n  if (parts.length !== 7) {\n    throw new RangeError(`expected 7 parts in \"${datetime}`);\n  }\n\n  const month = +parts[0];\n  const day = +parts[1];\n  let year = +parts[2];\n  const era = parts[3].toUpperCase();\n  if (era === 'B' || era === 'BC') {\n    year = -year + 1;\n  } else if (era !== 'A' && era !== 'AD') {\n    throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n  }\n  let hour = +parts[4];\n  if (hour === 24) {\n    // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n    hour = 0;\n  }\n  const minute = +parts[5];\n  const second = +parts[6];\n\n  if (\n    !NumberIsFinite(year) ||\n    !NumberIsFinite(month) ||\n    !NumberIsFinite(day) ||\n    !NumberIsFinite(hour) ||\n    !NumberIsFinite(minute) ||\n    !NumberIsFinite(second)\n  ) {\n    throw new RangeError(`Invalid number in \"${datetime}`);\n  }\n\n  return { year, month, day, hour, minute, second };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone: string, epochMilliseconds: number) {\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n  // Using `format` instead of `formatToParts` for compatibility with older clients\n  const datetime = formatter.format(new Date(epochMilliseconds));\n  return parseFromEnUsFormat(datetime);\n}\n\nexport function GetNamedTimeZoneEpochNanoseconds(\n  id: string,\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  const ns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (ns === null) throw new RangeError('DateTime outside of supported range');\n  let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n  if (JSBI.lessThan(nsEarlier, NS_MIN)) nsEarlier = ns;\n  let nsLater = JSBI.add(ns, DAY_NANOS);\n  if (JSBI.greaterThan(nsLater, NS_MAX)) nsLater = ns;\n  const earliest = GetNamedTimeZoneOffsetNanoseconds(id, nsEarlier);\n  const latest = GetNamedTimeZoneOffsetNanoseconds(id, nsLater);\n  const found = earliest === latest ? [earliest] : [earliest, latest];\n  return found\n    .map((offsetNanoseconds) => {\n      const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n      const parts = GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n      if (\n        year !== parts.year ||\n        month !== parts.month ||\n        day !== parts.day ||\n        hour !== parts.hour ||\n        minute !== parts.minute ||\n        second !== parts.second ||\n        millisecond !== parts.millisecond ||\n        microsecond !== parts.microsecond ||\n        nanosecond !== parts.nanosecond\n      ) {\n        return undefined;\n      }\n      return epochNanoseconds;\n    })\n    .filter((x) => x !== undefined) as JSBI[];\n}\n\nexport function LeapYear(year: number) {\n  if (undefined === year) return false;\n  const isDiv4 = year % 4 === 0;\n  const isDiv100 = year % 100 === 0;\n  const isDiv400 = year % 400 === 0;\n  return isDiv4 && (!isDiv100 || isDiv400);\n}\n\nexport function ISODaysInMonth(year: number, month: number) {\n  const DoM = {\n    standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n  };\n  return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\n\nexport function DayOfWeek(year: number, month: number, day: number) {\n  const m = month + (month < 3 ? 10 : -2);\n  const Y = year - (month < 3 ? 1 : 0);\n\n  const c = MathFloor(Y / 100);\n  const y = Y - c * 100;\n  const d = day;\n\n  const pD = d;\n  const pM = MathFloor(2.6 * m - 0.2);\n  const pY = y + MathFloor(y / 4);\n  const pC = MathFloor(c / 4) - 2 * c;\n\n  const dow = (pD + pM + pY + pC) % 7;\n\n  return dow + (dow <= 0 ? 7 : 0);\n}\n\nexport function DayOfYear(year: number, month: number, day: number) {\n  let days = day;\n  for (let m = month - 1; m > 0; m--) {\n    days += ISODaysInMonth(year, m);\n  }\n  return days;\n}\n\nexport function WeekOfYear(year: number, month: number, day: number) {\n  const doy = DayOfYear(year, month, day);\n  const dow = DayOfWeek(year, month, day) || 7;\n  const doj = DayOfWeek(year, 1, 1);\n\n  const week = MathFloor((doy - dow + 10) / 7);\n\n  if (week < 1) {\n    if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n      return { week: 53, year: year - 1 };\n    } else {\n      return { week: 52, year: year - 1 };\n    }\n  }\n  if (week === 53) {\n    if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n      return { week: 1, year: year + 1 };\n    }\n  }\n\n  return { week, year };\n}\n\nexport function DurationSign(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (prop !== 0) return prop < 0 ? -1 : 1;\n  }\n  return 0;\n}\n\nfunction BalanceISOYearMonth(yearParam: number, monthParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  if (!NumberIsFinite(year) || !NumberIsFinite(month)) throw new RangeError('infinity is out of range');\n  month -= 1;\n  year += MathFloor(month / 12);\n  month %= 12;\n  if (month < 0) month += 12;\n  month += 1;\n  return { year, month };\n}\n\nfunction BalanceISODate(yearParam: number, monthParam: number, dayParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  if (!NumberIsFinite(day)) throw new RangeError('infinity is out of range');\n  ({ year, month } = BalanceISOYearMonth(year, month));\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. So if we have more than 400 years in days, there's no need to\n  // convert days to a year 400 times. We can convert a multiple of 400 all at\n  // once.\n  const daysIn400YearCycle = 400 * 365 + 97;\n  if (MathAbs(day) > daysIn400YearCycle) {\n    const nCycles = MathTrunc(day / daysIn400YearCycle);\n    year += 400 * nCycles;\n    day -= nCycles * daysIn400YearCycle;\n  }\n\n  let daysInYear = 0;\n  let testYear = month > 2 ? year : year - 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n    year -= 1;\n    testYear -= 1;\n    day += daysInYear;\n  }\n  testYear += 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n    year += 1;\n    testYear += 1;\n    day -= daysInYear;\n  }\n\n  while (day < 1) {\n    ({ year, month } = BalanceISOYearMonth(year, month - 1));\n    day += ISODaysInMonth(year, month);\n  }\n  while (day > ISODaysInMonth(year, month)) {\n    day -= ISODaysInMonth(year, month);\n    ({ year, month } = BalanceISOYearMonth(year, month + 1));\n  }\n\n  return { year, month, day };\n}\n\nfunction BalanceISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction BalanceTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  let hour = JSBI.BigInt(hourParam);\n  let minute = JSBI.BigInt(minuteParam);\n  let second = JSBI.BigInt(secondParam);\n  let millisecond = JSBI.BigInt(millisecondParam);\n  let microsecond = JSBI.BigInt(microsecondParam);\n  let nanosecond = JSBI.BigInt(nanosecondParam);\n  let quotient;\n\n  ({ quotient, remainder: nanosecond } = NonNegativeBigIntDivmod(nanosecond, THOUSAND));\n  microsecond = JSBI.add(microsecond, quotient);\n\n  ({ quotient, remainder: microsecond } = NonNegativeBigIntDivmod(microsecond, THOUSAND));\n  millisecond = JSBI.add(millisecond, quotient);\n\n  ({ quotient, remainder: millisecond } = NonNegativeBigIntDivmod(millisecond, THOUSAND));\n  second = JSBI.add(second, quotient);\n\n  ({ quotient, remainder: second } = NonNegativeBigIntDivmod(second, SIXTY));\n  minute = JSBI.add(minute, quotient);\n\n  ({ quotient, remainder: minute } = NonNegativeBigIntDivmod(minute, SIXTY));\n  hour = JSBI.add(hour, quotient);\n\n  ({ quotient, remainder: hour } = NonNegativeBigIntDivmod(hour, TWENTY_FOUR));\n\n  return {\n    deltaDays: JSBI.toNumber(quotient),\n    hour: JSBI.toNumber(hour),\n    minute: JSBI.toNumber(minute),\n    second: JSBI.toNumber(second),\n    millisecond: JSBI.toNumber(millisecond),\n    microsecond: JSBI.toNumber(microsecond),\n    nanosecond: JSBI.toNumber(nanosecond)\n  };\n}\n\nexport function TotalDurationNanoseconds(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  offsetShift: number\n) {\n  const days: JSBI = JSBI.BigInt(daysParam);\n  let nanoseconds: JSBI = JSBI.BigInt(nanosecondsParam);\n  if (daysParam !== 0) nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n  const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n  const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n  const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n  const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n  const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n  return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\n\nfunction NanosecondsToDays(nanosecondsParam: JSBI, relativeTo: ReturnType<typeof ToRelativeTemporalObject>) {\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  let dayLengthNs = 86400e9;\n  if (sign === 0) return { days: 0, nanoseconds: ZERO, dayLengthNs };\n  if (!IsTemporalZonedDateTime(relativeTo)) {\n    let days: JSBI;\n    ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n    return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n  }\n\n  const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n  const start = GetSlot(relativeTo, INSTANT);\n  const endNs = JSBI.add(startNs, nanoseconds);\n  const end = new TemporalInstant(endNs);\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n\n  // Find the difference in days only.\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { days: daysNumber } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    'day',\n    ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n  );\n  let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, daysNumber, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n\n  // If clock time after addition was in the middle of a skipped period, the\n  // endpoint was disambiguated to a later clock time. So it's possible that\n  // the resulting disambiguated result is later than endNs. If so, then back\n  // up one day and try again. Repeat if necessary (some transitions are\n  // > 24 hours) until either there's zero days left or the date duration is\n  // back inside the period where it belongs. Note that this case only can\n  // happen for positive durations because the only direction that\n  // `disambiguation: 'compatible'` can change clock time is forwards.\n  let daysBigInt = JSBI.BigInt(daysNumber);\n  if (sign === 1) {\n    while (JSBI.greaterThan(daysBigInt, ZERO) && JSBI.greaterThan(intermediateNs, endNs)) {\n      daysBigInt = JSBI.subtract(daysBigInt, ONE);\n      intermediateNs = AddZonedDateTime(\n        start,\n        timeZone,\n        calendar,\n        0,\n        0,\n        0,\n        JSBI.toNumber(daysBigInt),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      );\n      // may do disambiguation\n    }\n  }\n  nanoseconds = JSBI.subtract(endNs, intermediateNs);\n\n  let isOverflow = false;\n  let relativeInstant = new TemporalInstant(intermediateNs);\n  do {\n    // calculate length of the next day (day that contains the time remainder)\n    const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n    const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n    dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n    isOverflow = JSBI.greaterThanOrEqual(\n      JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)),\n      ZERO\n    );\n    if (isOverflow) {\n      nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n      relativeInstant = new TemporalInstant(oneDayFartherNs);\n      daysBigInt = JSBI.add(daysBigInt, JSBI.BigInt(sign));\n    }\n  } while (isOverflow);\n  if (!isZero(daysBigInt) && signJSBI(daysBigInt) !== sign) {\n    throw new RangeError('Time zone or calendar converted nanoseconds into a number of days with the opposite sign');\n  }\n  if (!isZero(nanoseconds) && signJSBI(nanoseconds) !== sign) {\n    if (isNegativeJSBI(nanoseconds) && sign === 1) {\n      throw new Error('assert not reached');\n    }\n    throw new RangeError('Time zone or calendar ended up with a remainder of nanoseconds with the opposite sign');\n  }\n  if (JSBI.greaterThanOrEqual(abs(nanoseconds), abs(JSBI.BigInt(dayLengthNs)))) {\n    throw new Error('assert not reached');\n  }\n  return { days: JSBI.toNumber(daysBigInt), nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\n\nexport function BalanceDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let result = BalancePossiblyInfiniteDuration(\n    daysParam,\n    hoursParam,\n    minutesParam,\n    secondsParam,\n    millisecondsParam,\n    microsecondsParam,\n    nanosecondsParam,\n    largestUnit,\n    relativeTo\n  );\n  if (result === 'positive overflow' || result === 'negative overflow') {\n    throw new RangeError('Duration out of range');\n  } else {\n    return result;\n  }\n}\n\nexport function BalancePossiblyInfiniteDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let days = daysParam;\n  let nanosecondsBigInt: JSBI,\n    microsecondsBigInt: JSBI,\n    millisecondsBigInt: JSBI,\n    secondsBigInt: JSBI,\n    minutesBigInt: JSBI,\n    hoursBigInt: JSBI;\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const endNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      GetSlot(relativeTo, TIME_ZONE),\n      GetSlot(relativeTo, CALENDAR),\n      0,\n      0,\n      0,\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam\n    );\n    const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n    nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n  } else {\n    nanosecondsBigInt = TotalDurationNanoseconds(\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam,\n      0\n    );\n  }\n  if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n    ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n  } else {\n    days = 0;\n  }\n\n  const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n  nanosecondsBigInt = abs(nanosecondsBigInt);\n  microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n\n  switch (largestUnit) {\n    case 'year':\n    case 'month':\n    case 'week':\n    case 'day':\n    case 'hour':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n      break;\n    case 'minute':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      break;\n    case 'second':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      break;\n    case 'millisecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      break;\n    case 'microsecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      break;\n    case 'nanosecond':\n      break;\n    default:\n      throw new Error('assert not reached');\n  }\n\n  const hours = JSBI.toNumber(hoursBigInt) * sign;\n  const minutes = JSBI.toNumber(minutesBigInt) * sign;\n  const seconds = JSBI.toNumber(secondsBigInt) * sign;\n  const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n  const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n  const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n\n  for (const prop of [days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]) {\n    if (!NumberIsFinite(prop)) {\n      if (sign === 1) {\n        return 'positive overflow' as const;\n      } else {\n        return 'negative overflow' as const;\n      }\n    }\n  }\n\n  return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function UnbalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year':\n      // no-op\n      break;\n    case 'month':\n      {\n        if (!calendar) throw new RangeError('a starting point is required for months balancing');\n        assertExists(relativeTo);\n        // balance years down to months\n        let dateAdd, dateUntil;\n        if (typeof calendar !== 'string') {\n          dateAdd = GetMethod(calendar, 'dateAdd');\n          dateUntil = GetMethod(calendar, 'dateUntil');\n        }\n        while (!isZero(years)) {\n          const newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n          const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof largestUnit>;\n          untilOptions.largestUnit = 'month';\n          const untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n          const oneYearMonths = JSBI.BigInt(GetSlot(untilResult, MONTHS));\n          relativeTo = newRelativeTo;\n          months = JSBI.add(months, oneYearMonths);\n          years = JSBI.subtract(years, signBI);\n        }\n      }\n      break;\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance years down to days\n      while (!isZero(years)) {\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n      break;\n    }\n    default: {\n      // balance years down to days\n      if (isZero(years) && isZero(months) && isZero(weeks)) break;\n      if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      while (!isZero(years)) {\n        assertExists(relativeTo);\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        assertExists(relativeTo);\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n\n      // balance weeks down to days\n      while (!isZero(weeks)) {\n        assertExists(relativeTo);\n        let oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.subtract(weeks, signBI);\n      }\n      break;\n    }\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function BalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('a starting point is required for years balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to years\n      let newRelativeTo, oneYearDays;\n      ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneYearDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      }\n\n      // balance days up to months\n      let oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n\n      // balance months up to years\n      newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n      const dateUntil = typeof calendar !== 'string' ? GetMethod(calendar, 'dateUntil') : undefined;\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n      untilOptions.largestUnit = 'month';\n      let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n      let oneYearMonths = GetSlot(untilResult, MONTHS);\n      while (JSBI.greaterThanOrEqual(abs(months), JSBI.BigInt(MathAbs(oneYearMonths)))) {\n        months = JSBI.subtract(months, JSBI.BigInt(oneYearMonths));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n        const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n        untilOptions.largestUnit = 'month';\n        untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n        oneYearMonths = GetSlot(untilResult, MONTHS);\n      }\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('a starting point is required for months balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to months\n      let newRelativeTo, oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to weeks\n      let newRelativeTo, oneWeekDays;\n      ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneWeekDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.add(weeks, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      break;\n    }\n    default:\n      // no-op\n      break;\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function CalculateOffsetShift(\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>,\n  y: number,\n  mon: number,\n  w: number,\n  d: number\n) {\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const instant = GetSlot(relativeTo, INSTANT);\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n    const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const instantAfter = new TemporalInstant(after);\n    const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n    return offsetAfter - offsetBefore;\n  }\n  return 0;\n}\n\nexport function CreateNegatedTemporalDuration(duration: Temporal.Duration) {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    -GetSlot(duration, YEARS),\n    -GetSlot(duration, MONTHS),\n    -GetSlot(duration, WEEKS),\n    -GetSlot(duration, DAYS),\n    -GetSlot(duration, HOURS),\n    -GetSlot(duration, MINUTES),\n    -GetSlot(duration, SECONDS),\n    -GetSlot(duration, MILLISECONDS),\n    -GetSlot(duration, MICROSECONDS),\n    -GetSlot(duration, NANOSECONDS)\n  );\n}\n\nexport function ConstrainToRange(value: number | undefined, min: number, max: number) {\n  // Math.Max accepts undefined values and returns NaN. Undefined values are\n  // used for optional params in the method below.\n  return MathMin(max, MathMax(min, value as number));\n}\nfunction ConstrainISODate(year: number, monthParam: number, dayParam?: number) {\n  const month = ConstrainToRange(monthParam, 1, 12);\n  const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n  return { year, month, day };\n}\n\nfunction ConstrainTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const hour = ConstrainToRange(hourParam, 0, 23);\n  const minute = ConstrainToRange(minuteParam, 0, 59);\n  const second = ConstrainToRange(secondParam, 0, 59);\n  const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n  const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n  const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RejectToRange(value: number, min: number, max: number) {\n  if (value < min || value > max) throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\n\nfunction RejectISODate(year: number, month: number, day: number) {\n  RejectToRange(month, 1, 12);\n  RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\n\nfunction RejectDateRange(year: number, month: number, day: number) {\n  // Noon avoids trouble at edges of DateTime range (excludes midnight)\n  RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\n\nexport function RejectTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(hour, 0, 23);\n  RejectToRange(minute, 0, 59);\n  RejectToRange(second, 0, 59);\n  RejectToRange(millisecond, 0, 999);\n  RejectToRange(microsecond, 0, 999);\n  RejectToRange(nanosecond, 0, 999);\n}\n\nfunction RejectDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectISODate(year, month, day);\n  RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction RejectDateTimeRange(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  // Reject any DateTime 24 hours or more outside the Instant range\n  if (\n    (year === YEAR_MIN &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n    (year === YEAR_MAX &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))\n  ) {\n    throw new RangeError('DateTime outside of supported range');\n  }\n}\n\nexport function ValidateEpochNanoseconds(epochNanoseconds: JSBI) {\n  if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n    throw new RangeError('Instant outside of supported range');\n  }\n}\n\nfunction RejectYearMonthRange(year: number, month: number) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  if (year === YEAR_MIN) {\n    RejectToRange(month, 4, 12);\n  } else if (year === YEAR_MAX) {\n    RejectToRange(month, 1, 9);\n  }\n}\n\nexport function RejectDuration(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (!NumberIsFinite(prop)) throw new RangeError('infinite values not allowed as duration fields');\n    const propSign = MathSign(prop);\n    if (propSign !== 0 && propSign !== sign) throw new RangeError('mixed-sign values not allowed as duration fields');\n  }\n}\n\nexport function DifferenceISODate<Allowed extends Temporal.DateTimeUnit>(\n  y1: number,\n  m1: number,\n  d1: number,\n  y2: number,\n  m2: number,\n  d2: number,\n  largestUnit: Allowed\n) {\n  switch (largestUnit) {\n    case 'year':\n    case 'month': {\n      const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n      if (sign === 0) return { years: 0, months: 0, weeks: 0, days: 0 };\n\n      const start = { year: y1, month: m1, day: d1 };\n      const end = { year: y2, month: m2, day: d2 };\n\n      let years = end.year - start.year;\n      let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n      let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months: 0, weeks: 0, days: 0 }\n          : { years: 0, months: years * 12, weeks: 0, days: 0 };\n      }\n      let months = end.month - start.month;\n      if (midSign !== sign) {\n        years -= sign;\n        months += sign * 12;\n      }\n      mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months, weeks: 0, days: 0 }\n          : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n      }\n      if (midSign !== sign) {\n        // The end date is later in the month than mid date (or earlier for\n        // negative durations). Back up one month.\n        months -= sign;\n        if (months === -sign) {\n          years -= sign;\n          months = 11 * sign;\n        }\n        mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      }\n\n      let days = 0;\n      // If we get here, months and years are correct (no overflow), and `mid`\n      // is within the range from `start` to `end`. To count the days between\n      // `mid` and `end`, there are 3 cases:\n      // 1) same month: use simple subtraction\n      // 2) end is previous month from intermediate (negative duration)\n      // 3) end is next month from intermediate (positive duration)\n      if (mid.month === end.month) {\n        // 1) same month: use simple subtraction\n        days = end.day - mid.day;\n      } else if (sign < 0) {\n        // 2) end is previous month from intermediate (negative duration)\n        // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n        days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n      } else {\n        // 3) end is next month from intermediate (positive duration)\n        // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n        days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n      }\n\n      if (largestUnit === 'month') {\n        months += years * 12;\n        years = 0;\n      }\n      return { years, months, weeks: 0, days };\n    }\n    case 'week':\n    case 'day': {\n      let larger, smaller, sign;\n      if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n        smaller = { year: y1, month: m1, day: d1 };\n        larger = { year: y2, month: m2, day: d2 };\n        sign = 1;\n      } else {\n        smaller = { year: y2, month: m2, day: d2 };\n        larger = { year: y1, month: m1, day: d1 };\n        sign = -1;\n      }\n      let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n      for (let year = smaller.year; year < larger.year; ++year) {\n        days += LeapYear(year) ? 366 : 365;\n      }\n      let weeks = 0;\n      if (largestUnit === 'week') {\n        weeks = MathFloor(days / 7);\n        days %= 7;\n      }\n      weeks *= sign;\n      days *= sign;\n      return { years: 0, months: 0, weeks, days };\n    }\n    default:\n      throw new Error('assert not reached');\n  }\n}\n\nfunction DifferenceTime(\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number\n) {\n  let hours = h2 - h1;\n  let minutes = min2 - min1;\n  let seconds = s2 - s1;\n  let milliseconds = ms2 - ms1;\n  let microseconds = µs2 - µs1;\n  let nanoseconds = ns2 - ns1;\n\n  const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  let deltaDays = 0;\n  ({\n    deltaDays,\n    hour: hours,\n    minute: minutes,\n    second: seconds,\n    millisecond: milliseconds,\n    microsecond: microseconds,\n    nanosecond: nanoseconds\n  } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n\n  if (deltaDays != 0) throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceInstant(\n  ns1: JSBI,\n  ns2: JSBI,\n  increment: number,\n  smallestUnit: keyof typeof nsPerTimeUnit,\n  largestUnit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  const diff = JSBI.subtract(ns2, ns1);\n\n  let hours = 0;\n  let minutes = 0;\n  let nanoseconds = JSBI.toNumber(JSBI.remainder(diff, THOUSAND));\n  let microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, THOUSAND), THOUSAND));\n  let milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, MILLION), THOUSAND));\n  let seconds = JSBI.toNumber(JSBI.divide(diff, BILLION));\n\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    increment,\n    smallestUnit,\n    roundingMode\n  ));\n  return BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit);\n}\n\nfunction DifferenceISODateTime(\n  y1Param: number,\n  mon1Param: number,\n  d1Param: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n) {\n  let y1 = y1Param;\n  let mon1 = mon1Param;\n  let d1 = d1Param;\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    h1,\n    min1,\n    s1,\n    ms1,\n    µs1,\n    ns1,\n    h2,\n    min2,\n    s2,\n    ms2,\n    µs2,\n    ns2\n  );\n\n  const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n  if (dateSign === -timeSign) {\n    ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      -timeSign,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit\n    ));\n  }\n\n  const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n  const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n  const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n  const untilOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  untilOptions.largestUnit = dateLargestUnit;\n  uncheckedAssertNarrowedType<Temporal.DifferenceOptions<Temporal.DateUnit>>(\n    untilOptions,\n    '`largestUnit` is already a date unit, and `smallestUnit` is ignored by CalendarDateUntil'\n  );\n  const untilResult = CalendarDateUntil(calendar, date1, date2, untilOptions);\n  const years = GetSlot(untilResult, YEARS);\n  const months = GetSlot(untilResult, MONTHS);\n  const weeks = GetSlot(untilResult, WEEKS);\n  let days = GetSlot(untilResult, DAYS);\n  // Signs of date part and time part may not agree; balance them together\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    largestUnit\n  ));\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceZonedDateTime(\n  ns1: JSBI,\n  ns2: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n) {\n  const nsDiff = JSBI.subtract(ns2, ns1);\n  if (JSBI.equal(nsDiff, ZERO)) {\n    return {\n      years: 0,\n      months: 0,\n      weeks: 0,\n      days: 0,\n      hours: 0,\n      minutes: 0,\n      seconds: 0,\n      milliseconds: 0,\n      microseconds: 0,\n      nanoseconds: 0\n    };\n  }\n\n  // Find the difference in dates only.\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const start = new TemporalInstant(ns1);\n  const end = new TemporalInstant(ns2);\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { years, months, weeks, days } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    largestUnit,\n    options\n  );\n  const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n  let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n  const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n  ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n\n  // Finally, merge the date and time durations and return the merged result.\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    JSBI.toNumber(timeRemainderNs),\n    'hour'\n  );\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\ntype DifferenceOperation = 'since' | 'until';\n\nfunction GetDifferenceSettings<T extends Temporal.DateTimeUnit>(\n  op: DifferenceOperation,\n  options: Temporal.DifferenceOptions<T>,\n  group: 'datetime' | 'date' | 'time',\n  disallowed: (Temporal.DateTimeUnit | 'auto')[],\n  fallbackSmallest: T,\n  smallestLargestDefaultUnit: T\n) {\n  const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, unitInfo) => {\n    const p = unitInfo[0];\n    const s = unitInfo[1];\n    const c = unitInfo[2];\n    if ((group === 'datetime' || c === group) && !disallowed.includes(s)) {\n      allowed.push(s, p);\n    }\n    return allowed;\n  }, [] as (Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>)[]);\n\n  let largestUnit = GetTemporalUnit(options, 'largestUnit', group, 'auto');\n  if (disallowed.includes(largestUnit)) {\n    throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n  }\n\n  const roundingIncrement = ToTemporalRoundingIncrement(options);\n\n  let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n  if (op === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode);\n\n  const smallestUnit = GetTemporalUnit(options, 'smallestUnit', group, fallbackSmallest);\n  if (disallowed.includes(smallestUnit)) {\n    throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n  }\n\n  const defaultLargestUnit = LargerOfTwoTemporalUnits(smallestLargestDefaultUnit, smallestUnit);\n  if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n  if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n    throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n  }\n  const MAX_DIFFERENCE_INCREMENTS: { [k in Temporal.DateTimeUnit]?: number } = {\n    hour: 24,\n    minute: 60,\n    second: 60,\n    millisecond: 1000,\n    microsecond: 1000,\n    nanosecond: 1000\n  };\n  const maximum = MAX_DIFFERENCE_INCREMENTS[smallestUnit];\n  if (maximum !== undefined) ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n  return { largestUnit: largestUnit as T, roundingIncrement, roundingMode, smallestUnit: smallestUnit as T };\n}\n\nexport function DifferenceTemporalInstant(\n  operation: DifferenceOperation,\n  instant: Temporal.Instant,\n  otherParam: InstantParams['until'][0],\n  options: InstantParams['until'][1] | undefined\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalInstant(otherParam);\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'second');\n\n  const onens = GetSlot(instant, EPOCHNANOSECONDS);\n  const twons = GetSlot(other, EPOCHNANOSECONDS);\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n    onens,\n    twons,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.largestUnit,\n    settings.roundingMode\n  );\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainDate(\n  operation: DifferenceOperation,\n  plainDate: Temporal.PlainDate,\n  otherParam: PlainDateParams['until'][0],\n  options: PlainDateParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDate(otherParam);\n  const calendar = GetSlot(plainDate, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', [], 'day', 'day');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const untilResult = CalendarDateUntil(calendar, plainDate, other, resolvedOptions);\n  let years = GetSlot(untilResult, YEARS);\n  let months = GetSlot(untilResult, MONTHS);\n  let weeks = GetSlot(untilResult, WEEKS);\n  let days = GetSlot(untilResult, DAYS);\n\n  if (settings.smallestUnit !== 'day' || settings.roundingIncrement !== 1) {\n    ({ years, months, weeks, days } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      plainDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalPlainDateTime(\n  operation: DifferenceOperation,\n  plainDateTime: Temporal.PlainDateTime,\n  otherParam: PlainDateTimeParams['until'][0],\n  options: PlainDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDateTime(otherParam);\n  const calendar = GetSlot(plainDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'day');\n\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    DifferenceISODateTime(\n      GetSlot(plainDateTime, ISO_YEAR),\n      GetSlot(plainDateTime, ISO_MONTH),\n      GetSlot(plainDateTime, ISO_DAY),\n      GetSlot(plainDateTime, ISO_HOUR),\n      GetSlot(plainDateTime, ISO_MINUTE),\n      GetSlot(plainDateTime, ISO_SECOND),\n      GetSlot(plainDateTime, ISO_MILLISECOND),\n      GetSlot(plainDateTime, ISO_MICROSECOND),\n      GetSlot(plainDateTime, ISO_NANOSECOND),\n      GetSlot(other, ISO_YEAR),\n      GetSlot(other, ISO_MONTH),\n      GetSlot(other, ISO_DAY),\n      GetSlot(other, ISO_HOUR),\n      GetSlot(other, ISO_MINUTE),\n      GetSlot(other, ISO_SECOND),\n      GetSlot(other, ISO_MILLISECOND),\n      GetSlot(other, ISO_MICROSECOND),\n      GetSlot(other, ISO_NANOSECOND),\n      calendar,\n      settings.largestUnit,\n      resolvedOptions\n    );\n\n  const relativeTo = TemporalDateTimeToDate(plainDateTime);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode,\n    relativeTo\n  ));\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainTime(\n  operation: DifferenceOperation,\n  plainTime: Temporal.PlainTime,\n  otherParam: PlainTimeParams['until'][0],\n  options: PlainTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalTime(otherParam);\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'hour');\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    GetSlot(plainTime, ISO_HOUR),\n    GetSlot(plainTime, ISO_MINUTE),\n    GetSlot(plainTime, ISO_SECOND),\n    GetSlot(plainTime, ISO_MILLISECOND),\n    GetSlot(plainTime, ISO_MICROSECOND),\n    GetSlot(plainTime, ISO_NANOSECOND),\n    GetSlot(other, ISO_HOUR),\n    GetSlot(other, ISO_MINUTE),\n    GetSlot(other, ISO_SECOND),\n    GetSlot(other, ISO_MILLISECOND),\n    GetSlot(other, ISO_MICROSECOND),\n    GetSlot(other, ISO_NANOSECOND)\n  );\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode\n  ));\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainYearMonth(\n  operation: DifferenceOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  otherParam: PlainYearMonthParams['until'][0],\n  options: PlainYearMonthParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalYearMonth(otherParam);\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between months');\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', ['week', 'day'], 'month', 'year');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year']) as AnyTemporalKey[];\n  const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  thisFields.day = 1;\n  const thisDate = CalendarDateFromFields(calendar, thisFields);\n  const otherFields = PrepareTemporalFields(other, fieldNames, []);\n  otherFields.day = 1;\n  const otherDate = CalendarDateFromFields(calendar, otherFields);\n\n  let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, resolvedOptions);\n\n  if (settings.smallestUnit !== 'month' || settings.roundingIncrement !== 1) {\n    ({ years, months } = RoundDuration(\n      years,\n      months,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      thisDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalZonedDateTime(\n  operation: DifferenceOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  otherParam: ZonedDateTimeParams['until'][0],\n  options: ZonedDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalZonedDateTime(otherParam);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'hour');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n  const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (\n    settings.largestUnit !== 'year' &&\n    settings.largestUnit !== 'month' &&\n    settings.largestUnit !== 'week' &&\n    settings.largestUnit !== 'day'\n  ) {\n    // The user is only asking for a time difference, so return difference of instants.\n    years = 0;\n    months = 0;\n    weeks = 0;\n    days = 0;\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n      ns1,\n      ns2,\n      settings.roundingIncrement,\n      settings.smallestUnit as Temporal.TimeUnit,\n      settings.largestUnit as Temporal.TimeUnit,\n      settings.roundingMode\n    ));\n  } else {\n    const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n    if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n      throw new RangeError(\n        \"When calculating difference between time zones, largestUnit must be 'hours' \" +\n          'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'\n      );\n    }\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, settings.largestUnit, resolvedOptions));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      zonedDateTime\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        settings.roundingIncrement,\n        settings.smallestUnit,\n        settings.roundingMode,\n        zonedDateTime\n      ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function AddISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n\n  year += years;\n  month += months;\n  ({ year, month } = BalanceISOYearMonth(year, month));\n  ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n  days += 7 * weeks;\n  day += days;\n  ({ year, month, day } = BalanceISODate(year, month, day));\n  return { year, month, day };\n}\n\nfunction AddTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  hour += hours;\n  minute += minutes;\n  second += seconds;\n  millisecond += milliseconds;\n  microsecond += microseconds;\n  nanosecond += nanoseconds;\n  let deltaDays = 0;\n  ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  ));\n  return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction AddDuration(\n  y1: number,\n  mon1: number,\n  w1: number,\n  d1: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  w2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n  const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n  const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (!relativeTo) {\n    if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n      throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n    }\n    years = months = weeks = 0;\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      d1 + d2,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else if (IsTemporalDate(relativeTo)) {\n    const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n    const calendar = GetSlot(relativeTo, CALENDAR);\n\n    const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n    const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n    const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n    const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n    const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n\n    const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit) as Temporal.DateUnit;\n    const differenceOptions = ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateUnit>;\n    differenceOptions.largestUnit = dateLargestUnit;\n    const untilResult = CalendarDateUntil(calendar, relativeTo, end, differenceOptions);\n    years = GetSlot(untilResult, YEARS);\n    months = GetSlot(untilResult, MONTHS);\n    weeks = GetSlot(untilResult, WEEKS);\n    days = GetSlot(untilResult, DAYS);\n    // Signs of date part and time part may not agree; balance them together\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      days,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else {\n    // relativeTo is a ZonedDateTime\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const intermediateNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      timeZone,\n      calendar,\n      y1,\n      mon1,\n      w1,\n      d1,\n      h1,\n      min1,\n      s1,\n      ms1,\n      µs1,\n      ns1\n    );\n    const endNs = AddZonedDateTime(\n      new TemporalInstant(intermediateNs),\n      timeZone,\n      calendar,\n      y2,\n      mon2,\n      w2,\n      d2,\n      h2,\n      min2,\n      s2,\n      ms2,\n      µs2,\n      ns2\n    );\n    if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n      // The user is only asking for a time difference, so return difference of instants.\n      years = 0;\n      months = 0;\n      weeks = 0;\n      days = 0;\n      ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n        GetSlot(relativeTo, EPOCHNANOSECONDS),\n        endNs,\n        1,\n        'nanosecond',\n        largestUnit,\n        'halfExpand'\n      ));\n    } else {\n      ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n        DifferenceZonedDateTime(\n          GetSlot(relativeTo, EPOCHNANOSECONDS),\n          endNs,\n          timeZone,\n          calendar,\n          largestUnit,\n          ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n        ));\n    }\n  }\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction AddInstant(\n  epochNanoseconds: JSBI,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI\n) {\n  let sum = ZERO;\n  sum = JSBI.add(sum, JSBI.BigInt(ns));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n\n  const result = JSBI.add(epochNanoseconds, sum);\n  ValidateEpochNanoseconds(result);\n  return result;\n}\n\nfunction AddDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  daysParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number,\n  options?: Temporal.ArithmeticOptions\n) {\n  let days = daysParam;\n  // Add the time part\n  let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n  days += deltaDays;\n\n  // Delegate the date part addition to the calendar\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const datePart = CreateTemporalDate(year, month, day, calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n\n  return {\n    year: GetSlot(addedDate, ISO_YEAR),\n    month: GetSlot(addedDate, ISO_MONTH),\n    day: GetSlot(addedDate, ISO_DAY),\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  };\n}\n\nexport function AddZonedDateTime(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI,\n  options?: Temporal.ArithmeticOptions\n) {\n  // If only time is to be added, then use Instant math. It's not OK to fall\n  // through to the date/time code below because compatible disambiguation in\n  // the PlainDateTime=>Instant conversion will change the offset of any\n  // ZonedDateTime in the repeated clock time after a backwards transition.\n  // When adding/subtracting time units and not dates, this disambiguation is\n  // not expected and so is avoided below via a fast path for time-only\n  // arithmetic.\n  // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n    return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n  }\n\n  // RFC 5545 requires the date portion to be added in calendar days and the\n  // time portion to be added in exact time.\n  const dt = GetPlainDateTimeFor(timeZone, instant, calendar);\n  const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n  const dtIntermediate = CreateTemporalDateTime(\n    GetSlot(addedDate, ISO_YEAR),\n    GetSlot(addedDate, ISO_MONTH),\n    GetSlot(addedDate, ISO_DAY),\n    GetSlot(dt, ISO_HOUR),\n    GetSlot(dt, ISO_MINUTE),\n    GetSlot(dt, ISO_SECOND),\n    GetSlot(dt, ISO_MILLISECOND),\n    GetSlot(dt, ISO_MICROSECOND),\n    GetSlot(dt, ISO_NANOSECOND),\n    calendar\n  );\n\n  // Note that 'compatible' is used below because this disambiguation behavior\n  // is required by RFC 5545.\n  const instantIntermediate = GetInstantFor(timeZone, dtIntermediate, 'compatible');\n  return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\n\ntype AddSubtractOperation = 'add' | 'subtract';\n\nexport function AddDurationToOrSubtractDurationFromDuration(\n  operation: AddSubtractOperation,\n  duration: Temporal.Duration,\n  other: DurationParams['add'][0],\n  optionsParam: DurationParams['add'][1]\n): Temporal.Duration {\n  const sign = operation === 'subtract' ? -1 : 1;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(other);\n  const options = GetOptionsObject(optionsParam);\n  const relativeTo = ToRelativeTemporalObject(options);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(\n    GetSlot(duration, YEARS),\n    GetSlot(duration, MONTHS),\n    GetSlot(duration, WEEKS),\n    GetSlot(duration, DAYS),\n    GetSlot(duration, HOURS),\n    GetSlot(duration, MINUTES),\n    GetSlot(duration, SECONDS),\n    GetSlot(duration, MILLISECONDS),\n    GetSlot(duration, MICROSECONDS),\n    GetSlot(duration, NANOSECONDS),\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    relativeTo\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\n\nexport function AddDurationToOrSubtractDurationFromInstant(\n  operation: AddSubtractOperation,\n  instant: Temporal.Instant,\n  durationLike: InstantParams['add'][0]\n): Temporal.Instant {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n    'years',\n    'months',\n    'weeks',\n    'days'\n  ]);\n  const ns = AddInstant(\n    GetSlot(instant, EPOCHNANOSECONDS),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ns);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(\n  operation: AddSubtractOperation,\n  dateTime: Temporal.PlainDateTime,\n  durationLike: PlainDateTimeParams['add'][0],\n  optionsParam: PlainDateTimeParams['add'][1]\n): Temporal.PlainDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const calendar = GetSlot(dateTime, CALENDAR);\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainTime(\n  operation: AddSubtractOperation,\n  temporalTime: Temporal.PlainTime,\n  durationLike: PlainTimeParams['add'][0]\n): Temporal.PlainTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    GetSlot(temporalTime, ISO_HOUR),\n    GetSlot(temporalTime, ISO_MINUTE),\n    GetSlot(temporalTime, ISO_SECOND),\n    GetSlot(temporalTime, ISO_MILLISECOND),\n    GetSlot(temporalTime, ISO_MICROSECOND),\n    GetSlot(temporalTime, ISO_NANOSECOND),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    'reject'\n  ));\n  const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(\n  operation: AddSubtractOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  durationLike: PlainYearMonthParams['add'][0],\n  optionsParam: PlainYearMonthParams['add'][1]\n): Temporal.PlainYearMonth {\n  let duration = ToTemporalDurationRecord(durationLike);\n  if (operation === 'subtract') {\n    duration = {\n      years: -duration.years,\n      months: -duration.months,\n      weeks: -duration.weeks,\n      days: -duration.days,\n      hours: -duration.hours,\n      minutes: -duration.minutes,\n      seconds: -duration.seconds,\n      milliseconds: -duration.milliseconds,\n      microseconds: -duration.microseconds,\n      nanoseconds: -duration.nanoseconds\n    };\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n  ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n\n  const options = GetOptionsObject(optionsParam);\n\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year'] as const);\n  const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  const fieldsCopy = SnapshotOwnProperties(GetOptionsObject(fields), null);\n  fields.day = 1;\n  // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n  // but TS doesn't narrow the type as a result of the assignment above.\n  uncheckedAssertNarrowedType<typeof fields & { day: number }>(fields, '`day` is guaranteed to be non-undefined');\n  uncheckedAssertNarrowedType<typeof fields & { day: number }>(fieldsCopy, '`day` is guaranteed to be non-undefined');\n  let startDate = CalendarDateFromFields(calendar, fields);\n  const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const dateAdd = GetMethod(calendar, 'dateAdd');\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  if (sign < 0) {\n    const oneMonthDuration = new Duration(0, 1, 0, 0, 0, 0, 0, 0, 0, 0);\n    const nextMonth = CalendarDateAdd(calendar, startDate, oneMonthDuration, undefined, dateAdd);\n    const minusDayDuration = new Duration(0, 0, 0, -1, 0, 0, 0, 0, 0, 0);\n    const endOfMonth = CalendarDateAdd(calendar, nextMonth, minusDayDuration, undefined, dateAdd);\n    fieldsCopy.day = CalendarDay(calendar, endOfMonth);\n    startDate = CalendarDateFromFields(calendar, fieldsCopy);\n  }\n  const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const optionsCopy = SnapshotOwnProperties(GetOptionsObject(options), null);\n  const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options, dateAdd);\n  const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n\n  return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\n\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(\n  operation: AddSubtractOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  durationLike: ZonedDateTimeParams['add'][0],\n  optionsParam: ZonedDateTimeParams['add'][1]\n): Temporal.ZonedDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const epochNanoseconds = AddZonedDateTime(\n    GetSlot(zonedDateTime, INSTANT),\n    timeZone,\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nfunction RoundNumberToIncrement(quantity: JSBI, increment: JSBI, mode: Temporal.RoundingMode) {\n  if (JSBI.equal(increment, ONE)) return quantity;\n  let { quotient, remainder } = divmod(quantity, increment);\n  if (JSBI.equal(remainder, ZERO)) return quantity;\n  const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n  const tiebreaker = abs(JSBI.multiply(remainder, JSBI.BigInt(2)));\n  const tie = JSBI.equal(tiebreaker, increment);\n  const expandIsNearer = JSBI.greaterThan(tiebreaker, increment);\n  switch (mode) {\n    case 'ceil':\n      if (sign > 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'floor':\n      if (sign < 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'expand':\n      // always expand if there is a remainder\n      quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'trunc':\n      // no change needed, because divmod is a truncation\n      break;\n    case 'halfCeil':\n      if (expandIsNearer || (tie && sign > 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfFloor':\n      if (expandIsNearer || (tie && sign < 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfExpand':\n      // \"half up away from zero\"\n      if (expandIsNearer || tie) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfTrunc':\n      if (expandIsNearer) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfEven':\n      if (expandIsNearer || (tie && JSBI.toNumber(JSBI.remainder(abs(quotient), JSBI.BigInt(2))) === 1)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n  }\n  return JSBI.multiply(quotient, increment);\n}\n\nexport function RoundInstant(\n  epochNs: JSBI,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  let { remainder } = NonNegativeBigIntDivmod(epochNs, DAY_NANOS);\n  const wholeDays = JSBI.subtract(epochNs, remainder);\n  const roundedRemainder = RoundNumberToIncrement(\n    remainder,\n    JSBI.BigInt(nsPerTimeUnit[unit] * increment),\n    roundingMode\n  );\n  return JSBI.add(wholeDays, roundedRemainder);\n}\n\nexport function RoundISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  increment: number,\n  unit: UnitSmallerThanOrEqualTo<'day'>,\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    increment,\n    unit,\n    roundingMode,\n    dayLengthNs\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RoundTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit | 'day',\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  let quantity = ZERO;\n  switch (unit) {\n    case 'day':\n    case 'hour':\n      quantity = JSBI.BigInt(hour);\n    // fall through\n    case 'minute':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n    // fall through\n    case 'second':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n    // fall through\n    case 'millisecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n    // fall through\n    case 'microsecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n    // fall through\n    case 'nanosecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n  }\n  const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n  const rounded = RoundNumberToIncrement(quantity, JSBI.BigInt(nsPerUnit * increment), roundingMode);\n  const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n  switch (unit) {\n    case 'day':\n      return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n    case 'hour':\n      return BalanceTime(result, 0, 0, 0, 0, 0);\n    case 'minute':\n      return BalanceTime(hour, result, 0, 0, 0, 0);\n    case 'second':\n      return BalanceTime(hour, minute, result, 0, 0, 0);\n    case 'millisecond':\n      return BalanceTime(hour, minute, second, result, 0, 0);\n    case 'microsecond':\n      return BalanceTime(hour, minute, second, millisecond, result, 0);\n    case 'nanosecond':\n      return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n    default:\n      throw new Error(`Invalid unit ${unit}`);\n  }\n}\n\nfunction DaysUntil(\n  earlier: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime,\n  later: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime\n) {\n  return DifferenceISODate(\n    GetSlot(earlier, ISO_YEAR),\n    GetSlot(earlier, ISO_MONTH),\n    GetSlot(earlier, ISO_DAY),\n    GetSlot(later, ISO_YEAR),\n    GetSlot(later, ISO_MONTH),\n    GetSlot(later, ISO_DAY),\n    'day'\n  ).days;\n}\n\nfunction MoveRelativeDate(\n  calendar: CalendarSlot,\n  relativeToParam: NonNullable<ReturnType<typeof ToRelativeTemporalObject>>,\n  duration: Temporal.Duration,\n  dateAdd: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined, dateAdd);\n  const days = DaysUntil(relativeToParam, later);\n  return { relativeTo: later, days };\n}\n\nexport function MoveRelativeZonedDateTime(\n  relativeTo: Temporal.ZonedDateTime,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number\n) {\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const intermediateNs = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\n\nexport function AdjustRoundedDurationDays(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = nanosecondsParam;\n  if (\n    !IsTemporalZonedDateTime(relativeTo) ||\n    unit === 'year' ||\n    unit === 'month' ||\n    unit === 'week' ||\n    unit === 'day' ||\n    (unit === 'nanosecond' && increment === 1)\n  ) {\n    return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n  }\n\n  // There's one more round of rounding possible: if relativeTo is a\n  // ZonedDateTime, the time units could have rounded up into enough hours\n  // to exceed the day length. If this happens, grow the date part by a\n  // single day and re-run exact time rounding on the smaller remainder. DO\n  // NOT RECURSE, because once the extra hours are sucked up into the date\n  // duration, there's no way for another full day to come from the next\n  // round of rounding. And if it were possible (e.g. contrived calendar\n  // with 30-minute-long \"days\") then it'd risk an infinite loop.\n  let timeRemainderNs = TotalDurationNanoseconds(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    0\n  );\n  const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const dayStart = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const dayEnd = AddZonedDateTime(\n    new TemporalInstant(dayStart),\n    timeZone,\n    calendar,\n    0,\n    0,\n    0,\n    direction,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n\n  if (\n    JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)\n  ) {\n    ({ years, months, weeks, days } = AddDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      direction,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      relativeTo\n    ));\n    timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      JSBI.toNumber(timeRemainderNs),\n      'hour'\n    ));\n  }\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function RoundDuration(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  let calendar, zdtRelative;\n  // A cast is used below because relativeTo will be either PlainDate or\n  // undefined for the rest of this long method (after any ZDT=>PlainDate\n  // conversion below), and TS isn't smart enough to know that the type has\n  // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n  let relativeTo = relativeToParam as Temporal.PlainDate | undefined;\n  if (relativeTo) {\n    if (IsTemporalZonedDateTime(relativeTo)) {\n      zdtRelative = relativeTo;\n      relativeTo = ToTemporalDate(relativeTo);\n    } else if (!IsTemporalDate(relativeTo)) {\n      throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n    }\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  // First convert time units up to days, if rounding to days or higher units.\n  // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n  // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n  // larger. We'll cast away `undefined` when it's used lower down below.\n  let dayLengthNs: JSBI | undefined;\n  if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n    nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n    let intermediate;\n    if (zdtRelative) {\n      intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n    }\n    let deltaDays;\n    let dayLength: number;\n    ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n    dayLengthNs = JSBI.BigInt(dayLength);\n    days += deltaDays;\n    hours = minutes = seconds = milliseconds = microseconds = 0;\n  }\n\n  let total: number;\n  switch (unit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('A starting point is required for years rounding');\n      assertExists(relativeTo);\n\n      // convert months and weeks to days by calculating difference(\n      // relativeTo + years, relativeTo + { years, months, weeks })\n      const yearsDuration = new TemporalDuration(years);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsLater;\n      days += monthsWeeksInDays;\n\n      const wholeDays = new TemporalDuration(0, 0, 0, days);\n      const wholeDaysLater = CalendarDateAdd(calendar, relativeTo, wholeDays, undefined, dateAdd);\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof unit>;\n      untilOptions.largestUnit = 'year';\n      const yearsPassed = GetSlot(CalendarDateUntil(calendar, relativeTo, wholeDaysLater, untilOptions), YEARS);\n      years += yearsPassed;\n      const yearsPassedDuration = new TemporalDuration(yearsPassed);\n      let daysPassed;\n      ({ relativeTo, days: daysPassed } = MoveRelativeDate(calendar, relativeTo, yearsPassedDuration, dateAdd));\n      days -= daysPassed;\n      const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n      let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd);\n\n      // Note that `nanoseconds` below (here and in similar code for months,\n      // weeks, and days further below) isn't actually nanoseconds for the\n      // full date range.  Instead, it's a BigInt representation of total\n      // days multiplied by the number of nanoseconds in the last day of\n      // the duration. This lets us do days-or-larger rounding using BigInt\n      // math which reduces precision loss.\n      oneYearDays = MathAbs(oneYearDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      months = weeks = days = 0;\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('A starting point is required for months rounding');\n      assertExists(relativeTo);\n\n      // convert weeks to days by calculating difference(relativeTo +\n      //   { years, months }, relativeTo + { years, months, weeks })\n      const yearsMonths = new TemporalDuration(years, months);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsMonthsLater;\n      days += weeksInDays;\n\n      // Months may be different lengths of days depending on the calendar,\n      // convert days to months in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n      let oneMonthDays: number;\n      ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n        months += sign;\n        days -= oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      oneMonthDays = MathAbs(oneMonthDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      weeks = days = 0;\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('A starting point is required for weeks rounding');\n      assertExists(relativeTo);\n\n      // Weeks may be different lengths of days depending on the calendar,\n      // convert days to weeks in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      let oneWeekDays;\n      ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n        weeks += sign;\n        days -= oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      oneWeekDays = MathAbs(oneWeekDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      days = 0;\n      break;\n    }\n    case 'day': {\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = dayLengthNs;\n      nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'hour': {\n      const divisor = 3600e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      minutes = seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'minute': {\n      const divisor = 60e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'second': {\n      const divisor = 1e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      milliseconds = microseconds = 0;\n      break;\n    }\n    case 'millisecond': {\n      const divisor = 1e6;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      microseconds = 0;\n      break;\n    }\n    case 'microsecond': {\n      const divisor = 1e3;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'nanosecond': {\n      total = JSBI.toNumber(nanoseconds);\n      nanoseconds = RoundNumberToIncrement(JSBI.BigInt(nanoseconds), JSBI.BigInt(increment), roundingMode);\n      break;\n    }\n  }\n  return {\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds: JSBI.toNumber(nanoseconds),\n    total\n  };\n}\n\nexport function CompareISODate(y1: number, m1: number, d1: number, y2: number, m2: number, d2: number) {\n  for (const [x, y] of [\n    [y1, y2],\n    [m1, m2],\n    [d1, d2]\n  ]) {\n    if (x !== y) return ComparisonResult(x - y);\n  }\n  return 0;\n}\n\n// Not abstract operations from the spec\n\nfunction NonNegativeBigIntDivmod(x: JSBI, y: JSBI) {\n  let { quotient, remainder } = divmod(x, y);\n  if (JSBI.lessThan(remainder, ZERO)) {\n    quotient = JSBI.subtract(quotient, ONE);\n    remainder = JSBI.add(remainder, y);\n  }\n  return { quotient, remainder };\n}\n\nexport function BigIntFloorDiv(left: JSBI, right: JSBI) {\n  const { quotient, remainder } = divmod(left, right);\n  if (!isZero(remainder) && !isNegativeJSBI(left) != !isNegativeJSBI(right)) {\n    return JSBI.subtract(quotient, ONE);\n  }\n  return quotient;\n}\n\n/** Divide two JSBIs, and return the result as a Number, including the remainder. */\nexport function BigIntDivideToNumber(dividend: JSBI, divisor: JSBI) {\n  const { quotient, remainder } = divmod(dividend, divisor);\n  const result = JSBI.toNumber(quotient) + JSBI.toNumber(remainder) / JSBI.toNumber(divisor);\n  return result;\n}\n\n// Defaults to native bigint, or something \"native bigint-like\".\n// For users of Temporal that are running in environments without native BigInt,\n// the only guarantee we should give is that the returned object's toString will\n// return a string containing an accurate base 10 value of this bigint. This\n// form factor should correctly interop with other bigint compat libraries\n// easily.\ntype ExternalBigInt = bigint;\n\nexport function ToBigIntExternal(arg: unknown): ExternalBigInt {\n  const jsbiBI = ToBigInt(arg);\n  if (typeof (globalThis as any).BigInt !== 'undefined') return (globalThis as any).BigInt(jsbiBI.toString(10));\n  return jsbiBI as unknown as ExternalBigInt;\n}\n\nexport function ToBigInt(arg: unknown): JSBI {\n  let prim = arg;\n  if (typeof arg === 'object') {\n    const toPrimFn = (arg as { [Symbol.toPrimitive]: unknown })[Symbol.toPrimitive];\n    if (toPrimFn && typeof toPrimFn === 'function') {\n      prim = ReflectApply(toPrimFn, arg, ['number']);\n    }\n  }\n\n  // The AO ToBigInt throws on numbers because it does not allow implicit\n  // conversion between number and bigint (unlike the bigint constructor).\n  if (typeof prim === 'number') {\n    throw new TypeError('cannot convert number to bigint');\n  }\n  if (typeof prim === 'bigint') {\n    // JSBI doesn't know anything about the bigint type, and intentionally\n    // assumes it doesn't exist. Passing one to the BigInt function will throw\n    // an error.\n    return JSBI.BigInt(prim.toString(10));\n  }\n  // JSBI will properly coerce types into a BigInt the same as the native BigInt\n  // constructor will, with the exception of native bigint which is handled\n  // above.\n  // As of 2023-04-07, the only runtime type that neither of those can handle is\n  // 'symbol', and both native bigint and the JSBI.BigInt function will throw an\n  // error if they are given a Symbol.\n  return JSBI.BigInt(prim as string | boolean | object);\n}\n\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds: () => JSBI = (() => {\n  let ns = JSBI.BigInt(Date.now() % 1e6);\n  return () => {\n    const ms = JSBI.BigInt(Date.now());\n    const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n    ns = JSBI.remainder(ms, MILLION);\n    if (JSBI.greaterThan(result, NS_MAX)) return NS_MAX;\n    if (JSBI.lessThan(result, NS_MIN)) return NS_MIN;\n    return result;\n  };\n})();\n\nexport function DefaultTimeZone() {\n  return new IntlDateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function ComparisonResult(value: number) {\n  return value < 0 ? -1 : value > 0 ? 1 : (value as 0);\n}\n\nexport function GetOptionsObject<T>(options: T) {\n  if (options === undefined) return ObjectCreate(null) as NonNullable<T>;\n  if (IsObject(options) && options !== null) return options;\n  throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\n\nexport function CreateOnePropObject<K extends string, V>(propName: K, propValue: V): { [k in K]: V } {\n  const o = ObjectCreate(null);\n  o[propName] = propValue;\n  return o;\n}\n\nexport function SnapshotOwnProperties<T extends { [s in K]?: unknown }, K extends PropertyKey & keyof T>(\n  source: T | undefined,\n  proto: Record<PropertyKey, unknown> | null,\n  excludedKeys: (keyof T)[] = [],\n  excludedValues: unknown[] = []\n) {\n  const copy = ObjectCreate(proto) as NonNullable<T>;\n  CopyDataProperties(copy, ToObject(source), excludedKeys, excludedValues);\n  return copy;\n}\n\ntype StringlyTypedKeys<T> = Exclude<keyof T, symbol | number>;\nfunction GetOption<P extends StringlyTypedKeys<O>, O extends Partial<Record<P, unknown>>>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: undefined\n): O[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: Fallback\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: O[P]\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P] {\n  let value = options[property];\n  if (value !== undefined) {\n    value = ToString(value) as O[P];\n    if (!allowedValues.includes(value)) {\n      throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n    }\n    return value;\n  }\n  return fallback;\n}\n\nexport function IsBuiltinCalendar(id: string): id is BuiltinCalendarId {\n  return BUILTIN_CALENDAR_IDS.includes(ASCIILowercase(id));\n}\n\nexport function ASCIILowercase<T extends string>(str: T): T {\n  // The spec defines this operation distinct from String.prototype.lowercase,\n  // so we'll follow the spec here. Note that nasty security issues that can\n  // happen for some use cases if you're comparing case-modified non-ASCII\n  // values. For example, Turkish's \"I\" character was the source of a security\n  // issue involving \"file://\" URLs. See\n  // https://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/.\n  return str.replace(/[A-Z]/g, (l) => {\n    const code = l.charCodeAt(0);\n    return String.fromCharCode(code + 0x20);\n  }) as T;\n}\n\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\n\nfunction bisect(\n  getState: (epochNs: JSBI) => number,\n  leftParam: JSBI,\n  rightParam: JSBI,\n  lstateParam: number = getState(leftParam),\n  rstateParam: number = getState(rightParam)\n) {\n  // This doesn't make much sense - why do these get converted unnecessarily?\n  let left = JSBI.BigInt(leftParam);\n  let right = JSBI.BigInt(rightParam);\n  let lstate = lstateParam;\n  let rstate = rstateParam;\n  while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n    const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n    const mstate = getState(middle);\n    if (mstate === lstate) {\n      left = middle;\n      lstate = mstate;\n    } else if (mstate === rstate) {\n      right = middle;\n      rstate = mstate;\n    } else {\n      throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n    }\n  }\n  return right;\n}\n\nconst nsPerTimeUnit = {\n  hour: 3600e9,\n  minute: 60e9,\n  second: 1e9,\n  millisecond: 1e6,\n  microsecond: 1e3,\n  nanosecond: 1\n};\n","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  GetSlot,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR\n} from './slots';\nimport type { Temporal, Intl } from '..';\nimport type { DateTimeFormatParams as Params, DateTimeFormatReturn as Return } from './internaltypes';\n\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\n\nconst descriptor = <T extends (...args: any[]) => any>(value: T) => {\n  return {\n    value,\n    enumerable: true,\n    writable: false,\n    configurable: true\n  };\n};\n\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n\ninterface CustomFormatters {\n  [DATE]: typeof dateAmend | globalThis.Intl.DateTimeFormat;\n  [YM]: typeof yearMonthAmend | typeof globalThis.Intl.DateTimeFormat;\n  [MD]: typeof monthDayAmend | typeof globalThis.Intl.DateTimeFormat;\n  [TIME]: typeof timeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [DATETIME]: typeof datetimeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [INST]: typeof instantAmend | typeof globalThis.Intl.DateTimeFormat;\n}\n\ninterface PrivateProps extends CustomFormatters {\n  [ORIGINAL]: globalThis.Intl.DateTimeFormat;\n  [TZ_RESOLVED]: string | Temporal.TimeZoneProtocol;\n  [CAL_ID]: globalThis.Intl.ResolvedDateTimeFormatOptions['calendar'];\n  [LOCALE]: globalThis.Intl.ResolvedDateTimeFormatOptions['locale'];\n  [OPTIONS]: Intl.DateTimeFormatOptions;\n}\n\ntype OptionsAmenderFunction = (options: Intl.DateTimeFormatOptions) => globalThis.Intl.DateTimeFormatOptions;\ntype FormatterOrAmender = globalThis.Intl.DateTimeFormat | OptionsAmenderFunction;\n\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy<T extends PrivateProps, P extends keyof CustomFormatters>(\n  obj: T,\n  prop: P\n): globalThis.Intl.DateTimeFormat {\n  let val = obj[prop] as FormatterOrAmender;\n  if (typeof val === 'function') {\n    // If we get here, `val` is an \"amender function\". It will take the user's\n    // options and transform them into suitable options to be passed into the\n    // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n    // will vary depending on the Temporal type, so that's why we store separate\n    // formatters in separate props on the polyfill's DateTimeFormat instances.\n    // The efficiency happens because we don't create an (expensive) formatter\n    // until the user calls toLocaleString for that Temporal type.\n    val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n    // TODO: can this be typed more cleanly?\n    (obj[prop] as globalThis.Intl.DateTimeFormat) = val;\n  }\n  return val;\n}\n\ntype DateTimeFormatImpl = Intl.DateTimeFormat & PrivateProps;\n\nfunction DateTimeFormatImpl(\n  this: Intl.DateTimeFormat & PrivateProps,\n  locale: Params['constructor'][0] = undefined,\n  optionsParam: Params['constructor'][1] = {}\n) {\n  if (!(this instanceof DateTimeFormatImpl)) {\n    type Construct = new (\n      locale: Params['constructor'][0],\n      optionsParam: Params['constructor'][1]\n    ) => Intl.DateTimeFormat;\n    return new (DateTimeFormatImpl as unknown as Construct)(locale, optionsParam);\n  }\n  const hasOptions = typeof optionsParam !== 'undefined';\n  const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n  // TODO: remove type assertion after Temporal types land in TS lib types\n  const original = new IntlDateTimeFormat(locale, options as globalThis.Intl.DateTimeFormatOptions);\n  const ro = original.resolvedOptions();\n\n  // DateTimeFormat instances are very expensive to create. Therefore, they will\n  // be lazily created only when needed, using the locale and options provided.\n  // But it's possible for callers to mutate those inputs before lazy creation\n  // happens. For this reason, we clone the inputs instead of caching the\n  // original objects. To avoid the complexity of deep cloning any inputs that\n  // are themselves objects (e.g. the locales array, or options property values\n  // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n  // coercion and cloning for us. Unfortunately, we can't just use the resolved\n  // options as-is because our options-amending logic adds additional fields if\n  // the user doesn't supply any unit fields like year, month, day, hour, etc.\n  // Therefore, we limit the properties in the clone to properties that were\n  // present in the original input.\n  if (hasOptions) {\n    const clonedResolved = ObjectAssign({}, ro);\n    for (const prop in clonedResolved) {\n      if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n        delete clonedResolved[prop as keyof typeof clonedResolved];\n      }\n    }\n    this[OPTIONS] = clonedResolved as Intl.DateTimeFormatOptions;\n  } else {\n    this[OPTIONS] = options;\n  }\n\n  this[LOCALE] = ro.locale;\n  this[ORIGINAL] = original;\n  this[TZ_RESOLVED] = ro.timeZone;\n  this[CAL_ID] = ro.calendar;\n  this[DATE] = dateAmend;\n  this[YM] = yearMonthAmend;\n  this[MD] = monthDayAmend;\n  this[TIME] = timeAmend;\n  this[DATETIME] = datetimeAmend;\n  this[INST] = instantAmend;\n  return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\n\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n  writable: true,\n  value: 'DateTimeFormat'\n});\n\nDateTimeFormatImpl.supportedLocalesOf = function (\n  locales: Params['supportedLocalesOf'][0],\n  options: Params['supportedLocalesOf'][1]\n) {\n  return IntlDateTimeFormat.supportedLocalesOf(locales, options as globalThis.Intl.DateTimeFormatOptions);\n};\n\nconst propertyDescriptors: Partial<Record<keyof Intl.DateTimeFormat, PropertyDescriptor>> = {\n  resolvedOptions: descriptor(resolvedOptions),\n  format: descriptor(format),\n  formatRange: descriptor(formatRange)\n};\n\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\n\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\n\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n  writable: false,\n  enumerable: false,\n  configurable: false\n});\n\nexport const DateTimeFormat = DateTimeFormatImpl as unknown as typeof Intl.DateTimeFormat;\n\nfunction resolvedOptions(this: DateTimeFormatImpl): Return['resolvedOptions'] {\n  return this[ORIGINAL].resolvedOptions();\n}\n\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['format'][0],\n  ...rest: P\n): Return['format'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.format(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (datetime: Parameters<Intl.DateTimeFormat['format']>[0], ...rest: P) => Return['format'];\n  return (this[ORIGINAL].format as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatToParts<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['formatToParts'][0],\n  ...rest: P\n): Return['formatToParts'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.formatToParts(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (\n    datetime: Parameters<Intl.DateTimeFormat['formatToParts']>[0],\n    ...rest: P\n  ) => Return['formatToParts'];\n  return (this[ORIGINAL].formatToParts as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatRange(this: DateTimeFormatImpl, a: Params['formatRange'][0], b: Params['formatRange'][1]) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a as unknown as TypesWithToLocaleString, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b as unknown as TypesWithToLocaleString, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRange(a, b);\n}\n\nfunction formatRangeToParts(\n  this: DateTimeFormatImpl,\n  a: Params['formatRangeToParts'][0],\n  b: Params['formatRangeToParts'][1]\n) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRangeToParts(a, b);\n}\n\n// \"false\" is a signal to delete this option\ntype MaybeFalseOptions = {\n  [K in keyof Intl.DateTimeFormatOptions]?: Intl.DateTimeFormatOptions[K] | false;\n};\n\nfunction amend(optionsParam: Intl.DateTimeFormatOptions = {}, amended: MaybeFalseOptions = {}) {\n  const options = ObjectAssign({}, optionsParam);\n  for (const opt of [\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'weekday',\n    'dayPeriod',\n    'timeZoneName',\n    'dateStyle',\n    'timeStyle'\n  ] as const) {\n    // TODO: can this be typed more cleanly?\n    type OptionMaybeFalse = (typeof options)[typeof opt] | false;\n    (options[opt] as OptionMaybeFalse) = opt in amended ? amended[opt] : options[opt];\n    if ((options[opt] as OptionMaybeFalse) === false || options[opt] === undefined) delete options[opt];\n  }\n  return options as globalThis.Intl.DateTimeFormatOptions;\n}\n\ntype OptionsType<T extends TypesWithToLocaleString> = NonNullable<Parameters<T['toLocaleString']>[1]>;\n\nfunction timeAmend(optionsParam: OptionsType<Temporal.PlainTime>) {\n  let options = amend(optionsParam, {\n    year: false,\n    month: false,\n    day: false,\n    weekday: false,\n    timeZoneName: false,\n    dateStyle: false\n  });\n  if (!hasTimeOptions(options)) {\n    options = ObjectAssign({}, options, {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction yearMonthAmend(optionsParam: OptionsType<Temporal.PlainYearMonth>) {\n  let options = amend(optionsParam, {\n    day: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('year' in options || 'month' in options)) {\n    options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n  }\n  return options;\n}\n\nfunction monthDayAmend(optionsParam: OptionsType<Temporal.PlainMonthDay>) {\n  let options = amend(optionsParam, {\n    year: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('month' in options || 'day' in options)) {\n    options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n  }\n  return options;\n}\n\nfunction dateAmend(optionsParam: OptionsType<Temporal.PlainDate>) {\n  let options = amend(optionsParam, {\n    hour: false,\n    minute: false,\n    second: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    timeStyle: false\n  });\n  if (!hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction datetimeAmend(optionsParam: OptionsType<Temporal.PlainDateTime>) {\n  let options = amend(optionsParam, { timeZoneName: false });\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction instantAmend(optionsParam: OptionsType<Temporal.Instant>) {\n  let options = optionsParam;\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction hasDateOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\n\nfunction hasTimeOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return (\n    'hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options\n  );\n}\n\nfunction isTemporalObject(\n  obj: unknown\n): obj is\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainDateTime\n  | Temporal.ZonedDateTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.Instant {\n  return (\n    ES.IsTemporalDate(obj) ||\n    ES.IsTemporalTime(obj) ||\n    ES.IsTemporalDateTime(obj) ||\n    ES.IsTemporalZonedDateTime(obj) ||\n    ES.IsTemporalYearMonth(obj) ||\n    ES.IsTemporalMonthDay(obj) ||\n    ES.IsTemporalInstant(obj)\n  );\n}\n\nfunction sameTemporalType(x: unknown, y: unknown) {\n  if (!isTemporalObject(x) || !isTemporalObject(y)) return false;\n  if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y)) return false;\n  if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y)) return false;\n  if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y)) return false;\n  if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y)) return false;\n  if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y)) return false;\n  if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y)) return false;\n  if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y)) return false;\n  return true;\n}\n\ntype TypesWithToLocaleString =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime\n  | Temporal.Instant;\n\nfunction extractOverrides(temporalObj: Params['format'][0], main: DateTimeFormatImpl) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n\n  if (ES.IsTemporalTime(temporalObj)) {\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, TIME)\n    };\n  }\n\n  if (ES.IsTemporalYearMonth(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, YM)\n    };\n  }\n\n  if (ES.IsTemporalMonthDay(temporalObj)) {\n    const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, MD)\n    };\n  }\n\n  if (ES.IsTemporalDate(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n    }\n    const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATE)\n    };\n  }\n\n  if (ES.IsTemporalDateTime(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    let datetime = temporalObj;\n    if (calendar === 'iso8601') {\n      datetime = new DateTime(\n        isoYear,\n        isoMonth,\n        isoDay,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        main[CAL_ID]\n      );\n    }\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATETIME)\n    };\n  }\n\n  if (ES.IsTemporalZonedDateTime(temporalObj)) {\n    throw new TypeError(\n      'Temporal.ZonedDateTime not supported in DateTimeFormat methods. Use toLocaleString() instead.'\n    );\n  }\n\n  if (ES.IsTemporalInstant(temporalObj)) {\n    return {\n      instant: temporalObj,\n      formatter: getPropLazy(main, INST)\n    };\n  }\n\n  return {};\n}\n","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { InstantParams as Params, InstantReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\n\nexport class Instant implements Temporal.Instant {\n  constructor(epochNanoseconds: bigint | JSBI) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n\n    const ns = ES.ToBigInt(epochNanoseconds);\n    ES.ValidateEpochNanoseconds(ns);\n    CreateSlots(this);\n    SetSlot(this, EPOCHNANOSECONDS, ns);\n\n    if (DEBUG) {\n      const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${repr}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n  }\n\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const maximumIncrements = {\n      hour: 24,\n      minute: 1440,\n      second: 86400,\n      millisecond: 86400e3,\n      microsecond: 86400e6,\n      nanosecond: 86400e9\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximumIncrements[smallestUnit], true);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n    return new Instant(roundedNs);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalInstant(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    let timeZone = options.timeZone;\n    if (timeZone !== undefined) timeZone = ES.ToTemporalTimeZoneSlotValue(timeZone);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n    const roundedInstant = new Instant(roundedNs);\n    return ES.TemporalInstantToString(roundedInstant, timeZone as Temporal.TimeZoneProtocol, precision);\n  }\n  toJSON(): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalInstantToString(this, undefined, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument in toZonedDateTime');\n    }\n    const calendarLike = item.calendar;\n    if (calendarLike === undefined) {\n      throw new TypeError('missing calendar property in toZonedDateTime');\n    }\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n    const temporalTimeZoneLike = item.timeZone;\n    if (temporalTimeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property in toZonedDateTime');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toZonedDateTimeISO(timeZoneParam: Params['toZonedDateTimeISO'][0]): Return['toZonedDateTimeISO'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, 'iso8601');\n  }\n\n  static fromEpochSeconds(epochSecondsParam: Params['fromEpochSeconds'][0]): Return['fromEpochSeconds'] {\n    const epochSeconds = ES.ToNumber(epochSecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMilliseconds(\n    epochMillisecondsParam: Params['fromEpochMilliseconds'][0]\n  ): Return['fromEpochMilliseconds'] {\n    const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMicroseconds(\n    epochMicrosecondsParam: Params['fromEpochMicroseconds'][0]\n  ): Return['fromEpochMicroseconds'] {\n    const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n    const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochNanoseconds(\n    epochNanosecondsParam: Params['fromEpochNanoseconds'][0]\n  ): Return['fromEpochNanoseconds'] {\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalInstant(item)) {\n      return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n    }\n    return ES.ToTemporalInstant(item);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalInstant(oneParam);\n    const two = ES.ToTemporalInstant(twoParam);\n    const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n    const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(oneNs, twoNs)) return -1;\n    if (JSBI.greaterThan(oneNs, twoNs)) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.Instant';\n}\n\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport {\n  CALENDAR_ID,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type {\n  BuiltinCalendarId,\n  CalendarParams as Params,\n  CalendarReturn as Return,\n  AnyTemporalKey,\n  CalendarSlot\n} from './internaltypes';\n\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectCreate = Object.create;\nconst ObjectEntries = Object.entries;\nconst OriginalSet = Set;\nconst ReflectOwnKeys = Reflect.ownKeys;\nconst SetPrototypeAdd = Set.prototype.add;\nconst SetPrototypeValues = Set.prototype.values;\n\n/**\n * Shape of internal implementation of each built-in calendar. Note that\n * parameter types are simpler than CalendarProtocol because the `Calendar`\n * class performs validation and parameter normalization before handing control\n * over to CalendarImpl.\n *\n * There are two instances of this interface: one for the ISO calendar and\n * another that handles logic that's the same across all non-ISO calendars. The\n * latter is cloned for each non-ISO calendar at the end of this file.\n */\ninterface CalendarImpl {\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number;\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string;\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number;\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined;\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined;\n  dayOfWeek(date: Temporal.PlainDate): number;\n  dayOfYear(date: Temporal.PlainDate): number;\n  weekOfYear(date: Temporal.PlainDate): number;\n  yearOfWeek(date: Temporal.PlainDate): number;\n  daysInWeek(date: Temporal.PlainDate): number;\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  daysInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  inLeapYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): boolean;\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainDate;\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainYearMonth;\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainMonthDay;\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendar: string\n  ): Temporal.PlainDate;\n  dateUntil(\n    one: Temporal.PlainDate,\n    two: Temporal.PlainDate,\n    largestUnit: 'year' | 'month' | 'week' | 'day'\n  ): { years: number; months: number; weeks: number; days: number };\n  fields(fields: string[]): string[];\n  fieldKeysToIgnore(keys: string[]): string[];\n}\n\ntype CalendarImplementations = {\n  [k in BuiltinCalendarId]: CalendarImpl;\n};\n\n/**\n * Implementations for each calendar.\n * Registration for each of these calendars happens throughout this file. The ISO and non-ISO calendars are registered\n * separately - look for 'iso8601' for the ISO calendar registration, and all non-ISO calendar registrations happens\n * at the bottom of the file.\n */\nconst impl: CalendarImplementations = {} as unknown as CalendarImplementations;\n\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n *    PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n *    PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar implements Temporal.Calendar {\n  constructor(idParam: Params['constructor'][0]) {\n    // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n    //       exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: id is required');\n    }\n\n    const id = ES.ToString(idParam);\n    if (!ES.IsBuiltinCalendar(id)) throw new RangeError(`invalid calendar identifier ${id}`);\n    CreateSlots(this);\n    SetSlot(this, CALENDAR_ID, ES.ASCIILowercase(id));\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${id}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    optionsParam: Params['dateFromFields'][1] = undefined\n  ): Return['dateFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateFromFields(fields, options, id);\n  }\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    optionsParam: Params['yearMonthFromFields'][1] = undefined\n  ): Return['yearMonthFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].yearMonthFromFields(fields, options, id);\n  }\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    optionsParam: Params['monthDayFromFields'][1] = undefined\n  ): Return['monthDayFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].monthDayFromFields(fields, options, id);\n  }\n  fields(fields: Params['fields'][0]): Return['fields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fieldsArray = [] as string[];\n    const allowed = new Set([\n      'year',\n      'month',\n      'monthCode',\n      'day',\n      'hour',\n      'minute',\n      'second',\n      'millisecond',\n      'microsecond',\n      'nanosecond'\n    ]);\n    for (const name of fields) {\n      if (typeof name !== 'string') throw new TypeError('invalid fields');\n      if (!allowed.has(name)) throw new RangeError(`invalid field name ${name}`);\n      allowed.delete(name);\n      ArrayPrototypePush.call(fieldsArray, name);\n    }\n    return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n  }\n  mergeFields(fields: Params['mergeFields'][0], additionalFields: Params['mergeFields'][1]): Return['mergeFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fieldsCopy = ES.SnapshotOwnProperties(fields, null, [], [undefined]);\n    const additionalFieldsCopy = ES.SnapshotOwnProperties(additionalFields, null, [], [undefined]);\n    const additionalKeys = ReflectOwnKeys(additionalFieldsCopy) as (keyof typeof additionalFields)[];\n    const overriddenKeys = impl[GetSlot(this, CALENDAR_ID)].fieldKeysToIgnore(additionalKeys);\n    const merged = ObjectCreate(null);\n    const fieldsKeys = ReflectOwnKeys(fieldsCopy);\n    ES.uncheckedAssertNarrowedType<string[]>(fieldsKeys, 'Reflect.ownKeys does not respect the type of its input');\n    for (const key of fieldsKeys) {\n      let propValue = undefined;\n      if (ES.Call(ArrayIncludes, overriddenKeys, [key])) propValue = additionalFieldsCopy[key];\n      else propValue = fieldsCopy[key];\n      if (propValue !== undefined) merged[key] = propValue;\n    }\n    ES.CopyDataProperties(merged, additionalFieldsCopy, []);\n    return merged;\n  }\n  dateAdd(\n    dateParam: Params['dateAdd'][0],\n    durationParam: Params['dateAdd'][1],\n    optionsParam: Params['dateAdd'][2] = undefined\n  ): Return['dateAdd'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    const duration = ES.ToTemporalDuration(durationParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { days } = ES.BalanceDuration(\n      GetSlot(duration, DAYS),\n      GetSlot(duration, HOURS),\n      GetSlot(duration, MINUTES),\n      GetSlot(duration, SECONDS),\n      GetSlot(duration, MILLISECONDS),\n      GetSlot(duration, MICROSECONDS),\n      GetSlot(duration, NANOSECONDS),\n      'day'\n    );\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateAdd(\n      date,\n      GetSlot(duration, YEARS),\n      GetSlot(duration, MONTHS),\n      GetSlot(duration, WEEKS),\n      days,\n      overflow,\n      id\n    );\n  }\n  dateUntil(\n    oneParam: Params['dateUntil'][0],\n    twoParam: Params['dateUntil'][1],\n    optionsParam: Params['dateUntil'][2] = undefined\n  ): Return['dateUntil'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n    if (largestUnit === 'auto') largestUnit = 'day';\n    const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n    const Duration = GetIntrinsic('%Temporal.Duration%');\n    return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  }\n  year(dateParam: Params['year'][0]): Return['year'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].year(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  month(dateParam: Params['month'][0]): Return['month'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (ES.IsTemporalMonthDay(date)) throw new TypeError('use monthCode on PlainMonthDay instead');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].month(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthCode(dateParam: Params['monthCode'][0]): Return['monthCode'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthCode(\n      date as Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth\n    );\n  }\n  day(dateParam: Params['day'][0]): Return['day'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].day(date as Temporal.PlainDate | Temporal.PlainMonthDay);\n  }\n  era(dateParam: Params['era'][0]): Return['era'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].era(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  eraYear(dateParam: Params['eraYear'][0]): Return['eraYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].eraYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  dayOfWeek(dateParam: Params['dayOfWeek'][0]): Return['dayOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n  }\n  dayOfYear(dateParam: Params['dayOfYear'][0]): Return['dayOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n  }\n  weekOfYear(dateParam: Params['weekOfYear'][0]): Return['weekOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n  }\n  yearOfWeek(dateParam: Params['yearOfWeek'][0]): Return['yearOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].yearOfWeek(date);\n  }\n  daysInWeek(dateParam: Params['daysInWeek'][0]): Return['daysInWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n  }\n  daysInMonth(dateParam: Params['daysInMonth'][0]): Return['daysInMonth'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  daysInYear(dateParam: Params['daysInYear'][0]): Return['daysInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthsInYear(dateParam: Params['monthsInYear'][0]): Return['monthsInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  inLeapYear(dateParam: Params['inLeapYear'][0]): Return['inLeapYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  toString(): string {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const calendarSlotValue = ES.ToTemporalCalendarSlotValue(item);\n    return ES.ToTemporalCalendarObject(calendarSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.Calendar';\n}\n\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\nDefineIntrinsic('Temporal.Calendar.prototype.dateAdd', Calendar.prototype.dateAdd);\nDefineIntrinsic('Temporal.Calendar.prototype.dateFromFields', Calendar.prototype.dateFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.dateUntil', Calendar.prototype.dateUntil);\nDefineIntrinsic('Temporal.Calendar.prototype.day', Calendar.prototype.day);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfWeek', Calendar.prototype.dayOfWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfYear', Calendar.prototype.dayOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInMonth', Calendar.prototype.daysInMonth);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInWeek', Calendar.prototype.daysInWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInYear', Calendar.prototype.daysInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.era', Calendar.prototype.era);\nDefineIntrinsic('Temporal.Calendar.prototype.eraYear', Calendar.prototype.eraYear);\nDefineIntrinsic('Temporal.Calendar.prototype.fields', Calendar.prototype.fields);\nDefineIntrinsic('Temporal.Calendar.prototype.inLeapYear', Calendar.prototype.inLeapYear);\nDefineIntrinsic('Temporal.Calendar.prototype.mergeFields', Calendar.prototype.mergeFields);\nDefineIntrinsic('Temporal.Calendar.prototype.month', Calendar.prototype.month);\nDefineIntrinsic('Temporal.Calendar.prototype.monthCode', Calendar.prototype.monthCode);\nDefineIntrinsic('Temporal.Calendar.prototype.monthDayFromFields', Calendar.prototype.monthDayFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.monthsInYear', Calendar.prototype.monthsInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.weekOfYear', Calendar.prototype.weekOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.year', Calendar.prototype.year);\nDefineIntrinsic('Temporal.Calendar.prototype.yearMonthFromFields', Calendar.prototype.yearMonthFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.yearOfWeek', Calendar.prototype.yearOfWeek);\n\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n  dateFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month, day } = fields;\n    ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  yearMonthFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month } = fields;\n    ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n    return ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ 1);\n  },\n  monthDayFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n      throw new TypeError('either year or monthCode required with month');\n    }\n    const useYear = fields.monthCode === undefined;\n    const referenceISOYear = 1972;\n    fields = resolveNonLunisolarMonth(fields);\n    let { month, day, year } = fields;\n    ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n    return ES.CreateTemporalMonthDay(month, day, calendarSlotValue, referenceISOYear);\n  },\n  fields(fields) {\n    return fields;\n  },\n  fieldKeysToIgnore(keys) {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      if (key === 'month') {\n        ES.Call(SetPrototypeAdd, result, ['monthCode']);\n      } else if (key === 'monthCode') {\n        ES.Call(SetPrototypeAdd, result, ['month']);\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  },\n  dateAdd(date, years, months, weeks, days, overflow, calendarSlotValue) {\n    let year = GetSlot(date, ISO_YEAR);\n    let month = GetSlot(date, ISO_MONTH);\n    let day = GetSlot(date, ISO_DAY);\n    ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  dateUntil(one, two, largestUnit) {\n    return ES.DifferenceISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY),\n      largestUnit\n    );\n  },\n  year(date) {\n    return GetSlot(date, ISO_YEAR);\n  },\n  era() {\n    return undefined;\n  },\n  eraYear() {\n    return undefined;\n  },\n  month(date) {\n    return GetSlot(date, ISO_MONTH);\n  },\n  monthCode(date) {\n    return buildMonthCode(GetSlot(date, ISO_MONTH));\n  },\n  day(date) {\n    return GetSlot(date, ISO_DAY);\n  },\n  dayOfWeek(date) {\n    return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  dayOfYear(date) {\n    return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  weekOfYear(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).week;\n  },\n  yearOfWeek(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).year;\n  },\n  daysInWeek() {\n    return 7;\n  },\n  daysInMonth(date) {\n    return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n  },\n  daysInYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n  },\n  monthsInYear() {\n    return 12;\n  },\n  inLeapYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR));\n  }\n};\n\n// Note: Built-in calendars other than iso8601 are not part of the Temporal\n// proposal for ECMA-262. These calendars will be standardized as part of\n// ECMA-402. Code below here includes an implementation of these calendars to\n// validate the Temporal API and to get feedback. However, native non-ISO\n// calendar behavior is at least somewhat implementation-defined, so may not\n// match this polyfill's output exactly.\n//\n// Some ES implementations don't include ECMA-402. For this reason, it's helpful\n// to ensure a clean separation between the ISO calendar implementation which is\n// a part of ECMA-262 and the non-ISO calendar implementation which requires\n// ECMA-402.\n//\n// To ensure this separation, the implementation is split. A `CalendarImpl`\n// interface defines the common operations between both ISO and non-ISO\n// calendars.\n\n/**\n * This type is passed through from Calendar#dateFromFields().\n * `monthExtra` is additional information used internally to identify lunisolar leap months.\n */\ntype CalendarDateFields = Params['dateFromFields'][0] & { monthExtra?: string };\n\n/**\n * This is a \"fully populated\" calendar date record. It's only lacking\n * `era`/`eraYear` (which may not be present in all calendars) and `monthExtra`\n * which is only used in some cases.\n */\ntype FullCalendarDate = {\n  era?: string;\n  eraYear?: number;\n  year: number;\n  month: number;\n  monthCode: string;\n  day: number;\n  monthExtra?: string;\n};\n\n// The types below are various subsets of calendar dates\ntype CalendarYMD = { year: number; month: number; day: number };\ntype CalendarYM = { year: number; month: number };\ntype CalendarYearOnly = { year: number };\ntype EraAndEraYear = { era: string; eraYear: number };\n\n/** Record representing YMD of an ISO calendar date */\ntype IsoYMD = { year: number; month: number; day: number };\n\ntype Overflow = NonNullable<Temporal.AssignmentOptions['overflow']>;\n\nfunction monthCodeNumberPart(monthCode: string) {\n  if (!monthCode.startsWith('M')) {\n    throw new RangeError(`Invalid month code: ${monthCode}.  Month codes must start with M.`);\n  }\n  const month = +monthCode.slice(1);\n  if (isNaN(month)) throw new RangeError(`Invalid month code: ${monthCode}`);\n  return month;\n}\n\nfunction buildMonthCode(month: number | string, leap = false) {\n  return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth<T extends { monthCode?: string; month?: number }>(\n  calendarDate: T,\n  overflow: Overflow | undefined = undefined,\n  monthsPerYear = 12\n) {\n  let { month, monthCode } = calendarDate;\n  if (monthCode === undefined) {\n    if (month === undefined) throw new TypeError('Either month or monthCode are required');\n    // The ISO calendar uses the default (undefined) value because it does\n    // constrain/reject after this method returns. Non-ISO calendars, however,\n    // rely on this function to constrain/reject out-of-range `month` values.\n    if (overflow === 'reject') ES.RejectToRange(month, 1, monthsPerYear);\n    if (overflow === 'constrain') month = ES.ConstrainToRange(month, 1, monthsPerYear);\n    monthCode = buildMonthCode(month);\n  } else {\n    const numberPart = monthCodeNumberPart(monthCode);\n    if (month !== undefined && month !== numberPart) {\n      throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n    }\n    if (monthCode !== buildMonthCode(numberPart)) {\n      throw new RangeError(`Invalid month code: ${monthCode}`);\n    }\n    month = numberPart;\n    if (month < 1 || month > monthsPerYear) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n  }\n  return { ...calendarDate, month, monthCode };\n}\n\ntype CachedTypes = Temporal.PlainYearMonth | Temporal.PlainDate | Temporal.PlainMonthDay;\n\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance.  No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n  map = new Map();\n  calls = 0;\n  now: number;\n  hits = 0;\n  misses = 0;\n  constructor(cacheToClone?: OneObjectCache) {\n    this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n    if (cacheToClone !== undefined) {\n      let i = 0;\n      for (const entry of cacheToClone.map.entries()) {\n        if (++i > OneObjectCache.MAX_CACHE_ENTRIES) break;\n        this.map.set(...entry);\n      }\n    }\n  }\n  get(key: string) {\n    const result = this.map.get(key);\n    if (result) {\n      this.hits++;\n      this.report();\n    }\n    this.calls++;\n    return result;\n  }\n  set(key: string, value: unknown) {\n    this.map.set(key, value);\n    this.misses++;\n    this.report();\n  }\n  report() {\n    /*\n    if (this.calls === 0) return;\n    const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n    const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n    console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n    */\n  }\n  setObject(obj: CachedTypes) {\n    if (OneObjectCache.objectMap.get(obj)) throw new RangeError('object already cached');\n    OneObjectCache.objectMap.set(obj, this);\n    this.report();\n  }\n\n  static objectMap = new WeakMap();\n  static MAX_CACHE_ENTRIES = 1000;\n\n  /**\n   * Returns a WeakMap-backed cache that's used to store expensive results\n   * that are associated with a particular Temporal object instance.\n   *\n   * @param obj - object to associate with the cache\n   */\n  static getCacheForObject(obj: CachedTypes) {\n    let cache = OneObjectCache.objectMap.get(obj);\n    if (!cache) {\n      cache = new OneObjectCache();\n      OneObjectCache.objectMap.set(obj, cache);\n    }\n    return cache;\n  }\n}\n\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }: { isoYear: number; isoMonth: number; isoDay: number }) {\n  const yearString = ES.ISOYearString(isoYear);\n  const monthString = ES.ISODateTimePartString(isoMonth);\n  const dayString = ES.ISODateTimePartString(isoDay);\n  return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\n\nfunction simpleDateDiff(one: CalendarYMD, two: CalendarYMD) {\n  return {\n    years: one.year - two.year,\n    months: one.month - two.month,\n    days: one.day - two.day\n  };\n}\n\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nabstract class HelperBase {\n  abstract id: BuiltinCalendarId;\n  abstract monthsInYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): number;\n  abstract maximumMonthLength(calendarDate?: CalendarYM): number;\n  abstract minimumMonthLength(calendarDate?: CalendarYM): number;\n  abstract estimateIsoDate(calendarDate: CalendarYMD): IsoYMD;\n  abstract inLeapYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): boolean;\n  abstract calendarType: 'solar' | 'lunar' | 'lunisolar';\n  reviseIntlEra?<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T;\n  constantEra?: string;\n  checkIcuBugs?(isoDate: IsoYMD): void;\n  private formatter?: globalThis.Intl.DateTimeFormat;\n  getFormatter() {\n    // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n    // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n    // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n    // calendars that are used. Note that the nonIsoHelperBase object is spread\n    // into each each calendar's implementation before any cache is created, so\n    // each calendar gets its own separate cached formatter.\n    if (typeof this.formatter === 'undefined') {\n      this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n        day: 'numeric',\n        month: 'numeric',\n        year: 'numeric',\n        era: 'short',\n        timeZone: 'UTC'\n      });\n    }\n    return this.formatter;\n  }\n  isoToCalendarDate(isoDate: IsoYMD, cache: OneObjectCache): FullCalendarDate {\n    const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n    const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n\n    const dateTimeFormat = this.getFormatter();\n    let parts, isoString;\n    try {\n      isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n      parts = dateTimeFormat.formatToParts(new Date(isoString));\n    } catch (e: unknown) {\n      throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n    }\n    const result: Partial<FullCalendarDate> = {};\n    for (let { type, value } of parts) {\n      if (type === 'year') result.eraYear = +value;\n      // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n      if (type === ('relatedYear' as Intl.DateTimeFormatPartTypes)) result.eraYear = +value;\n      if (type === 'month') {\n        const matches = /^([0-9]*)(.*?)$/.exec(value);\n        if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n          throw new RangeError(`Unexpected month: ${value}`);\n        }\n        // If the month has no numeric part (should only see this for the Hebrew\n        // calendar with newer FF / Chromium versions; see\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n        // placeholder month index of `1` and rely on the derived class to\n        // calculate the correct month index from the month name stored in\n        // `monthExtra`.\n        result.month = matches[1] ? +matches[1] : 1;\n        if (result.month < 1) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'\n          );\n        }\n        if (result.month > 13) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n          );\n        }\n\n        // The ICU formats for the Hebrew calendar no longer support a numeric\n        // month format. So we'll rely on the derived class to interpret it.\n        // `monthExtra` is also used on the Chinese calendar to handle a suffix\n        // \"bis\" indicating a leap month.\n        if (matches[2]) result.monthExtra = matches[2];\n      }\n      if (type === 'day') result.day = +value;\n      if (this.hasEra && type === 'era' && value != null && value !== '') {\n        // The convention for Temporal era values is lowercase, so following\n        // that convention in this prototype. Punctuation is removed, accented\n        // letters are normalized, and spaces are replaced with dashes.\n        // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n        // The call to normalize() and the replacement regex deals with era\n        // names that contain non-ASCII characters like Japanese eras. Also\n        // ignore extra content in parentheses like JPN era date ranges.\n        value = value.split(' (')[0];\n        result.era = value\n          .normalize('NFD')\n          .replace(/[^-0-9 \\p{L}]/gu, '')\n          .replace(' ', '-')\n          .toLowerCase();\n      }\n    }\n    if (result.eraYear === undefined) {\n      // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n      // output of Intl.DateTimeFormat.formatToParts.\n      throw new RangeError(\n        `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n      );\n    }\n    // Translate eras that may be handled differently by Temporal vs. by Intl\n    // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n    if (this.reviseIntlEra) {\n      const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n      result.era = era;\n      result.eraYear = eraYear;\n    }\n    if (this.checkIcuBugs) this.checkIcuBugs(isoDate);\n\n    const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n    if (calendarDate.year === undefined) throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.month === undefined) throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.day === undefined) throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n    cache.set(key, calendarDate);\n    // Also cache the reverse mapping\n    ['constrain', 'reject'].forEach((overflow) => {\n      const keyReverse = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: calendarDate.year,\n        month: calendarDate.month,\n        day: calendarDate.day,\n        overflow,\n        id: this.id\n      });\n      cache.set(keyReverse, isoDate);\n    });\n    return calendarDate;\n  }\n  validateCalendarDate(calendarDate: Partial<FullCalendarDate>): asserts calendarDate is FullCalendarDate {\n    const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n    // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n    // the derived class must deal with it.\n    if (monthExtra !== undefined) throw new RangeError('Unexpected `monthExtra` value');\n    if (year === undefined && eraYear === undefined) throw new TypeError('year or eraYear is required');\n    if (month === undefined && monthCode === undefined) throw new TypeError('month or monthCode is required');\n    if (day === undefined) throw new RangeError('Missing day');\n    if (monthCode !== undefined) {\n      if (typeof monthCode !== 'string') {\n        throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n      }\n      if (!/^M([01]?\\d)(L?)$/.test(monthCode)) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n    }\n    if (this.constantEra) {\n      if (era !== undefined && era !== this.constantEra) {\n        throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n      }\n      if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n        throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n      }\n    }\n    if (this.hasEra) {\n      if ((calendarDate['era'] === undefined) !== (calendarDate['eraYear'] === undefined)) {\n        throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n      }\n    }\n  }\n  /**\n   * Allows derived calendars to add additional fields and/or to make\n   * adjustments e.g. to set the era based on the date or to revise the month\n   * number in lunisolar calendars per\n   * https://github.com/tc39/proposal-temporal/issues/1203.\n   *\n   * The base implementation fills in missing values by assuming the simplest\n   * possible calendar:\n   * - no eras or a constant era defined in `.constantEra`\n   * - non-lunisolar calendar (no leap months)\n   * */\n  adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache: OneObjectCache | undefined = undefined,\n    overflow: Overflow = 'constrain',\n    // This param is only used by derived classes\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    if (this.calendarType === 'lunisolar') throw new RangeError('Override required for lunisolar calendars');\n    let calendarDate = calendarDateParam;\n    this.validateCalendarDate(calendarDate);\n    // For calendars that always use the same era, set it here so that derived\n    // calendars won't need to implement this method simply to set the era.\n    if (this.constantEra) {\n      // year and eraYear always match when there's only one possible era\n      const { year, eraYear } = calendarDate;\n      calendarDate = {\n        ...calendarDate,\n        era: this.constantEra,\n        year: year !== undefined ? year : eraYear,\n        eraYear: eraYear !== undefined ? eraYear : year\n      };\n    }\n\n    const largestMonth = this.monthsInYear(calendarDate as CalendarYearOnly, cache);\n    let { month, monthCode } = calendarDate;\n\n    ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n    return { ...(calendarDate as typeof calendarDate & CalendarYMD), month, monthCode };\n  }\n  regulateMonthDayNaive(calendarDate: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): FullCalendarDate {\n    const largestMonth = this.monthsInYear(calendarDate, cache);\n    let { month, day } = calendarDate;\n    if (overflow === 'reject') {\n      ES.RejectToRange(month, 1, largestMonth);\n      ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n    } else {\n      month = ES.ConstrainToRange(month, 1, largestMonth);\n      day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n    }\n    return { ...calendarDate, month, day };\n  }\n  calendarToIsoDate(dateParam: CalendarDateFields, overflow: Overflow = 'constrain', cache: OneObjectCache): IsoYMD {\n    const originalDate = dateParam as Partial<FullCalendarDate>;\n    // First, normalize the calendar date to ensure that (year, month, day)\n    // are all present, converting monthCode and eraYear if needed.\n    let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n\n    // Fix obviously out-of-bounds values. Values that are valid generally, but\n    // not in this particular year, may not be caught here for some calendars.\n    // If so, these will be handled lower below.\n    date = this.regulateMonthDayNaive(date, overflow, cache);\n\n    const { year, month, day } = date;\n    const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n    let cached = cache.get(key);\n    if (cached) return cached;\n    // If YMD are present in the input but the input has been constrained\n    // already, then cache both the original value and the constrained value.\n    let keyOriginal;\n    if (\n      originalDate.year !== undefined &&\n      originalDate.month !== undefined &&\n      originalDate.day !== undefined &&\n      (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)\n    ) {\n      keyOriginal = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: originalDate.year,\n        month: originalDate.month,\n        day: originalDate.day,\n        overflow,\n        id: this.id\n      });\n      cached = cache.get(keyOriginal);\n      if (cached) return cached;\n    }\n\n    // First, try to roughly guess the result\n    let isoEstimate = this.estimateIsoDate({ year, month, day });\n    const calculateSameMonthResult = (diffDays: number) => {\n      // If the estimate is in the same year & month as the target, then we can\n      // calculate the result exactly and short-circuit any additional logic.\n      // This optimization assumes that months are continuous. It would break if\n      // a calendar skipped days, like the Julian->Gregorian switchover. But\n      // current ICU calendars only skip days (japanese/roc/buddhist) because of\n      // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n      // that's currently worked around by a custom calendarToIsoDate\n      // implementation in those calendars. So this optimization should be safe\n      // for all ICU calendars.\n      let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n      if (date.day > this.minimumMonthLength(date)) {\n        // There's a chance that the calendar date is out of range. Throw or\n        // constrain if so.\n        let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n          if (overflow === 'reject') {\n            throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n          }\n          // Back up a day at a time until we're not hanging over the month end\n          testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n          testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        }\n      }\n      return testIsoEstimate;\n    };\n    let sign = 0;\n    let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n    let diff = simpleDateDiff(date, roundtripEstimate);\n    if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n      const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n      isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      diff = simpleDateDiff(date, roundtripEstimate);\n      if (diff.years === 0 && diff.months === 0) {\n        isoEstimate = calculateSameMonthResult(diff.days);\n      } else {\n        sign = this.compareCalendarDates(date, roundtripEstimate);\n      }\n    }\n    // If the initial guess is not in the same month, then then bisect the\n    // distance to the target, starting with 8 days per step.\n    let increment = 8;\n    while (sign) {\n      isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n      const oldRoundtripEstimate = roundtripEstimate;\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      const oldSign = sign;\n      sign = this.compareCalendarDates(date, roundtripEstimate);\n      if (sign) {\n        diff = simpleDateDiff(date, roundtripEstimate);\n        if (diff.years === 0 && diff.months === 0) {\n          isoEstimate = calculateSameMonthResult(diff.days);\n          // Signal the loop condition that there's a match.\n          sign = 0;\n        } else if (oldSign && sign !== oldSign) {\n          if (increment > 1) {\n            // If the estimate overshot the target, try again with a smaller increment\n            // in the reverse direction.\n            increment /= 2;\n          } else {\n            // Increment is 1, and neither the previous estimate nor the new\n            // estimate is correct. The only way that can happen is if the\n            // original date was an invalid value that will be constrained or\n            // rejected here.\n            if (overflow === 'reject') {\n              throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n            } else {\n              // To constrain, pick the earliest value\n              const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n              // If current value is larger, then back up to the previous value.\n              if (order > 0) isoEstimate = this.addDaysIso(isoEstimate, -1);\n              sign = 0;\n            }\n          }\n        }\n      }\n    }\n    cache.set(key, isoEstimate);\n    if (keyOriginal) cache.set(keyOriginal, isoEstimate);\n    if (\n      date.year === undefined ||\n      date.month === undefined ||\n      date.day === undefined ||\n      date.monthCode === undefined ||\n      (this.hasEra && (date.era === undefined || date.eraYear === undefined))\n    ) {\n      throw new RangeError('Unexpected missing property');\n    }\n    return isoEstimate;\n  }\n  temporalToCalendarDate(\n    date: Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n    const result = this.isoToCalendarDate(isoDate, cache);\n    return result;\n  }\n  compareCalendarDates(date1Param: Partial<CalendarYMD>, date2Param: Partial<CalendarYMD>): 0 | 1 | -1 {\n    // `date1` and `date2` are already records. The calls below simply validate\n    // that all three required fields are present.\n    const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    if (date1.year !== date2.year) return ES.ComparisonResult(date1.year - date2.year);\n    if (date1.month !== date2.month) return ES.ComparisonResult(date1.month - date2.month);\n    if (date1.day !== date2.day) return ES.ComparisonResult(date1.day - date2.day);\n    return 0;\n  }\n  /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n  regulateDate(calendarDate: CalendarYMD, overflow: Overflow = 'constrain', cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n    return this.isoToCalendarDate(isoDate, cache);\n  }\n  addDaysIso(isoDate: IsoYMD, days: number): IsoYMD {\n    const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n    return added;\n  }\n  addDaysCalendar(calendarDate: CalendarYMD, days: number, cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIso = this.addDaysIso(isoDate, days);\n    const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n    return addedCalendar;\n  }\n  addMonthsCalendar(\n    calendarDateParam: CalendarYMD,\n    months: number,\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): CalendarYMD {\n    let calendarDate = calendarDateParam;\n    const { day } = calendarDate;\n    for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n      const { month } = calendarDate;\n      const oldCalendarDate = calendarDate;\n      const days =\n        months < 0\n          ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n          : this.daysInMonth(calendarDate, cache);\n      const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n      let addedIso = this.addDaysIso(isoDate, days);\n      calendarDate = this.isoToCalendarDate(addedIso, cache);\n\n      // Normally, we can advance one month by adding the number of days in the\n      // current month. However, if we're at the end of the current month and\n      // the next month has fewer days, then we rolled over to the after-next\n      // month. Below we detect this condition and back up until we're back in\n      // the desired month.\n      if (months > 0) {\n        const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n        while (calendarDate.month - 1 !== month % monthsInOldYear) {\n          addedIso = this.addDaysIso(addedIso, -1);\n          calendarDate = this.isoToCalendarDate(addedIso, cache);\n        }\n      }\n\n      if (calendarDate.day !== day) {\n        // try to retain the original day-of-month, if possible\n        calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n      }\n    }\n    if (overflow === 'reject' && calendarDate.day !== day) {\n      throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n    }\n    return calendarDate;\n  }\n  addCalendar(\n    calendarDate: CalendarYMD & { monthCode: string },\n    { years = 0, months = 0, weeks = 0, days = 0 },\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const { year, day, monthCode } = calendarDate;\n    const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n    const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n    const initialDays = days + weeks * 7;\n    const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n    return addedDays;\n  }\n  untilCalendar(\n    calendarOne: FullCalendarDate,\n    calendarTwo: FullCalendarDate,\n    largestUnit: Temporal.DateUnit,\n    cache: OneObjectCache\n  ): { years: number; months: number; weeks: number; days: number } {\n    let days = 0;\n    let weeks = 0;\n    let months = 0;\n    let years = 0;\n    switch (largestUnit) {\n      case 'day':\n        days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        break;\n      case 'week': {\n        const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        days = totalDays % 7;\n        weeks = (totalDays - days) / 7;\n        break;\n      }\n      case 'month':\n      case 'year': {\n        const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n        if (!sign) {\n          return { years: 0, months: 0, weeks: 0, days: 0 };\n        }\n        const diffYears = calendarTwo.year - calendarOne.year;\n        const diffDays = calendarTwo.day - calendarOne.day;\n        if (largestUnit === 'year' && diffYears) {\n          let diffInYearSign = 0;\n          if (calendarTwo.monthCode > calendarOne.monthCode) diffInYearSign = 1;\n          if (calendarTwo.monthCode < calendarOne.monthCode) diffInYearSign = -1;\n          if (!diffInYearSign) diffInYearSign = Math.sign(diffDays);\n          const isOneFurtherInYear = diffInYearSign * sign < 0;\n          years = isOneFurtherInYear ? diffYears - sign : diffYears;\n        }\n        const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n        // Now we have less than one year remaining. Add one month at a time\n        // until we go over the target, then back up one month and calculate\n        // remaining days and weeks.\n        let current;\n        let next: CalendarYMD = yearsAdded;\n        do {\n          months += sign;\n          current = next;\n          next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n          if (next.day !== calendarOne.day) {\n            // In case the day was constrained down, try to un-constrain it\n            next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n          }\n        } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n        months -= sign; // correct for loop above which overshoots by 1\n        const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n        days = remainingDays;\n        break;\n      }\n    }\n    return { years, months, weeks, days };\n  }\n  daysInMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    // Add enough days to roll over to the next month. One we're in the next\n    // month, we can calculate the length of the current month. NOTE: This\n    // algorithm assumes that months are continuous. It would break if a\n    // calendar skipped days, like the Julian->Gregorian switchover. But current\n    // ICU calendars only skip days (japanese/roc/buddhist) because of a bug\n    // (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158) that's\n    // currently worked around by a custom calendarToIsoDate implementation in\n    // those calendars. So this code should be safe for all ICU calendars.\n    const { day } = calendarDate;\n    const max = this.maximumMonthLength(calendarDate);\n    const min = this.minimumMonthLength(calendarDate);\n    // easiest case: we already know the month length if min and max are the same.\n    if (min === max) return min;\n\n    // Add enough days to get into the next month, without skipping it\n    const increment = day <= max - min ? max : min;\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIsoDate = this.addDaysIso(isoDate, increment);\n    const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n\n    // Now back up to the last day of the original month\n    const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n    const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n    return endOfMonthCalendar.day;\n  }\n  daysInPreviousMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    const { day, month, year } = calendarDate;\n\n    // Check to see if we already know the month length, and return it if so\n    const previousMonthYear = month > 1 ? year : year - 1;\n    let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n    const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n    previousMonthDate = { ...previousMonthDate, month: previousMonth };\n    const min = this.minimumMonthLength(previousMonthDate);\n    const max = this.maximumMonthLength(previousMonthDate);\n    if (min === max) return max;\n\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n    const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n    return lastDayOfPreviousMonthCalendar.day;\n  }\n  startOfCalendarYear(calendarDate: CalendarYearOnly): CalendarYMD & { monthCode: string } {\n    return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n  }\n  startOfCalendarMonth(calendarDate: CalendarYM): CalendarYMD {\n    return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n  }\n  calendarDaysUntil(calendarOne: CalendarYMD, calendarTwo: CalendarYMD, cache: OneObjectCache): number {\n    const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n    const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n    return this.isoDaysUntil(oneIso, twoIso);\n  }\n  isoDaysUntil(oneIso: IsoYMD, twoIso: IsoYMD): number {\n    const duration = ES.DifferenceISODate(\n      oneIso.year,\n      oneIso.month,\n      oneIso.day,\n      twoIso.year,\n      twoIso.month,\n      twoIso.day,\n      'day'\n    );\n    return duration.days;\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  hasEra = true;\n  // See https://github.com/tc39/proposal-temporal/issues/1784\n  erasBeginMidYear = false;\n  monthDayFromFields(fields: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): IsoYMD {\n    let { monthCode, day } = fields;\n    if (monthCode === undefined) {\n      let { year, era, eraYear } = fields;\n      if (year === undefined && (era === undefined || eraYear === undefined)) {\n        throw new TypeError('when `monthCode` is omitted, `year` (or `era` and `eraYear`) and `month` are required');\n      }\n      // Apply overflow behaviour to year/month/day, to get correct monthCode/day\n      ({ monthCode, day } = this.isoToCalendarDate(this.calendarToIsoDate(fields, overflow, cache), cache));\n    }\n\n    let isoYear, isoMonth, isoDay;\n    let closestCalendar, closestIso;\n    // Look backwards starting from one of the calendar years spanning ISO year\n    // 1972, up to 100 calendar years prior, to find a year that has this month\n    // and day. Normal months and days will match immediately, but for leap days\n    // and leap months we may have to look for a while.\n    const startDateIso = { year: 1972, month: 12, day: 31 };\n    const calendarOfStartDateIso = this.isoToCalendarDate(startDateIso, cache);\n    // Note: relies on lexicographical ordering of monthCodes\n    const calendarYear =\n      calendarOfStartDateIso.monthCode > monthCode ||\n      (calendarOfStartDateIso.monthCode === monthCode && calendarOfStartDateIso.day >= day)\n        ? calendarOfStartDateIso.year\n        : calendarOfStartDateIso.year - 1;\n    for (let i = 0; i < 100; i++) {\n      const testCalendarDate: FullCalendarDate = this.adjustCalendarDate(\n        { day, monthCode, year: calendarYear - i },\n        cache\n      );\n      const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n      const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n      ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n      if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n        return { month: isoMonth, day: isoDay, year: isoYear };\n      } else if (overflow === 'constrain') {\n        // non-ISO constrain algorithm tries to find the closest date in a matching month\n        if (\n          closestCalendar === undefined ||\n          (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n            roundTripCalendarDate.day > closestCalendar.day)\n        ) {\n          closestCalendar = roundTripCalendarDate;\n          closestIso = isoDate;\n        }\n      }\n    }\n    if (overflow === 'constrain' && closestIso !== undefined) return closestIso;\n    throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n  }\n}\n\ninterface HebrewMonthInfo {\n  [m: string]: (\n    | {\n        leap: undefined;\n        regular: number;\n      }\n    | {\n        leap: number;\n        regular: undefined;\n      }\n    | {\n        leap: number;\n        regular: number;\n      }\n  ) & {\n    monthCode: string;\n    days:\n      | number\n      | {\n          min: number;\n          max: number;\n        };\n  };\n}\n\nclass HebrewHelper extends HelperBase {\n  id = 'hebrew' as const;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    const { year } = calendarDate;\n    // FYI: In addition to adding a month in leap years, the Hebrew calendar\n    // also has per-year changes to the number of days of Heshvan and Kislev.\n    // Given that these can be calculated by counting the number of days in\n    // those months, I assume that these DO NOT need to be exposed as\n    // Hebrew-only prototype fields or methods.\n    return (7 * year + 1) % 19 < 7;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly) {\n    return this.inLeapYear(calendarDate) ? 13 : 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'min');\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'max');\n  }\n  minMaxMonthLength(calendarDate: CalendarYM, minOrMax: 'min' | 'max') {\n    const { month, year } = calendarDate;\n    const monthCode = this.getMonthCode(year, month);\n    const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n    if (monthInfo === undefined) throw new RangeError(`unmatched Hebrew month: ${month}`);\n    const daysInMonth = monthInfo[1].days;\n    return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n  }\n  /** Take a guess at what ISO date a particular calendar date corresponds to */\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = calendarDate;\n    return { year: year - 3760, month: 1, day: 1 };\n  }\n  months: HebrewMonthInfo = {\n    Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n    Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n    Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n    Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n    Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n    Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n    'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n    'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n    Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n    Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n    Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n    Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n    Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n    Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n  };\n  getMonthCode(year: number, month: number) {\n    if (this.inLeapYear({ year })) {\n      return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n    } else {\n      return buildMonthCode(month);\n    }\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    // The incoming type is actually CalendarDate (same as args to\n    // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n    // reassignments below, so as an alternative to 10+ type casts, we'll lie\n    // here and claim that the type has `day` and `year` filled in already.\n    let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate as Omit<\n      typeof calendarDate,\n      'year' | 'day'\n    > & { year: number; day: number };\n    if (year === undefined && eraYear !== undefined) year = eraYear;\n    if (eraYear === undefined && year !== undefined) eraYear = year;\n    if (fromLegacyDate) {\n      // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n      // output returns the numeric equivalent of `month` as a string, meaning\n      // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n      // means Adar. In this case, `month` will already be correct and no action\n      // is needed. However, in Node 14 and later formatToParts returns the name\n      // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n      // correct `month` using the string name as a key.\n      if (monthExtra) {\n        const monthInfo = this.months[monthExtra];\n        if (!monthInfo) throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n        month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n      }\n      // Because we're getting data from legacy Date, then `month` will always be present\n      monthCode = this.getMonthCode(year, month as number);\n      const result = { year, month: month as number, day, era: undefined as string | undefined, eraYear, monthCode };\n      return result;\n    } else {\n      // When called without input coming from legacy Date output, simply ensure\n      // that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (month === undefined) {\n        if ((monthCode as string).endsWith('L')) {\n          if (monthCode !== 'M05L') {\n            throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n          }\n          month = 6;\n          if (!this.inLeapYear({ year })) {\n            if (overflow === 'reject') {\n              throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n            } else {\n              // constrain to same day of next month (Adar)\n              month = 6;\n              monthCode = 'M06';\n            }\n          }\n        } else {\n          month = monthCodeNumberPart(monthCode as string);\n          // if leap month is before this one, the month index is one more than the month code\n          if (this.inLeapYear({ year }) && month >= 6) month++;\n          const largestMonth = this.monthsInYear({ year });\n          if (month < 1 || month > largestMonth) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n        }\n      } else {\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n          ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n        } else {\n          month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n        }\n        if (monthCode === undefined) {\n          monthCode = this.getMonthCode(year, month);\n        } else {\n          const calculatedMonthCode = this.getMonthCode(year, month);\n          if (calculatedMonthCode !== monthCode) {\n            throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n          }\n        }\n      }\n      return { ...calendarDate, day, month, monthCode: monthCode as string, year, eraYear };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nabstract class IslamicBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // In leap years, the 12th month has 30 days. In non-leap years: 29.\n    const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n    return days === 30;\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n  DAYS_PER_ISO_YEAR = 365.2425;\n  override constantEra = 'ah';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n  }\n}\n\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n  id = 'islamic' as const;\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n  id = 'islamic-umalqura' as const;\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n  id = 'islamic-tbla' as const;\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n  id = 'islamic-civil' as const;\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n  id = 'islamic-rgsa' as const;\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n  id = 'islamicc' as const;\n}\n\nclass PersianHelper extends HelperBase {\n  id = 'persian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // Same logic (count days in the last month) for Persian as for Islamic,\n    // even though Persian is solar and Islamic is lunar.\n    return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 29;\n    return month <= 6 ? 31 : 30;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 30;\n    return month <= 6 ? 31 : 30;\n  }\n  override constantEra = 'ap';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: year + 621, month: 1, day: 1 };\n  }\n}\n\ninterface IndianMonthInfo {\n  [month: number]: {\n    length: number;\n    month: number;\n    day: number;\n    leap?: {\n      length: number;\n      month: number;\n      day: number;\n    };\n    nextYear?: true | undefined;\n  };\n}\n\nclass IndianHelper extends HelperBase {\n  id = 'indian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n    // Years are counted in the Saka era, which starts its year 0 in the year 78\n    // of the Common Era. To determine leap years, add 78 to the Saka year – if\n    // the result is a leap year in the Gregorian calendar, then the Saka year\n    // is a leap year as well.\n    return isGregorianLeapYear(calendarDate.year + 78);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  override constantEra = 'saka';\n  // Indian months always start at the same well-known Gregorian month and\n  // day. So this conversion is easy and fast. See\n  // https://en.wikipedia.org/wiki/Indian_national_calendar\n  months: IndianMonthInfo = {\n    1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n    2: { length: 31, month: 4, day: 21 },\n    3: { length: 31, month: 5, day: 22 },\n    4: { length: 31, month: 6, day: 22 },\n    5: { length: 31, month: 7, day: 23 },\n    6: { length: 31, month: 8, day: 23 },\n    7: { length: 30, month: 9, day: 23 },\n    8: { length: 30, month: 10, day: 23 },\n    9: { length: 30, month: 11, day: 22 },\n    10: { length: 30, month: 12, day: 22 },\n    11: { length: 30, month: 1, nextYear: true, day: 21 },\n    12: { length: 30, month: 2, nextYear: true, day: 20 }\n  };\n  getMonthInfo(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    let monthInfo = this.months[month];\n    if (monthInfo === undefined) throw new RangeError(`Invalid month: ${month}`);\n    if (this.inLeapYear(calendarDate) && monthInfo.leap) monthInfo = monthInfo.leap;\n    return monthInfo;\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n    // calendar fast!\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const monthInfo = this.getMonthInfo(calendarDate);\n    const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n    const isoMonth = monthInfo.month;\n    const isoDay = monthInfo.day;\n    const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n    return isoDate;\n  }\n  // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n  // calendar output to fail for all dates before 0001-01-01 ISO.  For example,\n  // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n  // expected.\n  vulnerableToBceBug =\n    new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.vulnerableToBceBug && isoDate.year < 1) {\n      throw new RangeError(\n        `calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n          ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n      );\n    }\n  }\n}\n\n/**\n * Era metadata defined for each calendar.\n * TODO: instead of optional properties, this should really have rules\n * encoded in the type, e.g. isoEpoch is required unless reverseOf is present.\n *  */\ninterface InputEra {\n  /** name of the era */\n  name: string;\n\n  /**\n   * Signed calendar year where this era begins.Will be\n   * 1 (or 0 for zero-based eras) for the anchor era assuming that `year`\n   * numbering starts at the beginning of the anchor era, which is true\n   * for all ICU calendars except Japanese. If an era starts mid-year\n   * then a calendar month and day are included. Otherwise\n   * `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch?: CalendarYearOnly | CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch?: { year: number; month: number; day: number };\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: string;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n/**\n * Transformation of the `InputEra` type with all fields filled in by\n * `adjustEras()`\n * */\ninterface Era {\n  /** name of the era */\n  name: string;\n\n  /**\n   * alternate name of the era used in old versions of ICU data\n   * format is `era{n}` where n is the zero-based index of the era\n   * with the oldest era being 0.\n   * */\n  genericName: string;\n\n  /**\n   * Signed calendar year where this era begins. Will be 1 (or 0 for zero-based\n   * eras) for the anchor era assuming that `year` numbering starts at the\n   * beginning of the anchor era, which is true for all ICU calendars except\n   * Japanese. For input, the month and day are optional. If an era starts\n   * mid-year then a calendar month and day are included.\n   * Otherwise `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch: CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch: IsoYMD;\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: Era;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam: InputEra[]): { eras: Era[]; anchorEra: Era } {\n  let eras: (InputEra | Era)[] = erasParam;\n  if (eras.length === 0) {\n    throw new RangeError('Invalid era data: eras are required');\n  }\n  if (eras.length === 1 && eras[0].reverseOf) {\n    throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n  }\n  if (eras.length === 1 && !eras[0].name) {\n    throw new RangeError('Invalid era data: at least one named era is required');\n  }\n  if (eras.filter((e) => e.reverseOf != null).length > 1) {\n    throw new RangeError('Invalid era data: only one era can count years backwards');\n  }\n\n  // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n  // eras can never be anchors. The era without an `anchorEpoch` property is the\n  // anchor.\n  let anchorEra: Era | InputEra | undefined;\n  eras.forEach((e) => {\n    if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n      if (anchorEra) throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n      anchorEra = e;\n      e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n    } else if (!e.name) {\n      throw new RangeError('If era name is blank, it must be the anchor era');\n    }\n  });\n\n  // If the era name is undefined, then it's an anchor that doesn't interact\n  // with eras at all. For example, Japanese `year` is always the same as ISO\n  // `year`.  So this \"era\" is the anchor era but isn't used for era matching.\n  // Strip it from the list that's returned.\n  eras = eras.filter((e) => e.name);\n\n  eras.forEach((e) => {\n    // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n    // Replace the string-valued \"reverseOf\" property with the actual era object\n    // that's reversed.\n    const { reverseOf } = e;\n    if (reverseOf) {\n      const reversedEra = eras.find((era) => era.name === reverseOf);\n      if (reversedEra === undefined) throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n      e.reverseOf = reversedEra as Era;\n      e.anchorEpoch = reversedEra.anchorEpoch;\n      e.isoEpoch = reversedEra.isoEpoch;\n    }\n    type YMD = {\n      year: number;\n      month: number;\n      day: number;\n    };\n    if ((e.anchorEpoch as YMD).month === undefined) (e.anchorEpoch as YMD).month = 1;\n    if ((e.anchorEpoch as YMD).day === undefined) (e.anchorEpoch as YMD).day = 1;\n  });\n\n  // Ensure that the latest epoch is first in the array. This lets us try to\n  // match eras in index order, with the last era getting the remaining older\n  // years. Any reverse-signed era must be at the end.\n  ArraySort.call(eras, (e1, e2) => {\n    if (e1.reverseOf) return 1;\n    if (e2.reverseOf) return -1;\n    if (!e1.isoEpoch || !e2.isoEpoch) throw new RangeError('Invalid era data: missing ISO epoch');\n    return e2.isoEpoch.year - e1.isoEpoch.year;\n  });\n\n  // If there's a reversed era, then the one before it must be the era that's\n  // being reversed.\n  const lastEraReversed = eras[eras.length - 1].reverseOf;\n  if (lastEraReversed) {\n    if (lastEraReversed !== eras[eras.length - 2]) throw new RangeError('Invalid era data: invalid reverse-sign era');\n  }\n\n  // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n  // zero-based index, with the oldest era being zero. This format is used by\n  // older versions of ICU data.\n  eras.forEach((e, i) => {\n    (e as Era).genericName = `era${eras.length - 1 - i}`;\n  });\n\n  return { eras: eras as Era[], anchorEra: (anchorEra || eras[0]) as Era };\n}\n\nfunction isGregorianLeapYear(year: number) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n/** Base for all Gregorian-like calendars. */\nabstract class GregorianBaseHelper extends HelperBase {\n  id: BuiltinCalendarId;\n  eras: Era[];\n  anchorEra: Era;\n\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super();\n    this.id = id;\n    const { eras, anchorEra } = adjustEras(originalEras);\n    this.anchorEra = anchorEra;\n    this.eras = eras;\n  }\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // Calendars that don't override this method use the same months and leap\n    // years as Gregorian. Once we know the ISO year corresponding to the\n    // calendar year, we'll know if it's a leap year or not.\n    const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n    return isGregorianLeapYear(year);\n  }\n  monthsInYear(/* calendarDate */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM): number {\n    const { month } = calendarDate;\n    if (month === 2) return this.inLeapYear(calendarDate) ? 29 : 28;\n    return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n  }\n  maximumMonthLength(calendarDate: CalendarYM): number {\n    return this.minimumMonthLength(calendarDate);\n  }\n  /** Fill in missing parts of the (year, era, eraYear) tuple */\n  completeEraYear<T extends Partial<FullCalendarDate>>(\n    calendarDate: T\n  ): T & { year: number; eraYear: number; era: string } {\n    const checkField = (name: keyof FullCalendarDate, value: string | number | undefined) => {\n      const currentValue = calendarDate[name];\n      if (currentValue != null && currentValue != value) {\n        throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n      }\n    };\n    const eraFromYear = (year: number) => {\n      let eraYear;\n      const adjustedCalendarDate = { ...calendarDate, year };\n      const matchingEra = this.eras.find((e, i) => {\n        if (i === this.eras.length - 1) {\n          if (e.reverseOf) {\n            // This is a reverse-sign era (like BCE) which must be the oldest\n            // era. Count years backwards.\n            if (year > 0) throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n            eraYear = e.anchorEpoch.year - year;\n            return true;\n          }\n          // last era always gets all \"leftover\" (older than epoch) years,\n          // so no need for a comparison like below.\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n        if (comparison >= 0) {\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        return false;\n      });\n      if (!matchingEra) throw new RangeError(`Year ${year} was not matched by any era`);\n      return { eraYear: eraYear as unknown as number, era: matchingEra.name };\n    };\n\n    let { year, eraYear, era } = calendarDate;\n    if (year != null) {\n      ({ eraYear, era } = eraFromYear(year));\n      checkField('era', era);\n      checkField('eraYear', eraYear);\n    } else if (eraYear != null) {\n      const matchingEra =\n        era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n      if (!matchingEra) throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n      if (eraYear < 1 && matchingEra.reverseOf) {\n        throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n      }\n      if (matchingEra.reverseOf) {\n        year = matchingEra.anchorEpoch.year - eraYear;\n      } else {\n        year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n      }\n      checkField('year', year);\n      // We'll accept dates where the month/day is earlier than the start of\n      // the era or after its end as long as it's in the same year. If that\n      // happens, we'll adjust the era/eraYear pair to be the correct era for\n      // the `year`.\n      ({ eraYear, era } = eraFromYear(year));\n    } else {\n      throw new RangeError('Either `year` or `eraYear` and `era` are required');\n    }\n    return { ...calendarDate, year, eraYear, era };\n  }\n  override adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain'\n  ): FullCalendarDate {\n    let calendarDate = calendarDateParam;\n    // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n    const { month, monthCode } = calendarDate;\n    if (month === undefined) calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode as string) };\n    this.validateCalendarDate(calendarDate);\n    calendarDate = this.completeEraYear(calendarDate);\n    return super.adjustCalendarDate(calendarDate, cache, overflow);\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const { year, month, day } = calendarDate;\n    const { anchorEra } = this;\n    const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n    return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n  }\n}\n\n/**\n * Some calendars are identical to Gregorian except era and year. For these\n * calendars, we can avoid using Intl.DateTimeFormat and just calculate the\n * year, era, and eraYear. This is faster (because Intl.DateTimeFormat is slow\n * and uses a huge amount of RAM), and it avoids ICU bugs like\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n */\nabstract class SameMonthDayAsGregorianBaseHelper extends GregorianBaseHelper {\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super(id, originalEras);\n  }\n  override isoToCalendarDate(isoDate: IsoYMD): FullCalendarDate {\n    // Month and day are same as ISO, so bypass Intl.DateTimeFormat and\n    // calculate the year, era, and eraYear here.\n    const { year: isoYear, month, day } = isoDate;\n    const monthCode = buildMonthCode(month);\n    const year = isoYear - this.anchorEra.isoEpoch.year + 1;\n    return this.completeEraYear({ year, month, monthCode, day });\n  }\n}\nabstract class OrthodoxBaseHelper extends GregorianBaseHelper {\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super(id, originalEras);\n  }\n  override inLeapYear(calendarDate: CalendarYearOnly) {\n    // Leap years happen one year before the Julian leap year. Note that this\n    // calendar is based on the Julian calendar which has a leap year every 4\n    // years, unlike the Gregorian calendar which doesn't have leap years on\n    // years divisible by 100 except years divisible by 400.\n    //\n    // Note that we're assuming that leap years in before-epoch times match\n    // how leap years are defined now. This is probably not accurate but I'm\n    // not sure how better to do it.\n    const { year } = calendarDate;\n    return (year + 1) % 4 === 0;\n  }\n  override monthsInYear(/* calendarDate */) {\n    return 13;\n  }\n  override minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n    if (month === 13) return this.inLeapYear(calendarDate) ? 6 : 5;\n    return 30;\n  }\n  override maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minimumMonthLength(calendarDate);\n  }\n}\n\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n//   two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n//   zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n  }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('coptic', [\n      { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n      { name: 'era0', reverseOf: 'era1' }\n    ]);\n  }\n}\n\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethiopic', [\n      { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n      { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n    ]);\n  }\n}\n\nclass RocHelper extends SameMonthDayAsGregorianBaseHelper {\n  constructor() {\n    super('roc', [\n      { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n      { name: 'before-roc', reverseOf: 'minguo' }\n    ]);\n  }\n}\n\nclass BuddhistHelper extends SameMonthDayAsGregorianBaseHelper {\n  constructor() {\n    super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n  }\n}\n\nclass GregoryHelper extends SameMonthDayAsGregorianBaseHelper {\n  constructor() {\n    super('gregory', [\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T /*, isoDate: IsoDate*/): T {\n    let { era, eraYear } = calendarDate;\n    // Firefox 96 introduced a bug where the `'short'` format of the era\n    // option mistakenly returns the one-letter (narrow) format instead. The\n    // code below handles either the correct or Firefox-buggy format. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n    if (era === 'bc' || era === 'b') era = 'bce';\n    if (era === 'ad' || era === 'a') era = 'ce';\n    return { era, eraYear } as T;\n  }\n}\n\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n//   challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n//   dates are modified, leading to considerable churn which is not good for\n//   Temporal use.\n//  - The earliest era (in 645 CE) may not end up being the earliest depending\n//    on future historical scholarship\n//  - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n//    that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends SameMonthDayAsGregorianBaseHelper {\n  constructor() {\n    super('japanese', [\n      // The Japanese calendar `year` is just the ISO year, because (unlike other\n      // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n      { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n      { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n      { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n      { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n      { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n\n  override erasBeginMidYear = true;\n\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T {\n    const { era, eraYear } = calendarDate;\n    const { year: isoYear } = isoDate;\n    if (this.eras.find((e) => e.name === era)) return { era, eraYear } as T;\n    return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }) as T;\n  }\n}\n\ninterface ChineseMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth: number };\n}\ninterface ChineseDraftMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth?: number };\n}\n\nabstract class ChineseBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    const months = this.getMonthList(calendarDate.year, cache);\n    return ObjectEntries(months).length === 13;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  getMonthList(calendarYear: number, cache: OneObjectCache): ChineseMonthInfo {\n    if (calendarYear === undefined) {\n      throw new TypeError('Missing year');\n    }\n    const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n    const dateTimeFormat = this.getFormatter();\n    const getCalendarDate = (isoYear: number, daysPastFeb1: number) => {\n      const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n      const legacyDate = new Date(isoStringFeb1);\n      // Now add the requested number of days, which may wrap to the next month.\n      legacyDate.setUTCDate(daysPastFeb1 + 1);\n      const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n      const calendarMonthString = (newYearGuess.find((tv) => tv.type === 'month') as Intl.DateTimeFormatPart).value;\n      const calendarDay = +(newYearGuess.find((tv) => tv.type === 'day') as Intl.DateTimeFormatPart).value;\n      let calendarYearToVerify: globalThis.Intl.DateTimeFormatPart | number | undefined = newYearGuess.find(\n        (tv) => (tv.type as string) === 'relatedYear'\n      );\n      if (calendarYearToVerify !== undefined) {\n        calendarYearToVerify = +calendarYearToVerify.value;\n      } else {\n        // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n        // output of Intl.DateTimeFormat.formatToParts.\n        throw new RangeError(\n          `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n        );\n      }\n      return { calendarMonthString, calendarDay, calendarYearToVerify };\n    };\n\n    // First, find a date close to Chinese New Year. Feb 17 will either be in\n    // the first month or near the end of the last month of the previous year.\n    let isoDaysDelta = 17;\n    let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n\n    // If we didn't guess the first month correctly, add (almost in some months)\n    // a lunar month\n    if (calendarMonthString !== '1') {\n      isoDaysDelta += 29;\n      ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n    }\n\n    // Now back up to near the start of the first month, but not too near that\n    // off-by-one issues matter.\n    isoDaysDelta -= calendarDay - 5;\n    const result = {} as ChineseDraftMonthInfo;\n    let monthIndex = 1;\n    let oldCalendarDay: number | undefined;\n    let oldMonthString: string | undefined;\n    let done = false;\n    do {\n      ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n      if (oldCalendarDay) {\n        result[oldMonthString as string].daysInMonth = oldCalendarDay + 30 - calendarDay;\n      }\n      if (calendarYearToVerify !== calendarYear) {\n        done = true;\n      } else {\n        result[calendarMonthString] = { monthIndex: monthIndex++ };\n        // Move to the next month. Because months are sometimes 29 days, the day of the\n        // calendar month will move forward slowly but not enough to flip over to a new\n        // month before the loop ends at 12-13 months.\n        isoDaysDelta += 30;\n      }\n      oldCalendarDay = calendarDay;\n      oldMonthString = calendarMonthString;\n    } while (!done);\n    result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n\n    cache.set(key, result);\n    return result as ChineseMonthInfo;\n  }\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year, month } = calendarDate;\n    return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n    if (fromLegacyDate) {\n      // Legacy Date output returns a string that's an integer with an optional\n      // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n      // month. Below we'll normalize the output.\n      year = eraYear;\n      if (monthExtra && monthExtra !== 'bis') throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n      const monthCode = buildMonthCode(month as number, monthExtra !== undefined);\n      const monthString = `${month}${monthExtra || ''}`;\n      const months = this.getMonthList(year as number, cache);\n      const monthInfo = months[monthString];\n      if (monthInfo === undefined) throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n      month = monthInfo.monthIndex;\n      return { year: year as number, month, day: day as number, era: undefined, eraYear, monthCode };\n    } else {\n      // When called without input coming from legacy Date output,\n      // simply ensure that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (year === undefined) year = eraYear;\n      if (eraYear === undefined) eraYear = year;\n      if (month === undefined) {\n        ES.assertExists(monthCode);\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        let monthInfo = months[numberPart];\n        month = monthInfo && monthInfo.monthIndex;\n\n        // If this leap month isn't present in this year, constrain to the same\n        // day of the previous month.\n        if (month === undefined && monthCode.endsWith('L') && monthCode != 'M13L' && overflow === 'constrain') {\n          let withoutML = monthCode.slice(1, -1);\n          if (withoutML[0] === '0') withoutML = withoutML.slice(1);\n          monthInfo = months[withoutML];\n          if (monthInfo) {\n            month = monthInfo.monthIndex;\n            monthCode = buildMonthCode(withoutML);\n          }\n        }\n        if (month === undefined) {\n          throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n        }\n      } else if (monthCode === undefined) {\n        const months = this.getMonthList(year as number, cache);\n        const monthEntries = ObjectEntries(months);\n        const largestMonth = monthEntries.length;\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, largestMonth);\n          ES.RejectToRange(day as number, 1, this.maximumMonthLength());\n        } else {\n          month = ES.ConstrainToRange(month, 1, largestMonth);\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n        }\n        const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n        if (matchingMonthEntry === undefined) {\n          throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n        }\n        monthCode = buildMonthCode(\n          matchingMonthEntry[0].replace('bis', ''),\n          matchingMonthEntry[0].indexOf('bis') !== -1\n        );\n      } else {\n        // Both month and monthCode are present. Make sure they don't conflict.\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        const monthInfo = months[numberPart];\n        if (!monthInfo) throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n        if (month !== monthInfo.monthIndex) {\n          throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n        }\n      }\n      return {\n        ...calendarDate,\n        year: year as number,\n        eraYear,\n        month,\n        monthCode: monthCode,\n        day: day as number\n      };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\nclass ChineseHelper extends ChineseBaseHelper {\n  id = 'chinese' as const;\n}\n\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n  id = 'dangi' as const;\n}\n\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nclass NonIsoCalendar implements CalendarImpl {\n  constructor(private readonly helper: HelperBase) {}\n  dateFromFields(\n    fieldsParam: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendarSlotValue: string\n  ): Temporal.PlainDate {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n    const result = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    cache.setObject(result);\n    return result;\n  }\n  yearMonthFromFields(\n    fieldsParam: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainYearMonth {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n    const result = ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ day);\n    cache.setObject(result);\n    return result;\n  }\n  monthDayFromFields(\n    fieldsParam: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainMonthDay {\n    const cache = new OneObjectCache();\n    // For lunisolar calendars, either `monthCode` or `year` must be provided\n    // because `month` is ambiguous without a year or a code.\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n    // `year` is a reference year where this month/day exists in this calendar\n    const result = ES.CreateTemporalMonthDay(month, day, calendarSlotValue, /* referenceISOYear = */ year);\n    cache.setObject(result);\n    return result;\n  }\n  fields(fieldsParam: string[]): string[] {\n    let fields = fieldsParam;\n    if (ArrayIncludes.call(fields, 'year')) fields = [...fields, 'era', 'eraYear'];\n    return fields;\n  }\n  fieldKeysToIgnore(\n    keys: Exclude<keyof Temporal.PlainDateLike, 'calendar'>[]\n  ): Exclude<keyof Temporal.PlainDateLike, 'calendar'>[] {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      switch (key) {\n        case 'era':\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'eraYear':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'year':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          break;\n        case 'month':\n          ES.Call(SetPrototypeAdd, result, ['monthCode']);\n          // See https://github.com/tc39/proposal-temporal/issues/1784\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'monthCode':\n          ES.Call(SetPrototypeAdd, result, ['month']);\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'day':\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  }\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainDate {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n    const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n    const { year, month, day } = isoAdded;\n    const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    // The new object's cache starts with the cache of the old object\n    const newCache = new OneObjectCache(cache);\n    newCache.setObject(newTemporalObject);\n    return newTemporalObject;\n  }\n  dateUntil(one: Temporal.PlainDate, two: Temporal.PlainDate, largestUnit: Temporal.DateUnit) {\n    const cacheOne = OneObjectCache.getCacheForObject(one);\n    const cacheTwo = OneObjectCache.getCacheForObject(two);\n    const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n    const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n    const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n    return result;\n  }\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.year;\n  }\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.month;\n  }\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.day;\n  }\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.era;\n  }\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.eraYear;\n  }\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.monthCode;\n  }\n  dayOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].dayOfWeek(date);\n  }\n  dayOfYear(date: Temporal.PlainDate): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.isoToCalendarDate(date, cache);\n    const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n    const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n    return diffDays + 1;\n  }\n  weekOfYear(date: Temporal.PlainDate): number {\n    return impl['iso8601'].weekOfYear(date);\n  }\n  yearOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].yearOfWeek(date);\n  }\n  daysInWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].daysInWeek(date);\n  }\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n\n    // Easy case: if the helper knows the length without any heavy calculation.\n    const max = this.helper.maximumMonthLength(calendarDate);\n    const min = this.helper.minimumMonthLength(calendarDate);\n    if (max === min) return max;\n\n    // The harder case is where months vary every year, e.g. islamic calendars.\n    // Find the answer by calculating the difference in days between the first\n    // day of the current month and the first day of the next month.\n    const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n    const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n    return result;\n  }\n  daysInYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n    const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n    return result;\n  }\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.monthsInYear(calendarDate, cache);\n    return result;\n  }\n  inLeapYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): boolean {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.inLeapYear(calendarDate, cache);\n    return result;\n  }\n}\n\nfor (const Helper of [\n  HebrewHelper,\n  PersianHelper,\n  EthiopicHelper,\n  EthioaaHelper,\n  CopticHelper,\n  ChineseHelper,\n  DangiHelper,\n  RocHelper,\n  IndianHelper,\n  BuddhistHelper,\n  GregoryHelper,\n  JapaneseHelper,\n  IslamicHelper,\n  IslamicUmalquraHelper,\n  IslamicTblaHelper,\n  IslamicCivilHelper,\n  IslamicRgsaHelper,\n  IslamicCcHelper\n]) {\n  const helper = new Helper();\n  // Construct a new NonIsoCalendar instance with the given Helper implementation that contains\n  // per-calendar logic.\n  impl[helper.id] = new NonIsoCalendar(helper);\n}\n","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateParams as Params, PlainDateReturn as Return } from './internaltypes';\n\nexport class PlainDate implements Temporal.PlainDate {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    calendarParam: Params['constructor'][3] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDate = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDate);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarDateFromFields(calendar, fields, options);\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], optionsParam: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.ToTemporalDuration(temporalDurationLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    optionsParam: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDate(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalDateToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n  }\n  toPlainDateTime(temporalTimeParam: Params['toPlainDateTime'][0] = undefined): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    type TimeZoneAndPlainTimeProps = Exclude<typeof item, string | Temporal.TimeZoneProtocol>;\n    let timeZone: Temporal.TimeZoneLike, temporalTime: TimeZoneAndPlainTimeProps['plainTime'];\n    if (ES.IsObject(item)) {\n      if (ES.IsTemporalTimeZone(item)) {\n        timeZone = item;\n      } else {\n        const timeZoneLike = (item as TimeZoneAndPlainTimeProps).timeZone;\n        if (timeZoneLike === undefined) {\n          ES.uncheckedAssertNarrowedType<Temporal.TimeZoneProtocol>(\n            item,\n            \"if no timeZone property, then assume it's a custom time zone object\"\n          );\n          timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n        } else {\n          timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n          ES.uncheckedAssertNarrowedType<TimeZoneAndPlainTimeProps>(\n            item,\n            \"it's a property bag with a timeZone and optional plainTime\"\n          );\n          temporalTime = item.plainTime;\n        }\n      }\n    } else {\n      timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n    }\n\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    let hour = 0,\n      minute = 0,\n      second = 0,\n      millisecond = 0,\n      microsecond = 0,\n      nanosecond = 0;\n    if (temporalTime !== undefined) {\n      temporalTime = ES.ToTemporalTime(temporalTime);\n      ES.uncheckedAssertNarrowedType<Temporal.PlainTime>(\n        temporalTime,\n        'ToTemporalTime above always returns a PlainTime'\n      );\n      hour = GetSlot(temporalTime, ISO_HOUR);\n      minute = GetSlot(temporalTime, ISO_MINUTE);\n      second = GetSlot(temporalTime, ISO_SECOND);\n      millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n      microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n      nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n    }\n\n    const dt = ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDate(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDate(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDate';\n}\n\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateTimeParams as Params, PlainDateTimeReturn as Return } from './internaltypes';\n\nexport class PlainDateTime implements Temporal.PlainDateTime {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    hourParam: Params['constructor'][3] = 0,\n    minuteParam: Params['constructor'][4] = 0,\n    secondParam: Params['constructor'][5] = 0,\n    millisecondParam: Params['constructor'][6] = 0,\n    microsecondParam: Params['constructor'][7] = 0,\n    nanosecondParam: Params['constructor'][8] = 0,\n    calendarParam: Params['constructor'][9] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const hour = hourParam === undefined ? 0 : ES.ToIntegerWithTruncation(hourParam);\n    const minute = minuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(minuteParam);\n    const second = secondParam === undefined ? 0 : ES.ToIntegerWithTruncation(secondParam);\n    const millisecond = millisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(millisecondParam);\n    const microsecond = microsecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(microsecondParam);\n    const nanosecond = nanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(nanosecondParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateTimeSlots(\n      this,\n      isoYear,\n      isoMonth,\n      isoDay,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateTimeLike);\n\n    const options = ES.GetOptionsObject(optionsParam);\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDateTime = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n    const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDateTime(\n      GetSlot(this, ISO_YEAR),\n      GetSlot(this, ISO_MONTH),\n      GetSlot(this, ISO_DAY),\n      GetSlot(this, ISO_HOUR),\n      GetSlot(this, ISO_MINUTE),\n      GetSlot(this, ISO_SECOND),\n      GetSlot(this, ISO_MILLISECOND),\n      GetSlot(this, ISO_MICROSECOND),\n      GetSlot(this, ISO_NANOSECOND),\n      calendar\n    );\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    let year = GetSlot(this, ISO_YEAR);\n    let month = GetSlot(this, ISO_MONTH);\n    let day = GetSlot(this, ISO_DAY);\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      GetSlot(this, CALENDAR)\n    );\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDateTime(otherParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n  }\n\n  toZonedDateTime(\n    temporalTimeZoneLike: Params['toZonedDateTime'][0],\n    optionsParam: Params['toZonedDateTime'][1] = undefined\n  ): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const instant = ES.GetInstantFor(timeZone, this, disambiguation);\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(this);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDateTime(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDateTime(oneParam);\n    const two = ES.ToTemporalDateTime(twoParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDateTime';\n}\n\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type { DurationParams as Params, DurationReturn as Return } from './internaltypes';\nimport JSBI from 'jsbi';\n\nexport class Duration implements Temporal.Duration {\n  constructor(\n    yearsParam: Params['constructor'][0] = 0,\n    monthsParam: Params['constructor'][1] = 0,\n    weeksParam: Params['constructor'][2] = 0,\n    daysParam: Params['constructor'][3] = 0,\n    hoursParam: Params['constructor'][4] = 0,\n    minutesParam: Params['constructor'][5] = 0,\n    secondsParam: Params['constructor'][6] = 0,\n    millisecondsParam: Params['constructor'][7] = 0,\n    microsecondsParam: Params['constructor'][8] = 0,\n    nanosecondsParam: Params['constructor'][9] = 0\n  ) {\n    const years = yearsParam === undefined ? 0 : ES.ToIntegerIfIntegral(yearsParam);\n    const months = monthsParam === undefined ? 0 : ES.ToIntegerIfIntegral(monthsParam);\n    const weeks = weeksParam === undefined ? 0 : ES.ToIntegerIfIntegral(weeksParam);\n    const days = daysParam === undefined ? 0 : ES.ToIntegerIfIntegral(daysParam);\n    const hours = hoursParam === undefined ? 0 : ES.ToIntegerIfIntegral(hoursParam);\n    const minutes = minutesParam === undefined ? 0 : ES.ToIntegerIfIntegral(minutesParam);\n    const seconds = secondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(secondsParam);\n    const milliseconds = millisecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(millisecondsParam);\n    const microseconds = microsecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(microsecondsParam);\n    const nanoseconds = nanosecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(nanosecondsParam);\n\n    ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n\n    CreateSlots(this);\n    SetSlot(this, YEARS, years);\n    SetSlot(this, MONTHS, months);\n    SetSlot(this, WEEKS, weeks);\n    SetSlot(this, DAYS, days);\n    SetSlot(this, HOURS, hours);\n    SetSlot(this, MINUTES, minutes);\n    SetSlot(this, SECONDS, seconds);\n    SetSlot(this, MILLISECONDS, milliseconds);\n    SetSlot(this, MICROSECONDS, microseconds);\n    SetSlot(this, NANOSECONDS, nanoseconds);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(\n          years,\n          months,\n          weeks,\n          days,\n          hours,\n          minutes,\n          seconds,\n          milliseconds,\n          microseconds,\n          nanoseconds\n        )}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get years(): Return['years'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, YEARS);\n  }\n  get months(): Return['months'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MONTHS);\n  }\n  get weeks(): Return['weeks'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, WEEKS);\n  }\n  get days(): Return['days'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, DAYS);\n  }\n  get hours(): Return['hours'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, HOURS);\n  }\n  get minutes(): Return['minutes'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MINUTES);\n  }\n  get seconds(): Return['seconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, SECONDS);\n  }\n  get milliseconds(): Return['milliseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MILLISECONDS);\n  }\n  get microseconds(): Return['microseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MICROSECONDS);\n  }\n  get nanoseconds(): Return['nanoseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, NANOSECONDS);\n  }\n  get sign(): Return['sign'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.DurationSign(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  get blank(): Return['blank'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return (\n      ES.DurationSign(\n        GetSlot(this, YEARS),\n        GetSlot(this, MONTHS),\n        GetSlot(this, WEEKS),\n        GetSlot(this, DAYS),\n        GetSlot(this, HOURS),\n        GetSlot(this, MINUTES),\n        GetSlot(this, SECONDS),\n        GetSlot(this, MILLISECONDS),\n        GetSlot(this, MICROSECONDS),\n        GetSlot(this, NANOSECONDS)\n      ) === 0\n    );\n  }\n  with(durationLike: Params['with'][0]): Return['with'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const partialDuration = ES.PrepareTemporalFields(\n      durationLike,\n      // NOTE: Field order here is important.\n      [\n        'days',\n        'hours',\n        'microseconds',\n        'milliseconds',\n        'minutes',\n        'months',\n        'nanoseconds',\n        'seconds',\n        'weeks',\n        'years'\n      ],\n      'partial'\n    );\n    const {\n      years = GetSlot(this, YEARS),\n      months = GetSlot(this, MONTHS),\n      weeks = GetSlot(this, WEEKS),\n      days = GetSlot(this, DAYS),\n      hours = GetSlot(this, HOURS),\n      minutes = GetSlot(this, MINUTES),\n      seconds = GetSlot(this, SECONDS),\n      milliseconds = GetSlot(this, MILLISECONDS),\n      microseconds = GetSlot(this, MICROSECONDS),\n      nanoseconds = GetSlot(this, NANOSECONDS)\n    } = partialDuration;\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  negated(): Return['negated'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.CreateNegatedTemporalDuration(this);\n  }\n  abs(): Return['abs'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return new Duration(\n      Math.abs(GetSlot(this, YEARS)),\n      Math.abs(GetSlot(this, MONTHS)),\n      Math.abs(GetSlot(this, WEEKS)),\n      Math.abs(GetSlot(this, DAYS)),\n      Math.abs(GetSlot(this, HOURS)),\n      Math.abs(GetSlot(this, MINUTES)),\n      Math.abs(GetSlot(this, SECONDS)),\n      Math.abs(GetSlot(this, MILLISECONDS)),\n      Math.abs(GetSlot(this, MICROSECONDS)),\n      Math.abs(GetSlot(this, NANOSECONDS))\n    );\n  }\n  add(other: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n  }\n  subtract(other: Params['subtract'][0], options: Params['subtract'][1] = undefined): Return['subtract'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    let defaultLargestUnit = ES.DefaultTemporalLargestUnit(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds\n    );\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n\n    let largestUnit = ES.GetTemporalUnit(roundTo, 'largestUnit', 'datetime', undefined, ['auto']);\n    let relativeTo = ES.ToRelativeTemporalObject(roundTo);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    let smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'datetime', undefined);\n\n    let smallestUnitPresent = true;\n    if (!smallestUnit) {\n      smallestUnitPresent = false;\n      smallestUnit = 'nanosecond';\n    }\n    defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n    let largestUnitPresent = true;\n    if (!largestUnit) {\n      largestUnitPresent = false;\n      largestUnit = defaultLargestUnit;\n    }\n    if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n    if (!smallestUnitPresent && !largestUnitPresent) {\n      throw new RangeError('at least one of smallestUnit or largestUnit is required');\n    }\n    if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n      throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n    }\n\n    const maximumIncrements = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    } as { [k in Temporal.DateTimeUnit]?: number };\n    const maximum = maximumIncrements[smallestUnit];\n    if (maximum !== undefined) ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(\n      years,\n      months,\n      weeks,\n      days,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.RoundDuration(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  total(optionsParam: Params['total'][0]): Return['total'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    if (optionsParam === undefined) throw new TypeError('options argument is required');\n    const options =\n      typeof optionsParam === 'string'\n        ? (ES.CreateOnePropObject('unit', optionsParam) as Exclude<typeof optionsParam, string>)\n        : ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n\n    // Convert larger units down to days\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n    // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n    let intermediate;\n    if (ES.IsTemporalZonedDateTime(relativeTo)) {\n      intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n    }\n    let balanceResult = ES.BalancePossiblyInfiniteDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      unit,\n      intermediate\n    );\n    if (balanceResult === 'positive overflow') {\n      return Infinity;\n    } else if (balanceResult === 'negative overflow') {\n      return -Infinity;\n    }\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = balanceResult);\n    // Finally, truncate to the correct unit and calculate remainder\n    const { total } = ES.RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      1,\n      unit,\n      'trunc',\n      relativeTo\n    );\n    return total;\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour' || smallestUnit === 'minute') {\n      throw new RangeError('smallestUnit must be a time unit other than \"hours\" or \"minutes\"');\n    }\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    ES.uncheckedAssertNarrowedType<Exclude<typeof precision, 'minute'>>(\n      precision,\n      'Precision cannot be \"minute\" because of RangeError above'\n    );\n    let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.RoundDuration(\n        GetSlot(this, YEARS),\n        GetSlot(this, MONTHS),\n        GetSlot(this, WEEKS),\n        GetSlot(this, DAYS),\n        GetSlot(this, HOURS),\n        GetSlot(this, MINUTES),\n        GetSlot(this, SECONDS),\n        GetSlot(this, MILLISECONDS),\n        GetSlot(this, MICROSECONDS),\n        GetSlot(this, NANOSECONDS),\n        increment,\n        unit,\n        roundingMode\n      );\n    return ES.TemporalDurationToString(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      precision\n    );\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDurationToString(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (typeof Intl !== 'undefined' && typeof (Intl as any).DurationFormat !== 'undefined') {\n      return new (Intl as any).DurationFormat(locales, options).format(this);\n    }\n    console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n    return ES.TemporalDurationToString(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() to compare Temporal.Duration');\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalDuration(item)) {\n      return new Duration(\n        GetSlot(item, YEARS),\n        GetSlot(item, MONTHS),\n        GetSlot(item, WEEKS),\n        GetSlot(item, DAYS),\n        GetSlot(item, HOURS),\n        GetSlot(item, MINUTES),\n        GetSlot(item, SECONDS),\n        GetSlot(item, MILLISECONDS),\n        GetSlot(item, MICROSECONDS),\n        GetSlot(item, NANOSECONDS)\n      );\n    }\n    return ES.ToTemporalDuration(item);\n  }\n  static compare(\n    oneParam: Params['compare'][0],\n    twoParam: Params['compare'][1],\n    optionsParam: Params['compare'][2] = undefined\n  ) {\n    const one = ES.ToTemporalDuration(oneParam);\n    const two = ES.ToTemporalDuration(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const y1 = GetSlot(one, YEARS);\n    const mon1 = GetSlot(one, MONTHS);\n    const w1 = GetSlot(one, WEEKS);\n    let d1 = GetSlot(one, DAYS);\n    const h1 = GetSlot(one, HOURS);\n    const min1 = GetSlot(one, MINUTES);\n    const s1 = GetSlot(one, SECONDS);\n    const ms1 = GetSlot(one, MILLISECONDS);\n    const µs1 = GetSlot(one, MICROSECONDS);\n    let ns1 = GetSlot(one, NANOSECONDS);\n    const y2 = GetSlot(two, YEARS);\n    const mon2 = GetSlot(two, MONTHS);\n    const w2 = GetSlot(two, WEEKS);\n    let d2 = GetSlot(two, DAYS);\n    const h2 = GetSlot(two, HOURS);\n    const min2 = GetSlot(two, MINUTES);\n    const s2 = GetSlot(two, SECONDS);\n    const ms2 = GetSlot(two, MILLISECONDS);\n    const µs2 = GetSlot(two, MICROSECONDS);\n    let ns2 = GetSlot(two, NANOSECONDS);\n    const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n    const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n    if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n      ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n      ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n    }\n    const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n    const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n    return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n  }\n  [Symbol.toStringTag]!: 'Temporal.Duration';\n}\n\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainMonthDayParams as Params, PlainMonthDayReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainMonthDay implements Temporal.PlainMonthDay {\n  constructor(\n    isoMonthParam: Params['constructor'][0],\n    isoDayParam: Params['constructor'][0],\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601',\n    referenceISOYearParam = 1972\n  ) {\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISOYear = ES.ToIntegerWithTruncation(referenceISOYearParam);\n\n    ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n  }\n\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n\n  with(temporalMonthDayLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalMonthDayLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalMonthDayLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialMonthDay = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialMonthDay);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarMonthDayFromFields(calendar, fields, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalMonthDay(otherParam);\n    for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalMonthDayToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalMonthDayToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['year'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalMonthDay(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalMonthDay(\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_YEAR)\n      );\n    }\n    return ES.ToTemporalMonthDay(item, options);\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainMonthDay';\n}\n\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n","import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport type { Temporal } from '..';\n\nconst instant: (typeof Temporal.Now)['instant'] = () => {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime: (typeof Temporal.Now)['plainDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO: (typeof Temporal.Now)['plainDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, 'iso8601');\n};\nconst zonedDateTime: (typeof Temporal.Now)['zonedDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO: (typeof Temporal.Now)['zonedDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return zonedDateTime('iso8601', temporalTimeZoneLike);\n};\nconst plainDate: (typeof Temporal.Now)['plainDate'] = (calendarLike, temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO: (typeof Temporal.Now)['plainDateISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO: (typeof Temporal.Now)['plainTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZoneId: (typeof Temporal.Now)['timeZoneId'] = () => {\n  return ES.DefaultTimeZone();\n};\n\nexport const Now: typeof Temporal.Now = {\n  instant,\n  plainDateTime,\n  plainDateTimeISO,\n  plainDate,\n  plainDateISO,\n  plainTimeISO,\n  timeZoneId,\n  zonedDateTime,\n  zonedDateTimeISO,\n  [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n  value: 'Temporal.Now',\n  writable: false,\n  enumerable: false,\n  configurable: true\n});\n","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainTimeParams as Params, PlainTimeReturn as Return } from './internaltypes';\n\nconst ObjectAssign = Object.assign;\n\ntype TemporalTimeToStringOptions = {\n  unit: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['unit'];\n  increment: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['increment'];\n  roundingMode: Temporal.RoundingMode;\n};\n\nfunction TemporalTimeToString(\n  time: Temporal.PlainTime,\n  precision: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['precision'],\n  options: TemporalTimeToStringOptions | undefined = undefined\n) {\n  let hour = GetSlot(time, ISO_HOUR);\n  let minute = GetSlot(time, ISO_MINUTE);\n  let second = GetSlot(time, ISO_SECOND);\n  let millisecond = GetSlot(time, ISO_MILLISECOND);\n  let microsecond = GetSlot(time, ISO_MICROSECOND);\n  let nanosecond = GetSlot(time, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const hourString = ES.ISODateTimePartString(hour);\n  const minuteString = ES.ISODateTimePartString(minute);\n  const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  return `${hourString}:${minuteString}${seconds}`;\n}\n\nexport class PlainTime implements Temporal.PlainTime {\n  constructor(\n    isoHourParam = 0,\n    isoMinuteParam = 0,\n    isoSecondParam = 0,\n    isoMillisecondParam = 0,\n    isoMicrosecondParam = 0,\n    isoNanosecondParam = 0\n  ) {\n    const isoHour = isoHourParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoHourParam);\n    const isoMinute = isoMinuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMinuteParam);\n    const isoSecond = isoSecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoSecondParam);\n    const isoMillisecond = isoMillisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMillisecondParam);\n    const isoMicrosecond = isoMicrosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMicrosecondParam);\n    const isoNanosecond = isoNanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoNanosecondParam);\n\n    ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n    CreateSlots(this);\n    SetSlot(this, ISO_HOUR, isoHour);\n    SetSlot(this, ISO_MINUTE, isoMinute);\n    SetSlot(this, ISO_SECOND, isoSecond);\n    SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n    SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n    SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n\n  with(temporalTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n\n    const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n\n    const fields = ES.ToTemporalTimeRecord(this);\n    let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const MAX_INCREMENTS = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, MAX_INCREMENTS[smallestUnit], false);\n\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalTime(otherParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return true;\n  }\n\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return TemporalTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n  }\n\n  toPlainDateTime(temporalDateParam: Params['toPlainDateTime'][0]): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument');\n    }\n\n    const dateLike = item.plainDate;\n    if (dateLike === undefined) {\n      throw new TypeError('missing date property');\n    }\n    const temporalDate = ES.ToTemporalDate(dateLike);\n\n    const timeZoneLike = item.timeZone;\n    if (timeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return {\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND)\n    };\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (ES.IsTemporalTime(item)) {\n      return new PlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    return ES.ToTemporalTime(item, overflow);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalTime(oneParam);\n    const two = ES.ToTemporalTime(twoParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainTime';\n}\n\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n","import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { DefineIntrinsic, GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  TIMEZONE_ID,\n  EPOCHNANOSECONDS,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { TimeZoneParams as Params, TimeZoneReturn as Return } from './internaltypes';\n\nexport class TimeZone implements Temporal.TimeZone {\n  constructor(identifier: string) {\n    // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n    //       This check exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: identifier is required');\n    }\n\n    let stringIdentifier = ES.ToString(identifier);\n    if (ES.IsTimeZoneOffsetString(stringIdentifier)) {\n      stringIdentifier = ES.CanonicalizeTimeZoneOffsetString(stringIdentifier);\n    } else {\n      stringIdentifier = ES.GetCanonicalTimeZoneIdentifier(stringIdentifier);\n    }\n    CreateSlots(this);\n    SetSlot(this, TIMEZONE_ID, stringIdentifier);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${stringIdentifier}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  getOffsetNanosecondsFor(instantParam: Params['getOffsetNanosecondsFor'][0]): Return['getOffsetNanosecondsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      return ES.ParseTimeZoneOffsetString(id);\n    }\n\n    return ES.GetNamedTimeZoneOffsetNanoseconds(id, GetSlot(instant, EPOCHNANOSECONDS));\n  }\n  getOffsetStringFor(instantParam: Params['getOffsetStringFor'][0]): Return['getOffsetStringFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    return ES.GetOffsetStringFor(this, instant);\n  }\n  getPlainDateTimeFor(\n    instantParam: Params['getPlainDateTimeFor'][0],\n    calendarParam: Params['getPlainDateTimeFor'][1] = 'iso8601'\n  ): Return['getPlainDateTimeFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.GetPlainDateTimeFor(this, instant, calendar);\n  }\n  getInstantFor(\n    dateTimeParam: Params['getInstantFor'][0],\n    optionsParam: Params['getInstantFor'][1] = undefined\n  ): Return['getInstantFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    return ES.GetInstantFor(this, dateTime, disambiguation);\n  }\n  getPossibleInstantsFor(dateTimeParam: Params['getPossibleInstantsFor'][0]): Return['getPossibleInstantsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      const epochNs = ES.GetUTCEpochNanoseconds(\n        GetSlot(dateTime, ISO_YEAR),\n        GetSlot(dateTime, ISO_MONTH),\n        GetSlot(dateTime, ISO_DAY),\n        GetSlot(dateTime, ISO_HOUR),\n        GetSlot(dateTime, ISO_MINUTE),\n        GetSlot(dateTime, ISO_SECOND),\n        GetSlot(dateTime, ISO_MILLISECOND),\n        GetSlot(dateTime, ISO_MICROSECOND),\n        GetSlot(dateTime, ISO_NANOSECOND)\n      );\n      if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n      const offsetNs = ES.ParseTimeZoneOffsetString(id);\n      return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n    }\n\n    const possibleEpochNs = ES.GetNamedTimeZoneEpochNanoseconds(\n      id,\n      GetSlot(dateTime, ISO_YEAR),\n      GetSlot(dateTime, ISO_MONTH),\n      GetSlot(dateTime, ISO_DAY),\n      GetSlot(dateTime, ISO_HOUR),\n      GetSlot(dateTime, ISO_MINUTE),\n      GetSlot(dateTime, ISO_SECOND),\n      GetSlot(dateTime, ISO_MILLISECOND),\n      GetSlot(dateTime, ISO_MICROSECOND),\n      GetSlot(dateTime, ISO_NANOSECOND)\n    );\n    return possibleEpochNs.map((ns) => new Instant(ns));\n  }\n  getNextTransition(startingPointParam: Params['getNextTransition'][0]): Return['getNextTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZoneNextTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  getPreviousTransition(startingPointParam: Params['getPreviousTransition'][0]): Return['getPreviousTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZonePreviousTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  toString(): string {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const timeZoneSlotValue = ES.ToTemporalTimeZoneSlotValue(item);\n    return ES.ToTemporalTimeZoneObject(timeZoneSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.TimeZone';\n}\n\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\nDefineIntrinsic('Temporal.TimeZone.prototype.getOffsetNanosecondsFor', TimeZone.prototype.getOffsetNanosecondsFor);\nDefineIntrinsic('Temporal.TimeZone.prototype.getPossibleInstantsFor', TimeZone.prototype.getPossibleInstantsFor);\n","import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainYearMonthParams as Params, PlainYearMonthReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainYearMonth implements Temporal.PlainYearMonth {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    calendarParam: Params['constructor'][2] = 'iso8601',\n    referenceISODayParam: Params['constructor'][3] = 1\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISODay = ES.ToIntegerWithTruncation(referenceISODayParam);\n\n    ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalYearMonthLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalYearMonthLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalYearMonthLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialYearMonth = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialYearMonth);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarYearMonthFromFields(calendar, fields, options);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalYearMonth(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalYearMonthToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalYearMonthToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['day'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalYearMonth(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalYearMonth(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_DAY)\n      );\n    }\n    return ES.ToTemporalYearMonth(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalYearMonth(oneParam);\n    const two = ES.ToTemporalYearMonth(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainYearMonth';\n}\n\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n","import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  ISO_HOUR,\n  INSTANT,\n  ISO_DAY,\n  ISO_MONTH,\n  ISO_YEAR,\n  ISO_MICROSECOND,\n  ISO_MILLISECOND,\n  ISO_MINUTE,\n  ISO_NANOSECOND,\n  ISO_SECOND,\n  TIME_ZONE,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { ZonedDateTimeParams as Params, ZonedDateTimeReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO, HOUR_NANOS } from './ecmascript';\n\nconst customResolvedOptions = DateTimeFormat.prototype.resolvedOptions as Intl.DateTimeFormat['resolvedOptions'];\n\nexport class ZonedDateTime implements Temporal.ZonedDateTime {\n  constructor(\n    epochNanosecondsParam: bigint | JSBI,\n    timeZoneParam: string | Temporal.TimeZoneProtocol,\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601'\n  ) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    //       ToTemporalTimeZoneSlotValue(undefined) has a clear enough message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get timeZoneId(): Return['timeZoneId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hoursInDay(): Return['hoursInDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const year = GetSlot(dt, ISO_YEAR);\n    const month = GetSlot(dt, ISO_MONTH);\n    const day = GetSlot(dt, ISO_DAY);\n    const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n    const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n    const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const todayNs = GetSlot(ES.GetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n    const tomorrowNs = GetSlot(ES.GetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n    const diffNs = JSBI.subtract(tomorrowNs, todayNs);\n    return ES.BigIntDivideToNumber(diffNs, HOUR_NANOS);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get offset(): Return['offset'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  get offsetNanoseconds(): Return['offsetNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  with(temporalZonedDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalZonedDateTimeLike)) {\n      throw new TypeError('invalid zoned-date-time-like');\n    }\n    ES.RejectTemporalLikeObject(temporalZonedDateTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    let fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('offset');\n    let fields = ES.PrepareTemporalFields(this, fieldNames, ['offset']);\n    const partialZonedDateTime = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialZonedDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, ['offset']);\n\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const offset = ES.ToTemporalOffset(options, 'prefer');\n\n    let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n    const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      disambiguation,\n      offset,\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n    const thisDt = dateTime(this);\n    const hour = GetSlot(thisDt, ISO_HOUR);\n    const minute = GetSlot(thisDt, ISO_MINUTE);\n    const second = GetSlot(thisDt, ISO_SECOND);\n    const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n    const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n    const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n    const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n\n    const thisDt = dateTime(this);\n    const year = GetSlot(thisDt, ISO_YEAR);\n    const month = GetSlot(thisDt, ISO_MONTH);\n    const day = GetSlot(thisDt, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withTimeZone(timeZoneParam: Params['withTimeZone'][0]): Return['withTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    // first, round the underlying DateTime fields\n    const dt = dateTime(this);\n    let year = GetSlot(dt, ISO_YEAR);\n    let month = GetSlot(dt, ISO_MONTH);\n    let day = GetSlot(dt, ISO_DAY);\n    let hour = GetSlot(dt, ISO_HOUR);\n    let minute = GetSlot(dt, ISO_MINUTE);\n    let second = GetSlot(dt, ISO_SECOND);\n    let millisecond = GetSlot(dt, ISO_MILLISECOND);\n    let microsecond = GetSlot(dt, ISO_MICROSECOND);\n    let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n    const instantStart = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n    const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n    if (JSBI.lessThanOrEqual(dayLengthNs, ZERO)) {\n      throw new RangeError('cannot round a ZonedDateTime in a calendar with zero or negative length days');\n    }\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode,\n      // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n      // (which can hold up to 104 days in nanoseconds)\n      JSBI.toNumber(dayLengthNs)\n    ));\n\n    // Now reset all DateTime fields but leave the TimeZone. The offset will\n    // also be retained if the new date/time values are still OK with the old\n    // offset. Otherwise the offset will be changed to be compatible with the\n    // new date/time values. If DST disambiguation is required, the `compatible`\n    // disambiguation algorithm will be used.\n    const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      'compatible',\n      'prefer',\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalZonedDateTime(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) return false;\n    if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) return false;\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const showOffset = ES.ToShowOffsetOption(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const showTimeZone = ES.ToTimeZoneNameOption(options);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n      unit,\n      increment,\n      roundingMode\n    });\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    optionsParam: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n\n    // This is not quite per specification, but this polyfill's DateTimeFormat\n    // already doesn't match the InitializeDateTimeFormat operation, and the\n    // access order might change anyway;\n    // see https://github.com/tc39/ecma402/issues/747\n    const optionsCopy = ES.SnapshotOwnProperties(options, null, ['timeZone']);\n\n    if (options.timeZone !== undefined) {\n      throw new TypeError('ZonedDateTime toLocaleString does not accept a timeZone option');\n    }\n\n    if (\n      optionsCopy.year === undefined &&\n      optionsCopy.month === undefined &&\n      optionsCopy.day === undefined &&\n      optionsCopy.weekday === undefined &&\n      optionsCopy.dateStyle === undefined &&\n      optionsCopy.hour === undefined &&\n      optionsCopy.minute === undefined &&\n      optionsCopy.second === undefined &&\n      optionsCopy.timeStyle === undefined &&\n      optionsCopy.dayPeriod === undefined &&\n      optionsCopy.timeZoneName === undefined\n    ) {\n      optionsCopy.timeZoneName = 'short';\n      // The rest of the defaults will be filled in by formatting the Instant\n    }\n\n    let timeZone = ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n    if (ES.IsTimeZoneOffsetString(timeZone)) {\n      // Note: https://github.com/tc39/ecma402/issues/683 will remove this\n      throw new RangeError('toLocaleString does not support offset string time zones');\n    }\n    timeZone = ES.GetCanonicalTimeZoneIdentifier(timeZone);\n    optionsCopy.timeZone = timeZone;\n\n    const formatter = new DateTimeFormat(locales, optionsCopy);\n\n    const localeCalendarIdentifier = ES.Call(customResolvedOptions, formatter, []).calendar;\n    const calendarIdentifier = ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n    if (\n      calendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== calendarIdentifier\n    ) {\n      throw new RangeError(\n        `cannot format ZonedDateTime with calendar ${calendarIdentifier}` +\n          ` in locale with calendar ${localeCalendarIdentifier}`\n      );\n    }\n\n    return formatter.format(GetSlot(this, INSTANT));\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalZonedDateTimeToString(this, 'auto');\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n  }\n  startOfDay(): Return['startOfDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(\n      GetSlot(dt, ISO_YEAR),\n      GetSlot(dt, ISO_MONTH),\n      GetSlot(dt, ISO_DAY),\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      calendar\n    );\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const instant = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toInstant(): Return['toInstant'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(dateTime(this));\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(dateTime(this));\n  }\n  toPlainDateTime(): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return dateTime(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const tz = GetSlot(this, TIME_ZONE);\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(dt, ISO_DAY),\n      isoHour: GetSlot(dt, ISO_HOUR),\n      isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n      isoMinute: GetSlot(dt, ISO_MINUTE),\n      isoMonth: GetSlot(dt, ISO_MONTH),\n      isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n      isoSecond: GetSlot(dt, ISO_SECOND),\n      isoYear: GetSlot(dt, ISO_YEAR),\n      offset: ES.GetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n      timeZone: tz\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n  getTimeZone(): Return['getTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneObject(GetSlot(this, TIME_ZONE));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalZonedDateTime(item)) {\n      ES.ToTemporalDisambiguation(options); // validate and ignore\n      ES.ToTemporalOffset(options, 'reject');\n      ES.ToTemporalOverflow(options);\n      return ES.CreateTemporalZonedDateTime(\n        GetSlot(item, EPOCHNANOSECONDS),\n        GetSlot(item, TIME_ZONE),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalZonedDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalZonedDateTime(oneParam);\n    const two = ES.ToTemporalZonedDateTime(twoParam);\n    const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n    const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return -1;\n    if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.ZonedDateTime';\n}\n\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\n\nfunction dateTime(zdt: Temporal.ZonedDateTime) {\n  return ES.GetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n","import { Instant } from './instant';\n\nimport JSBI from 'jsbi';\nimport { MILLION } from './ecmascript';\n\nexport function toTemporalInstant(this: Date) {\n  // Observable access to valueOf is not correct here, but unavoidable\n  const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n  return new Instant(epochNanoseconds);\n}\n","// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\n\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n  Temporal.Instant,\n  Temporal.Calendar,\n  Temporal.PlainDate,\n  Temporal.PlainDateTime,\n  Temporal.Duration,\n  Temporal.PlainMonthDay,\n  // Temporal.Now, // plain object (not a constructor), so no `prototype`\n  Temporal.PlainTime,\n  Temporal.TimeZone,\n  Temporal.PlainYearMonth,\n  Temporal.ZonedDateTime\n];\nfor (const type of types) {\n  const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype') as PropertyDescriptor;\n  if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n    descriptor.configurable = false;\n    descriptor.enumerable = false;\n    descriptor.writable = false;\n    Object.defineProperty(type, 'prototype', descriptor);\n  }\n}\n\nexport { Temporal, Intl, toTemporalInstant };\n"],"names":["_a","__values","_b","ArrayIncludes","ArrayPrototypePush","IntlDateTimeFormat","MathAbs","MathFloor","ObjectCreate","ReflectApply","ReflectOwnKeys","__read","PARSE.annotation","PARSE.zoneddatetime","PARSE.time","PARSE.yearmonth","PARSE.monthday","PARSE.timeZoneID","PARSE.duration","__spreadArray","PARSE.offset","descriptor","ObjectAssign","ES.IsTemporalDate","ES.IsTemporalTime","ES.IsTemporalDateTime","ES.IsTemporalZonedDateTime","ES.IsTemporalYearMonth","ES.IsTemporalMonthDay","ES.IsTemporalInstant","ES.GetInstantFor","ES.ToTemporalCalendarIdentifier","ES.ToBigInt","ES.ValidateEpochNanoseconds","ES.TemporalInstantToString","ES.BigIntFloorDiv","ES.ToBigIntExternal","ES.AddDurationToOrSubtractDurationFromInstant","ES.DifferenceTemporalInstant","ES.CreateOnePropObject","ES.GetOptionsObject","ES.ToTemporalRoundingIncrement","ES.ToTemporalRoundingMode","ES.GetTemporalUnit","ES.REQUIRED","ES.ValidateTemporalRoundingIncrement","ES.RoundInstant","ES.ToTemporalInstant","ES.ToFractionalSecondDigits","ES.ToTemporalTimeZoneSlotValue","ES.ToSecondsStringPrecisionRecord","ES.IsObject","ES.ToTemporalCalendarSlotValue","ES.CreateTemporalZonedDateTime","ES.ToNumber","ES.ToString","ES.IsBuiltinCalendar","ES.ASCIILowercase","ES.IsTemporalCalendar","ES.SnapshotOwnProperties","ES.Call","ES.CopyDataProperties","ES.ToTemporalDate","ES.ToTemporalDuration","ES.ToTemporalOverflow","ES.BalanceDuration","ES.ToTemporalCalendarObject","ES.PrepareTemporalFields","ES.RegulateISODate","ES.CreateTemporalDate","ES.RegulateISOYearMonth","ES.CreateTemporalYearMonth","ES.CreateTemporalMonthDay","ES.AddISODate","ES.DifferenceISODate","ES.DayOfWeek","ES.DayOfYear","ES.WeekOfYear","ES.ISODaysInMonth","ES.LeapYear","ES.RejectToRange","ES.ConstrainToRange","__assign","ES.ISOYearString","ES.ISODateTimePartString","ES.ComparisonResult","__extends","ES.assertExists","ES.ToIntegerWithTruncation","ES.CreateTemporalDateSlots","ES.CalendarEra","ES.CalendarEraYear","ES.CalendarYear","ES.CalendarMonth","ES.CalendarMonthCode","ES.CalendarDay","ES.CalendarDayOfWeek","ES.CalendarDayOfYear","ES.CalendarWeekOfYear","ES.CalendarYearOfWeek","ES.CalendarDaysInWeek","ES.CalendarDaysInMonth","ES.CalendarDaysInYear","ES.CalendarMonthsInYear","ES.CalendarInLeapYear","ES.RejectTemporalLikeObject","ES.CalendarFields","ES.CalendarMergeFields","ES.CalendarDateFromFields","ES.CalendarDateAdd","ES.CreateNegatedTemporalDuration","ES.DifferenceTemporalPlainDate","ES.CalendarEquals","ES.ToCalendarNameOption","ES.TemporalDateToString","ES.CreateTemporalDateTime","ES.ToTemporalTime","ES.IsTemporalTimeZone","ES.CalendarYearMonthFromFields","ES.CalendarMonthDayFromFields","ES.CompareISODate","ES.CreateTemporalDateTimeSlots","ES.InterpretTemporalDateTimeFields","ES.ConsolidateCalendars","ES.AddDurationToOrSubtractDurationFromPlainDateTime","ES.DifferenceTemporalPlainDateTime","ES.RoundISODateTime","ES.ToTemporalDateTime","ES.TemporalDateTimeToString","ES.ToTemporalDisambiguation","ES.TemporalDateTimeToDate","ES.TemporalDateTimeToTime","ES.ToIntegerIfIntegral","ES.RejectDuration","ES.TemporalDurationToString","ES.IsTemporalDuration","ES.DurationSign","ES.AddDurationToOrSubtractDurationFromDuration","ES.DefaultTemporalLargestUnit","ES.ToRelativeTemporalObject","ES.LargerOfTwoTemporalUnits","ES.UnbalanceDurationRelative","ES.RoundDuration","ES.AdjustRoundedDurationDays","ES.BalanceDurationRelative","ES.MoveRelativeZonedDateTime","ES.BalancePossiblyInfiniteDuration","ES.CalculateOffsetShift","ES.TotalDurationNanoseconds","ES.CreateTemporalMonthDaySlots","ES.ToTemporalMonthDay","ES.TemporalMonthDayToString","ES.SystemUTCEpochNanoSeconds","ES.DefaultTimeZone","ES.GetPlainDateTimeFor","ES.RoundTime","ES.FormatSecondsStringPart","ES.RejectTime","ES.ToTemporalTimeRecord","ES.RegulateTime","ES.AddDurationToOrSubtractDurationFromPlainTime","ES.DifferenceTemporalPlainTime","ES.IsTimeZoneOffsetString","ES.CanonicalizeTimeZoneOffsetString","ES.GetCanonicalTimeZoneIdentifier","ES.ParseTimeZoneOffsetString","ES.GetNamedTimeZoneOffsetNanoseconds","ES.GetOffsetStringFor","ES.GetUTCEpochNanoseconds","ES.GetNamedTimeZoneEpochNanoseconds","ES.GetNamedTimeZoneNextTransition","ES.GetNamedTimeZonePreviousTransition","ES.ToTemporalTimeZoneObject","ES.CreateTemporalYearMonthSlots","ES.AddDurationToOrSubtractDurationFromPlainYearMonth","ES.DifferenceTemporalPlainYearMonth","ES.ToTemporalYearMonth","ES.TemporalYearMonthToString","ES.CreateTemporalZonedDateTimeSlots","ES.ToTemporalTimeZoneIdentifier","ES.BigIntDivideToNumber","ES.GetOffsetNanosecondsFor","ES.ToTemporalOffset","ES.InterpretISODateTimeOffset","ES.AddDurationToOrSubtractDurationFromZonedDateTime","ES.DifferenceTemporalZonedDateTime","ES.AddZonedDateTime","ES.ToTemporalZonedDateTime","ES.TimeZoneEquals","ES.ToShowOffsetOption","ES.ToTimeZoneNameOption","ES.TemporalZonedDateTimeToString","Temporal.Instant","Temporal.Calendar","Temporal.PlainDate","Temporal.PlainDateTime","Temporal.Duration","Temporal.PlainMonthDay","Temporal.PlainTime","Temporal.TimeZone","Temporal.PlainYearMonth","Temporal.ZonedDateTime"],"mappings":"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"}